aboutsummaryrefslogtreecommitdiff
path: root/src/script/common/c_converter.cpp
Commit message (Collapse)AuthorAge
* Added lua tracebacks to some errors where you have been blind to what… (#5043)sapier2017-01-15
| | | | * Added lua tracebacks to some errors where you have been blind to what actually went wrong
* Revert "Adding particle blend, glow and animation (#4705)"sfan52016-11-14
| | | | This reverts commit 93e3555eae2deaeca69ee252cfa9cc9c3e0e49ef.
* Adding particle blend, glow and animation (#4705)Foghrye42016-11-15
|
* Adding LuaError on attempt to assign vectors with values out of rangeFoghrye42016-10-25
|
* Lua->C getintfield() use lua_tointeger (#4408)Tomas2016-08-10
| | | | | previously function used tonumber which returned float this caused errors in large numbers and resulted in obj-def-handlers being invalid when retrived from lua tables in c
* Add Lua interface to HTTPFetchRequestJeija2016-02-22
| | | | | | | | | | This allows mods to perform both asynchronous and synchronous HTTP requests. Mods are only granted access to HTTP APIs if either mod security is disabled or if they are whitelisted in any of the the secure.http_mods and secure.trusted_mods settings. Adds httpfetch_caller_alloc_secure to generate random, non-predictable caller IDs so that lua mods cannot spy on each others HTTP queries.
* Add some missing getter functions to the lua APITeTpaAka2015-05-28
| | | | | | | | | | | | | | | | | | | | | | | ObjectRef: get_properties get_armor_groups get_animation get_attach get_bone_position Players: get_physics_override hud_get_hotbar_itemcount hud_get_hotbar_image hud_get_hotbar_selected_image get_sky get_day_night_ratio get_local_animation get_eye_offset Global: minetest.get_gen_notify minetest.get_noiseparams
* SAPI/Noise: Add PerlinNoiseMap:getMapSlice() functionkwolekr2015-05-17
| | | | | | This adds the ability to grab 'slices' of noise calculated by PerlinNoiseMap. Retrieving smaller slices of noise from the computation result as needed optimizes memory usage while maintaining a reasonable amount of CPU overhead.
* SAPI: Accept either ARGB8 table or ColorString to specify colorskwolekr2015-05-16
|
* Add push_ARGB8 to script/common/c_converterTeTpaAka2015-05-15
|
* Schematics: Add per-node force placement optionkwolekr2015-05-09
|
* Fix missing Y component assignment in check_v3fkwolekr2015-05-08
|
* Remove duplicate lua_getfield() in c_converter.cppKevin Ott2015-05-07
| | | | Fixes #2678
* Fix error messages for type-checking Lua reading functionsShadowNinja2015-05-06
|
* Add 'persistence' alias for Lua noiseparams and validate more vector parameterskwolekr2015-04-19
|
* Schematics: Refactor NodeResolver and add NodeResolveMethodkwolekr2015-04-16
| | | | | | | | | NodeResolver name lists now belong to the NodeResolver object instead of the associated NodeDefManager. In addition to minimizing unnecessary abstraction and overhead, this move permits NodeResolvers to look up nodes that they had previously set pending for resolution. So far, this functionality has been used in the case of schematics for serialization/deserialization.
* Redefine NodeResolver interface and replace with callback mechanismkwolekr2014-12-27
|
* Add NodeResolver and clean up node name -> content ID resolution systemkwolekr2014-10-26
|
* Use integers instead of float valuesBlockMen2014-04-12
|
* Fix possible 0 pointer accesssapier2013-07-02
|
* Move scriptapi to separate folder (by sapier)sapier2013-05-25
On the lua side, notably minetest.env:<function>(<args>) should now be replaced by minetest.<function>(<args>). The old way is and will stay supported for a long time. Also: Update and clean up lua_api.txt (by celeron55) Move EnvRef to lua and remove add_rat and add_firefly (by kahrl) Add separate src/util/CMakeLists.txt, other minor fixes (by kahrl)
ur option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* Random portability stuff */ #ifndef PORTING_HEADER #define PORTING_HEADER #ifdef _WIN32 #ifdef _WIN32_WINNT #undef _WIN32_WINNT #endif #define _WIN32_WINNT 0x0501 // We need to do this before any other headers // because those might include sdkddkver.h which defines _WIN32_WINNT if not already set #endif #include <string> #include <vector> #include "irrlicht.h" #include "irrlichttypes.h" // u32 #include "irrlichttypes_extrabloated.h" #include "debug.h" #include "constants.h" #include "gettime.h" #include "threads.h" #ifdef _MSC_VER #define SWPRINTF_CHARSTRING L"%S" #else #define SWPRINTF_CHARSTRING L"%s" #endif //currently not needed //template<typename T> struct alignment_trick { char c; T member; }; //#define ALIGNOF(type) offsetof (alignment_trick<type>, member) #ifdef _WIN32 #include <windows.h> #define sleep_ms(x) Sleep(x) #else #include <unistd.h> #include <stdint.h> //for uintptr_t #if (defined(linux) || defined(__linux) || defined(__GNU__)) && !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif #include <sched.h> #ifdef __FreeBSD__ #include <pthread_np.h> typedef cpuset_t cpu_set_t; #elif defined(__sun) || defined(sun) #include <sys/types.h> #include <sys/processor.h> #elif defined(_AIX) #include <sys/processor.h> #elif __APPLE__ #include <mach/mach_init.h> #include <mach/thread_policy.h> #endif #define sleep_ms(x) usleep(x*1000) #define THREAD_PRIORITY_LOWEST 0 #define THREAD_PRIORITY_BELOW_NORMAL 1 #define THREAD_PRIORITY_NORMAL 2 #define THREAD_PRIORITY_ABOVE_NORMAL 3 #define THREAD_PRIORITY_HIGHEST 4 #endif #ifdef _MSC_VER #define ALIGNOF(x) __alignof(x) #define strtok_r(x, y, z) strtok_s(x, y, z) #define strtof(x, y) (float)strtod(x, y) #define strtoll(x, y, z) _strtoi64(x, y, z) #define strtoull(x, y, z) _strtoui64(x, y, z) #define strcasecmp(x, y) stricmp(x, y) #define strncasecmp(x, y, n) strnicmp(x, y, n) #else #define ALIGNOF(x) __alignof__(x) #endif #ifdef __MINGW32__ #define strtok_r(x, y, z) mystrtok_r(x, y, z) #endif // strlcpy is missing from glibc. thanks a lot, drepper. // strlcpy is also missing from AIX and HP-UX because they aim to be weird. // We can't simply alias strlcpy to MSVC's strcpy_s, since strcpy_s by // default raises an assertion error and aborts the program if the buffer is // too small. #if defined(__FreeBSD__) || defined(__NetBSD__) || \ defined(__OpenBSD__) || defined(__DragonFly__) || \ defined(__APPLE__) || \ defined(__sun) || defined(sun) || \ defined(__QNX__) || defined(__QNXNTO__) #define HAVE_STRLCPY #endif // So we need to define our own. #ifndef HAVE_STRLCPY #define strlcpy(d, s, n) mystrlcpy(d, s, n) #endif #define PADDING(x, y) ((ALIGNOF(y) - ((uintptr_t)(x) & (ALIGNOF(y) - 1))) & (ALIGNOF(y) - 1)) #if defined(__APPLE__) #include <mach-o/dyld.h> #include <CoreFoundation/CoreFoundation.h> #endif namespace porting { /* Signal handler (grabs Ctrl-C on POSIX systems) */ void signal_handler_init(void); // Returns a pointer to a bool. // When the bool is true, program should quit. bool * signal_handler_killstatus(void); /* Path of static data directory. */ extern std::string path_share; /* Directory for storing user data. Examples: Windows: "C:\Documents and Settings\user\Application Data\<PROJECT_NAME>" Linux: "~/.<PROJECT_NAME>" Mac: "~/Library/Application Support/<PROJECT_NAME>" */ extern std::string path_user; /* Get full path of stuff in data directory. Example: "stone.png" -> "../data/stone.png" */ std::string getDataPath(const char *subpath); /* Initialize path_share and path_user. */ void initializePaths(); /* Get number of online processors in the system. */ int getNumberOfProcessors(); /* Set a thread's affinity to a particular processor. */ bool threadBindToProcessor(threadid_t tid, int pnumber); /* Set a thread's priority. */ bool threadSetPriority(threadid_t tid, int prio); /* Return system information e.g. "Linux/3.12.7 x86_64" */ std::string get_sysinfo(); void initIrrlicht(irr::IrrlichtDevice * ); /* Resolution is 10-20ms. Remember to check for overflows. Overflow can occur at any value higher than 10000000. */ #ifdef _WIN32 // Windows #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #include <windows.h> inline u32 getTimeS() { return GetTickCount() / 1000; } inline u32 getTimeMs() { return GetTickCount(); } inline u32 getTimeUs() { LARGE_INTEGER freq, t; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&t); return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000.0); } inline u32 getTimeNs() { LARGE_INTEGER freq, t; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&t); return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000000.0); } #else // Posix #include <sys/time.h> #include <time.h> #if defined(__MACH__) && defined(__APPLE__) #include <mach/clock.h> #include <mach/mach.h> #endif inline u32 getTimeS() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec; } inline u32 getTimeMs() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000 + tv.tv_usec / 1000; } inline u32 getTimeUs() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000000 + tv.tv_usec; } inline u32 getTimeNs() { struct timespec ts; // from http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x #if defined(__MACH__) && defined(__APPLE__) // OS X does not have clock_gettime, use clock_get_time clock_serv_t cclock; mach_timespec_t mts; host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); clock_get_time(cclock, &mts); mach_port_deallocate(mach_task_self(), cclock); ts.tv_sec = mts.tv_sec; ts.tv_nsec = mts.tv_nsec; #else clock_gettime(CLOCK_REALTIME, &ts); #endif return ts.tv_sec * 1000000000 + ts.tv_nsec; } /*#include <sys/timeb.h> inline u32 getTimeMs() { struct timeb tb; ftime(&tb); return tb.time * 1000 + tb.millitm; }*/ #endif inline u32 getTime(TimePrecision prec) { switch (prec) { case PRECISION_SECONDS: return getTimeS(); case PRECISION_MILLI: return getTimeMs(); case PRECISION_MICRO: return getTimeUs(); case PRECISION_NANO: return getTimeNs(); } return 0; } /** * Delta calculation function taking two 32bit arguments. * @param old_time_ms old time for delta calculation (order is relevant!) * @param new_time_ms new time for delta calculation (order is relevant!) * @return positive 32bit delta value */ inline u32 getDeltaMs(u32 old_time_ms, u32 new_time_ms) { if (new_time_ms >= old_time_ms) { return (new_time_ms - old_time_ms); } else { return (old_time_ms - new_time_ms); } } #if defined(linux) || defined(__linux) #include <sys/prctl.h> inline void setThreadName(const char *name) { /* It would be cleaner to do this with pthread_setname_np, * which was added to glibc in version 2.12, but some major * distributions are still runing 2.11 and previous versions. */ prctl(PR_SET_NAME, name); } #elif defined(__FreeBSD__) || defined(__OpenBSD__) #include <pthread.h> #include <pthread_np.h> inline void setThreadName(const char *name) { pthread_set_name_np(pthread_self(), name); } #elif defined(__NetBSD__) #include <pthread.h> inline void setThreadName(const char *name) { pthread_setname_np(pthread_self(), name); } #elif defined(_MSC_VER) typedef struct tagTHREADNAME_INFO { DWORD dwType; // must be 0x1000 LPCSTR szName; // pointer to name (in user addr space) DWORD dwThreadID; // thread ID (-1=caller thread) DWORD dwFlags; // reserved for future use, must be zero } THREADNAME_INFO; inline void setThreadName(const char *name) { THREADNAME_INFO info; info.dwType = 0x1000; info.szName = name; info.dwThreadID = -1; info.dwFlags = 0; __try { RaiseException(0x406D1388, 0, sizeof(info) / sizeof(DWORD), (ULONG_PTR *) &info); } __except (EXCEPTION_CONTINUE_EXECUTION) {} } #elif defined(__APPLE__) #include <pthread.h> inline void setThreadName(const char *name) { pthread_setname_np(name); } #elif defined(_WIN32) || defined(__GNU__) inline void setThreadName(const char* name) {} #else #warning "Unrecognized platform, thread names will not be available." inline void setThreadName(const char* name) {} #endif #ifndef SERVER float getDisplayDensity(); v2u32 getDisplaySize(); v2u32 getWindowSize(); std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers(); const char *getVideoDriverName(irr::video::E_DRIVER_TYPE type); const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type); #endif inline const char * getPlatformName() { return #if defined(ANDROID) "Android" #elif defined(linux) || defined(__linux) || defined(__linux__) "Linux" #elif defined(_WIN32) || defined(_WIN64) "Windows" #elif defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__) "BSD" #elif defined(__APPLE__) && defined(__MACH__) #if TARGET_OS_MAC "OSX" #elif TARGET_OS_IPHONE "iOS" #else "Apple" #endif #elif defined(_AIX) "AIX" #elif defined(__hpux) "HP-UX" #elif defined(__sun) && defined(__SVR4) "Solaris" #elif defined(__CYGWIN__) "Cygwin" #elif defined(__unix__) || defined(__unix) #if defined(_POSIX_VERSION) "Posix" #else "Unix" #endif #else "?" #endif ; } void setXorgClassHint(const video::SExposedVideoData &video_data, const std::string &name); // This only needs to be called at the start of execution, since all future // threads in the process inherit this exception handler void setWin32ExceptionHandler(); } // namespace porting #ifdef __ANDROID__ #include "porting_android.h" #endif #endif // PORTING_HEADER