DXPConfig.pas 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // DXPConfig
  2. {
  3. FPC Globals for DXPExpert.<p>
  4. Licensed under MPL (http://www.mozilla.org/MPL/)
  5. Copyright 2003 - Eric Grange
  6. }
  7. unit DXPConfig;
  8. interface
  9. uses Classes;
  10. type
  11. // TDXPConfig
  12. //
  13. TDXPConfig = class (TObject)
  14. protected
  15. { Protected Declarations }
  16. procedure WriteString(aStream : TStream; const aString : String);
  17. function ReadString(aStream : TStream) : String;
  18. public
  19. { Public Declarations }
  20. constructor Create; virtual;
  21. procedure SaveToStream(aStream : TStream); virtual; abstract;
  22. procedure LoadFromStream(aStream : TStream); virtual; abstract;
  23. procedure SaveToFile(const fileName : String);
  24. procedure LoadFromFile(const fileName : String);
  25. end;
  26. // -----------------------------------------------------------------
  27. // -----------------------------------------------------------------
  28. // -----------------------------------------------------------------
  29. implementation
  30. // -----------------------------------------------------------------
  31. // -----------------------------------------------------------------
  32. // -----------------------------------------------------------------
  33. uses SysUtils;
  34. // Create
  35. //
  36. constructor TDXPConfig.Create;
  37. begin
  38. inherited Create;
  39. end;
  40. // SaveToFile
  41. //
  42. procedure TDXPConfig.SaveToFile(const fileName : String);
  43. var
  44. fs : TFileStream;
  45. begin
  46. fs:=TFileStream.Create(fileName, fmCreate);
  47. try
  48. WriteString(fs, '#');
  49. WriteString(fs, '# DXP Config File');
  50. WriteString(fs, '#');
  51. WriteString(fs, '');
  52. SaveToStream(fs);
  53. finally
  54. fs.Free;
  55. end;
  56. end;
  57. // LoadFromFile
  58. //
  59. procedure TDXPConfig.LoadFromFile(const fileName : String);
  60. var
  61. fs : TFileStream;
  62. begin
  63. fs:=TFileStream.Create(fileName, fmOpenRead+fmShareDenyWrite);
  64. try
  65. ReadString(fs);
  66. ReadString(fs);
  67. ReadString(fs);
  68. ReadString(fs);
  69. LoadFromStream(fs);
  70. finally
  71. fs.Free;
  72. end;
  73. end;
  74. // WriteString
  75. //
  76. procedure TDXPConfig.WriteString(aStream : TStream; const aString : String);
  77. const
  78. cCRLF : array [0..1] of Byte = ($0D, $0A);
  79. begin
  80. if aString<>'' then
  81. aStream.Write(aString[1], Length(aString));
  82. aStream.Write(cCRLF, 2);
  83. end;
  84. // ReadString
  85. //
  86. function TDXPConfig.ReadString(aStream : TStream) : String;
  87. var
  88. buf : Char;
  89. begin
  90. // ugly, I know, feel free to improve
  91. Result:='';
  92. while aStream.Position<aStream.Size do begin
  93. aStream.Read(buf, 1);
  94. Result:=Result+buf;
  95. if Copy(Result, Length(Result)-1, 2)=#13#10 then begin
  96. SetLength(Result, Length(Result)-2);
  97. Break;
  98. end;
  99. end;
  100. end;
  101. end.