DEADSOFTWARE

made some class' properties published for Holmes
[d2df-sdl.git] / src / shared / utils.pas
index 6bfe7915453d93af3b465d0fb5b0a7fbd97e46df..f61035e5c4ac6a6fbf736df86b64e53901c4550e 100644 (file)
@@ -81,6 +81,8 @@ function Int64ToStrComma (i: Int64): AnsiString;
 function UpCase1251 (ch: Char): Char;
 function LoCase1251 (ch: Char): Char;
 
+function toLowerCase1251 (const s: AnsiString): AnsiString;
+
 // `true` if strings are equal; ignoring case for cp1251
 function StrEquCI1251 (const s0, s1: AnsiString): Boolean;
 
@@ -843,6 +845,26 @@ begin
 end;
 
 
+function toLowerCase1251 (const s: AnsiString): AnsiString;
+var
+  f: Integer;
+  ch: AnsiChar;
+begin
+  for ch in s do
+  begin
+    if (ch <> LoCase1251(ch)) then
+    begin
+      result := '';
+      SetLength(result, Length(s));
+      for f := 1 to Length(s) do result[f] := LoCase1251(s[f]);
+      exit;
+    end;
+  end;
+  // nothing to do
+  result := s;
+end;
+
+
 // ////////////////////////////////////////////////////////////////////////// //
 // utils
 // `ch`: utf8 start
@@ -1247,6 +1269,7 @@ var
   fmtblen: Integer;
   pclen: Integer;
   pc: PAnsiChar;
+  ccname: ShortString;
 
   procedure writer (constref buf; len: SizeUInt);
   var
@@ -1338,7 +1361,7 @@ var
       xpos := High(strbuf);
       strbuf[xpos] := #0; Dec(xpos);
       repeat
-        if hex then
+        if not hex then
         begin
           strbuf[xpos] := AnsiChar((n mod 10)+48);
           Dec(xpos);
@@ -1368,7 +1391,7 @@ var
     xpos := High(strbuf);
     strbuf[xpos] := #0; Dec(xpos);
     repeat
-      if hex then
+      if not hex then
       begin
         strbuf[xpos] := AnsiChar((n mod 10)+48);
         Dec(xpos);
@@ -1646,15 +1669,17 @@ begin
         end;
       vtObject: // args[curarg].VObject.Classname (TObject)
         begin
-          if (sign <> '-') then indent(width-Length(args[curarg].VObject.Classname));
-          xwrite(args[curarg].VObject.Classname);
-          if (sign = '-') then indent(width-Length(args[curarg].VObject.Classname));
+          if (args[curarg].VObject <> nil) then ccname := args[curarg].VObject.Classname else ccname := '<nil>';
+          if (sign <> '-') then indent(width-Length(ccname));
+          xwrite(ccname);
+          if (sign = '-') then indent(width-Length(ccname));
         end;
       vtClass: // args[curarg].VClass.Classname (TClass)
         begin
-          if (sign <> '-') then indent(width-Length(args[curarg].VClass.Classname));
-          xwrite(args[curarg].VClass.Classname);
-          if (sign = '-') then indent(width-Length(args[curarg].VClass.Classname));
+          if (args[curarg].VClass <> nil) then ccname := args[curarg].VClass.Classname else ccname := '<nil>';
+          if (sign <> '-') then indent(width-Length(ccname));
+          xwrite(ccname);
+          if (sign = '-') then indent(width-Length(ccname));
         end;
       //vtPWideChar: begin end; // args[curarg].VPWideChar (PWideChar)
       vtAnsiString: // AnsiString(args[curarg].VAnsiString) (Pointer)