syshelpersdemo.pas 8.6 KB

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