syshelpersdemo.pas 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. program syshelpersconsoledemo; // syshelpers demonstration of customizable boolean, binary and hexadecimal data localized string representation
  2. {$codepage utf8}
  3. uses
  4. {$IFDEF WINDOWS}windows,{$ENDIF}
  5. {$IFDEF UNIX}cwstring,{$ENDIF}
  6. sysutils, syshelpers;
  7. procedure Print(aValue: boolean);
  8. begin
  9. if aValue then
  10. Write('TRUE : ')
  11. else
  12. Write('FALSE : ');
  13. WriteLn(aValue.ToTrueFalseString, ', ', aValue.ToString, ', ', aValue.ToOneZeroString, ', ', aValue.ToOnOffString);
  14. end;
  15. var
  16. MyBitFormatSettings: TBitFormatSettings = (
  17. BitTrueString: 'MyTrue';
  18. BitFalseString: 'MyFalse';
  19. //
  20. BitOnString: '<On>';
  21. BitOffString: '<Off>';
  22. //
  23. BitOneString: '-';
  24. BitZeroString: '_';
  25. );
  26. OriginalBitFormatSettings: TBitFormatSettings;
  27. MyHexFormatSettings: THexFormatSettings = (
  28. HexPrefixString : '$';
  29. HexSufixString : '';
  30. HexNibbleSeparator : '';
  31. HexByteSeparator : '';
  32. HexWordSeparator : ':';
  33. HexDwordSeparator : ':';
  34. );
  35. {$IFDEF WINDOWS}PreviousValue: uint;{$ENDIF}
  36. MyBool: boolean;
  37. MyDword: dword;
  38. MyQword: qword;
  39. MyNativeInt: NativeInt;
  40. begin
  41. {$IFDEF WINDOWS}
  42. PreviousValue := GetConsoleOutputCP;
  43. DefaultSystemCodePage := CP_UTF8;
  44. SetConsoleOutputCP(CP_UTF8);
  45. SetTextCodePage(Output, CP_UTF8);
  46. {$ENDIF}
  47. WriteLn('True.ToString = ', True.ToString);
  48. WriteLn('True.ToTrueFalseString(scfUpperCase) = ', True.ToTrueFalseString(scfUpperCase));
  49. WriteLn('True.ToString(''OnState'', ''OffState'') = ', True.ToString('OnState', 'OffState'));
  50. WriteLn('True.ToString(''Running'', ''Stopped'', scfUpperCase) = ', True.ToString('Running', 'Stopped', scfUpperCase));
  51. WriteLn('True.ToString(''Ради'', ''Не ради'', scfUpperCase) = ', True.ToString('Ради', 'Не ради', scfUpperCase), ' (console uppers ASCII only, gui uppers unicode as well)');
  52. WriteLn('True.ToString(MyBitFormatSettings) = ', True.ToString((MyBitFormatSettings)));
  53. MyNativeInt := -10000;
  54. WriteLn('MyNativeInt = ', MyNativeInt);
  55. WriteLn('MyNativeInt.ToBinString = ', MyNativeInt.ToBinString);
  56. WriteLn('MyNativeInt.Bits[MyNativeInt.MaxBit].ToTrueFalseString = ', MyNativeInt.Bits[MyNativeInt.MaxBit].ToTrueFalseString);
  57. MyDword := %111000111000111000111;
  58. MyDword.Words[0] := 77; // ordinary type helpers have been extended
  59. MyDword.Bits[9] := true; // ordinary type helpers have been extended
  60. MyDword.Nibbles[0] := $A; // ordinary type helpers have been extended
  61. TDwordOverlay(MyDword).AsNibble[0] := $A; // the same as MyDword.Nibbles[0] := $A
  62. WriteLn('MyDword.ToBinString = ', MyDword.ToBinString);
  63. WriteLn('MyDword.ToBinString(true) = ', MyDword.ToBinString(true));
  64. WriteLn('MyDword.ToBinString(false) = ', MyDword.ToBinString(false));
  65. BinNibbleSeparator := '_';
  66. WriteLn('MyDword.Bytes[0].ToBinString = ', MyDword.Bytes[0].ToBinString, ' (BinNibbleSeparator = "_")');
  67. BinNibbleSeparator := '';
  68. // MyQword := 0; // Beware: when value is 0, result of HighestSetBitPos and LowestSetBitPos will be -1
  69. WriteLn('MyDword.HighestSetBitPos = ' + MyDword.HighestSetBitPos.ToString);
  70. WriteLn('MyDword.LowestSetBitPos = ' + MyDword.LowestSetBitPos.ToString);
  71. WriteLn('MyDword.SetBitsCount = ' + MyDword.SetBitsCount.ToString);
  72. WriteLn('MyDword.ToHexString = ', MyDword.ToHexString);
  73. WriteLn('MyDword.ToHexString(7) = ', MyDword.ToHexString(7));
  74. WriteLn('MyDword.ToHexString(false) = ', MyDword.ToHexString(false));
  75. WriteLn;
  76. WriteLn('DefaultBitFormatSettings:');
  77. Print(False);
  78. Print(True);
  79. WriteLn('MyDword.Bits[5].ToTrueFalseString = ', MyDword.Bits[5].ToTrueFalseString, ' (BitTrueString = ', BitTrueString, ')');
  80. WriteLn('MyDword.Bits[5].ToString = ', MyDword.Bits[5].ToString{, ' ', BitTrueString});
  81. WriteLn('TryStrToBool(''trUE'', MyBool) = ', TryStrToBool('trUE', MyBool){.ToString, ' ', MyBool});
  82. WriteLn('BoolToStr(true, true) = ', BoolToStr(true, true), ', TrueBoolStrs[0] = ', TrueBoolStrs[0]);
  83. WriteLn;
  84. with MyBitFormatSettings do
  85. begin
  86. BitTrueString := 'Истина'; // This changes boolean to string text outputs in syshelpers and some other places (TryStrToBool compares string against upcase[BitTrueString, BitOnString, BitOneString], but upcase() is by default good only for ASCII on console, while GUI is good for unicode)
  87. BitFalseString := 'Неистина'; // This changes boolean to string text outputs in syshelpers and some other places (TryStrToBool compares string against upcase[BitFalseString, BitOffString, BitZeroString], but upcase() is by default good only for ASCII on console, while GUI is good for unicode)
  88. BitOnString := 'Укључено';
  89. BitOffString := 'Искључено';
  90. BitOneString := 'X';
  91. BitZeroString := 'O';
  92. end;
  93. MyBitFormatSettings.CopyToDefaultBoolStrings; // This changes boolean to string text outputs in syshelpers and some other places (TryStrToBool compares string against upcase[BitTrueString, BitOnString, BitOneString], but upcase() is by default good only for ASCII on console, while GUI is good for unicode)
  94. MyBitFormatSettings.CopyToDefaultBitFormatSettings;
  95. WriteLn('CustomBitFormatSettings:');
  96. Print(False);
  97. Print(True);
  98. WriteLn('MyDword.Bits[5].ToTrueFalseString = ', MyDword.Bits[5].ToTrueFalseString, ' (BitTrueString = ', BitTrueString, ')');
  99. WriteLn('MyDword.Bits[5].ToString = ', MyDword.Bits[5].ToString{, ', BitTrueString = ', BitTrueString});
  100. WriteLn('TryStrToBool(''Истина'', MyBool) = ', TryStrToBool('Истина', MyBool).ToString, ', (MyBool = ', MyBool, ')');
  101. WriteLn('TryStrToBool(''ИСТИна'', MyBool) = ', TryStrToBool('ИСТИна', MyBool).ToString, ' (console uppers ASCII only, gui uppers unicode as well)');
  102. WriteLn('BoolToStr(true, true) = ', BoolToStr(true, true), ', TrueBoolStrs[0] = ', TrueBoolStrs[0]);
  103. WriteLn('True.ToString = ', True.ToString);
  104. WriteLn;
  105. MyQword := $ABCDEFFFFFF;
  106. OriginalBitFormatSettings.CopyToDefaultBitFormatSettings;
  107. OriginalBitFormatSettings.CopyToDefaultBoolStrings;
  108. WriteLn('DefaultBinFormatSettings:');
  109. WriteLn('MyQword.ToBinString = ', MyQword.ToBinString);
  110. WriteLn('MyQword.ToBinString(false) = ', MyQword.ToBinString(false));
  111. WriteLn('MyQword.ToBinString(50) = ', MyQword.ToBinString(50));
  112. WriteLn;
  113. // BinNibbleSeparator := '^';
  114. BinByteSeparator := '.';
  115. BinWordSeparator := '-';
  116. BinDwordSeparator := '_';
  117. BitZeroString := 'O';
  118. BitOneString := 'X';
  119. WriteLn('CustomBinFormatSettings:');
  120. WriteLn('MyQword.ToBinString = ', MyQword.ToBinString);
  121. WriteLn('MyQword.ToBinString(false) = ', MyQword.ToBinString(false));
  122. WriteLn('MyQword.ToBinString(50) = ', MyQword.ToBinString(50));
  123. WriteLn;
  124. WriteLn('DefaultHexFormatSettings:');
  125. WriteLn('MyQword.ToHexString = ', MyQword.ToHexString);
  126. WriteLn('MyQword.ToHexString(3) = ', MyQword.ToHexString(3));
  127. WriteLn('MyQword.ToHexString(13) = ', MyQword.ToHexString(13));
  128. WriteLn('MyQword.ToHexString(true) = ', MyQword.ToHexString(true));
  129. WriteLn('MyQword.ToHexString(false) = ', MyQword.ToHexString(false));
  130. WriteLn;
  131. HexPrefixString := '[$';
  132. HexSufixString := ']';
  133. HexNibbleSeparator := '.';
  134. HexByteSeparator := '^';
  135. HexWordSeparator := '_';
  136. HexDwordSeparator := '--';
  137. WriteLn('CustomHexFormatSettings1:');
  138. WriteLn('MyQword.ToHexString = ', MyQword.ToHexString);
  139. WriteLn('MyQword.ToHexString(true) = ', MyQword.ToHexString(true));
  140. WriteLn('MyQword.ToHexString(false) = ', MyQword.ToHexString(false));
  141. WriteLn;
  142. WriteLn('CustomHexFormatSettings2:');
  143. WriteLn('MyQword.ToHexString(MyHexFormatSettings) = ', MyQword.ToHexString(MyHexFormatSettings));
  144. WriteLn('MyQword.ToHexString(MyHexFormatSettings, false) = ', MyQword.ToHexString(MyHexFormatSettings, false));
  145. WriteLn('MyQword.ToHexString(MyHexFormatSettings, 13) = ', MyQword.ToHexString(MyHexFormatSettings, 13));
  146. WriteLn;
  147. {$IFDEF WINDOWS}
  148. WriteLn('Press Enter...');
  149. ReadLn;
  150. SetConsoleOutputCP(PreviousValue);
  151. {$ENDIF}
  152. end.