Calling API Functions

All LayGO API function names and argument sequences are identical to those documented in the C language API. For instance, the code to open a CID which might be written in C as:

LCid cid;

cid = lgo_Open("PHYS0");

if (cid < 0)
{
    PostOpenError(cid);
}
else
{
    ConnectCid(cid);
}

translates directly into the following Pascal code in Delphi 4:

cid: LCid;

cid := lgo_Open('PHYS0');

if cid < 0 then
    PostOpenError(cid)
else
    ConnectCid(cid);

For functions which take C pointer types such as LDataBuffer or LCtlBuffer, substitute the address of an array of Byte. The C code to read data:

unsigned char buffer[1024];
LResult       result;

result = lgo_Read(cid, buffer, 1024);

if (result > 0)
{
    ProcessData(buffer, result);
}
else if (result == lgo_ERROR_EVENT_WAITING)
{
    ReadEvent();
}

becomes the Delphi 4 code:

buffer: array [0..1023] of Byte;
result: LResult;

result := lgo_Read(cid, @buffer, 1024);

if result > 0 then
    ProcessData(@buffer, result)
else if result = ERROR_EVENT_WAITING then
    ReadEvent();

The argument can also be a pointer to dynamically allocated memory:

buffer: ^Byte;
result: LResult;

buffer := AllocMem(1024);
result := lgo_Read(cid, buffer, 1024);

Where a NULL pointer would be used in C, substitute the manifest constant nil:

LResult result;

result = lgo_ConnectRequest(cid, NULL, 0);

becomes

result: LResult;

result = lgo_ConnectRequest(cid, nil, 0);

All the other C integral types which are used as function arguments or return values are mapped to the proper Pascal types in Laygo.pas.