Oberon space
General Category => Общий раздел => Тема начата: ilovb от Декабрь 10, 2012, 07:27:02 pm
-
Хочу транслировать сие на CP:
http://lua-users.org/files/wiki_insecure/lua52.pas
Прошу помощи у тех кто знает Free Pascal.
Да и вообще любая помощь приветствуется :)
-
А поточнее вопрос задать?
-
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 ?
-
Вот пока черновик накидал:
-
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;
-
Спасибо!