Большая переработка - полностью переписал работу внутри библиотеки.
Теперь работает в винде с FPC 3.1.1
			
		Модератор: Модераторы

Программный интерфейс библиотеки стараюсь делать максимально похожим на английский вариант com-объекта от АТОЛ.

ssadragon писал(а): У нас просто еще для штрихов так-же примерно написан драйвер, вот он и привел их к более менее одинаковому виду




function StrToKKM(const S:string):string;
var
  S1: String;
  i, L: Integer;
  P: PChar;
begin
  Result:='';
  i:=1;
  while i<Length(S) do
  begin
    P:=@S[i];
    L:=UTF8CharacterLength(P);
    S1:=Copy(S, i, L);
    i:=i+l;
    if S1='А' then
      Result:=Result + #65
    else
    if S1='B' then
      Result:=Result + #65
    else
      Result:=Result + UTF8ToConsole(S1);
  end;
end;
 Да и ККМ с такой прошивкой у меня нет... Если функция будет готова - то не откажусь в исходники включить.
 Да и ККМ с такой прошивкой у меня нет... Если функция будет готова - то не откажусь в исходники включить.
function UTF8ToKazOEM(const S:string):string;
var
  FSymbol, FSrcString: String;
  i, L: Integer;
  P: PChar;
  FDst: PChar;
begin
  FSrcString := UTF8ToWinCP(s);
  Result:='';
  i:=1;
  while i<=Length(FSrcString) do
  begin
    P:=@FSrcString[i];
    L:=UTF8CharacterLength(P);
    FSymbol:=Copy(FSrcString, i, L);
    i:=i+l;
    if FSymbol=#188 then // ә
      Result:=Result + #177
    else
    if FSymbol=#179 then // і
      Result:=Result + #105
    else
    if FSymbol= #190 then // ң
      Result:=Result + #241
    else
    if FSymbol= #186 then // ғ
      Result:=Result + #220
    else
    if FSymbol= #191 then // ү
      Result:=Result + #248
    else
    if FSymbol= #162 then // ұ
      Result:=Result + #246
    else
    if FSymbol= #157 then // қ
      Result:=Result + #223
    else
    if FSymbol= #180 then // ө
      Result:=Result + #244
    else
    if FSymbol= #158 then // һ
      Result:=Result + #254
    else
    if FSymbol= #163 then // Ә
      Result:=Result + #176
    else
    if FSymbol= #178 then // І
      Result:=Result + #73
    else
    if FSymbol= #189 then // Ң
      Result:=Result + #240
    else
    if FSymbol= #170 then // Ғ
      Result:=Result + #219
    else
    if FSymbol= #175 then // Ү
      Result:=Result + #247
    else
    if FSymbol= #161 then // Ұ
      Result:=Result + #245
    else
    if FSymbol= #141 then // Қ
      Result:=Result + #222
    else
    if FSymbol= #165 then // Ө
      Result:=Result + #243
    else
    if FSymbol= #142 then // Һ
      Result:=Result + #253
    else
    begin
      FDst := AllocMem((Length(FSymbol) + 1) * SizeOf(Char));
      if CharToOEM(PChar(FSymbol), FDst) then
        Result := Result + StrPas(FDst);
      FreeMem(FDst);
    end;
  end;
  SetCodePage(RawByteString(Result), CP_OEMCP, False);
end;

Все текстовые строки передаются в ККТ в кодовой странице 866 MS DOS. Исключение составляют символы "No" (имеет код 24h), "€" (имеет код F2h), "$" (имеет код FСh).
ККТ принимает текстовые строки в кодовой странице 866 MS-DOS, но хранит и возвращает их в собственной внутренней кодировке.


alexs писал(а):Ну казахский язык имеет свою кодовую страницу? Это не 866 по идее.
alexs писал(а):Я думал что то типа atol866, atolXXXX...


Вернуться в Разработки на нашем сайте
Сейчас этот форум просматривают: Yandex [Bot] и гости: 1