Oberon space

General Category => Общий раздел => Тема начата: ilovb от Декабрь 10, 2012, 07:27:02 pm

Название: Бинд к Lua для BB
Отправлено: ilovb от Декабрь 10, 2012, 07:27:02 pm
Хочу транслировать сие на CP:
http://lua-users.org/files/wiki_insecure/lua52.pas

Прошу помощи у тех кто знает Free Pascal.
Да и вообще любая помощь приветствуется  :)
Название: Re: Бинд к Lua для BB
Отправлено: Romiras от Декабрь 11, 2012, 07:12:32 pm
А поточнее вопрос задать?
Название: Re: Бинд к Lua для BB
Отправлено: ilovb от Декабрь 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 ?
Название: Re: Бинд к Lua для BB
Отправлено: ilovb от Декабрь 11, 2012, 07:39:40 pm
Вот пока черновик накидал:
Название: Re: Бинд к Lua для BB
Отправлено: Romiras от Декабрь 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;
Название: Re: Бинд к Lua для BB
Отправлено: ilovb от Декабрь 12, 2012, 05:23:39 am
Спасибо!