{$ifdef go32v2}
  {$define USE_INTERNAL_UNICODE}
{$endif}

{$ifdef USE_INTERNAL_UNICODE}
  {$define USE_FPWIDESTRING_UNIT}
  {$define USE_UNICODEDUCET_UNIT}
  {$define USE_CPALL_UNIT}
{$endif}
{$ifndef USE_INTERNAL_UNICODE}
{$ifdef unix}
uses
  {$ifdef darwin}iosxwstr{$else}cwstring{$endif};
{$endif}
{$else def USE_INTERNAL_UNICODE}
uses
 {$ifdef USE_UNICODEDUCET_UNIT}
  unicodeducet,
 {$endif}
 {$ifdef USE_FPWIDESTRING_UNIT}
  fpwidestring,
 {$endif}
 {$ifdef USE_CPALL_UNIT}
  cpall,
 {$endif}
 { The unit strings is not really used here,
   but simpifies the conditional construction
   for fpwidestring and unicodeducet use }
  strings;
{$endif def USE_INTERNAL_UNICODE}

type
  tcpstr1 = type AnsiString(1253);
  tcpstr2 = type AnsiString(1251);
var
  a1 : tcpstr1;
  a2 : utf8string;
  a3 : tcpstr2;
  u1 : unicodestring;
begin
  a1:=' ';
  a1[1]:=char($80); // Euro symbol in cp1253
  a2:=a1;
  if ord(a2[1])<>$E2 then
    halt(1);
  if ord(a2[2])<>$82 then
    halt(2);

  writeln('---');

  a3:=a1;
  if ord(a3[1])<>$88 then
    halt(3);

  writeln('---');

  u1:=a1;
  if ord(u1[1])<>$20AC then
    halt(4);

  writeln('ok');
end.
