diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/lua/liolibext.c')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/lua/liolibext.c | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/lua/liolibext.c b/Build/source/texk/web2c/luatexdir/lua/liolibext.c index 2de67f8fe29..ce1e78f6c73 100644 --- a/Build/source/texk/web2c/luatexdir/lua/liolibext.c +++ b/Build/source/texk/web2c/luatexdir/lua/liolibext.c @@ -145,6 +145,17 @@ static int readcardinal2(lua_State *L) { lua_pushinteger(L, 0x100 * a + b); return 1; } +static int readcardinal2_le(lua_State *L) { + FILE *f = tofile(L); + int b = getc(f); + int a = getc(f); + if (a == EOF) + lua_pushnil(L); + else + /* (a<<8) | b */ + lua_pushinteger(L, 0x100 * a + b); + return 1; +} static int readcardinal2_s(lua_State *L) { size_t l; @@ -159,6 +170,19 @@ static int readcardinal2_s(lua_State *L) { } return 1; } +static int readcardinal2_s_le(lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t p = luaL_checkinteger(L, 2) - 1; + if (p+1 >= l) { + lua_pushnil(L); + } else { + int b = uchar(s[p++]); + int a = uchar(s[p]); + lua_pushinteger(L, 0x100 * a + b); + } + return 1; +} static int readcardinal3(lua_State *L) { FILE *f = tofile(L); @@ -172,6 +196,18 @@ static int readcardinal3(lua_State *L) { lua_pushinteger(L, 0x10000 * a + 0x100 * b + c); return 1; } +static int readcardinal3_le(lua_State *L) { + FILE *f = tofile(L); + int c = getc(f); + int b = getc(f); + int a = getc(f); + if (a == EOF) + lua_pushnil(L); + else + /* (a<<16) | (b<<8) | c */ + lua_pushinteger(L, 0x10000 * a + 0x100 * b + c); + return 1; +} static int readcardinal3_s(lua_State *L) { size_t l; @@ -187,6 +223,20 @@ static int readcardinal3_s(lua_State *L) { } return 1; } +static int readcardinal3_s_le(lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t p = luaL_checkinteger(L, 2) - 1; + if (p+2 >= l) { + lua_pushnil(L); + } else { + int c = uchar(s[p++]); + int b = uchar(s[p++]); + int a = uchar(s[p]); + lua_pushinteger(L, 0x10000 * a + 0x100 * b + c); + } + return 1; +} static int readcardinal4(lua_State *L) { FILE *f = tofile(L); @@ -201,6 +251,19 @@ static int readcardinal4(lua_State *L) { lua_pushinteger(L,0x1000000 * a + 0x10000 * b + 0x100 * c + d); return 1; } +static int readcardinal4_le(lua_State *L) { + FILE *f = tofile(L); + int d = getc(f); + int c = getc(f); + int b = getc(f); + int a = getc(f); + if (a == EOF) + lua_pushnil(L); + else + /* (a<<24) | (b<<16) | (c<<8) | d */ + lua_pushinteger(L,0x1000000 * a + 0x10000 * b + 0x100 * c + d); + return 1; +} static int readcardinal4_s(lua_State *L) { size_t l; @@ -217,6 +280,21 @@ static int readcardinal4_s(lua_State *L) { } return 1; } +static int readcardinal4_s_le(lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t p = luaL_checkinteger(L, 2) - 1; + if (p+3 >= l) { + lua_pushnil(L); + } else { + int d = uchar(s[p++]); + int c = uchar(s[p++]); + int b = uchar(s[p++]); + int a = uchar(s[p]); + lua_pushinteger(L,0x1000000 * a + 0x10000 * b + 0x100 * c + d); + } + return 1; +} static int readcardinaltable(lua_State *L) { FILE *f = tofile(L); @@ -391,6 +469,18 @@ static int readinteger2(lua_State *L) { lua_pushinteger(L, 0x100 * a + b); return 1; } +static int readinteger2_le(lua_State *L) { + FILE *f = tofile(L); + int b = getc(f); + int a = getc(f); + if (a == EOF) + lua_pushnil(L); + else if (a >= 0x80) + lua_pushinteger(L, 0x100 * a + b - 0x10000); + else + lua_pushinteger(L, 0x100 * a + b); + return 1; +} static int readinteger2_s(lua_State *L) { size_t l; @@ -408,6 +498,22 @@ static int readinteger2_s(lua_State *L) { } return 1; } +static int readinteger2_s_le(lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t p = luaL_checkinteger(L, 2) - 1; + if (p+1 >= l) { + lua_pushnil(L); + } else { + int b = uchar(s[p++]); + int a = uchar(s[p]); + if (a >= 0x80) + lua_pushinteger(L, 0x100 * a + b - 0x10000); + else + lua_pushinteger(L, 0x100 * a + b); + } + return 1; +} static int readinteger3(lua_State *L) { FILE *f = tofile(L); @@ -422,6 +528,19 @@ static int readinteger3(lua_State *L) { lua_pushinteger(L, 0x10000 * a + 0x100 * b + c); return 1; } +static int readinteger3_le(lua_State *L) { + FILE *f = tofile(L); + int c = getc(f); + int b = getc(f); + int a = getc(f); + if (a == EOF) + lua_pushnil(L); + else if (a >= 0x80) + lua_pushinteger(L, 0x10000 * a + 0x100 * b + c - 0x1000000); + else + lua_pushinteger(L, 0x10000 * a + 0x100 * b + c); + return 1; +} static int readinteger3_s(lua_State *L) { size_t l; @@ -440,6 +559,23 @@ static int readinteger3_s(lua_State *L) { } return 1; } +static int readinteger3_s_le(lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t p = luaL_checkinteger(L, 2) - 1; + if (p+2 >= l) { + lua_pushnil(L); + } else { + int c = uchar(s[p++]); + int b = uchar(s[p++]); + int a = uchar(s[p]); + if (a >= 0x80) + lua_pushinteger(L, 0x10000 * a + 0x100 * b + c - 0x1000000); + else + lua_pushinteger(L, 0x10000 * a + 0x100 * b + c); + } + return 1; +} static int readinteger4(lua_State *L) { FILE *f = tofile(L); @@ -455,6 +591,20 @@ static int readinteger4(lua_State *L) { lua_pushinteger(L, 0x1000000 * a + 0x10000 * b + 0x100 * c + d); return 1; } +static int readinteger4_le(lua_State *L) { + FILE *f = tofile(L); + int d = getc(f); + int c = getc(f); + int b = getc(f); + int a = getc(f); + if (a == EOF) + lua_pushnil(L); + else if (a >= 0x80) + lua_pushinteger(L, 0x1000000 * a + 0x10000 * b + 0x100 * c + d - 0x100000000); + else + lua_pushinteger(L, 0x1000000 * a + 0x10000 * b + 0x100 * c + d); + return 1; +} static int readinteger4_s(lua_State *L) { size_t l; @@ -474,6 +624,24 @@ static int readinteger4_s(lua_State *L) { } return 1; } +static int readinteger4_s_le(lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + size_t p = luaL_checkinteger(L, 2) - 1; + if (p+3 >= l) { + lua_pushnil(L); + } else { + int d = uchar(s[p++]); + int c = uchar(s[p++]); + int b = uchar(s[p++]); + int a = uchar(s[p]); + if (a >= 0x80) + lua_pushinteger(L, 0x1000000 * a + 0x10000 * b + 0x100 * c + d - 0x100000000); + else + lua_pushinteger(L, 0x1000000 * a + 0x10000 * b + 0x100 * c + d); + } + return 1; +} static int readintegertable(lua_State *L) { FILE *f = tofile(L); @@ -869,11 +1037,19 @@ static const luaL_Reg fiolib[] = { { "readcardinal2", readcardinal2 }, { "readcardinal3", readcardinal3 }, { "readcardinal4", readcardinal4 }, + { "readcardinal1le", readcardinal1 }, + { "readcardinal2le", readcardinal2_le }, + { "readcardinal3le", readcardinal3_le }, + { "readcardinal4le", readcardinal4_le }, { "readcardinaltable", readcardinaltable }, { "readinteger1", readinteger1 }, { "readinteger2", readinteger2 }, { "readinteger3", readinteger3 }, { "readinteger4", readinteger4 }, + { "readinteger1le", readinteger1 }, + { "readinteger2le", readinteger2_le }, + { "readinteger3le", readinteger3_le }, + { "readinteger4le", readinteger4_le }, { "readintegertable", readintegertable }, { "readfixed2", readfixed2 }, { "readfixed4", readfixed4 }, @@ -893,11 +1069,19 @@ static const luaL_Reg siolib[] = { { "readcardinal2", readcardinal2_s }, { "readcardinal3", readcardinal3_s }, { "readcardinal4", readcardinal4_s }, + { "readcardinal1le", readcardinal1_s }, + { "readcardinal2le", readcardinal2_s_le }, + { "readcardinal3le", readcardinal3_s_le }, + { "readcardinal4le", readcardinal4_s_le }, { "readcardinaltable", readcardinaltable_s }, { "readinteger1", readinteger1_s }, { "readinteger2", readinteger2_s }, { "readinteger3", readinteger3_s }, { "readinteger4", readinteger4_s }, + { "readinteger1le", readinteger1_s }, + { "readinteger2le", readinteger2_s_le }, + { "readinteger3le", readinteger3_s_le }, + { "readinteger4le", readinteger4_s_le }, { "readintegertable", readintegertable_s }, { "readfixed2", readfixed2_s }, { "readfixed4", readfixed4_s }, |