Автор Тема: Бинд к Lua для BB  (Прочитано 3318 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Бинд к Lua для BB
« : Декабрь 10, 2012, 07:27:02 pm »
Хочу транслировать сие на CP:
http://lua-users.org/files/wiki_insecure/lua52.pas

Прошу помощи у тех кто знает Free Pascal.
Да и вообще любая помощь приветствуется  :)

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Бинд к Lua для BB
« Ответ #1 : Декабрь 11, 2012, 07:12:32 pm »
А поточнее вопрос задать?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Бинд к Lua для BB
« Ответ #2 : Декабрь 11, 2012, 07:36:08 pm »
lua_Number   = Double;
Plua_Number  = ^lua_Number;
size_t = Cardinal;
Psize_t = ^size_t;
Как эти указатели описать на CP?

Plua_State = Pointer;
Как описать такой поинтер?

PChar - Это POINTER OF ARRAY [untagged] OF SHORTCHAR?

Cardinal - INTEGER?

LongBool, PLongBool ?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Бинд к Lua для BB
« Ответ #3 : Декабрь 11, 2012, 07:39:40 pm »
Вот пока черновик накидал:

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Бинд к Lua для BB
« Ответ #4 : Декабрь 11, 2012, 09:05:47 pm »
function lua_version(L: Plua_State): Plua_Number; cdecl;
(* alternative declaration *)
function lua_version(var L: lua_State): Plua_Number; cdecl;

В основном я использую такие определения для BlackBox:
(* C types aliases *)
int32* = INTEGER;
uint32* = INTEGER; (* unsigned int32 *)
double* = REAL;
LongBool* = BOOLEAN;

(* Free Pascal/Delphi type aliases *)
LongWord* =  uint32;
Double* = double;
Cardinal* = uint32;
enum* =  int32; (* enumeration type *)

Pointer* = POINTER TO RECORD [untagged] END; (* unsafe *)
PAnsiChar* =  POINTER TO ARRAY [untagged] OF SHORTCHAR; (* UTF-8 encoded string *) (* unsafe *)
PChar* = PAnsiChar;

Что касается других "сложных" типов данных, что немало зависит от того как они определены в интерфейсе функции. Чистые указатели стараюсь не использовать, а заменять их на указатель на нетегированные запись/массив.
(* misc. types *)
ByteArrPtr* =  POINTER TO ARRAY [untagged] OF BYTE; (* unsafe *)
RealArrPtr* =  POINTER TO ARRAY [untagged] OF Real; (* unsafe *)
PtrWSTR* = POINTER TO ARRAY [untagged] OF CHAR;
PtrVoid* = (* Pointer, 32-bit *) INTEGER; (* C  void*  *)
PLongBool* = POINTER TO ARRAY [untagged] 1 OF BOOLEAN;
« Последнее редактирование: Декабрь 11, 2012, 09:08:24 pm от Romiras »

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Бинд к Lua для BB
« Ответ #5 : Декабрь 12, 2012, 05:23:39 am »
Спасибо!