void shgeo_set(shgeo_t *geo, shnum_t lat, shnum_t lon, int alt) { alt = MIN(alt, 1584000000); geo->geo_stamp = shtime(); shnum_set((shnum_t)lat, &geo->geo_lat); shnum_set((shnum_t)lon, &geo->geo_lon); geo->geo_alt = (uint32_t)alt; }
void shgeo_dim(shgeo_t *geo, int prec) { shnum_t lat; shnum_t lon; if (!geo) return; if (prec < SHGEO_MAX_PRECISION) { lat = shnum_get(geo->geo_lat); lon = shnum_get(geo->geo_lon); lat = shnum_prec_dim(lat, prec); lon = shnum_prec_dim(lon, prec); shnum_set((shnum_t)lat, &geo->geo_lat); shnum_set((shnum_t)lon, &geo->geo_lon); } }
static int _lfunc_sexe_utime(lua_State *L) { double f = luaL_checknumber(L, 1); shtime_t t = SHTIME_UNDEFINED; shnum_set(f, &t); lua_pushnumber(L, (lua_Number)shutime(t)); return 1; /* 'utime' */ }
static int _lfunc_sexe_ctime(lua_State *L) { double f = luaL_checknumber(L, 1); shtime_t t = SHTIME_UNDEFINED; shnum_set(f, &t); lua_pushstring(L, shctime(t)); return 1; /* 'ctime' */ }
static int _lfunc_sexe_strftime(lua_State *L) { double f = luaL_checknumber(L, 1); const char *fmt = luaL_checkstring(L, 2); shtime_t t = SHTIME_UNDEFINED; shnum_set(f, &t); lua_pushstring(L, (char *)shstrtime(t, fmt)); return 1; /* 'timeu' */ }