tb0556.pp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. program decrefcrash;
  2. {$ifdef FPC}{$mode objfpc}{$h+}{$endif}
  3. {$ifdef mswindows}{$apptype console}{$endif}
  4. uses
  5. {$ifdef FPC}{$ifdef linux}cthreads,{$endif}{$endif}
  6. sysutils;
  7. const
  8. maxdatasize = $7fffffff;
  9. type
  10. {$ifdef VER2_2}
  11. msechar = widechar;
  12. msestring = widestring;
  13. {$else VER2_2}
  14. msechar = unicodechar;
  15. msestring = unicodestring;
  16. {$endif VER2_2}
  17. msecharaty = array[0..maxdatasize div sizeof(msechar)-1] of msechar;
  18. pmsecharaty = ^msecharaty;
  19. procedure replacechar1(var dest: msestring; a,b: msechar);
  20. //replaces a by b
  21. var
  22. int1: integer;
  23. begin
  24. uniquestring(dest);
  25. for int1:= 0 to length(dest)-1 do begin
  26. if pmsecharaty(dest)^[int1] = a then begin
  27. pmsecharaty(dest)^[int1]:= b;
  28. end;
  29. end;
  30. end;
  31. function winfilepath(dirname,filename: msestring): msestring;
  32. begin
  33. writeln((pptrint(pointer(dirname))-2)^);
  34. flush(output);
  35. writeln((pptrint(pointer(filename))-2)^);
  36. flush(output);
  37. replacechar1(dirname,msechar('/'),msechar('\'));
  38. replacechar1(filename,msechar('/'),msechar('\'));
  39. if (length(dirname) >= 3) and (dirname[1] = '\') and (dirname[3] = ':') then begin
  40. dirname[1]:= dirname[2]; // '/c:' -> 'c:\'
  41. dirname[2]:= ':';
  42. dirname[3]:= '\';
  43. if (dirname[4] = '\') and (length(dirname) > 4) then begin
  44. move(dirname[5],dirname[4],(length(dirname) - 4)*sizeof(msechar));
  45. setlength(dirname,length(dirname) - 1);
  46. end;
  47. end;
  48. if filename <> '' then begin
  49. if dirname = '' then begin
  50. result:= '.\'+filename;
  51. end
  52. else begin
  53. if dirname[length(dirname)] <> '\' then begin
  54. result:= dirname + '\' + filename;
  55. end
  56. else begin
  57. result:= dirname + filename;
  58. end;
  59. end;
  60. end
  61. else begin
  62. result:= dirname;
  63. end;
  64. end;
  65. var
  66. mstr1,mstr2: msestring;
  67. begin
  68. mstr2:= 'C:\Dokumente und Einstellungen\mseca\Anwendungsdaten\.mseide';
  69. mstr1:= winfilepath(mstr2,'*');
  70. end.