Skip to content

Commit

Permalink
Expose some imported types from C libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
edubart committed Sep 21, 2020
1 parent 4d06850 commit 19948e5
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 42 deletions.
2 changes: 1 addition & 1 deletion lib/C/locale.nelua
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## cinclude '<locale.h>'

local lconv = @record {
global lconv = @record {
decimal_point: cstring,
thousands_sep: cstring,
grouping: cstring,
Expand Down
65 changes: 31 additions & 34 deletions lib/C/stdio.nelua
Original file line number Diff line number Diff line change
@@ -1,83 +1,80 @@
## cinclude '<stdio.h>'

local FILE <cimport'FILE',nodecl> = @record{}
local fpos_t <cimport'fpos_t',nodecl> = @record{}

-- Operations on files
function C.remove(filename: cstring): cint <cimport'remove',nodecl> end
function C.rename(old: cstring, new: cstring): cint <cimport'rename',nodecl> end
function C.tmpfile(): *FILE <cimport'tmpfile',nodecl> end
function C.tmpfile(): pointer <cimport'tmpfile',nodecl> end
function C.tmpnam(s: cstring): cstring <cimport'tmpnam',nodecl> end

-- File access
function C.fclose(stream: *FILE): cint <cimport'fclose',nodecl> end
function C.fflush(stream: *FILE): cint <cimport'fflush',nodecl> end
function C.fopen(filename: cstring, modes: cstring): *FILE <cimport'fopen',nodecl> end
function C.freopen(filename: cstring, modes: cstring, stream: *FILE): *FILE <cimport'freopen',nodecl> end
function C.fclose(stream: pointer): cint <cimport'fclose',nodecl> end
function C.fflush(stream: pointer): cint <cimport'fflush',nodecl> end
function C.fopen(filename: cstring, modes: cstring): pointer <cimport'fopen',nodecl> end
function C.freopen(filename: cstring, modes: cstring, stream: pointer): pointer <cimport'freopen',nodecl> end

function C.setbuf(stream: *FILE, buf: cstring): void <cimport'setbuf',nodecl> end
function C.setvbuf(stream: *FILE, buf: cstring, modes: cint, n: csize): cint <cimport'setvbuf',nodecl> end
function C.setbuf(stream: pointer, buf: cstring): void <cimport'setbuf',nodecl> end
function C.setvbuf(stream: pointer, buf: cstring, modes: cint, n: csize): cint <cimport'setvbuf',nodecl> end

-- Formatted input/output
function C.scanf(format: cstring, ...: cvarargs): cint <cimport'scanf',nodecl> end
function C.fscanf(stream: *FILE, format: cstring, ...: cvarargs): cint <cimport'fscanf',nodecl> end
function C.fscanf(stream: pointer, format: cstring, ...: cvarargs): cint <cimport'fscanf',nodecl> end
function C.sscanf(s: cstring, format: cstring, ...: cvarargs): cint <cimport'sscanf',nodecl> end

function C.vscanf(format: cstring, ...: cvarargs): cint <cimport'vscanf',nodecl> end
function C.vfscanf(stream: *FILE, format: cstring, ...: cvarargs): cint <cimport'vfscanf',nodecl> end
function C.vfscanf(stream: pointer, format: cstring, ...: cvarargs): cint <cimport'vfscanf',nodecl> end
function C.vsscanf(s: cstring, format: cstring, ...: cvarargs): cint <cimport'vsscanf',nodecl> end

function C.printf(format: cstring, ...: cvarargs): cint <cimport'printf',nodecl> end
function C.fprintf(stream: *FILE, format: cstring, ...: cvarargs): cint <cimport'fprintf',nodecl> end
function C.fprintf(stream: pointer, format: cstring, ...: cvarargs): cint <cimport'fprintf',nodecl> end
function C.sprintf(s: cstring, format: cstring, ...: cvarargs): cint <cimport'sprintf',nodecl> end
function C.snprintf(s: cstring, maxlen: csize, format: cstring, ...: cvarargs): cint <cimport'snprintf',nodecl> end

function C.vprintf(format: cstring, ...: cvarargs): cint <cimport'vprintf',nodecl> end
function C.vfprintf(stream: *FILE, format: cstring, ...: cvarargs): cint <cimport'vfprintf',nodecl> end
function C.vfprintf(stream: pointer, format: cstring, ...: cvarargs): cint <cimport'vfprintf',nodecl> end
function C.vsprintf(s: cstring, format: cstring, ...: cvarargs): cint <cimport'vsprintf',nodecl> end
function C.vsnprintf(s: cstring, maxlen: csize, format: cstring, ...: cvarargs): cint <cimport'vsnprintf',nodecl> end

-- Character input/output
function C.getc(stream: *FILE): cint <cimport'getc',nodecl> end
function C.putc(c: cint, stream: *FILE): cint <cimport'putc',nodecl> end
function C.getc(stream: pointer): cint <cimport'getc',nodecl> end
function C.putc(c: cint, stream: pointer): cint <cimport'putc',nodecl> end

function C.getchar(): cint <cimport'getchar',nodecl> end
function C.putchar(c: cint): cint <cimport'putchar',nodecl> end

function C.fgetc(stream: *FILE): cint <cimport'fgetc',nodecl> end
function C.fputc(c: cint, stream: *FILE): cint <cimport'fputc',nodecl> end
function C.fgetc(stream: pointer): cint <cimport'fgetc',nodecl> end
function C.fputc(c: cint, stream: pointer): cint <cimport'fputc',nodecl> end

function C.fgets(s: cstring, n: cint, stream: *FILE): cstring <cimport'fgets',nodecl> end
function C.fputs(s: cstring, stream: *FILE): cint <cimport'fputs',nodecl> end
function C.fgets(s: cstring, n: cint, stream: pointer): cstring <cimport'fgets',nodecl> end
function C.fputs(s: cstring, stream: pointer): cint <cimport'fputs',nodecl> end

function C.gets(s: cstring): cstring <cimport'puts',nodecl> end
function C.puts(s: cstring): cint <cimport'puts',nodecl> end

function C.ungetc(c: cint, stream: *FILE): cint <cimport'ungetc',nodecl> end
function C.ungetc(c: cint, stream: pointer): cint <cimport'ungetc',nodecl> end

-- Direct input/output
function C.fread(ptr: pointer, size: csize, n: csize, stream: *FILE): csize <cimport'fread',nodecl> end
function C.fwrite(ptr: pointer, size: csize, n: csize, sream: *FILE): csize <cimport'fwrite',nodecl> end
function C.fread(ptr: pointer, size: csize, n: csize, stream: pointer): csize <cimport'fread',nodecl> end
function C.fwrite(ptr: pointer, size: csize, n: csize, sream: pointer): csize <cimport'fwrite',nodecl> end

-- File positioning
function C.fgetpos(stream: *FILE, pos: *fpos_t): cint <cimport'fgetpos',nodecl> end
function C.fsetpos(stream: *FILE, pos: *fpos_t): cint <cimport'fsetpos',nodecl> end
-- function C.fgetpos(stream: pointer, pos: *fpos_t): cint <cimport'fgetpos',nodecl> end
-- function C.fsetpos(stream: pointer, pos: *fpos_t): cint <cimport'fsetpos',nodecl> end

function C.fseek(stream: *FILE, off: clong, whence: cint): cint <cimport'fseek',nodecl> end
function C.ftell(stream: *FILE): clong <cimport'ftell',nodecl> end
function C.fseek(stream: pointer, off: clong, whence: cint): cint <cimport'fseek',nodecl> end
function C.ftell(stream: pointer): clong <cimport'ftell',nodecl> end

function C.rewind(stream: *FILE): void <cimport'rewind',nodecl> end
function C.rewind(stream: pointer): void <cimport'rewind',nodecl> end

-- Error handling
function C.clearerr(stream: *FILE): void <cimport'clearerr',nodecl> end
function C.feof(stream: *FILE): cint <cimport'feof',nodecl> end
function C.ferror(stream: *FILE): cint <cimport'ferror',nodecl> end
function C.clearerr(stream: pointer): void <cimport'clearerr',nodecl> end
function C.feof(stream: pointer): cint <cimport'feof',nodecl> end
function C.ferror(stream: pointer): cint <cimport'ferror',nodecl> end
function C.perror(s: cstring): void <cimport'perror',nodecl> end

-- Global variables
global C.stdin: *FILE <cimport'stdin',nodecl>
global C.stdout: *FILE <cimport'stdout',nodecl>
global C.stderr: *FILE <cimport'stderr',nodecl>
global C.stdin: pointer <cimport'stdin',nodecl>
global C.stdout: pointer <cimport'stdout',nodecl>
global C.stderr: pointer <cimport'stderr',nodecl>

-- Constants
global C.EOF: cint <const,cimport'EOF',nodecl>
Expand Down
6 changes: 3 additions & 3 deletions lib/C/stdlib.nelua
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ function C.abs(x: cint): cint <cimport'abs',nodecl> end
function C.labs(x: clong): clong <cimport'labs',nodecl> end
function C.llabs(x: clonglong): clonglong <cimport'llabs',nodecl> end

local div_t <cimport'div_t',nodecl> = @record{quot: cint, rem: cint}
local ldiv_t <cimport'ldiv_t',nodecl> = @record{quot: cint, rem: cint}
local lldiv_t <cimport'lldiv_t',nodecl> = @record{quot: cint, rem: cint}
global div_t <cimport'div_t',nodecl> = @record{quot: cint, rem: cint}
global ldiv_t <cimport'ldiv_t',nodecl> = @record{quot: cint, rem: cint}
global lldiv_t <cimport'lldiv_t',nodecl> = @record{quot: cint, rem: cint}
function C.div(numer: cint, denom: cint): div_t <cimport'div',nodecl> end
function C.ldiv(numer: clong, denom: clong): ldiv_t <cimport'ldiv',nodecl> end
function C.lldiv(numer: clonglong, denom: clonglong): lldiv_t <cimport'lldiv',nodecl> end
Expand Down
9 changes: 5 additions & 4 deletions lib/C/time.nelua
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ typedef struct timespec timespec_t;
local neluatypes = require 'nelua.types'
]]

local clock_t <cimport'clock_t',nodecl> = #[neluatypes.IntegralType('clock_t', primtypes.clong.size)]#
local time_t <cimport'time_t',nodecl> = #[neluatypes.IntegralType('time_t', primtypes.clong.size)]#
local tm <cimport'tm_t',nodecl> = @record{
global clock_t <cimport'clock_t',nodecl> = #[neluatypes.IntegralType('clock_t', primtypes.clong.size)]#
global time_t <cimport'time_t',nodecl> = #[neluatypes.IntegralType('time_t', primtypes.clong.size)]#
global tm <cimport'tm_t',nodecl> = @record{
tm_sec: cint,
tm_min: cint,
tm_hour: cint,
Expand All @@ -22,7 +22,7 @@ local tm <cimport'tm_t',nodecl> = @record{
tm_yday: cint,
tm_isdst: cint
}
local timespec <cimport'timespec_t',nodecl> = @record {
global timespec <cimport'timespec_t',nodecl> = @record {
tv_sec: time_t,
tv_nsec: clong
}
Expand All @@ -43,3 +43,4 @@ function C.timespec_get(ts: *timespec, base: cint): cint <cimport'timespec_get',

-- Constants
global C.CLOCKS_PER_SEC: clock_t <const,cimport'CLOCKS_PER_SEC',nodecl>
global C.TIME_UTC: cint <const,cimport'TIME_UTC',nodecl>

0 comments on commit 19948e5

Please sign in to comment.