{
  This unit contains all access functions to libc (unix like OS like
  Linux, Mac OS X, BSD), which are needed by the IDE, but are not provided
  by FPC units SysUtils, Unix and BaseUnix.

  Before adding stuff here always check if fpc units Unix or BaseUnix already
  contains corresponding functions.
  Always use types from the ctypes unit.
}
unit IDEMiniLibC;
{$IFDEF linux} {$DEFINE DBG_ENABLE_TERMINAL} {$ENDIF}

{$mode objfpc}{$H+}

{$packrecords c}

interface

uses
  ctypes
{$IFDEF DBG_ENABLE_TERMINAL}
  , BaseUnix
{$ENDIF}
  //,libc
  ;

const
  clib = 'c';
  InvalHandle = -1;
  ICANON    = $0000002;
  ECHO      = $0000008;
  VMIN = 6;
  VTIME = 5;
  TCSANOW = 0;
  F_DUPFD   = 0;
  F_GETFD   = 1;
  F_SETFD   = 2;
  F_GETFL   = 3;
  F_SETFL   = 4;
{$IFDEF DBG_ENABLE_TERMINAL}
  O_NONBLOCK = BaseUnix.O_NONBLOCK;
{$ENDIF}
  EINTR = 4;
  NCCS = 32;

type
  error_t = cint;
  tcflag_t = cuint;
  cc_t = cchar;
  speed_t = cuint;
  size_t = cuint;
  ssize_t = cint;

  Ptermios = ^termios;
  termios = record
    c_iflag : tcflag_t;
    c_oflag : tcflag_t;
    c_cflag : tcflag_t;
    c_lflag : tcflag_t;
    c_line : cc_t;
    c_cc : array[0..(NCCS)-1] of cc_t;
    c_ispeed : speed_t;
    c_ospeed : speed_t;
  end;

function tcgetattr(__fd:cint; __termios_p: Ptermios):cint;cdecl;external clib name 'tcgetattr';
function tcsetattr(__fd:cint; __optional_actions:cint; __termios_p: Ptermios):cint;cdecl;external clib name 'tcsetattr';
function __read(Handle: cint; var Buffer; Count: size_t): ssize_t; cdecl;external clib name 'read';
function __write(Handle: cint; const Buffer; Count: size_t): ssize_t; cdecl;external clib name 'write';
function __close(Handle: cint): cint; cdecl;external clib name 'close';
function getpt:cint;cdecl;external clib name 'getpt';
function posix_openpt(oflag: cint):cint;cdecl;external clib name 'posix_openpt';
function grantpt(__fd:cint):cint;cdecl;external clib name 'grantpt';
function unlockpt(__fd:cint):cint;cdecl;external clib name 'unlockpt';
function ptsname_r(__fd:cint; __buf:Pchar; __buflen:size_t):cint;cdecl;external clib name 'ptsname_r';
function fcntl(Handle: cint; Command: cint; Arg: clong): cint; cdecl;external clib name 'fcntl';

implementation

end.

