diff options
author | Araq <rumpf_a@web.de> | 2011-02-20 20:12:58 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2011-02-20 20:12:58 +0100 |
commit | 3c4f0bf905477228bf1577d9b80ee07189390e99 (patch) | |
tree | 91e9878fc0cf2015ead6cca04bc565c99201d503 /lib/wrappers/lua/lauxlib.nim | |
parent | 2cdfe35e737291e65060e2f954d718316a969048 (diff) | |
download | Nim-3c4f0bf905477228bf1577d9b80ee07189390e99.tar.gz |
added missing new Lua and openGl wrappers
Diffstat (limited to 'lib/wrappers/lua/lauxlib.nim')
-rwxr-xr-x | lib/wrappers/lua/lauxlib.nim | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/lib/wrappers/lua/lauxlib.nim b/lib/wrappers/lua/lauxlib.nim new file mode 100755 index 000000000..bcb806f74 --- /dev/null +++ b/lib/wrappers/lua/lauxlib.nim @@ -0,0 +1,225 @@ +#***************************************************************************** +# * * +# * File: lauxlib.pas * +# * Authors: TeCGraf (C headers + actual Lua libraries) * +# * Lavergne Thomas (original translation to Pascal) * +# * Bram Kuijvenhoven (update to Lua 5.1.1 for FreePascal) * +# * Description: Lua auxiliary library * +# * * +# ***************************************************************************** +# +#** $Id: lauxlib.h,v 1.59 2003/03/18 12:25:32 roberto Exp $ +#** Auxiliary functions for building Lua libraries +#** See Copyright Notice in lua.h +# +# +#** Translated to pascal by Lavergne Thomas +#** Notes : +#** - Pointers type was prefixed with 'P' +#** Bug reports : +#** - thomas.lavergne@laposte.net +#** In french or in english +# + +import + lua + +proc pushstring*(L: PState, s: string) + # compatibilty macros +proc getn*(L: PState, n: int): int + # calls lua_objlen +proc setn*(L: PState, t, n: int) + # does nothing! +type + Treg*{.final.} = object + name*: cstring + func*: CFunction + + Preg* = ptr Treg + +proc openlib*(L: PState, libname: cstring, lr: Preg, nup: int){.cdecl, + dynlib: lua.LIB_NAME, importc: "luaL_openlib".} +proc register*(L: PState, libname: cstring, lr: Preg){.cdecl, + dynlib: lua.LIB_NAME, importc: "luaL_register".} +proc getmetafield*(L: PState, obj: int, e: cstring): int{.cdecl, + dynlib: lua.LIB_NAME, importc: "luaL_getmetafield".} +proc callmeta*(L: PState, obj: int, e: cstring): int{.cdecl, + dynlib: LIB_NAME, importc: "luaL_callmeta".} +proc typerror*(L: PState, narg: int, tname: cstring): int{.cdecl, + dynlib: LIB_NAME, importc: "luaL_typerror".} +proc argerror*(L: PState, numarg: int, extramsg: cstring): int{.cdecl, + dynlib: LIB_NAME, importc: "luaL_argerror".} +proc checklstring*(L: PState, numArg: int, len: ptr int): cstring{.cdecl, + dynlib: LIB_NAME, importc: "luaL_checklstring".} +proc optlstring*(L: PState, numArg: int, def: cstring, len: ptr int): cstring{. + cdecl, dynlib: LIB_NAME, importc: "luaL_optlstring".} +proc checknumber*(L: PState, numArg: int): Number{.cdecl, + dynlib: LIB_NAME, importc: "luaL_checknumber".} +proc optnumber*(L: PState, nArg: int, def: Number): Number{.cdecl, + dynlib: LIB_NAME, importc: "luaL_optnumber".} +proc checkinteger*(L: PState, numArg: int): Integer{.cdecl, + dynlib: LIB_NAME, importc: "luaL_checkinteger".} +proc optinteger*(L: PState, nArg: int, def: Integer): Integer{. + cdecl, dynlib: LIB_NAME, importc: "luaL_optinteger".} +proc checkstack*(L: PState, sz: int, msg: cstring){.cdecl, + dynlib: LIB_NAME, importc: "luaL_checkstack".} +proc checktype*(L: PState, narg, t: int){.cdecl, dynlib: LIB_NAME, + importc: "luaL_checktype".} +proc checkany*(L: PState, narg: int){.cdecl, dynlib: LIB_NAME, + importc: "luaL_checkany".} +proc newmetatable*(L: PState, tname: cstring): int{.cdecl, + dynlib: LIB_NAME, importc: "luaL_newmetatable".} +proc checkudata*(L: PState, ud: int, tname: cstring): Pointer{.cdecl, + dynlib: LIB_NAME, importc: "luaL_checkudata".} +proc where*(L: PState, lvl: int){.cdecl, dynlib: LIB_NAME, + importc: "luaL_where".} +proc error*(L: PState, fmt: cstring): int{.cdecl, varargs, + dynlib: LIB_NAME, importc: "luaL_error".} +proc checkoption*(L: PState, narg: int, def: cstring, lst: cstringArray): int{. + cdecl, dynlib: LIB_NAME, importc: "luaL_checkoption".} +proc reference*(L: PState, t: int): int{.cdecl, dynlib: LIB_NAME, + importc: "luaL_ref".} +proc unref*(L: PState, t, theref: int){.cdecl, dynlib: LIB_NAME, + importc: "luaL_unref".} +proc loadfile*(L: PState, filename: cstring): int{.cdecl, + dynlib: LIB_NAME, importc: "luaL_loadfile".} +proc loadbuffer*(L: PState, buff: cstring, size: int, name: cstring): int{. + cdecl, dynlib: LIB_NAME, importc: "luaL_loadbuffer".} +proc loadstring*(L: PState, s: cstring): int{.cdecl, dynlib: LIB_NAME, + importc: "luaL_loadstring".} +proc newstate*(): PState{.cdecl, dynlib: LIB_NAME, + importc: "luaL_newstate".} +proc open*(): PState + # compatibility; moved from unit lua to lauxlib because it needs luaL_newstate + # + #** =============================================================== + #** some useful macros + #** =============================================================== + # +proc argcheck*(L: PState, cond: bool, numarg: int, extramsg: cstring) +proc checkstring*(L: PState, n: int): cstring +proc optstring*(L: PState, n: int, d: cstring): cstring +proc checkint*(L: PState, n: int): int +proc checklong*(L: PState, n: int): int32 +proc optint*(L: PState, n: int, d: float64): int +proc optlong*(L: PState, n: int, d: float64): int32 +proc dofile*(L: PState, filename: cstring): int +proc dostring*(L: PState, str: cstring): int +proc getmetatable*(L: PState, tname: cstring) + # not translated: + # #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) + # + #** ======================================================= + #** Generic Buffer manipulation + #** ======================================================= + # +const # note: this is just arbitrary, as it related to the BUFSIZ defined in stdio.h ... + BUFFERSIZE* = 4096 + +type + Buffer*{.final.} = object + p*: cstring # current position in buffer + lvl*: int # number of strings in the stack (level) + L*: PState + buffer*: array[0..BUFFERSIZE - 1, Char] # warning: see note above about LUAL_BUFFERSIZE + + PBuffer* = ptr Buffer + +proc addchar*(B: PBuffer, c: Char) + # warning: see note above about LUAL_BUFFERSIZE + # compatibility only (alias for luaL_addchar) +proc putchar*(B: PBuffer, c: Char) + # warning: see note above about LUAL_BUFFERSIZE +proc addsize*(B: PBuffer, n: int) +proc buffinit*(L: PState, B: PBuffer){.cdecl, dynlib: LIB_NAME, + importc: "luaL_buffinit".} +proc prepbuffer*(B: PBuffer): cstring{.cdecl, dynlib: LIB_NAME, + importc: "luaL_prepbuffer".} +proc addlstring*(B: PBuffer, s: cstring, L: int){.cdecl, + dynlib: LIB_NAME, importc: "luaL_addlstring".} +proc addstring*(B: PBuffer, s: cstring){.cdecl, dynlib: LIB_NAME, + importc: "luaL_addstring".} +proc addvalue*(B: PBuffer){.cdecl, dynlib: LIB_NAME, + importc: "luaL_addvalue".} +proc pushresult*(B: PBuffer){.cdecl, dynlib: LIB_NAME, + importc: "luaL_pushresult".} +proc gsub*(L: PState, s, p, r: cstring): cstring{.cdecl, + dynlib: LIB_NAME, importc: "luaL_gsub".} +proc findtable*(L: PState, idx: int, fname: cstring, szhint: int): cstring{. + cdecl, dynlib: LIB_NAME, importc: "luaL_findtable".} + # compatibility with ref system + # pre-defined references +const + NOREF* = - 2 + REFNIL* = - 1 + +proc unref*(L: PState, theref: int) +proc getref*(L: PState, theref: int) + # + #** Compatibility macros and functions + # +# implementation + +proc pushstring(L: PState, s: string) = + pushlstring(L, cstring(s), len(s)) + +proc getn(L: PState, n: int): int = + Result = objlen(L, n) + +proc setn(L: PState, t, n: int) = + # does nothing as this operation is deprecated + nil + +proc open(): PState = + Result = newstate() + +proc dofile(L: PState, filename: cstring): int = + Result = loadfile(L, filename) + if Result == 0: Result = pcall(L, 0, MULTRET, 0) + +proc dostring(L: PState, str: cstring): int = + Result = loadstring(L, str) + if Result == 0: Result = pcall(L, 0, MULTRET, 0) + +proc getmetatable(L: PState, tname: cstring) = + getfield(L, REGISTRYINDEX, tname) + +proc argcheck(L: PState, cond: bool, numarg: int, extramsg: cstring) = + if not cond: + discard argerror(L, numarg, extramsg) + +proc checkstring(L: PState, n: int): cstring = + Result = checklstring(L, n, nil) + +proc optstring(L: PState, n: int, d: cstring): cstring = + Result = optlstring(L, n, d, nil) + +proc checkint(L: PState, n: int): int = + Result = toInt(checknumber(L, n)) + +proc checklong(L: PState, n: int): int32 = + Result = int32(ToInt(checknumber(L, n))) + +proc optint(L: PState, n: int, d: float64): int = + Result = int(ToInt(optnumber(L, n, d))) + +proc optlong(L: PState, n: int, d: float64): int32 = + Result = int32(ToInt(optnumber(L, n, d))) + +proc addchar(B: PBuffer, c: Char) = + if cast[int](addr((B.p))) < (cast[int](addr((B.buffer[0]))) + BUFFERSIZE): + discard prepbuffer(B) + B.p[1] = c + B.p = cast[cstring](cast[int](B.p) + 1) + +proc putchar(B: PBuffer, c: Char) = + addchar(B, c) + +proc addsize(B: PBuffer, n: int) = + B.p = cast[cstring](cast[int](B.p) + n) + +proc unref(L: PState, theref: int) = + unref(L, REGISTRYINDEX, theref) + +proc getref(L: PState, theref: int) = + rawgeti(L, REGISTRYINDEX, theref) |