diff --git a/Backup_SQLite.txt b/Backup_SQLite.txt index e1a9ab5..6d63dd9 100644 --- a/Backup_SQLite.txt +++ b/Backup_SQLite.txt @@ -1,60 +1,60 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -DLL_METHOD int sqlite3_bind_int64_ex(void* stmtPtr, uint32_t index, uint32_t low, uint32_t high) { - return sqlite3_bind_int64((sqlite3_stmt*)stmtPtr, index, (((uint64_t)low << 32) + (uint64_t)high)); -} -#pragma comment(linker, "/EXPORT:sqlite3_bind_int64_ex=_sqlite3_bind_int64_ex@16") - -DLL_METHOD int sqlite3_bind_float(void* stmtPtr, uint32_t index, float value) { - return sqlite3_bind_double((sqlite3_stmt*)stmtPtr, index, (double)value); -} -#pragma comment(linker, "/EXPORT:sqlite3_bind_float=_sqlite3_bind_float@12") - -DLL_METHOD void sqlite3_column_int64_ex(void* stmtPtr, uint32_t index, void* outPtr) { - sqlite3_int64 out = sqlite3_column_int64((sqlite3_stmt*)stmtPtr, index); - uint32_t* ourPtr = (uint32_t*)outPtr; - (*ourPtr) = (uint32_t)(out & 0xFFFFFFFF); - (*(ourPtr + 1)) = (uint32_t)(out >> 32); -} -#pragma comment(linker, "/EXPORT:sqlite3_column_int64_ex=_sqlite3_column_int64_ex@12") - -DLL_METHOD float sqlite3_column_float(void* stmtPtr, uint32_t index) { - double out = sqlite3_column_double((sqlite3_stmt*)stmtPtr, index); - return (float)out; -} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DLL_METHOD int sqlite3_bind_int64_ex(void* stmtPtr, uint32_t index, uint32_t low, uint32_t high) { + return sqlite3_bind_int64((sqlite3_stmt*)stmtPtr, index, (((uint64_t)low << 32) + (uint64_t)high)); +} +#pragma comment(linker, "/EXPORT:sqlite3_bind_int64_ex=_sqlite3_bind_int64_ex@16") + +DLL_METHOD int sqlite3_bind_float(void* stmtPtr, uint32_t index, float value) { + return sqlite3_bind_double((sqlite3_stmt*)stmtPtr, index, (double)value); +} +#pragma comment(linker, "/EXPORT:sqlite3_bind_float=_sqlite3_bind_float@12") + +DLL_METHOD void sqlite3_column_int64_ex(void* stmtPtr, uint32_t index, void* outPtr) { + sqlite3_int64 out = sqlite3_column_int64((sqlite3_stmt*)stmtPtr, index); + uint32_t* ourPtr = (uint32_t*)outPtr; + (*ourPtr) = (uint32_t)(out & 0xFFFFFFFF); + (*(ourPtr + 1)) = (uint32_t)(out >> 32); +} +#pragma comment(linker, "/EXPORT:sqlite3_column_int64_ex=_sqlite3_column_int64_ex@12") + +DLL_METHOD float sqlite3_column_float(void* stmtPtr, uint32_t index) { + double out = sqlite3_column_double((sqlite3_stmt*)stmtPtr, index); + return (float)out; +} #pragma comment(linker, "/EXPORT:sqlite3_column_float=_sqlite3_column_float@8") \ No newline at end of file diff --git a/Backup_Vector.txt b/Backup_Vector.txt index d9e3a46..37be885 100644 --- a/Backup_Vector.txt +++ b/Backup_Vector.txt @@ -1,338 +1,338 @@ - -struct Vector2 { - union { - float X; - char Xc[4]; - }; - union { - float Y; - char Yc[4]; - }; - - void set(const float &o); - void set(const float &x, const float &y); - void set(const Vector2 &o); - - void add(const float &o); - void add(const float &x, const float &y); - void add(const Vector2 &o); - - void sub(const float &o); - void sub(const float &x, const float &y); - void sub(const Vector2 &o); - - void mul(const float &o); - void mul(const float &x, const float &y); - void mul(const Vector2 &o); - - void div(const float &o); - void div(const float &x, const float &y); - void div(const Vector2 &o); - - float length(); - float distance(const float &x, const float &y); - float distance(const Vector2 &o); - - float dot(const float &x, const float &y); - float dot(const Vector2 &o); - void normalize(); - - void rotate(const float rotation); - void rotateAround(const float &x, const float &y, const float &rotation); - void rotateAround(const Vector2 &o, const float &rotation); - float deltaRotation(); - float deltaRotation(const float &x, const float &y); - float deltaRotation(const Vector2 &o); - - char* serialize(); - void deserialize(char* o); -}; - - -void Vector2::set(const float &o) -{ - this->X = o; - this->Y = o; -} -void Vector2::set(const float &x, const float &y) -{ - this->X = x; - this->Y = y; -} -void Vector2::set(const Vector2 &o) -{ - if (this != &o) { - this->X = o.X; - this->Y = o.Y; - } -} - -void Vector2::add(const float &o) -{ - this->X += o; - this->Y += o; -} -void Vector2::add(const float &x, const float &y) -{ - this->X += x; - this->Y += y; -} -void Vector2::add(const Vector2 &o) -{ - this->X += o.X; - this->Y += o.Y; -} - -void Vector2::sub(const float &o) -{ - this->X -= o; - this->Y -= o; -} -void Vector2::sub(const float &x, const float &y) -{ - this->X -= x; - this->Y -= y; -} -void Vector2::sub(const Vector2 &o) -{ - this->X -= o.X; - this->Y -= o.Y; -} - -void Vector2::mul(const float &o) -{ - this->X *= o; - this->Y *= o; -} -void Vector2::mul(const float &x, const float &y) -{ - this->X *= x; - this->Y *= y; -} -void Vector2::mul(const Vector2 &o) -{ - this->X *= o.X; - this->Y *= o.Y; -} - -void Vector2::div(const float &o) -{ - this->X /= o; - this->Y /= o; -} -void Vector2::div(const float &x, const float &y) -{ - this->X /= x; - this->Y /= y; -} -void Vector2::div(const Vector2 &o) -{ - this->X /= o.X; - this->Y /= o.Y; -} - -float Vector2::length() -{ - return (float)sqrt((this->X * this->X) + (this->Y * this->Y)); -} -float Vector2::distance(const float &x, const float &y) -{ - float X = this->X - x; - float Y = this->Y - y; - return (float)sqrt((X * X) + (Y * Y)); -} -float Vector2::distance(const Vector2 &o) -{ - float X = this->X - o.X; - float Y = this->Y - o.Y; - return (float)sqrt((X * X) + (Y * Y)); -} - -float Vector2::dot(const float &x, const float &y) -{ - return (this->X * x) + (this->Y * y); -} -float Vector2::dot(const Vector2 &o) -{ - return (this->X * o.X) + (this->Y * o.Y); -} -void Vector2::normalize() -{ - this->div(this->length()); -} - -void Vector2::rotate(const float rotation) -{ - float mX = cos(rotation); - float mY = sin(rotation); - - float X = this->X * mX + this->Y * mY; this->X = X; - float Y = this->X * mY + this->X * mX; this->Y = Y; -} -void Vector2::rotateAround(const float &x, const float &y, const float &rotation) -{ - this->sub(x, y); - this->rotate(rotation); - this->add(x, y); -} -void Vector2::rotateAround(const Vector2 &o, const float &rotation) -{ - this->sub(o); - this->rotate(rotation); - this->add(o); -} - -float Vector2::deltaRotation() { - return (float)(atan2(this->Y, this->X) * (180.0 / M_PI)); -} -float Vector2::deltaRotation(const float &x, const float &y) -{ - return (float)(atan2(this->Y - y, this->X - x) * (180.0 / M_PI)); -} -float Vector2::deltaRotation(const Vector2 &o) -{ - return (float)(atan2(this->Y - o.Y, this->X - o.X) * (180.0 / M_PI)); -} - -char* Vector2::serialize() -{ - char* data = new char[9]; - - memcpy(data, this->Xc, 4); - memcpy(data + 4, this->Yc, 4); - data[8] = 0; - - return data; -} -void Vector2::deserialize(char* o) -{ - memcpy(o, this->Xc, 4); - memcpy(o + 4, this->Yc, 4); -} - -/* ------------------------- Exported Functionality ------------------------- */ -DLL_METHOD void Vector2_Set(Vector2* a, float o) { - a->set(o); -} -DLL_METHOD void Vector2_SetP(Vector2* a, float x, float y) { - a->set(x, y); -} -DLL_METHOD void Vector2_SetV(Vector2* a, Vector2* b) { - a->set(*b); -} -#pragma comment(linker, "/EXPORT:Vector2_Set=_Vector2_Set@8") -#pragma comment(linker, "/EXPORT:Vector2_SetP=_Vector2_SetP@12") -#pragma comment(linker, "/EXPORT:Vector2_SetV=_Vector2_SetV@8") - -DLL_METHOD void Vector2_Add(Vector2* a, float o) { - a->add(o); -} -DLL_METHOD void Vector2_AddP(Vector2* a, float x, float y) { - a->add(x, y); -} -DLL_METHOD void Vector2_AddV(Vector2* a, Vector2* b) { - a->add(*b); -} -#pragma comment(linker, "/EXPORT:Vector2_Add=_Vector2_Add@8") -#pragma comment(linker, "/EXPORT:Vector2_AddP=_Vector2_AddP@12") -#pragma comment(linker, "/EXPORT:Vector2_AddV=_Vector2_AddV@8") - -DLL_METHOD void Vector2_Sub(Vector2* a, float o) { - a->sub(o); -} -DLL_METHOD void Vector2_SubP(Vector2* a, float x, float y) { - a->sub(x, y); -} -DLL_METHOD void Vector2_SubV(Vector2* a, Vector2* b) { - a->sub(*b); -} -#pragma comment(linker, "/EXPORT:Vector2_Sub=_Vector2_Sub@8") -#pragma comment(linker, "/EXPORT:Vector2_SubP=_Vector2_SubP@12") -#pragma comment(linker, "/EXPORT:Vector2_SubV=_Vector2_SubV@8") - -DLL_METHOD void Vector2_Mul(Vector2* a, float o) { - a->mul(o); -} -DLL_METHOD void Vector2_MulP(Vector2* a, float x, float y) { - a->mul(x, y); -} -DLL_METHOD void Vector2_MulV(Vector2* a, Vector2* b) { - a->mul(*b); -} -#pragma comment(linker, "/EXPORT:Vector2_Mul=_Vector2_Mul@8") -#pragma comment(linker, "/EXPORT:Vector2_MulP=_Vector2_MulP@12") -#pragma comment(linker, "/EXPORT:Vector2_MulV=_Vector2_MulV@8") - -DLL_METHOD void Vector2_Div(Vector2* a, float o) { - a->div(o); -} -DLL_METHOD void Vector2_DivP(Vector2* a, float x, float y) { - a->div(x, y); -} -DLL_METHOD void Vector2_DivV(Vector2* a, Vector2* b) { - a->div(*b); -} -#pragma comment(linker, "/EXPORT:Vector2_Div=_Vector2_Div@8") -#pragma comment(linker, "/EXPORT:Vector2_DivP=_Vector2_DivP@12") -#pragma comment(linker, "/EXPORT:Vector2_DivV=_Vector2_DivV@8") - -DLL_METHOD float Vector2_Length(Vector2* a) { - return (float)a->length(); -} -DLL_METHOD float Vector2_DistanceP(Vector2* a, float x, float y) { - return (float)a->distance(x, y); -} -DLL_METHOD float Vector2_DistanceV(Vector2* a, Vector2* b) { - return (float)a->distance(*b); -} -#pragma comment(linker, "/EXPORT:Vector2_Length=_Vector2_Length@4") -#pragma comment(linker, "/EXPORT:Vector2_DistanceP=_Vector2_DistanceP@12") -#pragma comment(linker, "/EXPORT:Vector2_DistanceV=_Vector2_DistanceV@8") - -DLL_METHOD float Vector2_DotP(Vector2* a, float x, float y) { - return (float)a->dot(x, y); -} -DLL_METHOD float Vector2_DotV(Vector2* a, Vector2* b) { - return (float)a->dot(*b); -} -DLL_METHOD void Vector2_Normalize(Vector2* a) { - a->normalize(); -} -#pragma comment(linker, "/EXPORT:Vector2_DotP=_Vector2_DotP@12") -#pragma comment(linker, "/EXPORT:Vector2_DotV=_Vector2_DotV@8") -#pragma comment(linker, "/EXPORT:Vector2_Normalize=_Vector2_Normalize@4") - -DLL_METHOD void Vector2_Rotate(Vector2* a, float rotation) { - a->rotate(rotation); -} -DLL_METHOD void Vector2_RotateAroundP(Vector2* a, float x, float y, float rotation) { - a->rotateAround(x, y, rotation); -} -DLL_METHOD void Vector2_RotateAroundV(Vector2* a, Vector2* b, float rotation) { - a->rotateAround(*b, rotation); -} -#pragma comment(linker, "/EXPORT:Vector2_Rotate=_Vector2_Rotate@8") -#pragma comment(linker, "/EXPORT:Vector2_RotateAroundP=_Vector2_RotateAroundP@16") -#pragma comment(linker, "/EXPORT:Vector2_RotateAroundV=_Vector2_RotateAroundV@12") - -DLL_METHOD float Vector2_DeltaRotation(Vector2* a) { - return (float)a->deltaRotation(); -} -DLL_METHOD float Vector2_DeltaRotationP(Vector2* a, float x, float y) { - return (float)a->deltaRotation(x, y); -} -DLL_METHOD float Vector2_DeltaRotationV(Vector2* a, Vector2* b) { - return (float)a->deltaRotation(*b); -} -#pragma comment(linker, "/EXPORT:Vector2_DeltaRotation=_Vector2_DeltaRotation@4") -#pragma comment(linker, "/EXPORT:Vector2_DeltaRotationP=_Vector2_DeltaRotationP@12") -#pragma comment(linker, "/EXPORT:Vector2_DeltaRotationV=_Vector2_DeltaRotationV@8") - -DLL_METHOD char* Vector2_Serialize(Vector2* a) { - return a->serialize(); -} -DLL_METHOD void Vector2_Deserialize(Vector2* a, char* o) { - a->deserialize(o); -} -#pragma comment(linker, "/EXPORT:Vector2_Serialize=_Vector2_Serialize@4") -#pragma comment(linker, "/EXPORT:Vector2_Deserialize=_Vector2_Deserialize@8") + +struct Vector2 { + union { + float X; + char Xc[4]; + }; + union { + float Y; + char Yc[4]; + }; + + void set(const float &o); + void set(const float &x, const float &y); + void set(const Vector2 &o); + + void add(const float &o); + void add(const float &x, const float &y); + void add(const Vector2 &o); + + void sub(const float &o); + void sub(const float &x, const float &y); + void sub(const Vector2 &o); + + void mul(const float &o); + void mul(const float &x, const float &y); + void mul(const Vector2 &o); + + void div(const float &o); + void div(const float &x, const float &y); + void div(const Vector2 &o); + + float length(); + float distance(const float &x, const float &y); + float distance(const Vector2 &o); + + float dot(const float &x, const float &y); + float dot(const Vector2 &o); + void normalize(); + + void rotate(const float rotation); + void rotateAround(const float &x, const float &y, const float &rotation); + void rotateAround(const Vector2 &o, const float &rotation); + float deltaRotation(); + float deltaRotation(const float &x, const float &y); + float deltaRotation(const Vector2 &o); + + char* serialize(); + void deserialize(char* o); +}; + + +void Vector2::set(const float &o) +{ + this->X = o; + this->Y = o; +} +void Vector2::set(const float &x, const float &y) +{ + this->X = x; + this->Y = y; +} +void Vector2::set(const Vector2 &o) +{ + if (this != &o) { + this->X = o.X; + this->Y = o.Y; + } +} + +void Vector2::add(const float &o) +{ + this->X += o; + this->Y += o; +} +void Vector2::add(const float &x, const float &y) +{ + this->X += x; + this->Y += y; +} +void Vector2::add(const Vector2 &o) +{ + this->X += o.X; + this->Y += o.Y; +} + +void Vector2::sub(const float &o) +{ + this->X -= o; + this->Y -= o; +} +void Vector2::sub(const float &x, const float &y) +{ + this->X -= x; + this->Y -= y; +} +void Vector2::sub(const Vector2 &o) +{ + this->X -= o.X; + this->Y -= o.Y; +} + +void Vector2::mul(const float &o) +{ + this->X *= o; + this->Y *= o; +} +void Vector2::mul(const float &x, const float &y) +{ + this->X *= x; + this->Y *= y; +} +void Vector2::mul(const Vector2 &o) +{ + this->X *= o.X; + this->Y *= o.Y; +} + +void Vector2::div(const float &o) +{ + this->X /= o; + this->Y /= o; +} +void Vector2::div(const float &x, const float &y) +{ + this->X /= x; + this->Y /= y; +} +void Vector2::div(const Vector2 &o) +{ + this->X /= o.X; + this->Y /= o.Y; +} + +float Vector2::length() +{ + return (float)sqrt((this->X * this->X) + (this->Y * this->Y)); +} +float Vector2::distance(const float &x, const float &y) +{ + float X = this->X - x; + float Y = this->Y - y; + return (float)sqrt((X * X) + (Y * Y)); +} +float Vector2::distance(const Vector2 &o) +{ + float X = this->X - o.X; + float Y = this->Y - o.Y; + return (float)sqrt((X * X) + (Y * Y)); +} + +float Vector2::dot(const float &x, const float &y) +{ + return (this->X * x) + (this->Y * y); +} +float Vector2::dot(const Vector2 &o) +{ + return (this->X * o.X) + (this->Y * o.Y); +} +void Vector2::normalize() +{ + this->div(this->length()); +} + +void Vector2::rotate(const float rotation) +{ + float mX = cos(rotation); + float mY = sin(rotation); + + float X = this->X * mX + this->Y * mY; this->X = X; + float Y = this->X * mY + this->X * mX; this->Y = Y; +} +void Vector2::rotateAround(const float &x, const float &y, const float &rotation) +{ + this->sub(x, y); + this->rotate(rotation); + this->add(x, y); +} +void Vector2::rotateAround(const Vector2 &o, const float &rotation) +{ + this->sub(o); + this->rotate(rotation); + this->add(o); +} + +float Vector2::deltaRotation() { + return (float)(atan2(this->Y, this->X) * (180.0 / M_PI)); +} +float Vector2::deltaRotation(const float &x, const float &y) +{ + return (float)(atan2(this->Y - y, this->X - x) * (180.0 / M_PI)); +} +float Vector2::deltaRotation(const Vector2 &o) +{ + return (float)(atan2(this->Y - o.Y, this->X - o.X) * (180.0 / M_PI)); +} + +char* Vector2::serialize() +{ + char* data = new char[9]; + + memcpy(data, this->Xc, 4); + memcpy(data + 4, this->Yc, 4); + data[8] = 0; + + return data; +} +void Vector2::deserialize(char* o) +{ + memcpy(o, this->Xc, 4); + memcpy(o + 4, this->Yc, 4); +} + +/* ------------------------- Exported Functionality ------------------------- */ +DLL_METHOD void Vector2_Set(Vector2* a, float o) { + a->set(o); +} +DLL_METHOD void Vector2_SetP(Vector2* a, float x, float y) { + a->set(x, y); +} +DLL_METHOD void Vector2_SetV(Vector2* a, Vector2* b) { + a->set(*b); +} +#pragma comment(linker, "/EXPORT:Vector2_Set=_Vector2_Set@8") +#pragma comment(linker, "/EXPORT:Vector2_SetP=_Vector2_SetP@12") +#pragma comment(linker, "/EXPORT:Vector2_SetV=_Vector2_SetV@8") + +DLL_METHOD void Vector2_Add(Vector2* a, float o) { + a->add(o); +} +DLL_METHOD void Vector2_AddP(Vector2* a, float x, float y) { + a->add(x, y); +} +DLL_METHOD void Vector2_AddV(Vector2* a, Vector2* b) { + a->add(*b); +} +#pragma comment(linker, "/EXPORT:Vector2_Add=_Vector2_Add@8") +#pragma comment(linker, "/EXPORT:Vector2_AddP=_Vector2_AddP@12") +#pragma comment(linker, "/EXPORT:Vector2_AddV=_Vector2_AddV@8") + +DLL_METHOD void Vector2_Sub(Vector2* a, float o) { + a->sub(o); +} +DLL_METHOD void Vector2_SubP(Vector2* a, float x, float y) { + a->sub(x, y); +} +DLL_METHOD void Vector2_SubV(Vector2* a, Vector2* b) { + a->sub(*b); +} +#pragma comment(linker, "/EXPORT:Vector2_Sub=_Vector2_Sub@8") +#pragma comment(linker, "/EXPORT:Vector2_SubP=_Vector2_SubP@12") +#pragma comment(linker, "/EXPORT:Vector2_SubV=_Vector2_SubV@8") + +DLL_METHOD void Vector2_Mul(Vector2* a, float o) { + a->mul(o); +} +DLL_METHOD void Vector2_MulP(Vector2* a, float x, float y) { + a->mul(x, y); +} +DLL_METHOD void Vector2_MulV(Vector2* a, Vector2* b) { + a->mul(*b); +} +#pragma comment(linker, "/EXPORT:Vector2_Mul=_Vector2_Mul@8") +#pragma comment(linker, "/EXPORT:Vector2_MulP=_Vector2_MulP@12") +#pragma comment(linker, "/EXPORT:Vector2_MulV=_Vector2_MulV@8") + +DLL_METHOD void Vector2_Div(Vector2* a, float o) { + a->div(o); +} +DLL_METHOD void Vector2_DivP(Vector2* a, float x, float y) { + a->div(x, y); +} +DLL_METHOD void Vector2_DivV(Vector2* a, Vector2* b) { + a->div(*b); +} +#pragma comment(linker, "/EXPORT:Vector2_Div=_Vector2_Div@8") +#pragma comment(linker, "/EXPORT:Vector2_DivP=_Vector2_DivP@12") +#pragma comment(linker, "/EXPORT:Vector2_DivV=_Vector2_DivV@8") + +DLL_METHOD float Vector2_Length(Vector2* a) { + return (float)a->length(); +} +DLL_METHOD float Vector2_DistanceP(Vector2* a, float x, float y) { + return (float)a->distance(x, y); +} +DLL_METHOD float Vector2_DistanceV(Vector2* a, Vector2* b) { + return (float)a->distance(*b); +} +#pragma comment(linker, "/EXPORT:Vector2_Length=_Vector2_Length@4") +#pragma comment(linker, "/EXPORT:Vector2_DistanceP=_Vector2_DistanceP@12") +#pragma comment(linker, "/EXPORT:Vector2_DistanceV=_Vector2_DistanceV@8") + +DLL_METHOD float Vector2_DotP(Vector2* a, float x, float y) { + return (float)a->dot(x, y); +} +DLL_METHOD float Vector2_DotV(Vector2* a, Vector2* b) { + return (float)a->dot(*b); +} +DLL_METHOD void Vector2_Normalize(Vector2* a) { + a->normalize(); +} +#pragma comment(linker, "/EXPORT:Vector2_DotP=_Vector2_DotP@12") +#pragma comment(linker, "/EXPORT:Vector2_DotV=_Vector2_DotV@8") +#pragma comment(linker, "/EXPORT:Vector2_Normalize=_Vector2_Normalize@4") + +DLL_METHOD void Vector2_Rotate(Vector2* a, float rotation) { + a->rotate(rotation); +} +DLL_METHOD void Vector2_RotateAroundP(Vector2* a, float x, float y, float rotation) { + a->rotateAround(x, y, rotation); +} +DLL_METHOD void Vector2_RotateAroundV(Vector2* a, Vector2* b, float rotation) { + a->rotateAround(*b, rotation); +} +#pragma comment(linker, "/EXPORT:Vector2_Rotate=_Vector2_Rotate@8") +#pragma comment(linker, "/EXPORT:Vector2_RotateAroundP=_Vector2_RotateAroundP@16") +#pragma comment(linker, "/EXPORT:Vector2_RotateAroundV=_Vector2_RotateAroundV@12") + +DLL_METHOD float Vector2_DeltaRotation(Vector2* a) { + return (float)a->deltaRotation(); +} +DLL_METHOD float Vector2_DeltaRotationP(Vector2* a, float x, float y) { + return (float)a->deltaRotation(x, y); +} +DLL_METHOD float Vector2_DeltaRotationV(Vector2* a, Vector2* b) { + return (float)a->deltaRotation(*b); +} +#pragma comment(linker, "/EXPORT:Vector2_DeltaRotation=_Vector2_DeltaRotation@4") +#pragma comment(linker, "/EXPORT:Vector2_DeltaRotationP=_Vector2_DeltaRotationP@12") +#pragma comment(linker, "/EXPORT:Vector2_DeltaRotationV=_Vector2_DeltaRotationV@8") + +DLL_METHOD char* Vector2_Serialize(Vector2* a) { + return a->serialize(); +} +DLL_METHOD void Vector2_Deserialize(Vector2* a, char* o) { + a->deserialize(o); +} +#pragma comment(linker, "/EXPORT:Vector2_Serialize=_Vector2_Serialize@4") +#pragma comment(linker, "/EXPORT:Vector2_Deserialize=_Vector2_Deserialize@8") diff --git a/BlitzUtility.cpp b/BlitzUtility.cpp index d13dea0..87d91ed 100644 --- a/BlitzUtility.cpp +++ b/BlitzUtility.cpp @@ -1,33 +1,33 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include -#include "BlitzUtility.h" -#include "Database\SQLite\SQLite.h" -#include "Utility\WindowMessageHandler.h" - -bool WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { - switch (fdwReason) { - case DLL_PROCESS_ATTACH: - BU_WindowMessageHandler_OnProcessAttach(); - break; - case DLL_PROCESS_DETACH: - BU_WindowMessageHandler_OnProcessDetach(); - break; - } - return TRUE; +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include +#include "BlitzUtility.h" +#include "Database\SQLite\SQLite.h" +#include "Utility\WindowMessageHandler.h" + +bool WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { + switch (fdwReason) { + case DLL_PROCESS_ATTACH: + BU_WindowMessageHandler_OnProcessAttach(); + break; + case DLL_PROCESS_DETACH: + BU_WindowMessageHandler_OnProcessDetach(); + break; + } + return TRUE; } \ No newline at end of file diff --git a/BlitzUtility.h b/BlitzUtility.h index 285d10a..eae7cdd 100644 --- a/BlitzUtility.h +++ b/BlitzUtility.h @@ -1,42 +1,42 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once - -// Standard Library -#include -#include -#include -#include - -// Platform specific: Windows -#include - -// Macros -#define DLL_FUNCTION(type) extern "C" __declspec(dllexport) type __stdcall - -// BlitzUtility Includes -#include "Container/List.h" -#include "Container/TypeList.h" -#include "Database/SQLite/SQLite.h" -#include "Time/HighResolutionClock.h" -#include "Type/Double.h" -#include "Type/Long.h" -#include "Utility/DisplayEnumerator.h" -#include "Utility/IndexerV1.h" -#include "Utility/IndexerV2.h" -#include "Utility/MassOp.h" -#include "Utility/WindowMessageHandler.h" +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once + +// Standard Library +#include +#include +#include +#include + +// Platform specific: Windows +#include + +// Macros +#define DLL_FUNCTION(type) extern "C" __declspec(dllexport) type __stdcall + +// BlitzUtility Includes +#include "Container/List.h" +#include "Container/TypeList.h" +#include "Database/SQLite/SQLite.h" +#include "Time/HighResolutionClock.h" +#include "Type/Double.h" +#include "Type/Long.h" +#include "Utility/DisplayEnumerator.h" +#include "Utility/IndexerV1.h" +#include "Utility/IndexerV2.h" +#include "Utility/MassOp.h" +#include "Utility/WindowMessageHandler.h" diff --git a/BlitzUtility.vcxproj b/BlitzUtility.vcxproj index 90d6c6c..725ecda 100644 --- a/BlitzUtility.vcxproj +++ b/BlitzUtility.vcxproj @@ -79,7 +79,7 @@ %(PreprocessorDefinitions) false true - ProgramDatabase + EditAndContinue Debug @@ -158,6 +158,7 @@ + @@ -174,6 +175,7 @@ + diff --git a/BlitzUtility.vcxproj.filters b/BlitzUtility.vcxproj.filters index 4f3f458..6ff0a56 100644 --- a/BlitzUtility.vcxproj.filters +++ b/BlitzUtility.vcxproj.filters @@ -95,6 +95,9 @@ Source Files\Type + + Source Files\Time + @@ -142,6 +145,9 @@ Header Files\Type + + Header Files\Time + diff --git a/BlitzUtility.vcxproj.user b/BlitzUtility.vcxproj.user index ef5ff2a..2a22e69 100644 --- a/BlitzUtility.vcxproj.user +++ b/BlitzUtility.vcxproj.user @@ -1,4 +1,4 @@ - - - + + + \ No newline at end of file diff --git a/Container/List.cpp b/Container/List.cpp index 3afa90d..d45cd5d 100644 --- a/Container/List.cpp +++ b/Container/List.cpp @@ -1,272 +1,272 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "List.h" - -DLL_FUNCTION(List*) BU_List_Create(BBTypeElement* element) { - // Make sure the given element is valid. - if (element == NULL) - return NULL; - element = (BBTypeElement*)((uint32_t*)element - 5); - - // Create our List. - List* myList = new List; - myList->originalType = element->type; - - // Create a fake base Type by copying data. - myList->fakeType = new BBType; - myList->fakeType->fieldCount = myList->originalType->fieldCount; - myList->fakeType->free.type = myList->originalType->free.type; - myList->fakeType->free.refCount = myList->originalType->free.refCount; - myList->fakeType->free.fields = myList->originalType->free.fields; - myList->fakeType->free.next = (BBTypeElement*)&myList->fakeType->free; - myList->fakeType->free.prev = (BBTypeElement*)&myList->fakeType->free; - myList->fakeType->used.type = myList->originalType->used.type; - myList->fakeType->used.refCount = myList->originalType->used.refCount; - myList->fakeType->used.fields = myList->originalType->used.fields; - myList->fakeType->used.prev = (BBTypeElement*)&myList->fakeType->used; - myList->fakeType->used.next = (BBTypeElement*)&myList->fakeType->used; - - // Remove element from original flow. - element->prev->next = element->next; - element->next->prev = element->prev; - element->prev = NULL; - element->next = NULL; - element->type = myList->fakeType; - - // Store the element for later use; - myList->storageElement = element; - myList->storageElementFields = element->fields; - - return myList; -} - -DLL_FUNCTION(void) BU_List_Destroy(List* list) { - if (list == NULL) - return; - - // Append remaining elements to original type. - BBTypeElement *thisEl = NULL; - for (thisEl = list->fakeType->used.next; thisEl != (BBTypeElement*)&list->fakeType->used; thisEl = list->fakeType->used.next) { - // Remove from fakeType's flow. - thisEl->prev->next = thisEl->next; - thisEl->next->prev = thisEl->prev; - - // Append to originalType's flow. - thisEl->prev = list->originalType->used.prev; - thisEl->prev->next = thisEl; - thisEl->next = (BBTypeElement*)&list->originalType->used; - thisEl->next->prev = thisEl; - } - for (thisEl = list->fakeType->free.next; thisEl != (BBTypeElement*)&list->fakeType->free; thisEl = list->fakeType->free.next) { - // Remove from fakeType's flow. - thisEl->prev->next = thisEl->next; - thisEl->next->prev = thisEl->prev; - - // Append to originalType's flow. - thisEl->prev = list->originalType->free.prev; - thisEl->prev->next = thisEl; - thisEl->next = (BBTypeElement*)&list->originalType->free; - thisEl->next->prev = thisEl; - } - - // Append storageElement to original type. - thisEl = list->storageElement; - thisEl->prev = list->originalType->used.prev; - thisEl->prev->next = thisEl; - thisEl->next = (BBTypeElement*)&list->originalType->used; - thisEl->next->prev = thisEl; - thisEl->type = list->originalType; - thisEl->fields = list->storageElementFields; - - // Delete custom objects. - delete list->fakeType; - delete list; -} - -DLL_FUNCTION(uint32_t) BU_List_First(List* list) { - if (list == NULL) - return FALSE; - - BBTypeElement* element = list->fakeType->used.next; - if (element == (BBTypeElement*)&list->fakeType->used) - return FALSE; // End of List. - - // Copy data from selected element. - list->storageElement->fields = element->fields; - - // Make deletion easier - list->storageElement->next = element; - list->storageElement->prev = element; - - return TRUE; -} - -DLL_FUNCTION(uint32_t) BU_List_Last(List* list) { - if (list == NULL) - return FALSE; - - BBTypeElement* element = list->fakeType->used.prev; - if (element == (BBTypeElement*)&list->fakeType->used) - return FALSE; // End of List. - - // Copy data from selected element. - list->storageElement->fields = element->fields; - - // Make deletion easier - list->storageElement->next = element; - list->storageElement->prev = element; - - return TRUE; -} - -DLL_FUNCTION(uint32_t) BU_List_Previous(List* list) { - if (list == NULL) - return FALSE; - - BBTypeElement* element = list->storageElement->prev->prev; - if (element == (BBTypeElement*)&list->fakeType->used) - return FALSE; // End of List. - - // Copy data from selected element. - list->storageElement->fields = element->fields; - - // Make deletion easier - list->storageElement->next = element; - list->storageElement->prev = element; - - return TRUE; -} - -DLL_FUNCTION(uint32_t) BU_List_Next(List* list) { - if (list == NULL) - return FALSE; - - BBTypeElement* element = list->storageElement->next->next; - if (element == (BBTypeElement*)&list->fakeType->used) - return FALSE; // End of List. - - // Copy data from selected element. - list->storageElement->fields = element->fields; - - // Make deletion easier - list->storageElement->next = element; - list->storageElement->prev = element; - - return TRUE; -} - -DLL_FUNCTION(uint32_t) BU_List_Before(List* list, BBTypeElement* other) { - if (list == NULL) - return FALSE; - if (other == NULL) - return FALSE; - - other = (BBTypeElement*)((uint32_t*)other - 5); - if (other->type != list->fakeType) - return FALSE; - - BBTypeElement* element = other->prev; - if (element == (BBTypeElement*)&list->fakeType->used) - return FALSE; // End of List. - - // Copy data from selected element. - list->storageElement->fields = element->fields; - - // Make deletion easier - list->storageElement->next = element; - list->storageElement->prev = element; - - return TRUE; -} - -DLL_FUNCTION(uint32_t) BU_List_After(List* list, BBTypeElement* other) { - if (list == NULL) - return FALSE; - if (other == NULL) - return FALSE; - - other = (BBTypeElement*)((uint32_t*)other - 5); - if (other->type != list->fakeType) - return FALSE; - - BBTypeElement* element = other->next; - if (element == (BBTypeElement*)&list->fakeType->used) - return FALSE; // End of List. - - // Copy data from selected element. - list->storageElement->fields = element->fields; - - // Make deletion easier - list->storageElement->next = element; - list->storageElement->prev = element; - - return TRUE; -} - -DLL_FUNCTION(void) BU_List_Insert(List* list, BBTypeElement* element) { - BU_List_InsertEx(list, element, NULL); -} - -DLL_FUNCTION(void) BU_List_InsertEx(List* list, BBTypeElement* element, BBTypeElement* other) { - if (list == NULL) - return; - - // Make sure element is a valid pointer. - if (element == NULL) - return; - element = (BBTypeElement*)((uint32_t*)element - 5); - if (element->type != list->originalType) - return; // Can't add elements from other types, could cause serious issues. - - // Make sure other is a valid pointer. - if (other == NULL) { - other = (BBTypeElement*)&list->fakeType->used; - } else { - other = (BBTypeElement*)((uint32_t*)other - 5); - - // Other element must be of the same fakeType. - if (other->type != list->fakeType) - return; - } - - // Insert the element after(!) the other element. - element->prev = other->prev; - element->next = other; - element->prev->next = element; - element->next->prev = element; - element->type = list->fakeType; -} - -DLL_FUNCTION(void) BU_List_Remove(List* list, BBTypeElement* element) { - if (list == NULL) - return; - if (element == NULL) - return; - - element = (BBTypeElement*)((uint32_t*)element - 5); - if (element->type != list->fakeType) - return; // Can't remove elements from another type. - - element->type = list->originalType; - element->prev = list->originalType->used.prev; - element->next = (BBTypeElement*)&list->originalType->used; - list->originalType->used.prev->next = element; - list->originalType->used.prev = element; -} - - +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "List.h" + +DLL_FUNCTION(List*) BU_List_Create(BBTypeElement* element) { + // Make sure the given element is valid. + if (element == NULL) + return NULL; + element = (BBTypeElement*)((uint32_t*)element - 5); + + // Create our List. + List* myList = new List; + myList->originalType = element->type; + + // Create a fake base Type by copying data. + myList->fakeType = new BBType; + myList->fakeType->fieldCount = myList->originalType->fieldCount; + myList->fakeType->free.type = myList->originalType->free.type; + myList->fakeType->free.refCount = myList->originalType->free.refCount; + myList->fakeType->free.fields = myList->originalType->free.fields; + myList->fakeType->free.next = (BBTypeElement*)&myList->fakeType->free; + myList->fakeType->free.prev = (BBTypeElement*)&myList->fakeType->free; + myList->fakeType->used.type = myList->originalType->used.type; + myList->fakeType->used.refCount = myList->originalType->used.refCount; + myList->fakeType->used.fields = myList->originalType->used.fields; + myList->fakeType->used.prev = (BBTypeElement*)&myList->fakeType->used; + myList->fakeType->used.next = (BBTypeElement*)&myList->fakeType->used; + + // Remove element from original flow. + element->prev->next = element->next; + element->next->prev = element->prev; + element->prev = NULL; + element->next = NULL; + element->type = myList->fakeType; + + // Store the element for later use; + myList->storageElement = element; + myList->storageElementFields = element->fields; + + return myList; +} + +DLL_FUNCTION(void) BU_List_Destroy(List* list) { + if (list == NULL) + return; + + // Append remaining elements to original type. + BBTypeElement *thisEl = NULL; + for (thisEl = list->fakeType->used.next; thisEl != (BBTypeElement*)&list->fakeType->used; thisEl = list->fakeType->used.next) { + // Remove from fakeType's flow. + thisEl->prev->next = thisEl->next; + thisEl->next->prev = thisEl->prev; + + // Append to originalType's flow. + thisEl->prev = list->originalType->used.prev; + thisEl->prev->next = thisEl; + thisEl->next = (BBTypeElement*)&list->originalType->used; + thisEl->next->prev = thisEl; + } + for (thisEl = list->fakeType->free.next; thisEl != (BBTypeElement*)&list->fakeType->free; thisEl = list->fakeType->free.next) { + // Remove from fakeType's flow. + thisEl->prev->next = thisEl->next; + thisEl->next->prev = thisEl->prev; + + // Append to originalType's flow. + thisEl->prev = list->originalType->free.prev; + thisEl->prev->next = thisEl; + thisEl->next = (BBTypeElement*)&list->originalType->free; + thisEl->next->prev = thisEl; + } + + // Append storageElement to original type. + thisEl = list->storageElement; + thisEl->prev = list->originalType->used.prev; + thisEl->prev->next = thisEl; + thisEl->next = (BBTypeElement*)&list->originalType->used; + thisEl->next->prev = thisEl; + thisEl->type = list->originalType; + thisEl->fields = list->storageElementFields; + + // Delete custom objects. + delete list->fakeType; + delete list; +} + +DLL_FUNCTION(uint32_t) BU_List_First(List* list) { + if (list == NULL) + return FALSE; + + BBTypeElement* element = list->fakeType->used.next; + if (element == (BBTypeElement*)&list->fakeType->used) + return FALSE; // End of List. + + // Copy data from selected element. + list->storageElement->fields = element->fields; + + // Make deletion easier + list->storageElement->next = element; + list->storageElement->prev = element; + + return TRUE; +} + +DLL_FUNCTION(uint32_t) BU_List_Last(List* list) { + if (list == NULL) + return FALSE; + + BBTypeElement* element = list->fakeType->used.prev; + if (element == (BBTypeElement*)&list->fakeType->used) + return FALSE; // End of List. + + // Copy data from selected element. + list->storageElement->fields = element->fields; + + // Make deletion easier + list->storageElement->next = element; + list->storageElement->prev = element; + + return TRUE; +} + +DLL_FUNCTION(uint32_t) BU_List_Previous(List* list) { + if (list == NULL) + return FALSE; + + BBTypeElement* element = list->storageElement->prev->prev; + if (element == (BBTypeElement*)&list->fakeType->used) + return FALSE; // End of List. + + // Copy data from selected element. + list->storageElement->fields = element->fields; + + // Make deletion easier + list->storageElement->next = element; + list->storageElement->prev = element; + + return TRUE; +} + +DLL_FUNCTION(uint32_t) BU_List_Next(List* list) { + if (list == NULL) + return FALSE; + + BBTypeElement* element = list->storageElement->next->next; + if (element == (BBTypeElement*)&list->fakeType->used) + return FALSE; // End of List. + + // Copy data from selected element. + list->storageElement->fields = element->fields; + + // Make deletion easier + list->storageElement->next = element; + list->storageElement->prev = element; + + return TRUE; +} + +DLL_FUNCTION(uint32_t) BU_List_Before(List* list, BBTypeElement* other) { + if (list == NULL) + return FALSE; + if (other == NULL) + return FALSE; + + other = (BBTypeElement*)((uint32_t*)other - 5); + if (other->type != list->fakeType) + return FALSE; + + BBTypeElement* element = other->prev; + if (element == (BBTypeElement*)&list->fakeType->used) + return FALSE; // End of List. + + // Copy data from selected element. + list->storageElement->fields = element->fields; + + // Make deletion easier + list->storageElement->next = element; + list->storageElement->prev = element; + + return TRUE; +} + +DLL_FUNCTION(uint32_t) BU_List_After(List* list, BBTypeElement* other) { + if (list == NULL) + return FALSE; + if (other == NULL) + return FALSE; + + other = (BBTypeElement*)((uint32_t*)other - 5); + if (other->type != list->fakeType) + return FALSE; + + BBTypeElement* element = other->next; + if (element == (BBTypeElement*)&list->fakeType->used) + return FALSE; // End of List. + + // Copy data from selected element. + list->storageElement->fields = element->fields; + + // Make deletion easier + list->storageElement->next = element; + list->storageElement->prev = element; + + return TRUE; +} + +DLL_FUNCTION(void) BU_List_Insert(List* list, BBTypeElement* element) { + BU_List_InsertEx(list, element, NULL); +} + +DLL_FUNCTION(void) BU_List_InsertEx(List* list, BBTypeElement* element, BBTypeElement* other) { + if (list == NULL) + return; + + // Make sure element is a valid pointer. + if (element == NULL) + return; + element = (BBTypeElement*)((uint32_t*)element - 5); + if (element->type != list->originalType) + return; // Can't add elements from other types, could cause serious issues. + + // Make sure other is a valid pointer. + if (other == NULL) { + other = (BBTypeElement*)&list->fakeType->used; + } else { + other = (BBTypeElement*)((uint32_t*)other - 5); + + // Other element must be of the same fakeType. + if (other->type != list->fakeType) + return; + } + + // Insert the element after(!) the other element. + element->prev = other->prev; + element->next = other; + element->prev->next = element; + element->next->prev = element; + element->type = list->fakeType; +} + +DLL_FUNCTION(void) BU_List_Remove(List* list, BBTypeElement* element) { + if (list == NULL) + return; + if (element == NULL) + return; + + element = (BBTypeElement*)((uint32_t*)element - 5); + if (element->type != list->fakeType) + return; // Can't remove elements from another type. + + element->type = list->originalType; + element->prev = list->originalType->used.prev; + element->next = (BBTypeElement*)&list->originalType->used; + list->originalType->used.prev->next = element; + list->originalType->used.prev = element; +} + + diff --git a/Container/List.h b/Container/List.h index 8e97e93..3e4f8c0 100644 --- a/Container/List.h +++ b/Container/List.h @@ -1,85 +1,85 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" - -// Reverse engineered from https://github.com/blitz-research/blitz3d/blob/master/compiler/declnode.cpp -enum BBVarType { - Global = 0, - Int = 1, - Float = 2, - String = 4, - Type = 5, - Array = 6 -}; - -// Basic Blitz Variable -struct BBVar { - uint32_t type; - uint32_t value; -}; - -// Basic Type predefinition. -struct BBType; - -// Basic Type Element -struct BBTypeElement { - uint32_t* fields; - BBTypeElement* next; - BBTypeElement* prev; - BBType* type; - unsigned int refCount; -}; - -// Basic Type -struct BBType { - uint32_t type; - BBTypeElement used, free; - uint32_t fieldCount; -}; - -// List struct. -struct List { - BBType* originalType; - BBType* fakeType; - - BBTypeElement* storageElement; - uint32_t* storageElementFields; -}; - -DLL_FUNCTION(List*) BU_List_Create(BBTypeElement* element); -#pragma comment(linker, "/EXPORT:BU_List_Create=_BU_List_Create@4") -DLL_FUNCTION(void) BU_List_Destroy(List* list); -#pragma comment(linker, "/EXPORT:BU_List_Destroy=_BU_List_Destroy@4") -DLL_FUNCTION(uint32_t) BU_List_First(List* list); -#pragma comment(linker, "/EXPORT:BU_List_First=_BU_List_First@4") -DLL_FUNCTION(uint32_t) BU_List_Last(List* list); -#pragma comment(linker, "/EXPORT:BU_List_Last=_BU_List_Last@4") -DLL_FUNCTION(uint32_t) BU_List_Previous(List* list); -#pragma comment(linker, "/EXPORT:BU_List_Previous=_BU_List_Previous@4") -DLL_FUNCTION(uint32_t) BU_List_Next(List* list); -#pragma comment(linker, "/EXPORT:BU_List_Next=_BU_List_Next@4") -DLL_FUNCTION(uint32_t) BU_List_Before(List* list, BBTypeElement* other); -#pragma comment(linker, "/EXPORT:BU_List_Before=_BU_List_Before@8") -DLL_FUNCTION(uint32_t) BU_List_After(List* list, BBTypeElement* other); -#pragma comment(linker, "/EXPORT:BU_List_After=_BU_List_After@8") -DLL_FUNCTION(void) BU_List_Insert(List* list, BBTypeElement* element); -#pragma comment(linker, "/EXPORT:BU_List_Insert=_BU_List_Insert@8") -DLL_FUNCTION(void) BU_List_InsertEx(List* list, BBTypeElement* element, BBTypeElement* other); -#pragma comment(linker, "/EXPORT:BU_List_InsertEx=_BU_List_InsertEx@12") -DLL_FUNCTION(void) BU_List_Remove(List* list, BBTypeElement* element); -#pragma comment(linker, "/EXPORT:BU_List_Remove=_BU_List_Remove@8") +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" + +// Reverse engineered from https://github.com/blitz-research/blitz3d/blob/master/compiler/declnode.cpp +enum BBVarType { + Global = 0, + Int = 1, + Float = 2, + String = 4, + Type = 5, + Array = 6 +}; + +// Basic Blitz Variable +struct BBVar { + uint32_t type; + uint32_t value; +}; + +// Basic Type predefinition. +struct BBType; + +// Basic Type Element +struct BBTypeElement { + uint32_t* fields; + BBTypeElement* next; + BBTypeElement* prev; + BBType* type; + unsigned int refCount; +}; + +// Basic Type +struct BBType { + uint32_t type; + BBTypeElement used, free; + uint32_t fieldCount; +}; + +// List struct. +struct List { + BBType* originalType; + BBType* fakeType; + + BBTypeElement* storageElement; + uint32_t* storageElementFields; +}; + +DLL_FUNCTION(List*) BU_List_Create(BBTypeElement* element); +#pragma comment(linker, "/EXPORT:BU_List_Create=_BU_List_Create@4") +DLL_FUNCTION(void) BU_List_Destroy(List* list); +#pragma comment(linker, "/EXPORT:BU_List_Destroy=_BU_List_Destroy@4") +DLL_FUNCTION(uint32_t) BU_List_First(List* list); +#pragma comment(linker, "/EXPORT:BU_List_First=_BU_List_First@4") +DLL_FUNCTION(uint32_t) BU_List_Last(List* list); +#pragma comment(linker, "/EXPORT:BU_List_Last=_BU_List_Last@4") +DLL_FUNCTION(uint32_t) BU_List_Previous(List* list); +#pragma comment(linker, "/EXPORT:BU_List_Previous=_BU_List_Previous@4") +DLL_FUNCTION(uint32_t) BU_List_Next(List* list); +#pragma comment(linker, "/EXPORT:BU_List_Next=_BU_List_Next@4") +DLL_FUNCTION(uint32_t) BU_List_Before(List* list, BBTypeElement* other); +#pragma comment(linker, "/EXPORT:BU_List_Before=_BU_List_Before@8") +DLL_FUNCTION(uint32_t) BU_List_After(List* list, BBTypeElement* other); +#pragma comment(linker, "/EXPORT:BU_List_After=_BU_List_After@8") +DLL_FUNCTION(void) BU_List_Insert(List* list, BBTypeElement* element); +#pragma comment(linker, "/EXPORT:BU_List_Insert=_BU_List_Insert@8") +DLL_FUNCTION(void) BU_List_InsertEx(List* list, BBTypeElement* element, BBTypeElement* other); +#pragma comment(linker, "/EXPORT:BU_List_InsertEx=_BU_List_InsertEx@12") +DLL_FUNCTION(void) BU_List_Remove(List* list, BBTypeElement* element); +#pragma comment(linker, "/EXPORT:BU_List_Remove=_BU_List_Remove@8") diff --git a/Container/TypeList.cpp b/Container/TypeList.cpp index 880070c..8ac7ea7 100644 --- a/Container/TypeList.cpp +++ b/Container/TypeList.cpp @@ -1,76 +1,76 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once; -#include "TypeList.h" - -DLL_FUNCTION(TypeList*) BU_TypeList_Create(BBTypeElement* element) { - // Make sure the given element is valid. - if (element == NULL) - return NULL; - element = (BBTypeElement*)(((uint32_t*)element) - 5); - - // Create our TypeList. - TypeList* list = new TypeList(); - list->type = element->type; - list->firstElement = element; - list->lastElement = element; - - // Remove the given element from the flow of the type. - element->prev->next = element->next; - element->next->prev = element->prev; - element->prev = (BBTypeElement*)&list->type->used; - element->next = (BBTypeElement*)&list->type->used; - - // Return the list. - return list; -} - -DLL_FUNCTION(void) BU_TypeList_Destroy(TypeList* list) { - // Make sure we have a valid list. - if (list == NULL) - return; - - // Append elements to the original type. - list->firstElement->prev = list->type->used.prev; - list->firstElement->prev->next = list->firstElement; - list->lastElement->next = (BBTypeElement*)&list->type->used; - list->lastElement->next->prev = list->lastElement; - - // Free our TypeList. - delete list; -} - -DLL_FUNCTION(void) BU_TypeList_Activate(TypeList* list) { - // Store current pointers - list->storedFirstElement = list->type->used.next; - list->storedLastElement = list->type->used.prev; - - // ... and replace them. - list->type->used.next = list->firstElement; - list->type->used.prev = list->lastElement; -} - -DLL_FUNCTION(void) BU_TypeList_Deactivate(TypeList* list) { - // Store current pointers - list->firstElement = list->type->used.next; - list->lastElement = list->type->used.prev; - - // ... and replace them. - list->type->used.next = list->storedFirstElement; - list->type->used.prev = list->storedLastElement; -} - +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once; +#include "TypeList.h" + +DLL_FUNCTION(TypeList*) BU_TypeList_Create(BBTypeElement* element) { + // Make sure the given element is valid. + if (element == NULL) + return NULL; + element = (BBTypeElement*)(((uint32_t*)element) - 5); + + // Create our TypeList. + TypeList* list = new TypeList(); + list->type = element->type; + list->firstElement = element; + list->lastElement = element; + + // Remove the given element from the flow of the type. + element->prev->next = element->next; + element->next->prev = element->prev; + element->prev = (BBTypeElement*)&list->type->used; + element->next = (BBTypeElement*)&list->type->used; + + // Return the list. + return list; +} + +DLL_FUNCTION(void) BU_TypeList_Destroy(TypeList* list) { + // Make sure we have a valid list. + if (list == NULL) + return; + + // Append elements to the original type. + list->firstElement->prev = list->type->used.prev; + list->firstElement->prev->next = list->firstElement; + list->lastElement->next = (BBTypeElement*)&list->type->used; + list->lastElement->next->prev = list->lastElement; + + // Free our TypeList. + delete list; +} + +DLL_FUNCTION(void) BU_TypeList_Activate(TypeList* list) { + // Store current pointers + list->storedFirstElement = list->type->used.next; + list->storedLastElement = list->type->used.prev; + + // ... and replace them. + list->type->used.next = list->firstElement; + list->type->used.prev = list->lastElement; +} + +DLL_FUNCTION(void) BU_TypeList_Deactivate(TypeList* list) { + // Store current pointers + list->firstElement = list->type->used.next; + list->lastElement = list->type->used.prev; + + // ... and replace them. + list->type->used.next = list->storedFirstElement; + list->type->used.prev = list->storedLastElement; +} + diff --git a/Container/TypeList.h b/Container/TypeList.h index 563bc08..93eea70 100644 --- a/Container/TypeList.h +++ b/Container/TypeList.h @@ -1,39 +1,39 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include "Container/List.h" -#include - -struct BBType; -struct BBTypeElement; - -struct TypeList { - BBType *type; - - BBTypeElement *storedFirstElement, *storedLastElement; - BBTypeElement *firstElement, *lastElement; -}; - -DLL_FUNCTION(TypeList*) BU_TypeList_Create(BBTypeElement* element); -#pragma comment(linker, "/EXPORT:BU_TypeList_Create=_BU_TypeList_Create@4") -DLL_FUNCTION(void) BU_TypeList_Destroy(TypeList* list); -#pragma comment(linker, "/EXPORT:BU_TypeList_Destroy=_BU_TypeList_Destroy@4") -DLL_FUNCTION(void) BU_TypeList_Activate(TypeList* list); -#pragma comment(linker, "/EXPORT:BU_TypeList_Activate=_BU_TypeList_Activate@4") -DLL_FUNCTION(void) BU_TypeList_Deactivate(TypeList* list); -#pragma comment(linker, "/EXPORT:BU_TypeList_Deactivate=_BU_TypeList_Deactivate@4") +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include "Container/List.h" +#include + +struct BBType; +struct BBTypeElement; + +struct TypeList { + BBType *type; + + BBTypeElement *storedFirstElement, *storedLastElement; + BBTypeElement *firstElement, *lastElement; +}; + +DLL_FUNCTION(TypeList*) BU_TypeList_Create(BBTypeElement* element); +#pragma comment(linker, "/EXPORT:BU_TypeList_Create=_BU_TypeList_Create@4") +DLL_FUNCTION(void) BU_TypeList_Destroy(TypeList* list); +#pragma comment(linker, "/EXPORT:BU_TypeList_Destroy=_BU_TypeList_Destroy@4") +DLL_FUNCTION(void) BU_TypeList_Activate(TypeList* list); +#pragma comment(linker, "/EXPORT:BU_TypeList_Activate=_BU_TypeList_Activate@4") +DLL_FUNCTION(void) BU_TypeList_Deactivate(TypeList* list); +#pragma comment(linker, "/EXPORT:BU_TypeList_Deactivate=_BU_TypeList_Deactivate@4") diff --git a/Database/SQLite/SQLite.cpp b/Database/SQLite/SQLite.cpp index 634fc5f..c902f5c 100644 --- a/Database/SQLite/SQLite.cpp +++ b/Database/SQLite/SQLite.cpp @@ -1,513 +1,513 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#include "SQLite.h" -#include "..\BlitzPointer\BlitzPointer.h" - -static int32_t __BU_SQLite_OpenSimpleError = 0; - -#pragma region Core -DLL_FUNCTION(const char*) BU_SQLite_Version() { -#pragma comment(linker, "/EXPORT:BU_SQLite_Version=_BU_SQLite_Version@0") - return sqlite3_libversion(); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Version_Number() { -#pragma comment(linker, "/EXPORT:BU_SQLite_Version_Number=_BU_SQLite_Version_Number@0") - return sqlite3_libversion_number(); -} - -DLL_FUNCTION(const char*) BU_SQLite_SourceID() { -#pragma comment(linker, "/EXPORT:BU_SQLite_SourceID=_BU_SQLite_SourceID@0") - return sqlite3_sourceid(); -} - -DLL_FUNCTION(int32_t) BU_SQLite_CompileOption_Used(const char* zOptName) { -#pragma comment(linker, "/EXPORT:BU_SQLite_CompileOption_Used=_BU_SQLite_CompileOption_Used@4") - return sqlite3_compileoption_used(zOptName); -} - -DLL_FUNCTION(const char*) BU_SQLite_CompileOption_Get(int32_t n) { -#pragma comment(linker, "/EXPORT:BU_SQLite_CompileOption_Get=_BU_SQLite_CompileOption_Get@4") - return sqlite3_compileoption_get(n); -} - -DLL_FUNCTION(int32_t) BU_SQLite_ThreadSafe() { -#pragma comment(linker, "/EXPORT:BU_SQLite_ThreadSafe=_BU_SQLite_ThreadSafe@0") - return sqlite3_threadsafe(); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Initialize() { -#pragma comment(linker, "/EXPORT:BU_SQLite_Initialize=_BU_SQLite_Initialize@0") - return sqlite3_initialize(); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Shutdown() { -#pragma comment(linker, "/EXPORT:BU_SQLite_Shutdown=_BU_SQLite_Shutdown@0") - return sqlite3_shutdown(); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Sleep(int32_t ms) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Sleep=_BU_SQLite_Sleep@4") - return sqlite3_sleep(ms); -} -#pragma endregion Core - -#pragma region Open & Close -DLL_FUNCTION(int32_t) BU_SQLite_Open(const char* file, sqlite3** db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Open=_BU_SQLite_Open@8") - return sqlite3_open(file, db); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Open_V2(const char* file, sqlite3** db, int32_t flags, const char* zVfs) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Open_V2=_BU_SQLite_Open_V2@16") - return sqlite3_open_v2(file, db, flags, zVfs); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Close(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Close=_BU_SQLite_Close@4") - return sqlite3_close(db); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Close_V2(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Close_V2=_BU_SQLite_Close_V2@4") - return sqlite3_close_v2(db); -} - -// Simple Open() and Open_V2() -DLL_FUNCTION(sqlite3*) BU_SQLite_OpenSimple(const char* file) { -#pragma comment(linker, "/EXPORT:BU_SQLite_OpenSimple=_BU_SQLite_OpenSimple@4") - sqlite3** db = new sqlite3*(); - __BU_SQLite_OpenSimpleError = sqlite3_open(file, db); - sqlite3* ret = *db; delete db; return ret; -} - -DLL_FUNCTION(sqlite3*) BU_SQLite_OpenSimple_V2(const char* file, int32_t flags, const char* zVfs) { -#pragma comment(linker, "/EXPORT:BU_SQLite_OpenSimple_V2=_BU_SQLite_OpenSimple_V2@12") - sqlite3** db = new sqlite3*(); - __BU_SQLite_OpenSimpleError = sqlite3_open_v2(file, db, flags, zVfs); - sqlite3* ret = *db; - delete db; - return ret; -} - -DLL_FUNCTION(int32_t) BU_SQLite_OpenSimpleError() { -#pragma comment(linker, "/EXPORT:BU_SQLite_OpenSimpleError=_BU_SQLite_OpenSimpleError@0") - return __BU_SQLite_OpenSimpleError; -} -#pragma endregion Open & Close - -#pragma region Error Handling -DLL_FUNCTION(int32_t) BU_SQLite_Error_Code(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Error_Code=_BU_SQLite_Error_Code@4") - return sqlite3_errcode(db); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Extended_Error_Code(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Extended_Error_Code=_BU_SQLite_Extended_Error_Code@4") - return sqlite3_extended_errcode(db); -} - -DLL_FUNCTION(const char*) BU_SQLite_Error_Message(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Error_Message=_BU_SQLite_Error_Message@4") - return sqlite3_errmsg(db); -} - -DLL_FUNCTION(const char*) BU_SQLite_Error_String(int32_t errCode) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Error_String=_BU_SQLite_Error_String@4") - return sqlite3_errstr(errCode); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Extended_Result_Codes(sqlite3* db, int32_t onoff) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Extended_Result_Codes=_BU_SQLite_Extended_Result_Codes@8") - return sqlite3_extended_result_codes(db, onoff); -} -#pragma endregion Error Handling - -#pragma region Busy Handler -DLL_FUNCTION(int32_t) BU_SQLite_Busy_Timeout(sqlite3* db, int32_t timeout) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Busy_Timeout=_BU_SQLite_Busy_Timeout@8") - return sqlite3_busy_timeout(db, timeout); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Busy_Handler(sqlite3* db, int(*phandlerfunc)(void*, int), void* param) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Busy_Handler=_BU_SQLite_Busy_Handler@12") - return sqlite3_busy_handler(db, phandlerfunc, param); -} - -int __cdecl BU_SQLite_Busy_Handler_SimpleInternal(void* handler, int prm) { - BP_BlitzFunction1_t lpFunctionPointer = (BP_BlitzFunction1_t)handler; - return lpFunctionPointer((int32_t)prm); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Busy_Handler_Simple(sqlite3* db, BP_BlitzFunction1_t handler) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Busy_Handler_Simple=_BU_SQLite_Busy_Handler_Simple@8") - return sqlite3_busy_handler(db, BU_SQLite_Busy_Handler_SimpleInternal, (void*)handler); -} -#pragma endregion Busy Handler - -#pragma region Memory Management -DLL_FUNCTION(int64_t*) BU_SQLite_Memory_Used() { -#pragma comment(linker, "/EXPORT:BU_SQLite_Memory_Used=_BU_SQLite_Memory_Used@0") - return new int64_t(sqlite3_memory_used()); -} - -DLL_FUNCTION(int64_t*) BU_SQLite_Memory_Highwater(int32_t bReset) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Memory_Highwater=_BU_SQLite_Memory_Highwater@4") - return new int64_t(sqlite3_memory_highwater(bReset)); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Release_Memory(int32_t bytes) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Release_Memory=_BU_SQLite_Release_Memory@4") - return sqlite3_release_memory(bytes); -} - -DLL_FUNCTION(int32_t) BU_SQLite_DB_Release_Memory(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_DB_Release_Memory=_BU_SQLite_DB_Release_Memory@4") - return sqlite3_db_release_memory(db); -} - -DLL_FUNCTION(void) BU_SQLite_Randomness(int32_t n, void* p) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Randomness=_BU_SQLite_Randomness@8") - sqlite3_randomness(n, p); -} -#pragma endregion Memory Management - -#pragma region Database Management & Modification -DLL_FUNCTION(int32_t) BU_SQLite_Exec(sqlite3* db, const char* sql, int(*callbackp)(void*, int, char**, char**), void* param, char** errMsg) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Exec=_BU_SQLite_Exec@20") - return sqlite3_exec(db, sql, callbackp, param, errMsg); -} - -DLL_FUNCTION(int64_t*) BU_SQLite_Last_Insert_RowId(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Last_Insert_RowId=_BU_SQLite_Last_Insert_RowId@4") - return new int64_t(sqlite3_last_insert_rowid(db)); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Changes(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Changes=_BU_SQLite_Changes@4") - return sqlite3_changes(db); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Total_Changes(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Total_Changes=_BU_SQLite_Total_Changes@4") - return sqlite3_total_changes(db); -} - -DLL_FUNCTION(void) BU_SQLite_Interrupt(sqlite3* db) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Interrupt=_BU_SQLite_Interrupt@4") - return sqlite3_interrupt(db); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Complete(const char* sql) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Complete=_BU_SQLite_Complete@4") - return sqlite3_complete(sql); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Get_Table(sqlite3* db, const char* zSql, char*** pazResult, int32_t* pnRow, int32_t* pnColumn, char** pzErrMessage) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Get_Table=_BU_SQLite_Get_Table@24") - return sqlite3_get_table(db, zSql, pazResult, pnRow, pnColumn, pzErrMessage); -} - -DLL_FUNCTION(void) BU_SQLite_Free_Table(char** result) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Free_Table=_BU_SQLite_Free_Table@4") - sqlite3_free_table(result); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Set_Authorizer(sqlite3* db, - int(*xAuth)(void*, int, const char*, const char*, const char*, const char*), - void *pArg) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Set_Authorizer=_BU_SQLite_Set_Authorizer@12") - return sqlite3_set_authorizer(db, xAuth, pArg); -} - -DLL_FUNCTION(void*) BU_SQLite_Trace(sqlite3* db, - void(*xTrace)(void*, const char*), - void* param) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Trace=_BU_SQLite_Trace@12") - return sqlite3_trace(db, xTrace, param); -} - -DLL_FUNCTION(void*) BU_SQLite_Profile(sqlite3* db, - void(*xProfile)(void*, const char*, sqlite3_uint64), - void* param) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Profile=_BU_SQLite_Profile@12") - return sqlite3_profile(db, xProfile, param); -} - -DLL_FUNCTION(void) BU_SQLite_Progress_Handler(sqlite3* db, int32_t nOps, int32_t(*xProgress)(void*), void* pArg) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Progress_Handler=_BU_SQLite_Progress_Handler@16") - sqlite3_progress_handler(db, nOps, xProgress, pArg); -} - -DLL_FUNCTION(const char*) BU_SQLite_URI_Parameter(const char* zFilename, const char* zParam) { -#pragma comment(linker, "/EXPORT:BU_SQLite_URI_Parameter=_BU_SQLite_URI_Parameter@8") - return sqlite3_uri_parameter(zFilename, zParam); -} - -DLL_FUNCTION(int32_t) BU_SQLite_URI_Boolean(const char* zFilename, const char* zParam, int32_t bDefault) { -#pragma comment(linker, "/EXPORT:BU_SQLite_URI_Boolean=_BU_SQLite_URI_Boolean@12") - return sqlite3_uri_boolean(zFilename, zParam, bDefault); -} - -DLL_FUNCTION(int64_t*) BU_SQLite_URI_LongLong(const char* zFilename, const char* zParam, int64_t* bDefault) { -#pragma comment(linker, "/EXPORT:BU_SQLite_URI_LongLong=_BU_SQLite_URI_LongLong@12") - return new int64_t(sqlite3_uri_int64(zFilename, zParam, *bDefault)); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Limit(sqlite3* db, int32_t id, int32_t newVal) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Limit=_BU_SQLite_Limit@12") - return sqlite3_limit(db, id, newVal); -} -#pragma endregion Database Management & Modification - -#pragma region Prepared Statements -DLL_FUNCTION(sqlite3_stmt*) BU_SQLite_Next_Statement(sqlite3* db, sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Next_Statement=_BU_SQLite_Next_Statement@8") - return sqlite3_next_stmt(db, pStmt); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Prepare(sqlite3* db, const char* zSql, int32_t nByte, sqlite3_stmt** ppStmt, const char** pzTail) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Prepare=_BU_SQLite_Prepare@20") - return sqlite3_prepare(db, zSql, nByte, ppStmt, pzTail); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Prepare_V2(sqlite3* db, const char* zSql, int32_t nByte, sqlite3_stmt** ppStmt, const char** pzTail) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Prepare_V2=_BU_SQLite_Prepare_V2@20") - return sqlite3_prepare_v2(db, zSql, nByte, ppStmt, pzTail); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Statement_ReadOnly(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Statement_ReadOnly=_BU_SQLite_Statement_ReadOnly@4") - return sqlite3_stmt_readonly(pStmt); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Statement_Busy(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Statement_Busy=_BU_SQLite_Statement_Busy@4") - return sqlite3_stmt_busy(pStmt); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Statement_Status(sqlite3_stmt* pStmt, int32_t op, int32_t resetFlag) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Statement_Status=_BU_SQLite_Statement_Status@12") - return sqlite3_stmt_status(pStmt, op, resetFlag); -} - -DLL_FUNCTION(const char*) BU_SQLite_SQL(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_SQL=_BU_SQLite_SQL@4") - return sqlite3_sql(pStmt); -} - -DLL_FUNCTION(sqlite3*) BU_SQLite_Database_Handle(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Database_Handle=_BU_SQLite_Database_Handle@4") - return sqlite3_db_handle(pStmt); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Null(sqlite3_stmt* pStmt, int32_t index) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Null=_BU_SQLite_Bind_Null@8") - return sqlite3_bind_null(pStmt, index); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Int(sqlite3_stmt* pStmt, int32_t index, int32_t value) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Int=_BU_SQLite_Bind_Int@12") - return sqlite3_bind_int(pStmt, index, value); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_LongLong(sqlite3_stmt* pStmt, int32_t index, int64_t* pValue) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_LongLong=_BU_SQLite_Bind_LongLong@12") - return sqlite3_bind_int64(pStmt, index, *pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Float(sqlite3_stmt* pStmt, int32_t index, float_t value) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Float=_BU_SQLite_Bind_Float@12") - return sqlite3_bind_double(pStmt, index, (double_t)value); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Double(sqlite3_stmt* pStmt, int32_t index, double_t* pValue) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Double=_BU_SQLite_Bind_Double@12") - return sqlite3_bind_double(pStmt, index, *pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Text(sqlite3_stmt* pStmt, int32_t index, const char* zData, int32_t nData) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Text=_BU_SQLite_Bind_Text@16") - return sqlite3_bind_text(pStmt, index, zData, nData, nullptr); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Blob(sqlite3_stmt* pStmt, int32_t index, void* zData, int32_t nData) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Blob=_BU_SQLite_Bind_Blob@16") - return sqlite3_bind_blob(pStmt, index, zData, nData, nullptr); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Value(sqlite3_stmt* pStmt, int32_t index, const sqlite3_value* pValue) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Value=_BU_SQLite_Bind_Value@12") - return sqlite3_bind_value(pStmt, index, pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_ZeroBlob(sqlite3_stmt* pStmt, int32_t index, int32_t bytes) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_ZeroBlob=_BU_SQLite_Bind_ZeroBlob@12") - return sqlite3_bind_zeroblob(pStmt, index, bytes); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Parameter_Count(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Parameter_Count=_BU_SQLite_Bind_Parameter_Count@4") - return sqlite3_bind_parameter_count(pStmt); -} - -DLL_FUNCTION(const char*) BU_SQLite_Bind_Parameter_Name(sqlite3_stmt* pStmt, int32_t index) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Parameter_Name=_BU_SQLite_Bind_Parameter_Name@8") - return sqlite3_bind_parameter_name(pStmt, index); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Bind_Parameter_Index(sqlite3_stmt* pStmt, const char* zName) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Parameter_Index=_BU_SQLite_Bind_Parameter_Index@8") - return sqlite3_bind_parameter_index(pStmt, zName); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Clear_Bindings(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Clear_Bindings=_BU_SQLite_Clear_Bindings@4") - return sqlite3_clear_bindings(pStmt); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Column_Count(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Count=_BU_SQLite_Column_Count@4") - return sqlite3_column_count(pStmt); -} - -DLL_FUNCTION(const char*) BU_SQLite_Column_Name(sqlite3_stmt* pStmt, int32_t n) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Name=_BU_SQLite_Column_Name@8") - return sqlite3_column_name(pStmt, n); -} - -DLL_FUNCTION(const char*) BU_SQLite_Column_DeclaredType(sqlite3_stmt* pStmt, int32_t n) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_DeclaredType=_BU_SQLite_Column_DeclaredType@8") - return sqlite3_column_decltype(pStmt, n); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Step(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Step=_BU_SQLite_Step@4") - return sqlite3_step(pStmt); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Data_Count(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Data_Count=_BU_SQLite_Data_Count@4") - return sqlite3_data_count(pStmt); -} - -DLL_FUNCTION(const void*) BU_SQLite_Column_Blob(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Blob=_BU_SQLite_Column_Blob@8") - return sqlite3_column_blob(pStmt, iCol); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Column_Bytes(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Bytes=_BU_SQLite_Column_Bytes@8") - return sqlite3_column_bytes(pStmt, iCol); -} - -DLL_FUNCTION(float_t) BU_SQLite_Column_Float(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Float=_BU_SQLite_Column_Float@8") - return (float_t)sqlite3_column_double(pStmt, iCol); -} - -DLL_FUNCTION(double_t*) BU_SQLite_Column_Double(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Double=_BU_SQLite_Column_Double@8") - return new double_t(sqlite3_column_double(pStmt, iCol)); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Column_Int(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Int=_BU_SQLite_Column_Int@8") - return sqlite3_column_int(pStmt, iCol); -} - -DLL_FUNCTION(int64_t*) BU_SQLite_Column_LongLong(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_LongLong=_BU_SQLite_Column_LongLong@8") - return new int64_t(sqlite3_column_int64(pStmt, iCol)); -} - -DLL_FUNCTION(const char*) BU_SQLite_Column_Text(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Text=_BU_SQLite_Column_Text@8") - return (const char*)sqlite3_column_text(pStmt, iCol); -} - -DLL_FUNCTION(sqlite3_value*) BU_SQLite_Column_Value(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Value=_BU_SQLite_Column_Value@8") - return sqlite3_column_value(pStmt, iCol); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Column_Type(sqlite3_stmt* pStmt, int32_t iCol) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Type=_BU_SQLite_Column_Type@8") - return sqlite3_column_type(pStmt, iCol); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Finalize(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Finalize=_BU_SQLite_Finalize@4") - return sqlite3_finalize(pStmt); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Reset(sqlite3_stmt* pStmt) { -#pragma comment(linker, "/EXPORT:BU_SQLite_Reset=_BU_SQLite_Reset@4") - return sqlite3_reset(pStmt); -} -#pragma endregion Prepared Statements - -#pragma region SQLite Values -DLL_FUNCTION(const void*) BU_SQLite_Value_Blob(sqlite3_value* pValue) { - return sqlite3_value_blob(pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Value_Bytes(sqlite3_value* pValue) { - return sqlite3_value_bytes(pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Value_Int(sqlite3_value* pValue) { - return sqlite3_value_int(pValue); -} - -DLL_FUNCTION(int64_t*) BU_SQLite_Value_LongLong(sqlite3_value* pValue) { - return new int64_t(sqlite3_value_int64(pValue)); -} - -DLL_FUNCTION(float_t) BU_SQLite_Value_Float(sqlite3_value* pValue) { - return (float_t)sqlite3_value_double(pValue); -} - -DLL_FUNCTION(double_t*) BU_SQLite_Value_Double(sqlite3_value* pValue) { - return new double_t(sqlite3_value_double(pValue)); -} - -DLL_FUNCTION(const char*) BU_SQLite_Value_Text(sqlite3_value* pValue) { - return (const char*)sqlite3_value_text(pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Value_Type(sqlite3_value* pValue) { - return sqlite3_value_type(pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Value_Numeric_Type(sqlite3_value* pValue) { - return sqlite3_value_numeric_type(pValue); -} - -DLL_FUNCTION(int32_t) BU_SQLite_Value_SubType(sqlite3_value* pValue) { - return sqlite3_value_subtype(pValue); -} - -DLL_FUNCTION(sqlite3_value*) BU_SQLite_Value_Duplicate(sqlite3_value* pValue) { - return sqlite3_value_dup(pValue); -} - -DLL_FUNCTION(void) BU_SQLite_Value_Free(sqlite3_value* pValue) { - return sqlite3_value_free(pValue); -} -#pragma endregion - +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "SQLite.h" +#include "..\BlitzPointer\BlitzPointer.h" + +static int32_t __BU_SQLite_OpenSimpleError = 0; + +#pragma region Core +DLL_FUNCTION(const char*) BU_SQLite_Version() { +#pragma comment(linker, "/EXPORT:BU_SQLite_Version=_BU_SQLite_Version@0") + return sqlite3_libversion(); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Version_Number() { +#pragma comment(linker, "/EXPORT:BU_SQLite_Version_Number=_BU_SQLite_Version_Number@0") + return sqlite3_libversion_number(); +} + +DLL_FUNCTION(const char*) BU_SQLite_SourceID() { +#pragma comment(linker, "/EXPORT:BU_SQLite_SourceID=_BU_SQLite_SourceID@0") + return sqlite3_sourceid(); +} + +DLL_FUNCTION(int32_t) BU_SQLite_CompileOption_Used(const char* zOptName) { +#pragma comment(linker, "/EXPORT:BU_SQLite_CompileOption_Used=_BU_SQLite_CompileOption_Used@4") + return sqlite3_compileoption_used(zOptName); +} + +DLL_FUNCTION(const char*) BU_SQLite_CompileOption_Get(int32_t n) { +#pragma comment(linker, "/EXPORT:BU_SQLite_CompileOption_Get=_BU_SQLite_CompileOption_Get@4") + return sqlite3_compileoption_get(n); +} + +DLL_FUNCTION(int32_t) BU_SQLite_ThreadSafe() { +#pragma comment(linker, "/EXPORT:BU_SQLite_ThreadSafe=_BU_SQLite_ThreadSafe@0") + return sqlite3_threadsafe(); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Initialize() { +#pragma comment(linker, "/EXPORT:BU_SQLite_Initialize=_BU_SQLite_Initialize@0") + return sqlite3_initialize(); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Shutdown() { +#pragma comment(linker, "/EXPORT:BU_SQLite_Shutdown=_BU_SQLite_Shutdown@0") + return sqlite3_shutdown(); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Sleep(int32_t ms) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Sleep=_BU_SQLite_Sleep@4") + return sqlite3_sleep(ms); +} +#pragma endregion Core + +#pragma region Open & Close +DLL_FUNCTION(int32_t) BU_SQLite_Open(const char* file, sqlite3** db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Open=_BU_SQLite_Open@8") + return sqlite3_open(file, db); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Open_V2(const char* file, sqlite3** db, int32_t flags, const char* zVfs) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Open_V2=_BU_SQLite_Open_V2@16") + return sqlite3_open_v2(file, db, flags, zVfs); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Close(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Close=_BU_SQLite_Close@4") + return sqlite3_close(db); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Close_V2(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Close_V2=_BU_SQLite_Close_V2@4") + return sqlite3_close_v2(db); +} + +// Simple Open() and Open_V2() +DLL_FUNCTION(sqlite3*) BU_SQLite_OpenSimple(const char* file) { +#pragma comment(linker, "/EXPORT:BU_SQLite_OpenSimple=_BU_SQLite_OpenSimple@4") + sqlite3** db = new sqlite3*(); + __BU_SQLite_OpenSimpleError = sqlite3_open(file, db); + sqlite3* ret = *db; delete db; return ret; +} + +DLL_FUNCTION(sqlite3*) BU_SQLite_OpenSimple_V2(const char* file, int32_t flags, const char* zVfs) { +#pragma comment(linker, "/EXPORT:BU_SQLite_OpenSimple_V2=_BU_SQLite_OpenSimple_V2@12") + sqlite3** db = new sqlite3*(); + __BU_SQLite_OpenSimpleError = sqlite3_open_v2(file, db, flags, zVfs); + sqlite3* ret = *db; + delete db; + return ret; +} + +DLL_FUNCTION(int32_t) BU_SQLite_OpenSimpleError() { +#pragma comment(linker, "/EXPORT:BU_SQLite_OpenSimpleError=_BU_SQLite_OpenSimpleError@0") + return __BU_SQLite_OpenSimpleError; +} +#pragma endregion Open & Close + +#pragma region Error Handling +DLL_FUNCTION(int32_t) BU_SQLite_Error_Code(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Error_Code=_BU_SQLite_Error_Code@4") + return sqlite3_errcode(db); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Extended_Error_Code(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Extended_Error_Code=_BU_SQLite_Extended_Error_Code@4") + return sqlite3_extended_errcode(db); +} + +DLL_FUNCTION(const char*) BU_SQLite_Error_Message(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Error_Message=_BU_SQLite_Error_Message@4") + return sqlite3_errmsg(db); +} + +DLL_FUNCTION(const char*) BU_SQLite_Error_String(int32_t errCode) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Error_String=_BU_SQLite_Error_String@4") + return sqlite3_errstr(errCode); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Extended_Result_Codes(sqlite3* db, int32_t onoff) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Extended_Result_Codes=_BU_SQLite_Extended_Result_Codes@8") + return sqlite3_extended_result_codes(db, onoff); +} +#pragma endregion Error Handling + +#pragma region Busy Handler +DLL_FUNCTION(int32_t) BU_SQLite_Busy_Timeout(sqlite3* db, int32_t timeout) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Busy_Timeout=_BU_SQLite_Busy_Timeout@8") + return sqlite3_busy_timeout(db, timeout); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Busy_Handler(sqlite3* db, int(*phandlerfunc)(void*, int), void* param) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Busy_Handler=_BU_SQLite_Busy_Handler@12") + return sqlite3_busy_handler(db, phandlerfunc, param); +} + +int __cdecl BU_SQLite_Busy_Handler_SimpleInternal(void* handler, int prm) { + BP_BlitzFunction1_t lpFunctionPointer = (BP_BlitzFunction1_t)handler; + return lpFunctionPointer((int32_t)prm); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Busy_Handler_Simple(sqlite3* db, BP_BlitzFunction1_t handler) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Busy_Handler_Simple=_BU_SQLite_Busy_Handler_Simple@8") + return sqlite3_busy_handler(db, BU_SQLite_Busy_Handler_SimpleInternal, (void*)handler); +} +#pragma endregion Busy Handler + +#pragma region Memory Management +DLL_FUNCTION(int64_t*) BU_SQLite_Memory_Used() { +#pragma comment(linker, "/EXPORT:BU_SQLite_Memory_Used=_BU_SQLite_Memory_Used@0") + return new int64_t(sqlite3_memory_used()); +} + +DLL_FUNCTION(int64_t*) BU_SQLite_Memory_Highwater(int32_t bReset) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Memory_Highwater=_BU_SQLite_Memory_Highwater@4") + return new int64_t(sqlite3_memory_highwater(bReset)); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Release_Memory(int32_t bytes) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Release_Memory=_BU_SQLite_Release_Memory@4") + return sqlite3_release_memory(bytes); +} + +DLL_FUNCTION(int32_t) BU_SQLite_DB_Release_Memory(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_DB_Release_Memory=_BU_SQLite_DB_Release_Memory@4") + return sqlite3_db_release_memory(db); +} + +DLL_FUNCTION(void) BU_SQLite_Randomness(int32_t n, void* p) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Randomness=_BU_SQLite_Randomness@8") + sqlite3_randomness(n, p); +} +#pragma endregion Memory Management + +#pragma region Database Management & Modification +DLL_FUNCTION(int32_t) BU_SQLite_Exec(sqlite3* db, const char* sql, int(*callbackp)(void*, int, char**, char**), void* param, char** errMsg) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Exec=_BU_SQLite_Exec@20") + return sqlite3_exec(db, sql, callbackp, param, errMsg); +} + +DLL_FUNCTION(int64_t*) BU_SQLite_Last_Insert_RowId(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Last_Insert_RowId=_BU_SQLite_Last_Insert_RowId@4") + return new int64_t(sqlite3_last_insert_rowid(db)); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Changes(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Changes=_BU_SQLite_Changes@4") + return sqlite3_changes(db); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Total_Changes(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Total_Changes=_BU_SQLite_Total_Changes@4") + return sqlite3_total_changes(db); +} + +DLL_FUNCTION(void) BU_SQLite_Interrupt(sqlite3* db) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Interrupt=_BU_SQLite_Interrupt@4") + return sqlite3_interrupt(db); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Complete(const char* sql) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Complete=_BU_SQLite_Complete@4") + return sqlite3_complete(sql); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Get_Table(sqlite3* db, const char* zSql, char*** pazResult, int32_t* pnRow, int32_t* pnColumn, char** pzErrMessage) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Get_Table=_BU_SQLite_Get_Table@24") + return sqlite3_get_table(db, zSql, pazResult, pnRow, pnColumn, pzErrMessage); +} + +DLL_FUNCTION(void) BU_SQLite_Free_Table(char** result) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Free_Table=_BU_SQLite_Free_Table@4") + sqlite3_free_table(result); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Set_Authorizer(sqlite3* db, + int(*xAuth)(void*, int, const char*, const char*, const char*, const char*), + void *pArg) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Set_Authorizer=_BU_SQLite_Set_Authorizer@12") + return sqlite3_set_authorizer(db, xAuth, pArg); +} + +DLL_FUNCTION(void*) BU_SQLite_Trace(sqlite3* db, + void(*xTrace)(void*, const char*), + void* param) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Trace=_BU_SQLite_Trace@12") + return sqlite3_trace(db, xTrace, param); +} + +DLL_FUNCTION(void*) BU_SQLite_Profile(sqlite3* db, + void(*xProfile)(void*, const char*, sqlite3_uint64), + void* param) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Profile=_BU_SQLite_Profile@12") + return sqlite3_profile(db, xProfile, param); +} + +DLL_FUNCTION(void) BU_SQLite_Progress_Handler(sqlite3* db, int32_t nOps, int32_t(*xProgress)(void*), void* pArg) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Progress_Handler=_BU_SQLite_Progress_Handler@16") + sqlite3_progress_handler(db, nOps, xProgress, pArg); +} + +DLL_FUNCTION(const char*) BU_SQLite_URI_Parameter(const char* zFilename, const char* zParam) { +#pragma comment(linker, "/EXPORT:BU_SQLite_URI_Parameter=_BU_SQLite_URI_Parameter@8") + return sqlite3_uri_parameter(zFilename, zParam); +} + +DLL_FUNCTION(int32_t) BU_SQLite_URI_Boolean(const char* zFilename, const char* zParam, int32_t bDefault) { +#pragma comment(linker, "/EXPORT:BU_SQLite_URI_Boolean=_BU_SQLite_URI_Boolean@12") + return sqlite3_uri_boolean(zFilename, zParam, bDefault); +} + +DLL_FUNCTION(int64_t*) BU_SQLite_URI_LongLong(const char* zFilename, const char* zParam, int64_t* bDefault) { +#pragma comment(linker, "/EXPORT:BU_SQLite_URI_LongLong=_BU_SQLite_URI_LongLong@12") + return new int64_t(sqlite3_uri_int64(zFilename, zParam, *bDefault)); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Limit(sqlite3* db, int32_t id, int32_t newVal) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Limit=_BU_SQLite_Limit@12") + return sqlite3_limit(db, id, newVal); +} +#pragma endregion Database Management & Modification + +#pragma region Prepared Statements +DLL_FUNCTION(sqlite3_stmt*) BU_SQLite_Next_Statement(sqlite3* db, sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Next_Statement=_BU_SQLite_Next_Statement@8") + return sqlite3_next_stmt(db, pStmt); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Prepare(sqlite3* db, const char* zSql, int32_t nByte, sqlite3_stmt** ppStmt, const char** pzTail) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Prepare=_BU_SQLite_Prepare@20") + return sqlite3_prepare(db, zSql, nByte, ppStmt, pzTail); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Prepare_V2(sqlite3* db, const char* zSql, int32_t nByte, sqlite3_stmt** ppStmt, const char** pzTail) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Prepare_V2=_BU_SQLite_Prepare_V2@20") + return sqlite3_prepare_v2(db, zSql, nByte, ppStmt, pzTail); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Statement_ReadOnly(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Statement_ReadOnly=_BU_SQLite_Statement_ReadOnly@4") + return sqlite3_stmt_readonly(pStmt); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Statement_Busy(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Statement_Busy=_BU_SQLite_Statement_Busy@4") + return sqlite3_stmt_busy(pStmt); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Statement_Status(sqlite3_stmt* pStmt, int32_t op, int32_t resetFlag) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Statement_Status=_BU_SQLite_Statement_Status@12") + return sqlite3_stmt_status(pStmt, op, resetFlag); +} + +DLL_FUNCTION(const char*) BU_SQLite_SQL(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_SQL=_BU_SQLite_SQL@4") + return sqlite3_sql(pStmt); +} + +DLL_FUNCTION(sqlite3*) BU_SQLite_Database_Handle(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Database_Handle=_BU_SQLite_Database_Handle@4") + return sqlite3_db_handle(pStmt); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Null(sqlite3_stmt* pStmt, int32_t index) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Null=_BU_SQLite_Bind_Null@8") + return sqlite3_bind_null(pStmt, index); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Int(sqlite3_stmt* pStmt, int32_t index, int32_t value) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Int=_BU_SQLite_Bind_Int@12") + return sqlite3_bind_int(pStmt, index, value); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_LongLong(sqlite3_stmt* pStmt, int32_t index, int64_t* pValue) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_LongLong=_BU_SQLite_Bind_LongLong@12") + return sqlite3_bind_int64(pStmt, index, *pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Float(sqlite3_stmt* pStmt, int32_t index, float_t value) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Float=_BU_SQLite_Bind_Float@12") + return sqlite3_bind_double(pStmt, index, (double_t)value); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Double(sqlite3_stmt* pStmt, int32_t index, double_t* pValue) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Double=_BU_SQLite_Bind_Double@12") + return sqlite3_bind_double(pStmt, index, *pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Text(sqlite3_stmt* pStmt, int32_t index, const char* zData, int32_t nData) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Text=_BU_SQLite_Bind_Text@16") + return sqlite3_bind_text(pStmt, index, zData, nData, nullptr); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Blob(sqlite3_stmt* pStmt, int32_t index, void* zData, int32_t nData) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Blob=_BU_SQLite_Bind_Blob@16") + return sqlite3_bind_blob(pStmt, index, zData, nData, nullptr); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Value(sqlite3_stmt* pStmt, int32_t index, const sqlite3_value* pValue) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Value=_BU_SQLite_Bind_Value@12") + return sqlite3_bind_value(pStmt, index, pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_ZeroBlob(sqlite3_stmt* pStmt, int32_t index, int32_t bytes) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_ZeroBlob=_BU_SQLite_Bind_ZeroBlob@12") + return sqlite3_bind_zeroblob(pStmt, index, bytes); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Parameter_Count(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Parameter_Count=_BU_SQLite_Bind_Parameter_Count@4") + return sqlite3_bind_parameter_count(pStmt); +} + +DLL_FUNCTION(const char*) BU_SQLite_Bind_Parameter_Name(sqlite3_stmt* pStmt, int32_t index) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Parameter_Name=_BU_SQLite_Bind_Parameter_Name@8") + return sqlite3_bind_parameter_name(pStmt, index); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Bind_Parameter_Index(sqlite3_stmt* pStmt, const char* zName) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Bind_Parameter_Index=_BU_SQLite_Bind_Parameter_Index@8") + return sqlite3_bind_parameter_index(pStmt, zName); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Clear_Bindings(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Clear_Bindings=_BU_SQLite_Clear_Bindings@4") + return sqlite3_clear_bindings(pStmt); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Column_Count(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Count=_BU_SQLite_Column_Count@4") + return sqlite3_column_count(pStmt); +} + +DLL_FUNCTION(const char*) BU_SQLite_Column_Name(sqlite3_stmt* pStmt, int32_t n) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Name=_BU_SQLite_Column_Name@8") + return sqlite3_column_name(pStmt, n); +} + +DLL_FUNCTION(const char*) BU_SQLite_Column_DeclaredType(sqlite3_stmt* pStmt, int32_t n) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_DeclaredType=_BU_SQLite_Column_DeclaredType@8") + return sqlite3_column_decltype(pStmt, n); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Step(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Step=_BU_SQLite_Step@4") + return sqlite3_step(pStmt); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Data_Count(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Data_Count=_BU_SQLite_Data_Count@4") + return sqlite3_data_count(pStmt); +} + +DLL_FUNCTION(const void*) BU_SQLite_Column_Blob(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Blob=_BU_SQLite_Column_Blob@8") + return sqlite3_column_blob(pStmt, iCol); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Column_Bytes(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Bytes=_BU_SQLite_Column_Bytes@8") + return sqlite3_column_bytes(pStmt, iCol); +} + +DLL_FUNCTION(float_t) BU_SQLite_Column_Float(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Float=_BU_SQLite_Column_Float@8") + return (float_t)sqlite3_column_double(pStmt, iCol); +} + +DLL_FUNCTION(double_t*) BU_SQLite_Column_Double(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Double=_BU_SQLite_Column_Double@8") + return new double_t(sqlite3_column_double(pStmt, iCol)); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Column_Int(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Int=_BU_SQLite_Column_Int@8") + return sqlite3_column_int(pStmt, iCol); +} + +DLL_FUNCTION(int64_t*) BU_SQLite_Column_LongLong(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_LongLong=_BU_SQLite_Column_LongLong@8") + return new int64_t(sqlite3_column_int64(pStmt, iCol)); +} + +DLL_FUNCTION(const char*) BU_SQLite_Column_Text(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Text=_BU_SQLite_Column_Text@8") + return (const char*)sqlite3_column_text(pStmt, iCol); +} + +DLL_FUNCTION(sqlite3_value*) BU_SQLite_Column_Value(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Value=_BU_SQLite_Column_Value@8") + return sqlite3_column_value(pStmt, iCol); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Column_Type(sqlite3_stmt* pStmt, int32_t iCol) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Column_Type=_BU_SQLite_Column_Type@8") + return sqlite3_column_type(pStmt, iCol); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Finalize(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Finalize=_BU_SQLite_Finalize@4") + return sqlite3_finalize(pStmt); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Reset(sqlite3_stmt* pStmt) { +#pragma comment(linker, "/EXPORT:BU_SQLite_Reset=_BU_SQLite_Reset@4") + return sqlite3_reset(pStmt); +} +#pragma endregion Prepared Statements + +#pragma region SQLite Values +DLL_FUNCTION(const void*) BU_SQLite_Value_Blob(sqlite3_value* pValue) { + return sqlite3_value_blob(pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Value_Bytes(sqlite3_value* pValue) { + return sqlite3_value_bytes(pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Value_Int(sqlite3_value* pValue) { + return sqlite3_value_int(pValue); +} + +DLL_FUNCTION(int64_t*) BU_SQLite_Value_LongLong(sqlite3_value* pValue) { + return new int64_t(sqlite3_value_int64(pValue)); +} + +DLL_FUNCTION(float_t) BU_SQLite_Value_Float(sqlite3_value* pValue) { + return (float_t)sqlite3_value_double(pValue); +} + +DLL_FUNCTION(double_t*) BU_SQLite_Value_Double(sqlite3_value* pValue) { + return new double_t(sqlite3_value_double(pValue)); +} + +DLL_FUNCTION(const char*) BU_SQLite_Value_Text(sqlite3_value* pValue) { + return (const char*)sqlite3_value_text(pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Value_Type(sqlite3_value* pValue) { + return sqlite3_value_type(pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Value_Numeric_Type(sqlite3_value* pValue) { + return sqlite3_value_numeric_type(pValue); +} + +DLL_FUNCTION(int32_t) BU_SQLite_Value_SubType(sqlite3_value* pValue) { + return sqlite3_value_subtype(pValue); +} + +DLL_FUNCTION(sqlite3_value*) BU_SQLite_Value_Duplicate(sqlite3_value* pValue) { + return sqlite3_value_dup(pValue); +} + +DLL_FUNCTION(void) BU_SQLite_Value_Free(sqlite3_value* pValue) { + return sqlite3_value_free(pValue); +} +#pragma endregion + diff --git a/README.md b/README.md index a07727b..a5059c7 100644 --- a/README.md +++ b/README.md @@ -1,173 +1,173 @@ -# BlitzUtility -BlitzUtility is aimed at extending Blitz beyond it's initial capabilities and is a sub-project of BlitzExtensions. -All functions assume that you are passing valid parameters and do no extra checking to reduce performance impact. - -# Functionality -## Containers -### List -An element-based method of creating a List in Blitz, works by creating a clone of the original Type and inserting the elements into the new flow. - -* List% = BU_List_Create(TypeObject*) -Creates a new list from an existing object, using it as a way of accessing the currently selected List entry. -* BU_List_Destroy(List%) -Destroys an existing List, returning it's objects into the original type. -* Sucess% = BU_List_First(List%) -Tries to selects the first object in a List, returning false if it failed. -* Sucess% = BU_List_Last(List%) -Tries to selects the last object in a List, returning false if it failed. -* Sucess% = BU_List_Previous(List%) -Tries to selects the previous object from the currently selected one, returning false if it failed. -* Sucess% = BU_List_Next(List%) -Tries to selects the next object from the currently selected one, returning false if it failed. -* Success% = BU_List_Before(List%, TypeObject*) -Tries to select the element before the given object, returning false if it failed. -* Success% = BU_List_After(List%, TypeObject*) -Tries to select the element After the given object, returning false if it failed. -* BU_List_Insert(List%, TypeObject*) -Inserts an object at the end of the given list. -* BU_List_InsertEx(List%, TypeObject*, OtherObject*) -Inserts an object after the given other object. -* BU_List_Remove(List%, TypeObject*) -Removes an object from a list, returning it to the original type. - -### Type List -A type-based method of creating Lists in Blitz, works by modifying the base Type. - -* List% = BU_TypeList_Create(TypeObject*) -Creates a new list from an existing object, immediately removing it from the original type and inserting it into it's own list. -* BU_TypeList_Destroy(List%) -Destroy an existing list, returning the objects into the flow of the base type. -* BU_TypeList_Activate(List%) -Activates the list, making elements inside it available for use. -* BU_TypeList_Deactivate(List%) -Deactivates the list, restoring the flow of elements to before activation. - -## Types -### Long Long -64-bit integers for Blitz. - -* LongLong% = BU_LongLong_Create%() -* BU_LongLong_Destroy(LongLong%) -* LongLong% = BU_LongLong_Copy%(LongLong%) -* LongLong% = BU_LongLong_TempCreate%() -* LongLong% = BU_LongLong_TempCopy%(LongLong%) -* BU_LongLong_SetTemp(LongLong%) -* BU_LongLong_UnsetTemp(LongLong%) -* BU_LongLong_TempCleanup() -* BU_LongLong_Set(LongLong%, LongLong%) -* BU_LongLong_SetV(LongLong%, LongHigh%, LongLow%) -* BU_LongLong_Add(LongLong%, LongLong%) -* BU_LongLong_AddV(LongLong%, LongHigh%, LongLow%) -* BU_LongLong_Sub(LongLong%, LongLong%) -* BU_LongLong_SubV(LongLong%, LongHigh%, LongLow%) -* BU_LongLong_Mul(LongLong%, LongLong%) -* BU_LongLong_MulV(LongLong%, LongHigh%, LongLow%) -* BU_LongLong_Div(LongLong%, LongLong%) -* BU_LongLong_DivV(LongLong%, LongHigh%, LongLow%) -* Result% = BU_LongLong_Compare%(LongLong%, LongLong%) -* Result% = BU_LongLong_CompareV%(LongLong%, LongHigh%, LongLow%) -* String$ = BU_LongLong_ToString$(LongLong%) -* LongLong% = BU_LongLong_FromString%(String$) -* Long% = BU_LongLong_ToLong%(LongLong%, Modulus%) -* LongLong% = BU_LongLong_FromLong%(LongHigh%, LongLow%) -* Long% = BU_LongLong_ToLongHigh%(LongLong%) -* Long% = BU_LongLong_ToLongLow%(LongLong%) -* Float# = BU_LongLong_ToFloat#(LongLong%) -* LongLong% = BU_LongLong_FromFloat%(Float#) -* Double% = BU_LongLong_ToDouble%(LongLong%) -* LongLong% = BU_LongLong_FromDouble%(double%) -* String$ = BU_LongLong_Serialize$(LongLong%) -* LongLong% = BU_LongLong_Deserialize%(String$) - -### Double -64-bit floating point for Blitz. - -* Double% = BU_Double_Create%() -* BU_Double_Destroy(Double%) -* Double% = BU_Double_Copy%(Double%) -* Double% = BU_Double_TempCreate%() -* Double% = BU_Double_TempCopy%(Double%) -* BU_Double_SetTemp(Double%) -* BU_Double_UnsetTemp(Double%) -* BU_Double_TempCleanup() -* BU_Double_Set(Double%, Double%) -* BU_Double_SetF(Double%, Float#) -* BU_Double_Add(Double%, Double%) -* BU_Double_AddF(Double%, Float#) -* BU_Double_Sub(Double%, Double%) -* BU_Double_SubF(Double%, Float#) -* BU_Double_Mul(Double%, Double%) -* BU_Double_MulF(Double%, Float#) -* BU_Double_Div(Double%, Double%) -* BU_Double_DivF(Double%, Float#) -* Result% = BU_Double_Compare%(Double%, Double%) -Compares the two doubles and returns combinations of the following: 1 for equal, 2 for smaller, 4 for greater. -* Result% = BU_Double_CompareF%(Double%, Float#) -Compares the double as float with another float and returns combinations of the following: 1 for equal, 2 for smaller, 4 for greater. -* String$ = BU_Double_ToString$(Double%) -* Double% = BU_Double_FromString%(String$) -* Float# = BU_Double_ToFloat#(Double%) -* Double% = BU_Double_FromFloat%(Float#) -* LongLong% = BU_Double_ToLongLong%(Double%) -* Double% = BU_Double_FromLongLong%(LongLong%) -* String$ = BU_Double_Serialize$(Double%) -* String$ = BU_Double_Deserialize%(String$) - -## Utility -### Display Enumerator -Retrieve information about displays from Windows. - -* DisplayEnumerator% = BU_DisplayEnumerator_Create%() -* BU_DisplayEnumerator_Destroy(DisplayEnumerator%) -* BU_DisplayEnumerator_Enumerate%(DisplayEnumerator%) -* BU_DisplayEnumerator_Count%(DisplayEnumerator%) -* BU_DisplayEnumerator_Retrieve%(DisplayEnumerator%, index%, Rect*) - -### Indexer V1 -Fast array-based index generation. Uses a constant chunk of memory. - -* Indexer% = BU_IndexerV1_Create%() -* BU_IndexerV1_Destroy(Indexer%) -* BU_IndexerV1_Mark(Indexer%, Used%) -* BU_IndexerV1_MarkFree(Indexer%) -* BU_IndexerV1_MarkUsed(Indexer%) -* Result% = BU_IndexerV1_Is%(Indexer%, Used%) -* Result% = BU_IndexerV1_IsFree%(Indexer%) -* Result% = BU_IndexerV1_IsUsed%(Indexer%) -* Index% = BU_IndexerV1_Get%(Indexer%) -* Amount% = BU_IndexerV1_Count%(Indexer%, Used%) -* Amount% = BU_IndexerV1_CountFree%(Indexer%) -* Amount% = BU_IndexerV1_CountUsed%(Indexer%) - -### Indexer V2 -Fast vector-based index generation, uses a dynamic amount of memory. - -* Indexer% = BU_IndexerV2_Create%() -* BU_IndexerV2_Destroy(Indexer%) -* BU_IndexerV2_Mark(Indexer%, Used%) -* BU_IndexerV2_MarkFree(Indexer%) -* BU_IndexerV2_MarkUsed(Indexer%) -* Result% = BU_IndexerV2_Is%(Indexer%, Used%) -* Result% = BU_IndexerV2_IsFree%(Indexer%) -* Result% = BU_IndexerV2_IsUsed%(Indexer%) -* Index% = BU_IndexerV2_Get%(Indexer%) -* Amount% = BU_IndexerV2_Count%(Indexer%, Used%) -* Amount% = BU_IndexerV2_CountFree%(Indexer%) -* Amount% = BU_IndexerV2_CountUsed%(Indexer%) - -### Mass Operation -Allows chaining operations on custom types, such as LongLong and Double. See contants - -* BU_MassOp_Create%(length%) -* BU_MassOp_Destroy(massop%) -* BU_MassOp_Instruction%(massop%, index%, type%, code%, leftOperand%, rightOperand%, result%) -* BU_MassOp_Run(massop%) - -### Window Message Handler -Easily handle messages sent to Blitz windows using these functions. May not work as expected initially. - -* BU_WindowMessageHandler_Install(hwnd%) -* BU_WindowMessageHandler_Uninstall(hwnd%) -* Count% = BU_WindowMessageHandler_Message_Close%(hwnd%) -* Count% = BU_WindowMessageHandler_Message_Destroy%(hwnd%) +# BlitzUtility +BlitzUtility is aimed at extending Blitz beyond it's initial capabilities and is a sub-project of BlitzExtensions. +All functions assume that you are passing valid parameters and do no extra checking to reduce performance impact. + +# Functionality +## Containers +### List +An element-based method of creating a List in Blitz, works by creating a clone of the original Type and inserting the elements into the new flow. + +* List% = BU_List_Create(TypeObject*) +Creates a new list from an existing object, using it as a way of accessing the currently selected List entry. +* BU_List_Destroy(List%) +Destroys an existing List, returning it's objects into the original type. +* Sucess% = BU_List_First(List%) +Tries to selects the first object in a List, returning false if it failed. +* Sucess% = BU_List_Last(List%) +Tries to selects the last object in a List, returning false if it failed. +* Sucess% = BU_List_Previous(List%) +Tries to selects the previous object from the currently selected one, returning false if it failed. +* Sucess% = BU_List_Next(List%) +Tries to selects the next object from the currently selected one, returning false if it failed. +* Success% = BU_List_Before(List%, TypeObject*) +Tries to select the element before the given object, returning false if it failed. +* Success% = BU_List_After(List%, TypeObject*) +Tries to select the element After the given object, returning false if it failed. +* BU_List_Insert(List%, TypeObject*) +Inserts an object at the end of the given list. +* BU_List_InsertEx(List%, TypeObject*, OtherObject*) +Inserts an object after the given other object. +* BU_List_Remove(List%, TypeObject*) +Removes an object from a list, returning it to the original type. + +### Type List +A type-based method of creating Lists in Blitz, works by modifying the base Type. + +* List% = BU_TypeList_Create(TypeObject*) +Creates a new list from an existing object, immediately removing it from the original type and inserting it into it's own list. +* BU_TypeList_Destroy(List%) +Destroy an existing list, returning the objects into the flow of the base type. +* BU_TypeList_Activate(List%) +Activates the list, making elements inside it available for use. +* BU_TypeList_Deactivate(List%) +Deactivates the list, restoring the flow of elements to before activation. + +## Types +### Long Long +64-bit integers for Blitz. + +* LongLong% = BU_LongLong_Create%() +* BU_LongLong_Destroy(LongLong%) +* LongLong% = BU_LongLong_Copy%(LongLong%) +* LongLong% = BU_LongLong_TempCreate%() +* LongLong% = BU_LongLong_TempCopy%(LongLong%) +* BU_LongLong_SetTemp(LongLong%) +* BU_LongLong_UnsetTemp(LongLong%) +* BU_LongLong_TempCleanup() +* BU_LongLong_Set(LongLong%, LongLong%) +* BU_LongLong_SetV(LongLong%, LongHigh%, LongLow%) +* BU_LongLong_Add(LongLong%, LongLong%) +* BU_LongLong_AddV(LongLong%, LongHigh%, LongLow%) +* BU_LongLong_Sub(LongLong%, LongLong%) +* BU_LongLong_SubV(LongLong%, LongHigh%, LongLow%) +* BU_LongLong_Mul(LongLong%, LongLong%) +* BU_LongLong_MulV(LongLong%, LongHigh%, LongLow%) +* BU_LongLong_Div(LongLong%, LongLong%) +* BU_LongLong_DivV(LongLong%, LongHigh%, LongLow%) +* Result% = BU_LongLong_Compare%(LongLong%, LongLong%) +* Result% = BU_LongLong_CompareV%(LongLong%, LongHigh%, LongLow%) +* String$ = BU_LongLong_ToString$(LongLong%) +* LongLong% = BU_LongLong_FromString%(String$) +* Long% = BU_LongLong_ToLong%(LongLong%, Modulus%) +* LongLong% = BU_LongLong_FromLong%(LongHigh%, LongLow%) +* Long% = BU_LongLong_ToLongHigh%(LongLong%) +* Long% = BU_LongLong_ToLongLow%(LongLong%) +* Float# = BU_LongLong_ToFloat#(LongLong%) +* LongLong% = BU_LongLong_FromFloat%(Float#) +* Double% = BU_LongLong_ToDouble%(LongLong%) +* LongLong% = BU_LongLong_FromDouble%(double%) +* String$ = BU_LongLong_Serialize$(LongLong%) +* LongLong% = BU_LongLong_Deserialize%(String$) + +### Double +64-bit floating point for Blitz. + +* Double% = BU_Double_Create%() +* BU_Double_Destroy(Double%) +* Double% = BU_Double_Copy%(Double%) +* Double% = BU_Double_TempCreate%() +* Double% = BU_Double_TempCopy%(Double%) +* BU_Double_SetTemp(Double%) +* BU_Double_UnsetTemp(Double%) +* BU_Double_TempCleanup() +* BU_Double_Set(Double%, Double%) +* BU_Double_SetF(Double%, Float#) +* BU_Double_Add(Double%, Double%) +* BU_Double_AddF(Double%, Float#) +* BU_Double_Sub(Double%, Double%) +* BU_Double_SubF(Double%, Float#) +* BU_Double_Mul(Double%, Double%) +* BU_Double_MulF(Double%, Float#) +* BU_Double_Div(Double%, Double%) +* BU_Double_DivF(Double%, Float#) +* Result% = BU_Double_Compare%(Double%, Double%) +Compares the two doubles and returns combinations of the following: 1 for equal, 2 for smaller, 4 for greater. +* Result% = BU_Double_CompareF%(Double%, Float#) +Compares the double as float with another float and returns combinations of the following: 1 for equal, 2 for smaller, 4 for greater. +* String$ = BU_Double_ToString$(Double%) +* Double% = BU_Double_FromString%(String$) +* Float# = BU_Double_ToFloat#(Double%) +* Double% = BU_Double_FromFloat%(Float#) +* LongLong% = BU_Double_ToLongLong%(Double%) +* Double% = BU_Double_FromLongLong%(LongLong%) +* String$ = BU_Double_Serialize$(Double%) +* String$ = BU_Double_Deserialize%(String$) + +## Utility +### Display Enumerator +Retrieve information about displays from Windows. + +* DisplayEnumerator% = BU_DisplayEnumerator_Create%() +* BU_DisplayEnumerator_Destroy(DisplayEnumerator%) +* BU_DisplayEnumerator_Enumerate%(DisplayEnumerator%) +* BU_DisplayEnumerator_Count%(DisplayEnumerator%) +* BU_DisplayEnumerator_Retrieve%(DisplayEnumerator%, index%, Rect*) + +### Indexer V1 +Fast array-based index generation. Uses a constant chunk of memory. + +* Indexer% = BU_IndexerV1_Create%() +* BU_IndexerV1_Destroy(Indexer%) +* BU_IndexerV1_Mark(Indexer%, Used%) +* BU_IndexerV1_MarkFree(Indexer%) +* BU_IndexerV1_MarkUsed(Indexer%) +* Result% = BU_IndexerV1_Is%(Indexer%, Used%) +* Result% = BU_IndexerV1_IsFree%(Indexer%) +* Result% = BU_IndexerV1_IsUsed%(Indexer%) +* Index% = BU_IndexerV1_Get%(Indexer%) +* Amount% = BU_IndexerV1_Count%(Indexer%, Used%) +* Amount% = BU_IndexerV1_CountFree%(Indexer%) +* Amount% = BU_IndexerV1_CountUsed%(Indexer%) + +### Indexer V2 +Fast vector-based index generation, uses a dynamic amount of memory. + +* Indexer% = BU_IndexerV2_Create%() +* BU_IndexerV2_Destroy(Indexer%) +* BU_IndexerV2_Mark(Indexer%, Used%) +* BU_IndexerV2_MarkFree(Indexer%) +* BU_IndexerV2_MarkUsed(Indexer%) +* Result% = BU_IndexerV2_Is%(Indexer%, Used%) +* Result% = BU_IndexerV2_IsFree%(Indexer%) +* Result% = BU_IndexerV2_IsUsed%(Indexer%) +* Index% = BU_IndexerV2_Get%(Indexer%) +* Amount% = BU_IndexerV2_Count%(Indexer%, Used%) +* Amount% = BU_IndexerV2_CountFree%(Indexer%) +* Amount% = BU_IndexerV2_CountUsed%(Indexer%) + +### Mass Operation +Allows chaining operations on custom types, such as LongLong and Double. See contants + +* BU_MassOp_Create%(length%) +* BU_MassOp_Destroy(massop%) +* BU_MassOp_Instruction%(massop%, index%, type%, code%, leftOperand%, rightOperand%, result%) +* BU_MassOp_Run(massop%) + +### Window Message Handler +Easily handle messages sent to Blitz windows using these functions. May not work as expected initially. + +* BU_WindowMessageHandler_Install(hwnd%) +* BU_WindowMessageHandler_Uninstall(hwnd%) +* Count% = BU_WindowMessageHandler_Message_Close%(hwnd%) +* Count% = BU_WindowMessageHandler_Message_Destroy%(hwnd%) * Count% = BU_WindowMessageHandler_Message_Resize%(hwnd%, point*) \ No newline at end of file diff --git a/Resources/BlitzUtility.LICENSE b/Resources/BlitzUtility.LICENSE index 9cecc1d..c65825e 100644 --- a/Resources/BlitzUtility.LICENSE +++ b/Resources/BlitzUtility.LICENSE @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Resources/BlitzUtility.LICENSE.lesser b/Resources/BlitzUtility.LICENSE.lesser index 65c5ca8..b14ca0a 100644 --- a/Resources/BlitzUtility.LICENSE.lesser +++ b/Resources/BlitzUtility.LICENSE.lesser @@ -1,165 +1,165 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/Resources/BlitzUtility.bb b/Resources/BlitzUtility.bb index 57e2dbf..3179630 100644 --- a/Resources/BlitzUtility.bb +++ b/Resources/BlitzUtility.bb @@ -1,532 +1,530 @@ -; BlitzUtility - Expanding the normal Blitz functionality. -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your 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 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, see . - -; Utility ---------------------------------------------------------------------- -;-- Types -Const BU_TYPES_COMPARE_INEQUAL = 0 -Const BU_TYPES_COMPARE_EQUAL = 1 -Const BU_TYPES_COMPARE_SMALLER = 2 -Const BU_TYPES_COMPARE_GREATER = 4 - -;-- Mass Operation -; Constants: Supported Types -Const BU_MASSOP_TYPE_DOUBLE = 0 -Const BU_MASSOP_TYPE_LONGLONG = 1 -Const BU_MASSOP_TYPE_VECTOR2 = 10 -Const BU_MASSOP_TYPE_VECTOR3 = 11 -; Constants: Supported OpCodes -Const BU_MASSOP_OPCODE_CREATE = 0 -Const BU_MASSOP_OPCODE_DESTROY = 1 -Const BU_MASSOP_OPCODE_COPY = 2 -Const BU_MASSOP_OPCODE_TEMPCREATE = 5 -Const BU_MASSOP_OPCODE_TEMPDESTROY = 6 -Const BU_MASSOP_OPCODE_TEMPCLEANUP = 7 -Const BU_MASSOP_OPCODE_SET = 10 -Const BU_MASSOP_OPCODE_ADD = 11 -Const BU_MASSOP_OPCODE_SUB = 12 -Const BU_MASSOP_OPCODE_MUL = 13 -Const BU_MASSOP_OPCODE_DIV = 14 -Const BU_MASSOP_OPCODE_COMPARE = 15 -; GoTo -; leftOperand: new massop index -Const BU_MASSOP_OPCODE_GOTO = 249 -; SetOpCode -; leftOperand: target massop index -; rightOperand: new OpCode -Const BU_MASSOP_OPCODE_SETOPCODE = 250 -; CopyLeft -; leftOperand: source massop index -; rightOperand: target massop index -; result: target position (0/leftOperand, 1/rightOperand, 2/result) -Const BU_MASSOP_OPCODE_COPYLEFT = 251 -; CopyRight -; leftOperand: source massop index -; rightOperand: target massop index -; result: target position (0/leftOperand, 1/rightOperand, 2/result) -Const BU_MASSOP_OPCODE_COPYRIGHT = 252 -; CopyOut -; leftOperand: source massop index -; rightOperand: target massop index -; result: target position (0/leftOperand, 1/rightOperand, 2/result) -Const BU_MASSOP_OPCODE_COPYOUT = 253 -; If - Compares the result of with the result of , -; skipping over instructions if the results match. -; leftOperand: source massop index -; rightOperand: target massop index -; result: amount to skip -Const BU_MASSOP_OPCODE_IF = 254 -; IfValue - Compares the result of with , skipping -; over instructions if the results match. -; leftOperand: source massop index -; rightOperand: target massop index -; result: amount to skip -Const BU_MASSOP_OPCODE_IFVALUE = 255 - -; Helpers ---------------------------------------------------------------------- -Type BU_Point - Field X,Y -End Type - -Type BU_Rectangle - Field X,Y,X2,Y2 -End Type - -Function BU_Helper_Window_LockPointer(HWND% = 0) - If HWND = 0 Then - BU_User32_ClipCursor(0) - Else - Local tRect.BU_Rectangle = New BU_Rectangle - - ; Retrieve Information about the selected window. - BU_User32_GetWindowRect(HWND, tRect) - - ; Correct Rectangle to be inside the selected Window. - tRect\X2=tRect\X2-1 - tRect\Y2=tRect\Y2-1 - - ; Update clipping area. - BU_User32_ClipCursor(tRect) - - Delete tRect - EndIf -End Function - -Function BU_Helper_Window_LockPointerAuto(HWND=0) - If BU_User32_GetActiveWindow() = HWND Then - BU_Helper_Window_LockPointer(HWND) - Else - BU_Helper_Window_LockPointer(0) - EndIf -End Function - -Function BU_Helper_Window_MakeBorderless(HWND=0) - If HWND = 0 Then HWND = SystemProperty("AppHwnd") - - ; Create Storage - Local tRect.BU_Rectangle = New BU_Rectangle - - ; Client Information - BU_User32_GetClientRect(HWND, tRect) - Local clientX, clientY, clientW, clientH - clientX = tRect\X - clientY = tRect\Y - clientW = tRect\X2 - clientX - clientH = tRect\Y2 - clientY - - ; Convert Client coordinates to screen position. - Local tPoint.BU_Point = New BU_Point - BU_User32_ClientToScreen(HWND, tPoint) - Local realClientX, realClientY - realClientX = tPoint\X - realClientY = tPoint\Y - Delete tPoint - - ; Window Information - BU_User32_GetWindowRect(HWND, tRect) - Local windowX, windowY, windowW, windowH - windowX = tRect\X - windowY = tRect\Y - windowW = tRect\X2 - windowX - windowH = tRect\Y2 - windowY - - ; Delete Storage - Delete tRect - - ; Calculate new position and size. - Local newX, newY, newW, newH - newX = windowX + (realClientX - windowX) - newY = windowY + (realClientY - windowY) - newW = clientW - newH = clientH - - ; Apply changes - BU_User32_SetWindowLong HWND, -16, $01000000 - BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $4 + $10 + $20 + $40 -End Function - -Function BU_Helper_Window_Center(HWND=0, Monitor=0) - Local displayEnumerator = BU_DisplayEnumerator_Create() - Local displayAmount = BU_DisplayEnumerator_Enumerate(displayEnumerator) - If Monitor >= displayAmount Then Monitor = displayAmount - 1 - If Monitor < 0 Then Monitor = 0 - - ; Get Display Information - Local displayRectangle.BU_Rectangle = New BU_Rectangle - BU_DisplayEnumerator_Retrieve displayEnumerator, Monitor, displayRectangle - BU_DisplayEnumerator_Destroy displayEnumerator - Local displayX, displayY, displayW, displayH - displayX = displayRectangle\X - displayY = displayRectangle\Y - displayW = displayRectangle\X2 - displayRectangle\X - displayH = displayRectangle\Y2 - displayRectangle\Y - Delete displayRectangle - - ; Get Window Information - Local windowRectangle.BU_Rectangle = New BU_Rectangle - BU_User32_GetWindowRect(HWND, windowRectangle) - Local windowW%, windowH% - windowW = windowRectangle\X2 - windowRectangle\X - windowH = windowRectangle\Y2 - windowRectangle\Y - Delete windowRectangle - - ; Calculate new position and size. - Local newX, newY, newW, newH - newX = displayX + (displayW/2 - windowW/2) - newY = displayY + (displayH/2 - windowH/2) - newW = windowW - newH = windowH - - ; Apply changes - BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $1 + $4 + $10 + $20 + $40 -End Function - -Function BU_Helper_Window_Fill(HWND=0, Monitor=0) - Local displayEnumerator = BU_DisplayEnumerator_Create() - Local displayAmount = BU_DisplayEnumerator_Enumerate(displayEnumerator) - If Monitor >= displayAmount Then Monitor = displayAmount - 1 - If Monitor < 0 Then Monitor = 0 - - ; Get Display Information - Local displayRectangle.BU_Rectangle = New BU_Rectangle - BU_DisplayEnumerator_Retrieve displayEnumerator, Monitor, displayRectangle - BU_DisplayEnumerator_Destroy displayEnumerator - Local displayX, displayY, displayW, displayH - displayX = displayRectangle\X - displayY = displayRectangle\Y - displayW = displayRectangle\X2 - displayRectangle\X - displayH = displayRectangle\Y2 - displayRectangle\Y - Delete displayRectangle - - ; Calculate new position and size. - Local newX, newY, newW, newH - newX = displayX - newY = displayY - newW = displayW - newH = displayH - - ; Apply changes - BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $4 + $10 + $20 + $40 -End Function - -; Database --------------------------------------------------------------------- -;-- SQLite3 -;[Block] Return Codes / Error Codes -; Many SQLite functions return an integer result code from the set shown -; here in order to indicate success or failure. -; -; New error codes may be added in future versions of SQLite. -Const BU_SQLITE_OK% = 0 ; Successful result -Const BU_SQLITE_ERROR% = 1 ; SQL error or missing database -Const BU_SQLITE_INTERNAL% = 2 ; Internal logic error in SQLite -Const BU_SQLITE_PERM% = 3 ; Access permission denied -Const BU_SQLITE_ABORT% = 4 ; Callback routine requested an abort -Const BU_SQLITE_BUSY% = 5 ; The database file is locked -Const BU_SQLITE_LOCKED% = 6 ; A table in the database is locked -Const BU_SQLITE_NOMEM% = 7 ; A malloc() failed -Const BU_SQLITE_READONLY% = 8 ; Attempt to write a readonly database -Const BU_SQLITE_INTERRUPT% = 9 ; Operation terminated by SQLite3_Interrupt() -Const BU_SQLITE_IOERR% = 10 ; Some kind of disk I/O error occurred -Const BU_SQLITE_CORRUPT% = 11 ; The database disk image is malformed -Const BU_SQLITE_NOTFOUND% = 12 ; Unknown opcode in sqlite3_file_control() -Const BU_SQLITE_FULL% = 13 ; Insertion failed because database is full -Const BU_SQLITE_CANTOPEN% = 14 ; Unable to open the database file -Const BU_SQLITE_PROTOCOL% = 15 ; Database lock protocol error -Const BU_SQLITE_EMPTY% = 16 ; Database is empty -Const BU_SQLITE_SCHEMA% = 17 ; The database schema changed -Const BU_SQLITE_TOOBIG% = 18 ; String or BLOB exceeds size limit -Const BU_SQLITE_CONSTRAINT% = 19 ; Abort due to constraint violation -Const BU_SQLITE_MISMATCH% = 20 ; Data type mismatch -Const BU_SQLITE_MISUSE% = 21 ; Library used incorrectly -Const BU_SQLITE_NOLFS% = 22 ; Uses OS features not supported on host -Const BU_SQLITE_AUTH% = 23 ; Authorization denied -Const BU_SQLITE_FORMAT% = 24 ; Auxiliary database format error -Const BU_SQLITE_RANGE% = 25 ; 2nd parameter to sqlite3_bind out of range -Const BU_SQLITE_NOTADB% = 26 ; File opened that is not a database file -Const BU_SQLITE_NOTICE% = 27 ; Notifications from sqlite3_log() -Const BU_SQLITE_WARNING% = 28 ; Warnings from sqlite3_log() -Const BU_SQLITE_ROW% = 100 ; sqlite3_step() has another row ready -Const BU_SQLITE_DONE% = 101 ; sqlite3_step() has finished executing -;[End Block] - -;[Block] Extended Result Codes -; In its default configuration, SQLite API routines return one of 30 integer -; [result codes]. However, experience has shown that many of -; these result codes are too coarse-grained. They do not provide as -; much information about problems as programmers might like. In an effort to -; address this, newer versions of SQLite (version 3.3.8 and later) include -; support for additional result codes that provide more detailed information -; about errors. These [extended result codes] are enabled or disabled -; on a per database connection basis using the [sqlite3_extended_result_codes()] -; API. Or, the extended code for the most recent error can be obtained using -; [sqlite3_extended_errcode()]. -Const BU_SQLITE_IOERR_READ = (BU_SQLITE_IOERR Or (1 Shl 8)) -Const BU_SQLITE_IOERR_SHORT_READ = (BU_SQLITE_IOERR Or (2 Shl 8)) -Const BU_SQLITE_IOERR_WRITE = (BU_SQLITE_IOERR Or (3 Shl 8)) -Const BU_SQLITE_IOERR_FSYNC = (BU_SQLITE_IOERR Or (4 Shl 8)) -Const BU_SQLITE_IOERR_DIR_FSYNC = (BU_SQLITE_IOERR Or (5 Shl 8)) -Const BU_SQLITE_IOERR_TRUNCATE = (BU_SQLITE_IOERR Or (6 Shl 8)) -Const BU_SQLITE_IOERR_FSTAT = (BU_SQLITE_IOERR Or (7 Shl 8)) -Const BU_SQLITE_IOERR_UNLOCK = (BU_SQLITE_IOERR Or (8 Shl 8)) -Const BU_SQLITE_IOERR_RDLOCK = (BU_SQLITE_IOERR Or (9 Shl 8)) -Const BU_SQLITE_IOERR_DELETE = (BU_SQLITE_IOERR Or (10 Shl 8)) -Const BU_SQLITE_IOERR_BLOCKED = (BU_SQLITE_IOERR Or (11 Shl 8)) -Const BU_SQLITE_IOERR_NOMEM = (BU_SQLITE_IOERR Or (12 Shl 8)) -Const BU_SQLITE_IOERR_ACCESS = (BU_SQLITE_IOERR Or (13 Shl 8)) -Const BU_SQLITE_IOERR_CHECKRESERVEDLOCK = (BU_SQLITE_IOERR Or (14 Shl 8)) -Const BU_SQLITE_IOERR_LOCK = (BU_SQLITE_IOERR Or (15 Shl 8)) -Const BU_SQLITE_IOERR_CLOSE = (BU_SQLITE_IOERR Or (16 Shl 8)) -Const BU_SQLITE_IOERR_DIR_CLOSE = (BU_SQLITE_IOERR Or (17 Shl 8)) -Const BU_SQLITE_IOERR_SHMOPEN = (BU_SQLITE_IOERR Or (18 Shl 8)) -Const BU_SQLITE_IOERR_SHMSIZE = (BU_SQLITE_IOERR Or (19 Shl 8)) -Const BU_SQLITE_IOERR_SHMLOCK = (BU_SQLITE_IOERR Or (20 Shl 8)) -Const BU_SQLITE_IOERR_SHMMAP = (BU_SQLITE_IOERR Or (21 Shl 8)) -Const BU_SQLITE_IOERR_SEEK = (BU_SQLITE_IOERR Or (22 Shl 8)) -Const BU_SQLITE_IOERR_DELETE_NOENT = (BU_SQLITE_IOERR Or (23 Shl 8)) -Const BU_SQLITE_IOERR_MMAP = (BU_SQLITE_IOERR Or (24 Shl 8)) -Const BU_SQLITE_IOERR_GETTEMPPATH = (BU_SQLITE_IOERR Or (25 Shl 8)) -Const BU_SQLITE_IOERR_CONVPATH = (BU_SQLITE_IOERR Or (26 Shl 8)) -Const BU_SQLITE_IOERR_VNODE = (BU_SQLITE_IOERR Or (27 Shl 8)) -Const BU_SQLITE_IOERR_AUTH = (BU_SQLITE_IOERR Or (28 Shl 8)) -Const BU_SQLITE_LOCKED_SHAREDCACHE = (BU_SQLITE_LOCKED Or (1 Shl 8)) -Const BU_SQLITE_BUSY_RECOVERY = (BU_SQLITE_BUSY Or (1 Shl 8)) -Const BU_SQLITE_BUSY_SNAPSHOT = (BU_SQLITE_BUSY Or (2 Shl 8)) -Const BU_SQLITE_CANTOPEN_NOTEMPDIR = (BU_SQLITE_CANTOPEN Or (1 Shl 8)) -Const BU_SQLITE_CANTOPEN_ISDIR = (BU_SQLITE_CANTOPEN Or (2 Shl 8)) -Const BU_SQLITE_CANTOPEN_FULLPATH = (BU_SQLITE_CANTOPEN Or (3 Shl 8)) -Const BU_SQLITE_CANTOPEN_CONVPATH = (BU_SQLITE_CANTOPEN Or (4 Shl 8)) -Const BU_SQLITE_CORRUPT_VTAB = (BU_SQLITE_CORRUPT Or (1 Shl 8)) -Const BU_SQLITE_READONLY_RECOVERY = (BU_SQLITE_READONLY Or (1 Shl 8)) -Const BU_SQLITE_READONLY_CANTLOCK = (BU_SQLITE_READONLY Or (2 Shl 8)) -Const BU_SQLITE_READONLY_ROLLBACK = (BU_SQLITE_READONLY Or (3 Shl 8)) -Const BU_SQLITE_READONLY_DBMOVED = (BU_SQLITE_READONLY Or (4 Shl 8)) -Const BU_SQLITE_ABORT_ROLLBACK = (BU_SQLITE_ABORT Or (2 Shl 8)) -Const BU_SQLITE_CONSTRAINT_CHECK = (BU_SQLITE_CONSTRAINT Or (1 Shl 8)) -Const BU_SQLITE_CONSTRAINT_COMMITHOOK = (BU_SQLITE_CONSTRAINT Or (2 Shl 8)) -Const BU_SQLITE_CONSTRAINT_FOREIGNKEY = (BU_SQLITE_CONSTRAINT Or (3 Shl 8)) -Const BU_SQLITE_CONSTRAINT_FUNCTION = (BU_SQLITE_CONSTRAINT Or (4 Shl 8)) -Const BU_SQLITE_CONSTRAINT_NOTNULL = (BU_SQLITE_CONSTRAINT Or (5 Shl 8)) -Const BU_SQLITE_CONSTRAINT_PRIMARYKEY = (BU_SQLITE_CONSTRAINT Or (6 Shl 8)) -Const BU_SQLITE_CONSTRAINT_TRIGGER = (BU_SQLITE_CONSTRAINT Or (7 Shl 8)) -Const BU_SQLITE_CONSTRAINT_UNIQUE = (BU_SQLITE_CONSTRAINT Or (8 Shl 8)) -Const BU_SQLITE_CONSTRAINT_VTAB = (BU_SQLITE_CONSTRAINT Or (9 Shl 8)) -Const BU_SQLITE_CONSTRAINT_ROWID = (BU_SQLITE_CONSTRAINT Or (10 Shl 8)) -Const BU_SQLITE_NOTICE_RECOVER_WAL = (BU_SQLITE_NOTICE Or (1 Shl 8)) -Const BU_SQLITE_NOTICE_RECOVER_ROLLBACK = (BU_SQLITE_NOTICE Or (2 Shl 8)) -Const BU_SQLITE_WARNING_AUTOINDEX = (BU_SQLITE_WARNING Or (1 Shl 8)) -Const BU_SQLITE_AUTH_USER = (BU_SQLITE_AUTH Or (1 Shl 8)) -;[End Block] - -;[Block] Flags For File Open Operations -; These bit values are intended for use in the -; 3rd parameter to the [sqlite3_open_v2()] interface. -Const BU_SQLITE_OPEN_READONLY = $00000001 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_READWRITE = $00000002 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_CREATE = $00000004 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_DELETEONCLOSE = $00000008 ; VFS only */ -Const BU_SQLITE_OPEN_EXCLUSIVE = $00000010 ; VFS only */ -Const BU_SQLITE_OPEN_AUTOPROXY = $00000020 ; VFS only */ -Const BU_SQLITE_OPEN_URI = $00000040 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_MEMORY = $00000080 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_MAIN_DB = $00000100 ; VFS only */ -Const BU_SQLITE_OPEN_TEMP_DB = $00000200 ; VFS only */ -Const BU_SQLITE_OPEN_TRANSIENT_DB = $00000400 ; VFS only */ -Const BU_SQLITE_OPEN_MAIN_JOURNAL = $00000800 ; VFS only */ -Const BU_SQLITE_OPEN_TEMP_JOURNAL = $00001000 ; VFS only */ -Const BU_SQLITE_OPEN_SUBJOURNAL = $00002000 ; VFS only */ -Const BU_SQLITE_OPEN_MASTER_JOURNAL = $00004000 ; VFS only */ -Const BU_SQLITE_OPEN_NOMUTEX = $00008000 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_FULLMUTEX = $00010000 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_SHAREDCACHE = $00020000 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_PRIVATECACHE = $00040000 ; Ok for sqlite3_open_v2() */ -Const BU_SQLITE_OPEN_WAL = $00080000 ; VFS only */ -;[End Block] - -;[Block] Authorizer Return Codes -; The [sqlite3_set_authorizer | authorizer callback function] must -; return either [SQLITE_OK] or one of these two constants in order -; to signal SQLite whether or not the action is permitted. See the -; [sqlite3_set_authorizer | authorizer documentation] for additional -; information. -; -; Note that SQLITE_IGNORE is also used as a [conflict resolution mode] -; returned from the [sqlite3_vtab_on_conflict()] interface. -Const BU_SQLITE_DENY = 1 ; Abort the SQL statement with an error */ -Const BU_SQLITE_IGNORE = 2 ; Don't allow access, but don't generate an error */ -;[End Block] - -;[Block] Authorizer Action Codes -; The [sqlite3_set_authorizer()] interface registers a callback function -; that is invoked to authorize certain SQL statement actions. The -; second parameter to the callback is an integer code that specifies -; what action is being authorized. These are the integer action codes that -; the authorizer callback may be passed. -; -; These action code values signify what kind of operation is to be -; authorized. The 3rd and 4th parameters to the authorization -; callback function will be parameters or NULL depending on which of these -; codes is used as the second parameter. ^(The 5th parameter to the -; authorizer callback is the name of the database ("main", "temp", -; etc.) if applicable.)^ ^The 6th parameter to the authorizer callback -; is the name of the inner-most trigger or view that is responsible for -; the access attempt or NULL if this access attempt is directly from -; top-level SQL code. -; ;;;;;;;;;;;;;;;;;;;;; 3rd ;;;;;; 4th ;;;;;*/ -Const BU_SQLITE_CREATE_INDEX = 1 ; Index Name Table Name */ -Const BU_SQLITE_CREATE_TABLE = 2 ; Table Name NULL */ -Const BU_SQLITE_CREATE_TEMP_INDEX = 3 ; Index Name Table Name */ -Const BU_SQLITE_CREATE_TEMP_TABLE = 4 ; Table Name NULL */ -Const BU_SQLITE_CREATE_TEMP_TRIGGER = 5 ; Trigger Name Table Name */ -Const BU_SQLITE_CREATE_TEMP_VIEW = 6 ; View Name NULL */ -Const BU_SQLITE_CREATE_TRIGGER = 7 ; Trigger Name Table Name */ -Const BU_SQLITE_CREATE_VIEW = 8 ; View Name NULL */ -Const BU_SQLITE_DELETE = 9 ; Table Name NULL */ -Const BU_SQLITE_DROP_INDEX = 10 ; Index Name Table Name */ -Const BU_SQLITE_DROP_TABLE = 11 ; Table Name NULL */ -Const BU_SQLITE_DROP_TEMP_INDEX = 12 ; Index Name Table Name */ -Const BU_SQLITE_DROP_TEMP_TABLE = 13 ; Table Name NULL */ -Const BU_SQLITE_DROP_TEMP_TRIGGER = 14 ; Trigger Name Table Name */ -Const BU_SQLITE_DROP_TEMP_VIEW = 15 ; View Name NULL */ -Const BU_SQLITE_DROP_TRIGGER = 16 ; Trigger Name Table Name */ -Const BU_SQLITE_DROP_VIEW = 17 ; View Name NULL */ -Const BU_SQLITE_INSERT = 18 ; Table Name NULL */ -Const BU_SQLITE_PRAGMA = 19 ; Pragma Name 1st arg or NULL */ -Const BU_SQLITE_READ = 20 ; Table Name Column Name */ -Const BU_SQLITE_SELECT = 21 ; NULL NULL */ -Const BU_SQLITE_TRANSACTION = 22 ; Operation NULL */ -Const BU_SQLITE_UPDATE = 23 ; Table Name Column Name */ -Const BU_SQLITE_ATTACH = 24 ; Filename NULL */ -Const BU_SQLITE_DETACH = 25 ; Database Name NULL */ -Const BU_SQLITE_ALTER_TABLE = 26 ; Database Name Table Name */ -Const BU_SQLITE_REINDEX = 27 ; Index Name NULL */ -Const BU_SQLITE_ANALYZE = 28 ; Table Name NULL */ -Const BU_SQLITE_CREATE_VTABLE = 29 ; Table Name Module Name */ -Const BU_SQLITE_DROP_VTABLE = 30 ; Table Name Module Name */ -Const BU_SQLITE_FUNCTION = 31 ; NULL Function Name */ -Const BU_SQLITE_SAVEPOINT = 32 ; Operation Savepoint Name */ -Const BU_SQLITE_COPY = 0 ; No longer used */ -Const BU_SQLITE_RECURSIVE = 33 ; NULL NULL */ -;[End Block] - -;[Block] Run-Time Limit Categories -; KEYWORDS: {limit category} {*limit categories} -; -; These constants define various performance limits -; that can be lowered at run-time using [sqlite3_limit()]. -; The synopsis of the meanings of the various limits is shown below. -; Additional information is available at [limits | Limits in SQLite]. -; -;
-; [[SQLITE_LIMIT_LENGTH]] ^(
SQLITE_LIMIT_LENGTH
-;
The maximum size of any string or BLOB or table row, in bytes.
)^ -; -; [[SQLITE_LIMIT_SQL_LENGTH]] ^(
SQLITE_LIMIT_SQL_LENGTH
-;
The maximum length of an SQL statement, in bytes.
)^ -; -; [[SQLITE_LIMIT_COLUMN]] ^(
SQLITE_LIMIT_COLUMN
-;
The maximum number of columns in a table definition or in the -; result set of a [SELECT] or the maximum number of columns in an index -; or in an ORDER BY or GROUP BY clause.
)^ -; -; [[SQLITE_LIMIT_EXPR_DEPTH]] ^(
SQLITE_LIMIT_EXPR_DEPTH
-;
The maximum depth of the parse tree on any expression.
)^ -; -; [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(
SQLITE_LIMIT_COMPOUND_SELECT
-;
The maximum number of terms in a compound SELECT statement.
)^ -; -; [[SQLITE_LIMIT_VDBE_OP]] ^(
SQLITE_LIMIT_VDBE_OP
-;
The maximum number of instructions in a virtual machine program -; used to implement an SQL statement. This limit is not currently -; enforced, though that might be added in some future release of -; SQLite.
)^ -; -; [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
SQLITE_LIMIT_FUNCTION_ARG
-;
The maximum number of arguments on a function.
)^ -; -; [[SQLITE_LIMIT_ATTACHED]] ^(
SQLITE_LIMIT_ATTACHED
-;
The maximum number of [ATTACH | attached databases].)^
-; -; [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] -; ^(
SQLITE_LIMIT_LIKE_PATTERN_LENGTH
-;
The maximum length of the pattern argument to the [LIKE] or -; [GLOB] operators.
)^ -; -; [[SQLITE_LIMIT_VARIABLE_NUMBER]] -; ^(
SQLITE_LIMIT_VARIABLE_NUMBER
-;
The maximum index number of any [parameter] in an SQL statement.)^ -; -; [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(
SQLITE_LIMIT_TRIGGER_DEPTH
-;
The maximum depth of recursion for triggers.
)^ -; -; [[SQLITE_LIMIT_WORKER_THREADS]] ^(
SQLITE_LIMIT_WORKER_THREADS
-;
The maximum number of auxiliary worker threads that a single -; [prepared statement] may start.
)^ -;
-Const BU_SQLITE_LIMIT_LENGTH = 0 -Const BU_SQLITE_LIMIT_SQL_LENGTH = 1 -Const BU_SQLITE_LIMIT_COLUMN = 2 -Const BU_SQLITE_LIMIT_EXPR_DEPTH = 3 -Const BU_SQLITE_LIMIT_COMPOUND_SELECT = 4 -Const BU_SQLITE_LIMIT_VDBE_OP = 5 -Const BU_SQLITE_LIMIT_FUNCTION_ARG = 6 -Const BU_SQLITE_LIMIT_ATTACHED = 7 -Const BU_SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8 -Const BU_SQLITE_LIMIT_VARIABLE_NUMBER = 9 -Const BU_SQLITE_LIMIT_TRIGGER_DEPTH = 10 -Const BU_SQLITE_LIMIT_WORKER_THREADS = 11 -;[End Block] - -;[Block] Column Type -Const BU_SQLITE_UNKNOWN = 0 -Const BU_SQLITE_INTEGER = 1 -Const BU_SQLITE_REAL = 2 -Const BU_SQLITE_FLOAT = 2 -Const BU_SQLITE_DOUBLE = 2 -Const BU_SQLITE_TEXT = 3 -Const BU_SQLITE_STRING = 3 -Const BU_SQLITE_BLOB = 4 -Const BU_SQLITE_BANK = 4 -Const BU_SQLITE_NULL = 5 -;[End Block] - -; Math ------------------------------------------------------------------------- -;-- Vector2 -Type Vector2 - Field X#, Y# -End Type - -Function Vector2_Create.Vector2(X#, Y#) - Local vec.Vector2 = New Vector2 - vec\X = X - vec\Y = Y - Return vec -End Function - -;-- Vector3 -Type Vector3 - Field X#, Y#, Z# -End Type - -Function Vector3_Create.Vector3(X#, Y#, Z#) - Local vec.Vector3 = New Vector3 - vec\X = X - vec\Y = Y - vec\Z = Z - Return vec -End Function - - -;~IDEal Editor Parameters: -;~C#Blitz3D \ No newline at end of file +; BlitzUtility - Expanding the normal Blitz functionality. +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your 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 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, see . + +; Utility ---------------------------------------------------------------------- +;-- Types +Const BU_TYPES_COMPARE_INEQUAL = 0 +Const BU_TYPES_COMPARE_EQUAL = 1 +Const BU_TYPES_COMPARE_SMALLER = 2 +Const BU_TYPES_COMPARE_GREATER = 4 + +;-- Mass Operation +; Constants: Supported Types +Const BU_MASSOP_TYPE_DOUBLE = 0 +Const BU_MASSOP_TYPE_LONGLONG = 1 +Const BU_MASSOP_TYPE_VECTOR2 = 10 +Const BU_MASSOP_TYPE_VECTOR3 = 11 +; Constants: Supported OpCodes +Const BU_MASSOP_OPCODE_CREATE = 0 +Const BU_MASSOP_OPCODE_DESTROY = 1 +Const BU_MASSOP_OPCODE_COPY = 2 +Const BU_MASSOP_OPCODE_TEMPCREATE = 5 +Const BU_MASSOP_OPCODE_TEMPDESTROY = 6 +Const BU_MASSOP_OPCODE_TEMPCLEANUP = 7 +Const BU_MASSOP_OPCODE_SET = 10 +Const BU_MASSOP_OPCODE_ADD = 11 +Const BU_MASSOP_OPCODE_SUB = 12 +Const BU_MASSOP_OPCODE_MUL = 13 +Const BU_MASSOP_OPCODE_DIV = 14 +Const BU_MASSOP_OPCODE_COMPARE = 15 +; GoTo +; leftOperand: new massop index +Const BU_MASSOP_OPCODE_GOTO = 249 +; SetOpCode +; leftOperand: target massop index +; rightOperand: new OpCode +Const BU_MASSOP_OPCODE_SETOPCODE = 250 +; CopyLeft +; leftOperand: source massop index +; rightOperand: target massop index +; result: target position (0/leftOperand, 1/rightOperand, 2/result) +Const BU_MASSOP_OPCODE_COPYLEFT = 251 +; CopyRight +; leftOperand: source massop index +; rightOperand: target massop index +; result: target position (0/leftOperand, 1/rightOperand, 2/result) +Const BU_MASSOP_OPCODE_COPYRIGHT = 252 +; CopyOut +; leftOperand: source massop index +; rightOperand: target massop index +; result: target position (0/leftOperand, 1/rightOperand, 2/result) +Const BU_MASSOP_OPCODE_COPYOUT = 253 +; If - Compares the result of with the result of , +; skipping over instructions if the results match. +; leftOperand: source massop index +; rightOperand: target massop index +; result: amount to skip +Const BU_MASSOP_OPCODE_IF = 254 +; IfValue - Compares the result of with , skipping +; over instructions if the results match. +; leftOperand: source massop index +; rightOperand: target massop index +; result: amount to skip +Const BU_MASSOP_OPCODE_IFVALUE = 255 + +; Helpers ---------------------------------------------------------------------- +Type BU_Point + Field X,Y +End Type + +Type BU_Rectangle + Field X,Y,X2,Y2 +End Type + +Function BU_Helper_Window_LockPointer(HWND% = 0) + If HWND = 0 Then + BU_User32_ClipCursor(0) + Else + Local tRect.BU_Rectangle = New BU_Rectangle + + ; Retrieve Information about the selected window. + BU_User32_GetWindowRect(HWND, tRect) + + ; Correct Rectangle to be inside the selected Window. + tRect\X2=tRect\X2-1 + tRect\Y2=tRect\Y2-1 + + ; Update clipping area. + BU_User32_ClipCursor(tRect) + + Delete tRect + EndIf +End Function + +Function BU_Helper_Window_LockPointerAuto(HWND=0) + If BU_User32_GetActiveWindow() = HWND Then + BU_Helper_Window_LockPointer(HWND) + Else + BU_Helper_Window_LockPointer(0) + EndIf +End Function + +Function BU_Helper_Window_MakeBorderless(HWND=0) + If HWND = 0 Then HWND = SystemProperty("AppHwnd") + + ; Create Storage + Local tRect.BU_Rectangle = New BU_Rectangle + + ; Client Information + BU_User32_GetClientRect(HWND, tRect) + Local clientX, clientY, clientW, clientH + clientX = tRect\X + clientY = tRect\Y + clientW = tRect\X2 - clientX + clientH = tRect\Y2 - clientY + + ; Convert Client coordinates to screen position. + Local tPoint.BU_Point = New BU_Point + BU_User32_ClientToScreen(HWND, tPoint) + Local realClientX, realClientY + realClientX = tPoint\X + realClientY = tPoint\Y + Delete tPoint + + ; Window Information + BU_User32_GetWindowRect(HWND, tRect) + Local windowX, windowY, windowW, windowH + windowX = tRect\X + windowY = tRect\Y + windowW = tRect\X2 - windowX + windowH = tRect\Y2 - windowY + + ; Delete Storage + Delete tRect + + ; Calculate new position and size. + Local newX, newY, newW, newH + newX = windowX + (realClientX - windowX) + newY = windowY + (realClientY - windowY) + newW = clientW + newH = clientH + + ; Apply changes + BU_User32_SetWindowLong HWND, -16, $10000000 + BU_User32_SetWindowLong HWND, -20, $02840020 + BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $2074 +End Function + +Function BU_Helper_Window_Center(HWND=0, Monitor=0) + Local displayEnumerator = BU_DisplayEnumerator_Create() + Local displayAmount = BU_DisplayEnumerator_Enumerate(displayEnumerator) + If Monitor >= displayAmount Then Monitor = displayAmount - 1 + If Monitor < 0 Then Monitor = 0 + + ; Get Display Information + Local displayRectangle.BU_Rectangle = New BU_Rectangle + BU_DisplayEnumerator_Retrieve displayEnumerator, Monitor, displayRectangle + BU_DisplayEnumerator_Destroy displayEnumerator + Local displayX, displayY, displayW, displayH + displayX = displayRectangle\X + displayY = displayRectangle\Y + displayW = displayRectangle\X2 - displayRectangle\X + displayH = displayRectangle\Y2 - displayRectangle\Y + Delete displayRectangle + + ; Get Window Information + Local windowRectangle.BU_Rectangle = New BU_Rectangle + BU_User32_GetWindowRect(HWND, windowRectangle) + Local windowW%, windowH% + windowW = windowRectangle\X2 - windowRectangle\X + windowH = windowRectangle\Y2 - windowRectangle\Y + Delete windowRectangle + + ; Calculate new position and size. + Local newX, newY, newW, newH + newX = displayX + (displayW/2 - windowW/2) + newY = displayY + (displayH/2 - windowH/2) + newW = windowW + newH = windowH + + ; Apply changes + BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $1 + $4 + $10 + $20 + $40 +End Function + +Function BU_Helper_Window_Fill(HWND=0, Monitor=0) + Local displayEnumerator = BU_DisplayEnumerator_Create() + Local displayAmount = BU_DisplayEnumerator_Enumerate(displayEnumerator) + If Monitor >= displayAmount Then Monitor = displayAmount - 1 + If Monitor < 0 Then Monitor = 0 + + ; Get Display Information + Local displayRectangle.BU_Rectangle = New BU_Rectangle + BU_DisplayEnumerator_Retrieve displayEnumerator, Monitor, displayRectangle + BU_DisplayEnumerator_Destroy displayEnumerator + Local displayX, displayY, displayW, displayH + displayX = displayRectangle\X + displayY = displayRectangle\Y + displayW = displayRectangle\X2 - displayRectangle\X + displayH = displayRectangle\Y2 - displayRectangle\Y + Delete displayRectangle + + ; Calculate new position and size. + Local newX, newY, newW, newH + newX = displayX + newY = displayY + newW = displayW + newH = displayH + + ; Apply changes + BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $4 + $10 + $20 + $40 +End Function + +; Database --------------------------------------------------------------------- +;-- SQLite3 +;[Block] Return Codes / Error Codes +; Many SQLite functions return an integer result code from the set shown +; here in order to indicate success or failure. +; +; New error codes may be added in future versions of SQLite. +Const BU_SQLITE_OK% = 0 ; Successful result +Const BU_SQLITE_ERROR% = 1 ; SQL error or missing database +Const BU_SQLITE_INTERNAL% = 2 ; Internal logic error in SQLite +Const BU_SQLITE_PERM% = 3 ; Access permission denied +Const BU_SQLITE_ABORT% = 4 ; Callback routine requested an abort +Const BU_SQLITE_BUSY% = 5 ; The database file is locked +Const BU_SQLITE_LOCKED% = 6 ; A table in the database is locked +Const BU_SQLITE_NOMEM% = 7 ; A malloc() failed +Const BU_SQLITE_READONLY% = 8 ; Attempt to write a readonly database +Const BU_SQLITE_INTERRUPT% = 9 ; Operation terminated by SQLite3_Interrupt() +Const BU_SQLITE_IOERR% = 10 ; Some kind of disk I/O error occurred +Const BU_SQLITE_CORRUPT% = 11 ; The database disk image is malformed +Const BU_SQLITE_NOTFOUND% = 12 ; Unknown opcode in sqlite3_file_control() +Const BU_SQLITE_FULL% = 13 ; Insertion failed because database is full +Const BU_SQLITE_CANTOPEN% = 14 ; Unable to open the database file +Const BU_SQLITE_PROTOCOL% = 15 ; Database lock protocol error +Const BU_SQLITE_EMPTY% = 16 ; Database is empty +Const BU_SQLITE_SCHEMA% = 17 ; The database schema changed +Const BU_SQLITE_TOOBIG% = 18 ; String or BLOB exceeds size limit +Const BU_SQLITE_CONSTRAINT% = 19 ; Abort due to constraint violation +Const BU_SQLITE_MISMATCH% = 20 ; Data type mismatch +Const BU_SQLITE_MISUSE% = 21 ; Library used incorrectly +Const BU_SQLITE_NOLFS% = 22 ; Uses OS features not supported on host +Const BU_SQLITE_AUTH% = 23 ; Authorization denied +Const BU_SQLITE_FORMAT% = 24 ; Auxiliary database format error +Const BU_SQLITE_RANGE% = 25 ; 2nd parameter to sqlite3_bind out of range +Const BU_SQLITE_NOTADB% = 26 ; File opened that is not a database file +Const BU_SQLITE_NOTICE% = 27 ; Notifications from sqlite3_log() +Const BU_SQLITE_WARNING% = 28 ; Warnings from sqlite3_log() +Const BU_SQLITE_ROW% = 100 ; sqlite3_step() has another row ready +Const BU_SQLITE_DONE% = 101 ; sqlite3_step() has finished executing +;[End Block] + +;[Block] Extended Result Codes +; In its default configuration, SQLite API routines return one of 30 integer +; [result codes]. However, experience has shown that many of +; these result codes are too coarse-grained. They do not provide as +; much information about problems as programmers might like. In an effort to +; address this, newer versions of SQLite (version 3.3.8 and later) include +; support for additional result codes that provide more detailed information +; about errors. These [extended result codes] are enabled or disabled +; on a per database connection basis using the [sqlite3_extended_result_codes()] +; API. Or, the extended code for the most recent error can be obtained using +; [sqlite3_extended_errcode()]. +Const BU_SQLITE_IOERR_READ = (BU_SQLITE_IOERR Or (1 Shl 8)) +Const BU_SQLITE_IOERR_SHORT_READ = (BU_SQLITE_IOERR Or (2 Shl 8)) +Const BU_SQLITE_IOERR_WRITE = (BU_SQLITE_IOERR Or (3 Shl 8)) +Const BU_SQLITE_IOERR_FSYNC = (BU_SQLITE_IOERR Or (4 Shl 8)) +Const BU_SQLITE_IOERR_DIR_FSYNC = (BU_SQLITE_IOERR Or (5 Shl 8)) +Const BU_SQLITE_IOERR_TRUNCATE = (BU_SQLITE_IOERR Or (6 Shl 8)) +Const BU_SQLITE_IOERR_FSTAT = (BU_SQLITE_IOERR Or (7 Shl 8)) +Const BU_SQLITE_IOERR_UNLOCK = (BU_SQLITE_IOERR Or (8 Shl 8)) +Const BU_SQLITE_IOERR_RDLOCK = (BU_SQLITE_IOERR Or (9 Shl 8)) +Const BU_SQLITE_IOERR_DELETE = (BU_SQLITE_IOERR Or (10 Shl 8)) +Const BU_SQLITE_IOERR_BLOCKED = (BU_SQLITE_IOERR Or (11 Shl 8)) +Const BU_SQLITE_IOERR_NOMEM = (BU_SQLITE_IOERR Or (12 Shl 8)) +Const BU_SQLITE_IOERR_ACCESS = (BU_SQLITE_IOERR Or (13 Shl 8)) +Const BU_SQLITE_IOERR_CHECKRESERVEDLOCK = (BU_SQLITE_IOERR Or (14 Shl 8)) +Const BU_SQLITE_IOERR_LOCK = (BU_SQLITE_IOERR Or (15 Shl 8)) +Const BU_SQLITE_IOERR_CLOSE = (BU_SQLITE_IOERR Or (16 Shl 8)) +Const BU_SQLITE_IOERR_DIR_CLOSE = (BU_SQLITE_IOERR Or (17 Shl 8)) +Const BU_SQLITE_IOERR_SHMOPEN = (BU_SQLITE_IOERR Or (18 Shl 8)) +Const BU_SQLITE_IOERR_SHMSIZE = (BU_SQLITE_IOERR Or (19 Shl 8)) +Const BU_SQLITE_IOERR_SHMLOCK = (BU_SQLITE_IOERR Or (20 Shl 8)) +Const BU_SQLITE_IOERR_SHMMAP = (BU_SQLITE_IOERR Or (21 Shl 8)) +Const BU_SQLITE_IOERR_SEEK = (BU_SQLITE_IOERR Or (22 Shl 8)) +Const BU_SQLITE_IOERR_DELETE_NOENT = (BU_SQLITE_IOERR Or (23 Shl 8)) +Const BU_SQLITE_IOERR_MMAP = (BU_SQLITE_IOERR Or (24 Shl 8)) +Const BU_SQLITE_IOERR_GETTEMPPATH = (BU_SQLITE_IOERR Or (25 Shl 8)) +Const BU_SQLITE_IOERR_CONVPATH = (BU_SQLITE_IOERR Or (26 Shl 8)) +Const BU_SQLITE_IOERR_VNODE = (BU_SQLITE_IOERR Or (27 Shl 8)) +Const BU_SQLITE_IOERR_AUTH = (BU_SQLITE_IOERR Or (28 Shl 8)) +Const BU_SQLITE_LOCKED_SHAREDCACHE = (BU_SQLITE_LOCKED Or (1 Shl 8)) +Const BU_SQLITE_BUSY_RECOVERY = (BU_SQLITE_BUSY Or (1 Shl 8)) +Const BU_SQLITE_BUSY_SNAPSHOT = (BU_SQLITE_BUSY Or (2 Shl 8)) +Const BU_SQLITE_CANTOPEN_NOTEMPDIR = (BU_SQLITE_CANTOPEN Or (1 Shl 8)) +Const BU_SQLITE_CANTOPEN_ISDIR = (BU_SQLITE_CANTOPEN Or (2 Shl 8)) +Const BU_SQLITE_CANTOPEN_FULLPATH = (BU_SQLITE_CANTOPEN Or (3 Shl 8)) +Const BU_SQLITE_CANTOPEN_CONVPATH = (BU_SQLITE_CANTOPEN Or (4 Shl 8)) +Const BU_SQLITE_CORRUPT_VTAB = (BU_SQLITE_CORRUPT Or (1 Shl 8)) +Const BU_SQLITE_READONLY_RECOVERY = (BU_SQLITE_READONLY Or (1 Shl 8)) +Const BU_SQLITE_READONLY_CANTLOCK = (BU_SQLITE_READONLY Or (2 Shl 8)) +Const BU_SQLITE_READONLY_ROLLBACK = (BU_SQLITE_READONLY Or (3 Shl 8)) +Const BU_SQLITE_READONLY_DBMOVED = (BU_SQLITE_READONLY Or (4 Shl 8)) +Const BU_SQLITE_ABORT_ROLLBACK = (BU_SQLITE_ABORT Or (2 Shl 8)) +Const BU_SQLITE_CONSTRAINT_CHECK = (BU_SQLITE_CONSTRAINT Or (1 Shl 8)) +Const BU_SQLITE_CONSTRAINT_COMMITHOOK = (BU_SQLITE_CONSTRAINT Or (2 Shl 8)) +Const BU_SQLITE_CONSTRAINT_FOREIGNKEY = (BU_SQLITE_CONSTRAINT Or (3 Shl 8)) +Const BU_SQLITE_CONSTRAINT_FUNCTION = (BU_SQLITE_CONSTRAINT Or (4 Shl 8)) +Const BU_SQLITE_CONSTRAINT_NOTNULL = (BU_SQLITE_CONSTRAINT Or (5 Shl 8)) +Const BU_SQLITE_CONSTRAINT_PRIMARYKEY = (BU_SQLITE_CONSTRAINT Or (6 Shl 8)) +Const BU_SQLITE_CONSTRAINT_TRIGGER = (BU_SQLITE_CONSTRAINT Or (7 Shl 8)) +Const BU_SQLITE_CONSTRAINT_UNIQUE = (BU_SQLITE_CONSTRAINT Or (8 Shl 8)) +Const BU_SQLITE_CONSTRAINT_VTAB = (BU_SQLITE_CONSTRAINT Or (9 Shl 8)) +Const BU_SQLITE_CONSTRAINT_ROWID = (BU_SQLITE_CONSTRAINT Or (10 Shl 8)) +Const BU_SQLITE_NOTICE_RECOVER_WAL = (BU_SQLITE_NOTICE Or (1 Shl 8)) +Const BU_SQLITE_NOTICE_RECOVER_ROLLBACK = (BU_SQLITE_NOTICE Or (2 Shl 8)) +Const BU_SQLITE_WARNING_AUTOINDEX = (BU_SQLITE_WARNING Or (1 Shl 8)) +Const BU_SQLITE_AUTH_USER = (BU_SQLITE_AUTH Or (1 Shl 8)) +;[End Block] + +;[Block] Flags For File Open Operations +; These bit values are intended for use in the +; 3rd parameter to the [sqlite3_open_v2()] interface. +Const BU_SQLITE_OPEN_READONLY = $00000001 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_READWRITE = $00000002 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_CREATE = $00000004 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_DELETEONCLOSE = $00000008 ; VFS only */ +Const BU_SQLITE_OPEN_EXCLUSIVE = $00000010 ; VFS only */ +Const BU_SQLITE_OPEN_AUTOPROXY = $00000020 ; VFS only */ +Const BU_SQLITE_OPEN_URI = $00000040 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_MEMORY = $00000080 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_MAIN_DB = $00000100 ; VFS only */ +Const BU_SQLITE_OPEN_TEMP_DB = $00000200 ; VFS only */ +Const BU_SQLITE_OPEN_TRANSIENT_DB = $00000400 ; VFS only */ +Const BU_SQLITE_OPEN_MAIN_JOURNAL = $00000800 ; VFS only */ +Const BU_SQLITE_OPEN_TEMP_JOURNAL = $00001000 ; VFS only */ +Const BU_SQLITE_OPEN_SUBJOURNAL = $00002000 ; VFS only */ +Const BU_SQLITE_OPEN_MASTER_JOURNAL = $00004000 ; VFS only */ +Const BU_SQLITE_OPEN_NOMUTEX = $00008000 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_FULLMUTEX = $00010000 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_SHAREDCACHE = $00020000 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_PRIVATECACHE = $00040000 ; Ok for sqlite3_open_v2() */ +Const BU_SQLITE_OPEN_WAL = $00080000 ; VFS only */ +;[End Block] + +;[Block] Authorizer Return Codes +; The [sqlite3_set_authorizer | authorizer callback function] must +; return either [SQLITE_OK] or one of these two constants in order +; to signal SQLite whether or not the action is permitted. See the +; [sqlite3_set_authorizer | authorizer documentation] for additional +; information. +; +; Note that SQLITE_IGNORE is also used as a [conflict resolution mode] +; returned from the [sqlite3_vtab_on_conflict()] interface. +Const BU_SQLITE_DENY = 1 ; Abort the SQL statement with an error */ +Const BU_SQLITE_IGNORE = 2 ; Don't allow access, but don't generate an error */ +;[End Block] + +;[Block] Authorizer Action Codes +; The [sqlite3_set_authorizer()] interface registers a callback function +; that is invoked to authorize certain SQL statement actions. The +; second parameter to the callback is an integer code that specifies +; what action is being authorized. These are the integer action codes that +; the authorizer callback may be passed. +; +; These action code values signify what kind of operation is to be +; authorized. The 3rd and 4th parameters to the authorization +; callback function will be parameters or NULL depending on which of these +; codes is used as the second parameter. ^(The 5th parameter to the +; authorizer callback is the name of the database ("main", "temp", +; etc.) if applicable.)^ ^The 6th parameter to the authorizer callback +; is the name of the inner-most trigger or view that is responsible for +; the access attempt or NULL if this access attempt is directly from +; top-level SQL code. +; ;;;;;;;;;;;;;;;;;;;;; 3rd ;;;;;; 4th ;;;;;*/ +Const BU_SQLITE_CREATE_INDEX = 1 ; Index Name Table Name */ +Const BU_SQLITE_CREATE_TABLE = 2 ; Table Name NULL */ +Const BU_SQLITE_CREATE_TEMP_INDEX = 3 ; Index Name Table Name */ +Const BU_SQLITE_CREATE_TEMP_TABLE = 4 ; Table Name NULL */ +Const BU_SQLITE_CREATE_TEMP_TRIGGER = 5 ; Trigger Name Table Name */ +Const BU_SQLITE_CREATE_TEMP_VIEW = 6 ; View Name NULL */ +Const BU_SQLITE_CREATE_TRIGGER = 7 ; Trigger Name Table Name */ +Const BU_SQLITE_CREATE_VIEW = 8 ; View Name NULL */ +Const BU_SQLITE_DELETE = 9 ; Table Name NULL */ +Const BU_SQLITE_DROP_INDEX = 10 ; Index Name Table Name */ +Const BU_SQLITE_DROP_TABLE = 11 ; Table Name NULL */ +Const BU_SQLITE_DROP_TEMP_INDEX = 12 ; Index Name Table Name */ +Const BU_SQLITE_DROP_TEMP_TABLE = 13 ; Table Name NULL */ +Const BU_SQLITE_DROP_TEMP_TRIGGER = 14 ; Trigger Name Table Name */ +Const BU_SQLITE_DROP_TEMP_VIEW = 15 ; View Name NULL */ +Const BU_SQLITE_DROP_TRIGGER = 16 ; Trigger Name Table Name */ +Const BU_SQLITE_DROP_VIEW = 17 ; View Name NULL */ +Const BU_SQLITE_INSERT = 18 ; Table Name NULL */ +Const BU_SQLITE_PRAGMA = 19 ; Pragma Name 1st arg or NULL */ +Const BU_SQLITE_READ = 20 ; Table Name Column Name */ +Const BU_SQLITE_SELECT = 21 ; NULL NULL */ +Const BU_SQLITE_TRANSACTION = 22 ; Operation NULL */ +Const BU_SQLITE_UPDATE = 23 ; Table Name Column Name */ +Const BU_SQLITE_ATTACH = 24 ; Filename NULL */ +Const BU_SQLITE_DETACH = 25 ; Database Name NULL */ +Const BU_SQLITE_ALTER_TABLE = 26 ; Database Name Table Name */ +Const BU_SQLITE_REINDEX = 27 ; Index Name NULL */ +Const BU_SQLITE_ANALYZE = 28 ; Table Name NULL */ +Const BU_SQLITE_CREATE_VTABLE = 29 ; Table Name Module Name */ +Const BU_SQLITE_DROP_VTABLE = 30 ; Table Name Module Name */ +Const BU_SQLITE_FUNCTION = 31 ; NULL Function Name */ +Const BU_SQLITE_SAVEPOINT = 32 ; Operation Savepoint Name */ +Const BU_SQLITE_COPY = 0 ; No longer used */ +Const BU_SQLITE_RECURSIVE = 33 ; NULL NULL */ +;[End Block] + +;[Block] Run-Time Limit Categories +; KEYWORDS: {limit category} {*limit categories} +; +; These constants define various performance limits +; that can be lowered at run-time using [sqlite3_limit()]. +; The synopsis of the meanings of the various limits is shown below. +; Additional information is available at [limits | Limits in SQLite]. +; +;
+; [[SQLITE_LIMIT_LENGTH]] ^(
SQLITE_LIMIT_LENGTH
+;
The maximum size of any string or BLOB or table row, in bytes.
)^ +; +; [[SQLITE_LIMIT_SQL_LENGTH]] ^(
SQLITE_LIMIT_SQL_LENGTH
+;
The maximum length of an SQL statement, in bytes.
)^ +; +; [[SQLITE_LIMIT_COLUMN]] ^(
SQLITE_LIMIT_COLUMN
+;
The maximum number of columns in a table definition or in the +; result set of a [SELECT] or the maximum number of columns in an index +; or in an ORDER BY or GROUP BY clause.
)^ +; +; [[SQLITE_LIMIT_EXPR_DEPTH]] ^(
SQLITE_LIMIT_EXPR_DEPTH
+;
The maximum depth of the parse tree on any expression.
)^ +; +; [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(
SQLITE_LIMIT_COMPOUND_SELECT
+;
The maximum number of terms in a compound SELECT statement.
)^ +; +; [[SQLITE_LIMIT_VDBE_OP]] ^(
SQLITE_LIMIT_VDBE_OP
+;
The maximum number of instructions in a virtual machine program +; used to implement an SQL statement. This limit is not currently +; enforced, though that might be added in some future release of +; SQLite.
)^ +; +; [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
SQLITE_LIMIT_FUNCTION_ARG
+;
The maximum number of arguments on a function.
)^ +; +; [[SQLITE_LIMIT_ATTACHED]] ^(
SQLITE_LIMIT_ATTACHED
+;
The maximum number of [ATTACH | attached databases].)^
+; +; [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] +; ^(
SQLITE_LIMIT_LIKE_PATTERN_LENGTH
+;
The maximum length of the pattern argument to the [LIKE] or +; [GLOB] operators.
)^ +; +; [[SQLITE_LIMIT_VARIABLE_NUMBER]] +; ^(
SQLITE_LIMIT_VARIABLE_NUMBER
+;
The maximum index number of any [parameter] in an SQL statement.)^ +; +; [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(
SQLITE_LIMIT_TRIGGER_DEPTH
+;
The maximum depth of recursion for triggers.
)^ +; +; [[SQLITE_LIMIT_WORKER_THREADS]] ^(
SQLITE_LIMIT_WORKER_THREADS
+;
The maximum number of auxiliary worker threads that a single +; [prepared statement] may start.
)^ +;
+Const BU_SQLITE_LIMIT_LENGTH = 0 +Const BU_SQLITE_LIMIT_SQL_LENGTH = 1 +Const BU_SQLITE_LIMIT_COLUMN = 2 +Const BU_SQLITE_LIMIT_EXPR_DEPTH = 3 +Const BU_SQLITE_LIMIT_COMPOUND_SELECT = 4 +Const BU_SQLITE_LIMIT_VDBE_OP = 5 +Const BU_SQLITE_LIMIT_FUNCTION_ARG = 6 +Const BU_SQLITE_LIMIT_ATTACHED = 7 +Const BU_SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8 +Const BU_SQLITE_LIMIT_VARIABLE_NUMBER = 9 +Const BU_SQLITE_LIMIT_TRIGGER_DEPTH = 10 +Const BU_SQLITE_LIMIT_WORKER_THREADS = 11 +;[End Block] + +;[Block] Column Type +Const BU_SQLITE_UNKNOWN = 0 +Const BU_SQLITE_INTEGER = 1 +Const BU_SQLITE_REAL = 2 +Const BU_SQLITE_FLOAT = 2 +Const BU_SQLITE_DOUBLE = 2 +Const BU_SQLITE_TEXT = 3 +Const BU_SQLITE_STRING = 3 +Const BU_SQLITE_BLOB = 4 +Const BU_SQLITE_BANK = 4 +Const BU_SQLITE_NULL = 5 +;[End Block] + +; Math ------------------------------------------------------------------------- +;-- Vector2 +Type Vector2 + Field X#, Y# +End Type + +Function Vector2_Create.Vector2(X#, Y#) + Local vec.Vector2 = New Vector2 + vec\X = X + vec\Y = Y + Return vec +End Function + +;-- Vector3 +Type Vector3 + Field X#, Y#, Z# +End Type + +Function Vector3_Create.Vector3(X#, Y#, Z#) + Local vec.Vector3 = New Vector3 + vec\X = X + vec\Y = Y + vec\Z = Z + Return vec +End Function + diff --git a/Resources/BlitzUtility.decls b/Resources/BlitzUtility.decls index be422b5..4fe90cd 100644 --- a/Resources/BlitzUtility.decls +++ b/Resources/BlitzUtility.decls @@ -1,302 +1,306 @@ -; BlitzUtility - Expanding the normal Blitz functionality. -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your 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 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, see . - -.lib "BlitzUtility.dll" -; Container ------------------------------------------------------------------- -; -- List (Single Element) -BU_List_Create%(element*) -BU_List_Destroy%(list%) -BU_List_First%(list%) -BU_List_Last%(list%) -BU_List_Previous%(list%) -BU_List_Next%(list%) -BU_List_Before%(list%, other*) -BU_List_After%(list%, other*) -BU_List_Insert(list%, element*) -BU_List_InsertEx(list%, element*, other*) -BU_List_Remove(list%, element*) -; -- TypeList (Single Type) -BU_TypeList_New%(obj*) -BU_TypeList_Activate(list%) -BU_TypeList_Deactivate(list%) -BU_TypeList_Destroy(list%) - -; Database -------------------------------------------------------------------- -; -- SQLite3 -; Core -BU_SQLite_Version$() -BU_SQLite_Version_Number%() -BU_SQLite_SourceID$() -BU_SQLite_CompileOption_Used%(zOptName$) -BU_SQLite_CompileOption_Get$(n%) -BU_SQLite_ThreadSafe%() -BU_SQLite_Initialize%() -BU_SQLite_Shutdown%() -BU_SQLite_Sleep%(ms%) -; Open & Close -BU_SQLite_Open%(file$, db*) -BU_SQLite_Open_V2%(file$, db*, flags%, zVfs$) -BU_SQLite_Open_V2Ex%(file$, db*, flags%, zVfs%) : "BU_SQLite_Open_V2" -BU_SQLite_Close%(db%) -BU_SQLite_Close_V2%(db%) -BU_SQLite_OpenSimple%(file$) -BU_SQLite_OpenSimple_V2%(file$, flags%, zVfs$) -BU_SQLite_OpenSimple_V2Ex%(file$, flags%, zVfs%) : "BU_SQLite_OpenSimple_V2" -BU_SQLite_OpenSimpleError%() -; Error Handling -BU_SQLite_Error_Code%(db%) -BU_SQLite_Extended_Error_Code%(db%) -BU_SQLite_Error_Message$(db%) -BU_SQLite_Error_String$(errorCode%) -BU_SQLite_Extended_Result_Codes%(db%, onoff%) -; Busy Handler -BU_SQLite_Busy_Timeout%(db%, timeout%) -BU_SQLite_Busy_Handler%(db%, pHandlerFunction3IPI%, param%) -BU_SQLite_Busy_Handler_Simple%(db%, pHandlerFunc2II%) -; Memory Management -BU_SQLite_Memory_Used%() -BU_SQLite_Memory_Highwater%(bReset%) -BU_SQLite_Release_Memory%(bytes%) -BU_SQLite_DB_Release_Memory%(db%) -BU_SQLite_Randomness(n%, pBank*) -; Database Management & Modification -BU_SQLite_Exec%(db%, sql$, pCallback3PIPP%, param%, errMsg*) -BU_SQLite_ExecEx%(db%, sql$, pCallback3PIPP%, param%, errMsg%) : "BU_SQLite_Exec" -BU_SQLite_Last_Insert_RowId%(db%) -BU_SQLite_Changes%(db%) -BU_SQLite_Total_Changes%(db%) -BU_SQLite_Interrupt(db%) -BU_SQLite_Complete%(sql$) -BU_SQLite_Get_Table%(db, zSql$, pazResult*, pnRow*, pnColumn*, pzErrMessage*) -BU_SQLite_Free_Table%(result*) -BU_SQLite_Set_Authorizer%(db%, pAuth5PIPPPP, pArg%) -BU_SQLite_Trace%(db%, pTrace1PP, pArg%) -BU_SQLite_Profile%(db%, pProfile2PPI, pArg%) -BU_SQLite_Progress_Handler%(db%, nOps%, pProgress1IP%, pArg%) -BU_SQLite_URI_Parameter$(zFilename$, zParam$) -BU_SQLite_URI_Boolean%(zFilename$, zParam$, bDefault%) -BU_SQLite_URI_LongLong%(zFilename$, zParam$, bDefault%) -BU_SQLite_Limit%(db%, id%, newVal%) -; Prepared Statements -BU_SQLite_Next_Statement%(db%, pStmt%) -BU_SQLite_Prepare%(db%, zSql$, nByte%, ppStmt*) -BU_SQLite_PrepareEx%(db%, zSql$, nByte%, ppStmt%) : "BU_SQLite_Prepare" -BU_SQLite_Prepare_V2%(db%, zSql$, nByte%, ppStmt*) -BU_SQLite_Prepare_V2Ex%(db%, zSql$, nByte%, ppStmt%) : "BU_SQLite_Prepare_V2" -BU_SQLite_Statement_ReadOnly%(pStmt%) -BU_SQLite_Statement_Busy%(pStmt%) -BU_SQLite_Statement_Status%(pStmt%, op%, resetFlag%) -BU_SQLite_SQL$(pStmt%) -BU_SQLite_Database_Handle%(pStmt%) -BU_SQLite_Bind_Null%(pStmt%, index%) -BU_SQLite_Bind_Int%(pStmt%, index%, value%) -BU_SQLite_Bind_LongLong%(pStmt%, index%, pValue%) -BU_SQLite_Bind_Float%(pStmt%, index%, value#) -BU_SQLite_Bind_Double%(pStmt%, index%, pValue%) -BU_SQLite_Bind_Text%(pStmt%, index%, zData$, nData%) -BU_SQLite_Bind_Blob%(pStmt%, index%, zData$, nData%) -BU_SQLite_Bind_Value%(pStmt%, index%, pValue%) -BU_SQLite_Bind_ZeroBlob%(pStmt%, index%, bytes%) -BU_SQLite_Bind_Parameter_Count%(pStmt%) -BU_SQLite_Bind_Parameter_Name$(pStmt%, index%) -BU_SQLite_Bind_Parameter_Index%(pStmt%, zName$) -BU_SQLite_Clear_Bindings%(pStmt%) -BU_SQLite_Column_Count%(pStmt%) -BU_SQLite_Column_Name$(pStmt%, index%) -BU_SQLite_Column_DeclaredType$(pStmt%, index%) -BU_SQLite_Step%(pStmt%) -BU_SQLite_Data_Count%(pStmt%) -BU_SQLite_Column_Blob%(pStmt%, iCol%) -BU_SQLite_Column_Bytes%(pStmt%, iCol%) -BU_SQLite_Column_Float%(pStmt%, iCol%) -BU_SQLite_Column_Double%(pStmt%, iCol%) -BU_SQLite_Column_Int%(pStmt%, iCol%) -BU_SQLite_Column_LongLong%(pStmt%, iCol%) -BU_SQLite_Column_Text$(pStmt%, iCol%) -BU_SQLite_Column_Value%(pStmt%, iCol%) -BU_SQLite_Column_Type%(pStmt%, iCol%) -BU_SQLite_Finalize%(pStmt%) -BU_SQLite_Reset%(pStmt%) -; SQLite Values -BU_SQLite_Value_Blob%(pValue%) -BU_SQLite_Value_Bytes%(pValue%) -BU_SQLite_Value_Int%(pValue%) -BU_SQLite_Value_LongLong%(pValue%) -BU_SQLite_Value_Float#(pValue%) -BU_SQLite_Value_Double%(pValue%) -BU_SQLite_Value_Text$(pValue%) -BU_SQLite_Value_Type%(pValue%) -BU_SQLite_Value_Numeric_Type%(pValue%) -BU_SQLite_Value_SubType%(pValue%) -BU_SQLite_Value_Duplicate%(pValue%) -BU_SQLite_Value_Free(pValue%) - -; Time ------------------------------------------------------------------------ -; -- Time -BU_Time_Now%() -BU_Time_Create%(seconds%, minutes%, hours%, days%, months%, years%, isDST%) -BU_Time_Destroy(pTime%) -BU_Time_Format$(pTime%, formatString$) -; -- SystemClock -BU_SystemClock_Now%() -BU_SystemClock_Destroy(pSystemClock%) -BU_SystemClock_FromTime%(pTime%) -BU_SystemClock_AsTime%(pSystemClock%) -; -- HighResolutionClock -BU_HighResolutionClock_Now%() -BU_HighResolutionClock_Destroy(pHighResolutionClock%) -BU_HighResolutionClock_Duration%(pHighResolutionClock%, pOther%) -BU_HighResolutionClock_DurationLL%(pHighResolutionClock%, pOther%) -BU_HighResolutionClock_DurationF#(pHighResolutionClock%, pOther%) -BU_HighResolutionClock_DurationD%(pHighResolutionClock%, pOther%) - -; Types - Long ---------------------------------------------------------------- -BU_Long_New%() :"_BU_Long_New@0" -BU_Long_Copy%(pThis%) :"_BU_Long_Copy@4" -BU_Long_Destroy(pThis%) :"_BU_Long_Destroy@4" -BU_Long_ToString$(pThis%) :"_BU_Long_ToString@4" -BU_Long_FromString%(cString$) :"_BU_Long_FromString@4" -BU_Long_FromI%(iRight%) :"_BU_Long_FromI@4" -BU_Long_FromII%(iLeft%, iRight%) :"_BU_Long_FromII@8" -BU_Long_ToI%(pThis%, iShift%) :"_BU_Long_ToI@8" -BU_Long_ToIH%(pThis%) :"_BU_Long_ToIH@4" -BU_Long_ToIL%(pThis%) :"_BU_Long_ToIL@4" -BU_Long_FromF%(Float#) :"_BU_Long_FromF@4" -BU_Long_ToF#(pThis%) :"_BU_Long_ToF@4" -BU_Long_FromD(pDouble%) :"_BU_Long_FromD@4" -BU_Long_ToD(pThis%) :"_BU_Long_ToD@4" -BU_Long_Compare%(pThis%, pRight%) :"_BU_Long_Compare@8" -BU_Long_Set%(pThis%, pOther%) :"_BU_Long_Set@8" -BU_Long_Add%(pThis%, pOther%) :"_BU_Long_Add@8" -BU_Long_Sub%(pThis%, pOther%) :"_BU_Long_Sub@8" -BU_Long_Div%(pThis%, pOther%) :"_BU_Long_Div@8" -BU_Long_Mul%(pThis%, pOther%) :"_BU_Long_Mul@8" -BU_Long_Mod%(pThis%, pOther%) :"_BU_Long_Mod@8" -BU_Long_SetI%(pThis%, iRight%) :"_BU_Long_SetI@8" -BU_Long_AddI%(pThis%, iRight%) :"_BU_Long_AddI@8" -BU_Long_SubI%(pThis%, iRight%) :"_BU_Long_SubI@8" -BU_Long_DivI%(pThis%, iRight%) :"_BU_Long_DivI@8" -BU_Long_MulI%(pThis%, iRight%) :"_BU_Long_MulI@8" -BU_Long_ModI%(pThis%, iRight%) :"_BU_Long_ModI@8" -BU_Long_SetII%(pThis%, iLeft%, iRight%) :"_BU_Long_SetII@12" -BU_Long_AddII%(pThis%, iLeft%, iRight%) :"_BU_Long_AddII@12" -BU_Long_SubII%(pThis%, iLeft%, iRight%) :"_BU_Long_SubII@12" -BU_Long_DivII%(pThis%, iLeft%, iRight%) :"_BU_Long_DivII@12" -BU_Long_MulII%(pThis%, iLeft%, iRight%) :"_BU_Long_MulII@12" -BU_Long_ModII%(pThis%, iLeft%, iRight%) :"_BU_Long_ModII@12" -BU_Long_Shift%(pThis%, iRight%) :"_BU_Long_Shift@8" - -; Double ------------------------------------------------------------------------ -BU_Double_New%() :"_BU_Double_New@0" -BU_Double_Copy%(pThis%) :"_BU_Double_Copy@4" -BU_Double_Destroy(pThis%) :"_BU_Double_Destroy@4" -BU_Double_ToString$(pThis%) :"_BU_Double_ToString@4" -BU_Double_FromString%(cString$) :"_BU_Double_FromString@4" -BU_Double_FromF%(Float#) :"_BU_Double_FromF@4" -BU_Double_ToF#(pThis%) :"_BU_Double_ToF@4" -BU_Double_FromI%(iRight%) :"_BU_Double_FromI@4" -BU_Double_ToI%(pThis%) :"_BU_Double_ToI@8" -BU_Double_FromL(pDouble%) :"_BU_Double_FromL@4" -BU_Double_ToL(pThis%) :"_BU_Double_ToL@4" -BU_Double_Compare%(pThis%, pOther%) :"_BU_Double_Compare@8" -BU_Double_Set%(pThis%, pOther%) :"_BU_Double_Set@8" -BU_Double_Add%(pThis%, pOther%) :"_BU_Double_Add@8" -BU_Double_Sub%(pThis%, pOther%) :"_BU_Double_Sub@8" -BU_Double_Div%(pThis%, pOther%) :"_BU_Double_Div@8" -BU_Double_Mul%(pThis%, pOther%) :"_BU_Double_Mul@8" -BU_Double_Mod%(pThis%, pOther%) :"_BU_Double_Mod@8" -BU_Double_SetF%(pThis%, fOther%) :"_BU_Double_SetF@8" -BU_Double_AddF%(pThis%, fOther%) :"_BU_Double_AddF@8" -BU_Double_SubF%(pThis%, fOther%) :"_BU_Double_SubF@8" -BU_Double_DivF%(pThis%, fOther%) :"_BU_Double_DivF@8" -BU_Double_MulF%(pThis%, fOther%) :"_BU_Double_MulF@8" -BU_Double_ModF%(pThis%, fOther%) :"_BU_Double_ModF@8" - -; Utility --------------------------------------------------------------------- -; -- Display Enumerator -BU_DisplayEnumerator_Create%() -BU_DisplayEnumerator_Destroy(DisplayEnumerator%) -BU_DisplayEnumerator_Enumerate%(DisplayEnumerator%) -BU_DisplayEnumerator_Count%(DisplayEnumerator%) -BU_DisplayEnumerator_Retrieve(DisplayEnumerator%, index%, Rect*) -; -- Indexer V1 (Array) -BU_IndexerV1_Create%() -BU_IndexerV1_Destroy(Indexer%) -BU_IndexerV1_Mark(Indexer%, Used%) -BU_IndexerV1_MarkFree(Indexer%) -BU_IndexerV1_MarkUsed(Indexer%) -BU_IndexerV1_Is%(Indexer%, Used%) -BU_IndexerV1_IsFree%(Indexer%) -BU_IndexerV1_IsUsed%(Indexer%) -BU_IndexerV1_Get%(Indexer%) -BU_IndexerV1_Count%(Indexer%, Used%) -BU_IndexerV1_CountFree%(Indexer%) -BU_IndexerV1_CountUsed%(Indexer%) -; -- Indexer V2 (List) -BU_IndexerV2_Create%() -BU_IndexerV2_Destroy(Indexer%) -BU_IndexerV2_Mark(Indexer%, Used%) -BU_IndexerV2_MarkFree(Indexer%) -BU_IndexerV2_MarkUsed(Indexer%) -BU_IndexerV2_Is%(Indexer%, Used%) -BU_IndexerV2_IsFree%(Indexer%) -BU_IndexerV2_IsUsed%(Indexer%) -BU_IndexerV2_Get%(Indexer%) -BU_IndexerV2_Count%(Indexer%, Used%) -BU_IndexerV2_CountFree%(Indexer%) -BU_IndexerV2_CountUsed%(Indexer%) -; -- Mass Operation -BU_MassOp_Create%(length%) -BU_MassOp_Destroy(massop%) -BU_MassOp_Instruction(massop%, index%, type%, code%, leftOperand%, rightOperand%, result%) -BU_MassOp_Run(massop%) -; -- Window Message Handler -BU_WindowMessageHandler_Install(hwnd%) -BU_WindowMessageHandler_Uninstall(hwnd%) -BU_WindowMessageHandler_Message_Close%(hwnd%) -BU_WindowMessageHandler_Message_Destroy%(hwnd%) -BU_WindowMessageHandler_Message_Resize%(hwnd%, point*) - -; Helpers --------------------------------------------------------------------- -.lib " " -; -- Blitz Functions -BU_Helper_Window_LockPointer(HWND%) -BU_Helper_Window_LockPointerAuto(HWND%) -BU_Helper_Window_MakeBorderless(HWND%) -BU_Helper_Window_Center(HWND%, Monitor%) -BU_Helper_Window_Fill(HWND%, Monitor%) -; -- Windows API (User32) -.lib "User32.dll" -BU_User32_ClientToScreen%(hwnd%, point*) : "ClientToScreen" -BU_User32_ClientToScreenEx%(hwnd%, point%) : "ClientToScreen" -BU_User32_ClipCursor%(rect*) : "ClipCursor" -BU_User32_ClipCursorEx%(ptr%) : "ClipCursor" -BU_User32_GetActiveWindow%() : "GetActiveWindow" -BU_User32_GetSystemMetrics%(index%) : "GetSystemMetrics" -BU_User32_SetWindowLong%(hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA" -BU_User32_GetWindowLong%(hwnd%, index%) : "GetWindowLongA" -BU_User32_GetWindowRect%(hwnd%, rect*) : "GetWindowRect" -BU_User32_GetWindowRectEx%(hwnd%, rect%) : "GetWindowRect" -BU_User32_GetClientRect%(hwnd%, rect*) : "GetClientRect" -BU_User32_GetClientRectEx%(hwnd%, rect%) : "GetClientRect" -BU_User32_SetWindowPos%(hwnd%, hWndInsertAfter%, x%, y%, cx%, cy%, wFlags%) : "SetWindowPos" -BU_User32_MessageBox%(hwnd%, lpText$, lpCaption$, uType%) : "MessageBoxA" -; -- Windows API (Kernel32) -.lib "Kernel32.dll" -BU_Kernel32_FlushFileBuffers%(hFile%) : "FlushFileBuffers" -FlushFile%(hFile%) : "FlushFileBuffers" -BU_Kernel32_QueryPerformanceCounter%(pLongLong%) : "QueryPerformanceCounter" +; BlitzUtility - Expanding the normal Blitz functionality. +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your 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 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, see . + +.lib "BlitzUtility.dll" +; Container ------------------------------------------------------------------- +; -- List (Single Element) +BU_List_Create%(element*) +BU_List_Destroy%(list%) +BU_List_First%(list%) +BU_List_Last%(list%) +BU_List_Previous%(list%) +BU_List_Next%(list%) +BU_List_Before%(list%, other*) +BU_List_After%(list%, other*) +BU_List_Insert(list%, element*) +BU_List_InsertEx(list%, element*, other*) +BU_List_Remove(list%, element*) +; -- TypeList (Single Type) +BU_TypeList_Create%(obj*) +BU_TypeList_Activate(list%) +BU_TypeList_Deactivate(list%) +BU_TypeList_Destroy(list%) + +; Database -------------------------------------------------------------------- +; -- SQLite3 +; Core +BU_SQLite_Version$() +BU_SQLite_Version_Number%() +BU_SQLite_SourceID$() +BU_SQLite_CompileOption_Used%(zOptName$) +BU_SQLite_CompileOption_Get$(n%) +BU_SQLite_ThreadSafe%() +BU_SQLite_Initialize%() +BU_SQLite_Shutdown%() +BU_SQLite_Sleep%(ms%) +; Open & Close +BU_SQLite_Open%(file$, db*) +BU_SQLite_Open_V2%(file$, db*, flags%, zVfs$) +BU_SQLite_Open_V2Ex%(file$, db*, flags%, zVfs%) : "BU_SQLite_Open_V2" +BU_SQLite_Close%(db%) +BU_SQLite_Close_V2%(db%) +BU_SQLite_OpenSimple%(file$) +BU_SQLite_OpenSimple_V2%(file$, flags%, zVfs$) +BU_SQLite_OpenSimple_V2Ex%(file$, flags%, zVfs%) : "BU_SQLite_OpenSimple_V2" +BU_SQLite_OpenSimpleError%() +; Error Handling +BU_SQLite_Error_Code%(db%) +BU_SQLite_Extended_Error_Code%(db%) +BU_SQLite_Error_Message$(db%) +BU_SQLite_Error_String$(errorCode%) +BU_SQLite_Extended_Result_Codes%(db%, onoff%) +; Busy Handler +BU_SQLite_Busy_Timeout%(db%, timeout%) +BU_SQLite_Busy_Handler%(db%, pHandlerFunction3IPI%, param%) +BU_SQLite_Busy_Handler_Simple%(db%, pHandlerFunc2II%) +; Memory Management +BU_SQLite_Memory_Used%() +BU_SQLite_Memory_Highwater%(bReset%) +BU_SQLite_Release_Memory%(bytes%) +BU_SQLite_DB_Release_Memory%(db%) +BU_SQLite_Randomness(n%, pBank*) +; Database Management & Modification +BU_SQLite_Exec%(db%, sql$, pCallback3PIPP%, param%, errMsg*) +BU_SQLite_ExecEx%(db%, sql$, pCallback3PIPP%, param%, errMsg%) : "BU_SQLite_Exec" +BU_SQLite_Last_Insert_RowId%(db%) +BU_SQLite_Changes%(db%) +BU_SQLite_Total_Changes%(db%) +BU_SQLite_Interrupt(db%) +BU_SQLite_Complete%(sql$) +BU_SQLite_Get_Table%(db, zSql$, pazResult*, pnRow*, pnColumn*, pzErrMessage*) +BU_SQLite_Free_Table%(result*) +BU_SQLite_Set_Authorizer%(db%, pAuth5PIPPPP, pArg%) +BU_SQLite_Trace%(db%, pTrace1PP, pArg%) +BU_SQLite_Profile%(db%, pProfile2PPI, pArg%) +BU_SQLite_Progress_Handler%(db%, nOps%, pProgress1IP%, pArg%) +BU_SQLite_URI_Parameter$(zFilename$, zParam$) +BU_SQLite_URI_Boolean%(zFilename$, zParam$, bDefault%) +BU_SQLite_URI_LongLong%(zFilename$, zParam$, bDefault%) +BU_SQLite_Limit%(db%, id%, newVal%) +; Prepared Statements +BU_SQLite_Next_Statement%(db%, pStmt%) +BU_SQLite_Prepare%(db%, zSql$, nByte%, ppStmt*) +BU_SQLite_PrepareEx%(db%, zSql$, nByte%, ppStmt%) : "BU_SQLite_Prepare" +BU_SQLite_Prepare_V2%(db%, zSql$, nByte%, ppStmt*) +BU_SQLite_Prepare_V2Ex%(db%, zSql$, nByte%, ppStmt%) : "BU_SQLite_Prepare_V2" +BU_SQLite_Statement_ReadOnly%(pStmt%) +BU_SQLite_Statement_Busy%(pStmt%) +BU_SQLite_Statement_Status%(pStmt%, op%, resetFlag%) +BU_SQLite_SQL$(pStmt%) +BU_SQLite_Database_Handle%(pStmt%) +BU_SQLite_Bind_Null%(pStmt%, index%) +BU_SQLite_Bind_Int%(pStmt%, index%, value%) +BU_SQLite_Bind_LongLong%(pStmt%, index%, pValue%) +BU_SQLite_Bind_Float%(pStmt%, index%, value#) +BU_SQLite_Bind_Double%(pStmt%, index%, pValue%) +BU_SQLite_Bind_Text%(pStmt%, index%, zData$, nData%) +BU_SQLite_Bind_Blob%(pStmt%, index%, zData$, nData%) +BU_SQLite_Bind_Value%(pStmt%, index%, pValue%) +BU_SQLite_Bind_ZeroBlob%(pStmt%, index%, bytes%) +BU_SQLite_Bind_Parameter_Count%(pStmt%) +BU_SQLite_Bind_Parameter_Name$(pStmt%, index%) +BU_SQLite_Bind_Parameter_Index%(pStmt%, zName$) +BU_SQLite_Clear_Bindings%(pStmt%) +BU_SQLite_Column_Count%(pStmt%) +BU_SQLite_Column_Name$(pStmt%, index%) +BU_SQLite_Column_DeclaredType$(pStmt%, index%) +BU_SQLite_Step%(pStmt%) +BU_SQLite_Data_Count%(pStmt%) +BU_SQLite_Column_Blob%(pStmt%, iCol%) +BU_SQLite_Column_Bytes%(pStmt%, iCol%) +BU_SQLite_Column_Float%(pStmt%, iCol%) +BU_SQLite_Column_Double%(pStmt%, iCol%) +BU_SQLite_Column_Int%(pStmt%, iCol%) +BU_SQLite_Column_LongLong%(pStmt%, iCol%) +BU_SQLite_Column_Text$(pStmt%, iCol%) +BU_SQLite_Column_Value%(pStmt%, iCol%) +BU_SQLite_Column_Type%(pStmt%, iCol%) +BU_SQLite_Finalize%(pStmt%) +BU_SQLite_Reset%(pStmt%) +; SQLite Values +BU_SQLite_Value_Blob%(pValue%) +BU_SQLite_Value_Bytes%(pValue%) +BU_SQLite_Value_Int%(pValue%) +BU_SQLite_Value_LongLong%(pValue%) +BU_SQLite_Value_Float#(pValue%) +BU_SQLite_Value_Double%(pValue%) +BU_SQLite_Value_Text$(pValue%) +BU_SQLite_Value_Type%(pValue%) +BU_SQLite_Value_Numeric_Type%(pValue%) +BU_SQLite_Value_SubType%(pValue%) +BU_SQLite_Value_Duplicate%(pValue%) +BU_SQLite_Value_Free(pValue%) + +; Time ------------------------------------------------------------------------ +; -- Time +BU_Time_Now%() +BU_Time_Create%(seconds%, minutes%, hours%, days%, months%, years%, isDST%) +BU_Time_Destroy(pTime%) +BU_Time_Format$(pTime%, formatString$) +; -- Timer +BU_Timer_Create%(Interval%, hwnd%) : "_BU_Timer_Create@8" +BU_Timer_Destroy%(Timer%) : "_BU_Timer_Destroy@4" +BU_Timer_Wait%(Timer%) : "_BU_Timer_Wait@4" +; -- SystemClock +BU_SystemClock_Now%() +BU_SystemClock_Destroy(pSystemClock%) +BU_SystemClock_FromTime%(pTime%) +BU_SystemClock_AsTime%(pSystemClock%) +; -- HighResolutionClock +BU_HighResolutionClock_Now%() +BU_HighResolutionClock_Destroy(pHighResolutionClock%) +BU_HighResolutionClock_Duration%(pHighResolutionClock%, pOther%) +BU_HighResolutionClock_DurationLL%(pHighResolutionClock%, pOther%) +BU_HighResolutionClock_DurationF#(pHighResolutionClock%, pOther%) +BU_HighResolutionClock_DurationD%(pHighResolutionClock%, pOther%) + +; Types - Long ---------------------------------------------------------------- +BU_Long_New%() :"_BU_Long_New@0" +BU_Long_Copy%(pThis%) :"_BU_Long_Copy@4" +BU_Long_Destroy(pThis%) :"_BU_Long_Destroy@4" +BU_Long_ToString$(pThis%) :"_BU_Long_ToString@4" +BU_Long_FromString%(cString$) :"_BU_Long_FromString@4" +BU_Long_FromI%(iRight%) :"_BU_Long_FromI@4" +BU_Long_FromII%(iLeft%, iRight%) :"_BU_Long_FromII@8" +BU_Long_ToI%(pThis%, iShift%) :"_BU_Long_ToI@8" +BU_Long_ToIH%(pThis%) :"_BU_Long_ToIH@4" +BU_Long_ToIL%(pThis%) :"_BU_Long_ToIL@4" +BU_Long_FromF%(Float#) :"_BU_Long_FromF@4" +BU_Long_ToF#(pThis%) :"_BU_Long_ToF@4" +BU_Long_FromD(pDouble%) :"_BU_Long_FromD@4" +BU_Long_ToD(pThis%) :"_BU_Long_ToD@4" +BU_Long_Compare%(pThis%, pRight%) :"_BU_Long_Compare@8" +BU_Long_Set%(pThis%, pOther%) :"_BU_Long_Set@8" +BU_Long_Add%(pThis%, pOther%) :"_BU_Long_Add@8" +BU_Long_Sub%(pThis%, pOther%) :"_BU_Long_Sub@8" +BU_Long_Div%(pThis%, pOther%) :"_BU_Long_Div@8" +BU_Long_Mul%(pThis%, pOther%) :"_BU_Long_Mul@8" +BU_Long_Mod%(pThis%, pOther%) :"_BU_Long_Mod@8" +BU_Long_SetI%(pThis%, iRight%) :"_BU_Long_SetI@8" +BU_Long_AddI%(pThis%, iRight%) :"_BU_Long_AddI@8" +BU_Long_SubI%(pThis%, iRight%) :"_BU_Long_SubI@8" +BU_Long_DivI%(pThis%, iRight%) :"_BU_Long_DivI@8" +BU_Long_MulI%(pThis%, iRight%) :"_BU_Long_MulI@8" +BU_Long_ModI%(pThis%, iRight%) :"_BU_Long_ModI@8" +BU_Long_SetII%(pThis%, iLeft%, iRight%) :"_BU_Long_SetII@12" +BU_Long_AddII%(pThis%, iLeft%, iRight%) :"_BU_Long_AddII@12" +BU_Long_SubII%(pThis%, iLeft%, iRight%) :"_BU_Long_SubII@12" +BU_Long_DivII%(pThis%, iLeft%, iRight%) :"_BU_Long_DivII@12" +BU_Long_MulII%(pThis%, iLeft%, iRight%) :"_BU_Long_MulII@12" +BU_Long_ModII%(pThis%, iLeft%, iRight%) :"_BU_Long_ModII@12" +BU_Long_Shift%(pThis%, iRight%) :"_BU_Long_Shift@8" + +; Double ------------------------------------------------------------------------ +BU_Double_New%() :"_BU_Double_New@0" +BU_Double_Copy%(pThis%) :"_BU_Double_Copy@4" +BU_Double_Destroy(pThis%) :"_BU_Double_Destroy@4" +BU_Double_ToString$(pThis%) :"_BU_Double_ToString@4" +BU_Double_FromString%(cString$) :"_BU_Double_FromString@4" +BU_Double_FromF%(Float#) :"_BU_Double_FromF@4" +BU_Double_ToF#(pThis%) :"_BU_Double_ToF@4" +BU_Double_FromI%(iRight%) :"_BU_Double_FromI@4" +BU_Double_ToI%(pThis%) :"_BU_Double_ToI@8" +BU_Double_FromL(pDouble%) :"_BU_Double_FromL@4" +BU_Double_ToL(pThis%) :"_BU_Double_ToL@4" +BU_Double_Compare%(pThis%, pOther%) :"_BU_Double_Compare@8" +BU_Double_Set%(pThis%, pOther%) :"_BU_Double_Set@8" +BU_Double_Add%(pThis%, pOther%) :"_BU_Double_Add@8" +BU_Double_Sub%(pThis%, pOther%) :"_BU_Double_Sub@8" +BU_Double_Div%(pThis%, pOther%) :"_BU_Double_Div@8" +BU_Double_Mul%(pThis%, pOther%) :"_BU_Double_Mul@8" +BU_Double_Mod%(pThis%, pOther%) :"_BU_Double_Mod@8" +BU_Double_SetF%(pThis%, fOther%) :"_BU_Double_SetF@8" +BU_Double_AddF%(pThis%, fOther%) :"_BU_Double_AddF@8" +BU_Double_SubF%(pThis%, fOther%) :"_BU_Double_SubF@8" +BU_Double_DivF%(pThis%, fOther%) :"_BU_Double_DivF@8" +BU_Double_MulF%(pThis%, fOther%) :"_BU_Double_MulF@8" +BU_Double_ModF%(pThis%, fOther%) :"_BU_Double_ModF@8" + +; Utility --------------------------------------------------------------------- +; -- Display Enumerator +BU_DisplayEnumerator_Create%() :"_BU_DisplayEnumerator_Create@0" +BU_DisplayEnumerator_Destroy(DisplayEnumerator%) :"_BU_DisplayEnumerator_Destroy@4" +BU_DisplayEnumerator_Enumerate%(DisplayEnumerator%) :"_BU_DisplayEnumerator_Enumerate@4" +BU_DisplayEnumerator_Count%(DisplayEnumerator%) :"_BU_DisplayEnumerator_Count@4" +BU_DisplayEnumerator_Retrieve(DisplayEnumerator%, index%, Rect*) :"_BU_DisplayEnumerator_Retrieve@12" +; -- Indexer V1 (Array) +BU_IndexerV1_Create%() +BU_IndexerV1_Destroy(Indexer%) +BU_IndexerV1_Mark(Indexer%, Used%) +BU_IndexerV1_MarkFree(Indexer%) +BU_IndexerV1_MarkUsed(Indexer%) +BU_IndexerV1_Is%(Indexer%, Used%) +BU_IndexerV1_IsFree%(Indexer%) +BU_IndexerV1_IsUsed%(Indexer%) +BU_IndexerV1_Get%(Indexer%) +BU_IndexerV1_Count%(Indexer%, Used%) +BU_IndexerV1_CountFree%(Indexer%) +BU_IndexerV1_CountUsed%(Indexer%) +; -- Indexer V2 (List) +BU_IndexerV2_Create%() +BU_IndexerV2_Destroy(Indexer%) +BU_IndexerV2_Mark(Indexer%, Used%) +BU_IndexerV2_MarkFree(Indexer%) +BU_IndexerV2_MarkUsed(Indexer%) +BU_IndexerV2_Is%(Indexer%, Used%) +BU_IndexerV2_IsFree%(Indexer%) +BU_IndexerV2_IsUsed%(Indexer%) +BU_IndexerV2_Get%(Indexer%) +BU_IndexerV2_Count%(Indexer%, Used%) +BU_IndexerV2_CountFree%(Indexer%) +BU_IndexerV2_CountUsed%(Indexer%) +; -- Mass Operation +BU_MassOp_Create%(length%) +BU_MassOp_Destroy(massop%) +BU_MassOp_Instruction(massop%, index%, type%, code%, leftOperand%, rightOperand%, result%) +BU_MassOp_Run(massop%) +; -- Window Message Handler +BU_WindowMessageHandler_Install(hwnd%) +BU_WindowMessageHandler_Uninstall(hwnd%) +BU_WindowMessageHandler_Message_Close%(hwnd%) +BU_WindowMessageHandler_Message_Destroy%(hwnd%) +BU_WindowMessageHandler_Message_Resize%(hwnd%, point*) + +; Helpers --------------------------------------------------------------------- +.lib " " +; -- Blitz Functions +BU_Helper_Window_LockPointer(HWND%) +BU_Helper_Window_LockPointerAuto(HWND%) +BU_Helper_Window_MakeBorderless(HWND%) +BU_Helper_Window_Center(HWND%, Monitor%) +BU_Helper_Window_Fill(HWND%, Monitor%) +; -- Windows API (User32) +.lib "User32.dll" +BU_User32_ClientToScreen%(hwnd%, point*) : "ClientToScreen" +BU_User32_ClientToScreenEx%(hwnd%, point%) : "ClientToScreen" +BU_User32_ClipCursor%(rect*) : "ClipCursor" +BU_User32_ClipCursorEx%(ptr%) : "ClipCursor" +BU_User32_GetActiveWindow%() : "GetActiveWindow" +BU_User32_GetSystemMetrics%(index%) : "GetSystemMetrics" +BU_User32_SetWindowLong%(hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA" +BU_User32_GetWindowLong%(hwnd%, index%) : "GetWindowLongA" +BU_User32_GetWindowRect%(hwnd%, rect*) : "GetWindowRect" +BU_User32_GetWindowRectEx%(hwnd%, rect%) : "GetWindowRect" +BU_User32_GetClientRect%(hwnd%, rect*) : "GetClientRect" +BU_User32_GetClientRectEx%(hwnd%, rect%) : "GetClientRect" +BU_User32_SetWindowPos%(hwnd%, hWndInsertAfter%, x%, y%, cx%, cy%, wFlags%) : "SetWindowPos" +BU_User32_MessageBox%(hwnd%, lpText$, lpCaption$, uType%) : "MessageBoxA" +; -- Windows API (Kernel32) +.lib "Kernel32.dll" +BU_Kernel32_FlushFileBuffers%(hFile%) : "FlushFileBuffers" +FlushFile%(hFile%) : "FlushFileBuffers" +BU_Kernel32_QueryPerformanceCounter%(pLongLong%) : "QueryPerformanceCounter" BU_Kernel32_QueryPerformanceFrequency%(pLongLong%) : "QueryPerformanceFrequency" \ No newline at end of file diff --git a/Time/HighResolutionClock.cpp b/Time/HighResolutionClock.cpp index 2127771..cf5f5a3 100644 --- a/Time/HighResolutionClock.cpp +++ b/Time/HighResolutionClock.cpp @@ -1,53 +1,53 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#include "HighResolutionClock.h" -using namespace std; -using namespace std::chrono; - -DLL_FUNCTION(high_resolution_clock::time_point*) BU_HighResolutionClock_Now() { -#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_Now=_BU_HighResolutionClock_Now@0") - return new high_resolution_clock::time_point(high_resolution_clock::now()); -} - -DLL_FUNCTION(void) BU_HighResolutionClock_Destroy(high_resolution_clock::time_point* pThis) { -#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_Destroy=_BU_HighResolutionClock_Destroy@4") - delete pThis; -} - -DLL_FUNCTION(int32_t) BU_HighResolutionClock_Duration(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { -#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_Duration=_BU_HighResolutionClock_Duration@8") - duration temp = chrono::duration_cast>(*pThis - *pOther); - return temp.count(); -} - -DLL_FUNCTION(int64_t*) BU_HighResolutionClock_DurationLL(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { -#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_DurationLL=_BU_HighResolutionClock_DurationLL@8") - duration temp = (*pThis - *pOther); - return new int64_t(temp.count()); -} - -DLL_FUNCTION(float_t) BU_HighResolutionClock_DurationF(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { -#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_DurationF=_BU_HighResolutionClock_DurationF@8") - double_t duration = (chrono::duration_cast>(*pThis - *pOther)).count(); - return (float_t)(duration); -} - -DLL_FUNCTION(double_t*) BU_HighResolutionClock_DurationD(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { -#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_DurationD=_BU_HighResolutionClock_DurationD@8") - double_t duration = (chrono::duration_cast>(*pThis - *pOther)).count(); - return new double_t(duration); -} +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "HighResolutionClock.h" +using namespace std; +using namespace std::chrono; + +DLL_FUNCTION(high_resolution_clock::time_point*) BU_HighResolutionClock_Now() { +#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_Now=_BU_HighResolutionClock_Now@0") + return new high_resolution_clock::time_point(high_resolution_clock::now()); +} + +DLL_FUNCTION(void) BU_HighResolutionClock_Destroy(high_resolution_clock::time_point* pThis) { +#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_Destroy=_BU_HighResolutionClock_Destroy@4") + delete pThis; +} + +DLL_FUNCTION(int32_t) BU_HighResolutionClock_Duration(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { +#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_Duration=_BU_HighResolutionClock_Duration@8") + duration temp = chrono::duration_cast>(*pThis - *pOther); + return temp.count(); +} + +DLL_FUNCTION(int64_t*) BU_HighResolutionClock_DurationLL(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { +#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_DurationLL=_BU_HighResolutionClock_DurationLL@8") + duration temp = (*pThis - *pOther); + return new int64_t(temp.count()); +} + +DLL_FUNCTION(float_t) BU_HighResolutionClock_DurationF(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { +#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_DurationF=_BU_HighResolutionClock_DurationF@8") + double_t duration = (chrono::duration_cast>(*pThis - *pOther)).count(); + return (float_t)(duration); +} + +DLL_FUNCTION(double_t*) BU_HighResolutionClock_DurationD(high_resolution_clock::time_point* pThis, high_resolution_clock::time_point* pOther) { +#pragma comment(linker, "/EXPORT:BU_HighResolutionClock_DurationD=_BU_HighResolutionClock_DurationD@8") + double_t duration = (chrono::duration_cast>(*pThis - *pOther)).count(); + return new double_t(duration); +} diff --git a/Time/HighResolutionClock.h b/Time/HighResolutionClock.h index ca1768f..da057be 100644 --- a/Time/HighResolutionClock.h +++ b/Time/HighResolutionClock.h @@ -1,26 +1,26 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include - -DLL_FUNCTION(std::chrono::high_resolution_clock::time_point*) BU_HighResolutionClock_Now(); -DLL_FUNCTION(void) BU_HighResolutionClock_Destroy(std::chrono::high_resolution_clock::time_point* pThis); -DLL_FUNCTION(int32_t) BU_HighResolutionClock_Duration(std::chrono::high_resolution_clock::time_point* pThis, std::chrono::high_resolution_clock::time_point* pOther); -DLL_FUNCTION(int64_t*) BU_HighResolutionClock_DurationLL(std::chrono::high_resolution_clock::time_point* pThis, std::chrono::high_resolution_clock::time_point* pOther); -DLL_FUNCTION(float_t) BU_HighResolutionClock_DurationF(std::chrono::high_resolution_clock::time_point* pThis, std::chrono::high_resolution_clock::time_point* pOther); +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include + +DLL_FUNCTION(std::chrono::high_resolution_clock::time_point*) BU_HighResolutionClock_Now(); +DLL_FUNCTION(void) BU_HighResolutionClock_Destroy(std::chrono::high_resolution_clock::time_point* pThis); +DLL_FUNCTION(int32_t) BU_HighResolutionClock_Duration(std::chrono::high_resolution_clock::time_point* pThis, std::chrono::high_resolution_clock::time_point* pOther); +DLL_FUNCTION(int64_t*) BU_HighResolutionClock_DurationLL(std::chrono::high_resolution_clock::time_point* pThis, std::chrono::high_resolution_clock::time_point* pOther); +DLL_FUNCTION(float_t) BU_HighResolutionClock_DurationF(std::chrono::high_resolution_clock::time_point* pThis, std::chrono::high_resolution_clock::time_point* pOther); DLL_FUNCTION(double_t*) BU_HighResolutionClock_DurationD(std::chrono::high_resolution_clock::time_point* pThis, std::chrono::high_resolution_clock::time_point* pOther); \ No newline at end of file diff --git a/Time/SystemClock.cpp b/Time/SystemClock.cpp index 30a8721..c541e2f 100644 --- a/Time/SystemClock.cpp +++ b/Time/SystemClock.cpp @@ -1,37 +1,37 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#include "SystemClock.h" - -DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_Now() { -#pragma comment(linker, "/EXPORT:BU_SystemClock_Now=_BU_SystemClock_Now@0") - return new std::chrono::system_clock::time_point(std::chrono::system_clock::now()); -} - -DLL_FUNCTION(void) BU_SystemClock_Destroy(std::chrono::system_clock::time_point* pThis) { -#pragma comment(linker, "/EXPORT:BU_SystemClock_Destroy=_BU_SystemClock_Destroy@4") - delete pThis; -} - -DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_FromTime(time_t* pTime) { -#pragma comment(linker, "/EXPORT:BU_SystemClock_FromTime=_BU_SystemClock_FromTime@4") - return new std::chrono::system_clock::time_point(std::chrono::system_clock::from_time_t(*pTime)); -} - -DLL_FUNCTION(time_t*) BU_SystemClock_AsTime(std::chrono::system_clock::time_point* pThis) { -#pragma comment(linker, "/EXPORT:BU_SystemClock_AsTime=_BU_SystemClock_AsTime@4") - return new time_t(std::chrono::system_clock::to_time_t(*pThis)); +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "SystemClock.h" + +DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_Now() { +#pragma comment(linker, "/EXPORT:BU_SystemClock_Now=_BU_SystemClock_Now@0") + return new std::chrono::system_clock::time_point(std::chrono::system_clock::now()); +} + +DLL_FUNCTION(void) BU_SystemClock_Destroy(std::chrono::system_clock::time_point* pThis) { +#pragma comment(linker, "/EXPORT:BU_SystemClock_Destroy=_BU_SystemClock_Destroy@4") + delete pThis; +} + +DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_FromTime(time_t* pTime) { +#pragma comment(linker, "/EXPORT:BU_SystemClock_FromTime=_BU_SystemClock_FromTime@4") + return new std::chrono::system_clock::time_point(std::chrono::system_clock::from_time_t(*pTime)); +} + +DLL_FUNCTION(time_t*) BU_SystemClock_AsTime(std::chrono::system_clock::time_point* pThis) { +#pragma comment(linker, "/EXPORT:BU_SystemClock_AsTime=_BU_SystemClock_AsTime@4") + return new time_t(std::chrono::system_clock::to_time_t(*pThis)); } \ No newline at end of file diff --git a/Time/SystemClock.h b/Time/SystemClock.h index 6857fa5..602cf51 100644 --- a/Time/SystemClock.h +++ b/Time/SystemClock.h @@ -1,24 +1,24 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include - -DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_Now(); -DLL_FUNCTION(void) BU_SystemClock_Destroy(std::chrono::system_clock::time_point* pThis); -DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_FromTime(time_t* pTime); +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include + +DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_Now(); +DLL_FUNCTION(void) BU_SystemClock_Destroy(std::chrono::system_clock::time_point* pThis); +DLL_FUNCTION(std::chrono::system_clock::time_point*) BU_SystemClock_FromTime(time_t* pTime); DLL_FUNCTION(time_t*) BU_SystemClock_AsTime(std::chrono::system_clock::time_point* pThis); \ No newline at end of file diff --git a/Time/Time.cpp b/Time/Time.cpp index cc2ea43..4be8e50 100644 --- a/Time/Time.cpp +++ b/Time/Time.cpp @@ -1,61 +1,61 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#include "Time.h" - -DLL_FUNCTION(time_t*) BU_Time_Now() { -#pragma comment(linker, "/EXPORT:BU_Time_Now=_BU_Time_Now@0") - time_t* pTime = new time_t(); - time(pTime); - return pTime; -} - -DLL_FUNCTION(time_t*) BU_Time_Create(uint32_t seconds, uint32_t minutes, uint32_t hours, uint32_t days, uint32_t months, uint32_t years, uint32_t isDaylightSavings) { -#pragma comment(linker, "/EXPORT:BU_Time_Create=_BU_Time_Create@28") - tm* pTM = new tm(); - pTM->tm_sec = seconds; - pTM->tm_min = minutes; - pTM->tm_hour = hours; - pTM->tm_mday = days; - pTM->tm_mon = months; - pTM->tm_year = years; - pTM->tm_isdst = isDaylightSavings; - - time_t* pTime = new time_t(mktime(pTM)); - delete pTM; - return pTime; -} - -DLL_FUNCTION(void) BU_Time_Destroy(time_t* pTime) { -#pragma comment(linker, "/EXPORT:BU_Time_Destroy=_BU_Time_Destroy@4") - delete pTime; -} - -DLL_FUNCTION(const char*) BU_Time_Format(time_t* pTime, const char* pchFormatString) { -#pragma comment(linker, "/EXPORT:BU_Time_Format=_BU_Time_Format@8") - std::string buffer; - tm* pTM = new tm; - localtime_s(pTM, pTime); - - uint32_t length = strlen(pchFormatString); - buffer.resize(length); - while (strftime(&buffer[0], buffer.size(), pchFormatString, pTM) == 0) { - buffer.resize(buffer.size() * 2); - } - - delete pTM; - return buffer.c_str(); +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "Time.h" + +DLL_FUNCTION(time_t*) BU_Time_Now() { +#pragma comment(linker, "/EXPORT:BU_Time_Now=_BU_Time_Now@0") + time_t* pTime = new time_t(); + time(pTime); + return pTime; +} + +DLL_FUNCTION(time_t*) BU_Time_Create(uint32_t seconds, uint32_t minutes, uint32_t hours, uint32_t days, uint32_t months, uint32_t years, uint32_t isDaylightSavings) { +#pragma comment(linker, "/EXPORT:BU_Time_Create=_BU_Time_Create@28") + tm* pTM = new tm(); + pTM->tm_sec = seconds; + pTM->tm_min = minutes; + pTM->tm_hour = hours; + pTM->tm_mday = days; + pTM->tm_mon = months; + pTM->tm_year = years; + pTM->tm_isdst = isDaylightSavings; + + time_t* pTime = new time_t(mktime(pTM)); + delete pTM; + return pTime; +} + +DLL_FUNCTION(void) BU_Time_Destroy(time_t* pTime) { +#pragma comment(linker, "/EXPORT:BU_Time_Destroy=_BU_Time_Destroy@4") + delete pTime; +} + +DLL_FUNCTION(const char*) BU_Time_Format(time_t* pTime, const char* pchFormatString) { +#pragma comment(linker, "/EXPORT:BU_Time_Format=_BU_Time_Format@8") + std::string buffer; + tm* pTM = new tm; + localtime_s(pTM, pTime); + + uint32_t length = strlen(pchFormatString); + buffer.resize(length); + while (strftime(&buffer[0], buffer.size(), pchFormatString, pTM) == 0) { + buffer.resize(buffer.size() * 2); + } + + delete pTM; + return buffer.c_str(); } \ No newline at end of file diff --git a/Time/Time.h b/Time/Time.h index f381b1c..1b76a18 100644 --- a/Time/Time.h +++ b/Time/Time.h @@ -1,25 +1,25 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include -#include - -DLL_FUNCTION(time_t*) BU_Time_Now(); -DLL_FUNCTION(time_t*) BU_Time_Create(uint32_t seconds, uint32_t minutes, uint32_t hours, uint32_t days, uint32_t months, uint32_t years, uint32_t isDaylightSavings); -DLL_FUNCTION(void) BU_Time_Destroy(time_t* pTime); +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include +#include + +DLL_FUNCTION(time_t*) BU_Time_Now(); +DLL_FUNCTION(time_t*) BU_Time_Create(uint32_t seconds, uint32_t minutes, uint32_t hours, uint32_t days, uint32_t months, uint32_t years, uint32_t isDaylightSavings); +DLL_FUNCTION(void) BU_Time_Destroy(time_t* pTime); DLL_FUNCTION(const char*) BU_Time_Format(time_t* pTime, const char* pchFormatString); \ No newline at end of file diff --git a/Timer.cpp b/Timer.cpp new file mode 100644 index 0000000..bd742e8 --- /dev/null +++ b/Timer.cpp @@ -0,0 +1,72 @@ +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "Timer.h" +#include +#include +#include +#include +#include +#include + +using namespace std; + +struct BlitzTimerInfo { + uint32_t Interval; + + HANDLE hSemaphore; +}; + +int32_t BU_Timer_Index = 0; +std::map BU_Timer_List;// = new std::map(); + +VOID CALLBACK BU_Timer_PROC( + _In_ HWND hwnd, + _In_ UINT uMsg, + _In_ UINT_PTR idEvent, + _In_ DWORD dwTime +) { + BlitzTimerInfo myTimer = BU_Timer_List[idEvent]; + ReleaseSemaphore(myTimer.hSemaphore, 1, NULL); +} + +DLL_FUNCTION(int32_t) BU_Timer_Create(uint32_t Interval, HWND hwnd) { + UINT_PTR timer = SetTimer(hwnd, 32767, Interval, &BU_Timer_PROC); + + if (timer) { + BlitzTimerInfo myTimer = BlitzTimerInfo(); + myTimer.Interval = Interval; + myTimer.hSemaphore = CreateSemaphore(NULL, 0, 32767, NULL); + BU_Timer_List[timer] = myTimer; + return timer; + } else { + return 0; + } +} + +DLL_FUNCTION(void) BU_Timer_Destroy(uint32_t Id) { + BlitzTimerInfo myTimer = BU_Timer_List[Id]; + CloseHandle(myTimer.hSemaphore); + BU_Timer_List.erase(Id); +} + +DLL_FUNCTION(int32_t) BU_Timer_Wait(uint32_t Id) { + BlitzTimerInfo myTimer = BU_Timer_List[Id]; + + //HANDLE myHandles[] = { myTimer.hSemaphore }; + //MsgWaitForMultipleObjects(1, myHandles, true, 0xFFFFFFFF, QS_TIMER); + return WaitForSingleObject(myTimer.hSemaphore, 0xFFFFFFFF); +} \ No newline at end of file diff --git a/Timer.h b/Timer.h new file mode 100644 index 0000000..18282d0 --- /dev/null +++ b/Timer.h @@ -0,0 +1,23 @@ +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include + +//DLL_FUNCTION(int32_t) BU_Timer_Create(uint32_t Interval); +//DLL_FUNCTION(void) BU_Timer_Destroy(uint32_t Id); +//DLL_FUNCTION(int32_t) BU_Timer_Wait(uint32_t Id); \ No newline at end of file diff --git a/Type/BVector3.cpp b/Type/BVector3.cpp index 8519ea8..5bf0d11 100644 --- a/Type/BVector3.cpp +++ b/Type/BVector3.cpp @@ -1,374 +1,374 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -/* -#include "Vector3.h" - -void Vector3::set(const float &o) -{ - this->X = o; - this->Y = o; - this->Z = o; -} -void Vector3::set(const float &x, const float &y, const float &z) -{ - this->X = x; - this->Y = y; - this->Z = z; -} -void Vector3::set(const Vector3 &o) -{ - if (this != &o) { - this->X = o.X; - this->Y = o.Y; - this->Z = o.Z; - } -} - -void Vector3::add(const float &o) -{ - this->X += o; - this->Y += o; - this->Z += o; -} -void Vector3::add(const float &x, const float &y, const float &z) -{ - this->X += x; - this->Y += y; - this->Z += z; -} -void Vector3::add(const Vector3 &o) -{ - this->X += o.X; - this->Y += o.Y; - this->Z += o.Z; -} - -void Vector3::sub(const float &o) -{ - this->X -= o; - this->Y -= o; - this->Z -= o; -} -void Vector3::sub(const float &x, const float &y, const float &z) -{ - this->X -= x; - this->Y -= y; - this->Z -= z; -} -void Vector3::sub(const Vector3 &o) -{ - this->X -= o.X; - this->Y -= o.Y; - this->Z -= o.Z; -} - -void Vector3::mul(const float &o) -{ - this->X *= o; - this->Y *= o; - this->Z *= o; -} -void Vector3::mul(const float &x, const float &y, const float &z) -{ - this->X *= x; - this->Y *= y; - this->Z *= z; -} -void Vector3::mul(const Vector3 &o) -{ - this->X *= o.X; - this->Y *= o.Y; - this->Z *= o.Z; -} - -void Vector3::div(const float &o) -{ - this->X /= o; - this->Y /= o; - this->Z /= o; -} -void Vector3::div(const float &x, const float &y, const float &z) -{ - this->X /= x; - this->Y /= y; - this->Z /= z; -} -void Vector3::div(const Vector3 &o) -{ - this->X /= o.X; - this->Y /= o.Y; - this->Z /= o.Z; -} - -float Vector3::length() -{ - return sqrt(this->X * this->X + this->Y * this->Y + this->Z * this->Z); -} -float Vector3::distance(const float &x, const float &y, const float &z) -{ - float X = (this->X - x); - float Y = (this->Y - y); - float Z = (this->Z - z); - return sqrt(X * X + Y * Y + Z * Z); -} -float Vector3::distance(const Vector3 &o) -{ - float X = (this->X - o.X); - float Y = (this->Y - o.Y); - float Z = (this->Z - o.Z); - return sqrt(X * X + Y * Y + Z * Z); -} - -float Vector3::dot(const float &x, const float &y, const float &z) -{ - return (this->X * x) + (this->Y * y) + (this->Z * z); -} -float Vector3::dot(const Vector3 &o) -{ - return (this->X * o.X) + (this->Y * o.Y) + (this->Z * o.Z); -} -Vector3 Vector3::cross(const float &x, const float &y, const float &z) -{ - Vector3* data = new Vector3(); - data->X = (this->Y * z) - (this->Z * y); - data->Y = (this->Z * x) - (this->X * z); - data->Z = (this->X * y) - (this->Y * x); - return *data; -} -Vector3 Vector3::cross(const Vector3 &o) -{ - Vector3* data = new Vector3(); - data->X = (this->Y * o.Z) - (this->Z * o.Y); - data->Y = (this->Z * o.X) - (this->X * o.Z); - data->Z = (this->X * o.Y) - (this->Y * o.X); - return *data; -} -void Vector3::normalize() -{ - this->div(this->length()); -} - -void Vector3::rotate(float &pitch, float &yaw, float &roll) -{ - float** matrix = new float*[3]; - matrix[0] = new float[3]; matrix[1] = new float[3]; matrix[2] = new float[3]; - matrix[0][0] = cos(yaw) * cos(roll); matrix[0][1] = -sin(roll); matrix[0][2] = sin(yaw); - matrix[1][0] = sin(roll); matrix[1][1] = cos(pitch) * cos(roll); matrix[1][2] = -sin(pitch); - matrix[2][0] = -sin(yaw); matrix[2][1] = sin(pitch); matrix[2][2] = cos(pitch) * cos(yaw); - - float X = (this->X * matrix[0][0]) + (this->Y * matrix[0][1]) + (this->Z * matrix[0][2]); - float Y = (this->X * matrix[1][0]) + (this->Y * matrix[1][1]) + (this->Z * matrix[1][2]); - float Z = (this->X * matrix[2][0]) + (this->Y * matrix[2][1]) + (this->Z * matrix[2][2]); - this->X = X; this->Y = Y; this->Z = Z; -} -void Vector3::rotateAround(const float &x, const float &y, const float &z, float &pitch, float &yaw, float &roll) -{ - this->sub(x, y, z); - this->rotate(pitch, yaw, roll); - this->add(x, y, z); -} -void Vector3::rotateAround(Vector3 &o, float &pitch, float &yaw, float &roll) -{ - this->sub(o); - this->rotate(pitch, yaw, roll); - this->add(o); -} -float Vector3::deltaPitch() { - return (float)(atan(this->X / -this->Y) * (180.0 / M_PI)); -} -float Vector3::deltaPitch(const float &x, const float &y, const float &z) -{ - return (float)(atan((this->X - x) / (-(this->Y - y))) * (180.0 / M_PI)); -} -float Vector3::deltaPitch(Vector3 &o) -{ - return (float)(atan((this->X - o.X) / (-(this->Y - o.Y))) * (180.0 / M_PI)); -} -float Vector3::deltaYaw() { - return (float)(atan(sqrt((this->X * this->X) + (this->Y * this->Y)) / this->Z) * (180.0 / M_PI)); -} -float Vector3::deltaYaw(const float &x, const float &y, const float &z) -{ - float X = (this->X - x); - float Y = (this->Y - y); - return (float)(atan(sqrt((X * X) + (Y * Y)) / (this->Z - z)) * (180.0 / M_PI)); -} -float Vector3::deltaYaw(Vector3 &o) -{ - float X = (this->X - o.X); - float Y = (this->Y - o.Y); - return (float)(atan(sqrt((X * X) + (Y * Y)) / (this->Z - o.Z)) * (180.0 / M_PI)); -} - -char* Vector3::serialize() -{ - char* data = new char[13]; - - memcpy(data, this->Xc, 4); - memcpy(data + 4, this->Yc, 4); - memcpy(data + 8, this->Zc, 4); - data[12] = 0; - - return data; -} -void Vector3::deserialize(char* o) -{ - memcpy(o, this->Xc, 4); - memcpy(o + 4, this->Yc, 4); - memcpy(o + 8, this->Zc, 4); -} - -DLL_METHOD void Vector3_Set(Vector3* a, float o) { - a->set(o); -} -DLL_METHOD void Vector3_SetP(Vector3* a, float x, float y, float z) { - a->set(x, y, z); -} -DLL_METHOD void Vector3_SetV(Vector3* a, Vector3* b) { - a->set(*b); -} -#pragma comment(linker, "/EXPORT:Vector3_Set=_Vector3_Set@8") -#pragma comment(linker, "/EXPORT:Vector3_SetP=_Vector3_SetP@16") -#pragma comment(linker, "/EXPORT:Vector3_SetV=_Vector3_SetV@8") - -DLL_METHOD void Vector3_Add(Vector3* a, float o) { - a->add(o); -} -DLL_METHOD void Vector3_AddP(Vector3* a, float x, float y, float z) { - a->add(x, y, z); -} -DLL_METHOD void Vector3_AddV(Vector3* a, Vector3* b) { - a->add(*b); -} -#pragma comment(linker, "/EXPORT:Vector3_Add=_Vector3_Add@8") -#pragma comment(linker, "/EXPORT:Vector3_AddP=_Vector3_AddP@16") -#pragma comment(linker, "/EXPORT:Vector3_AddV=_Vector3_AddV@8") - -DLL_METHOD void Vector3_Sub(Vector3* a, float o) { - a->sub(o); -} -DLL_METHOD void Vector3_SubP(Vector3* a, float x, float y, float z) { - a->sub(x, y, z); -} -DLL_METHOD void Vector3_SubV(Vector3* a, Vector3* b) { - a->sub(*b); -} -#pragma comment(linker, "/EXPORT:Vector3_Sub=_Vector3_Sub@8") -#pragma comment(linker, "/EXPORT:Vector3_SubP=_Vector3_SubP@16") -#pragma comment(linker, "/EXPORT:Vector3_SubV=_Vector3_SubV@8") - -DLL_METHOD void Vector3_Mul(Vector3* a, float o) { - a->mul(o); -} -DLL_METHOD void Vector3_MulP(Vector3* a, float x, float y, float z) { - a->mul(x, y, z); -} -DLL_METHOD void Vector3_MulV(Vector3* a, Vector3* b) { - a->mul(*b); -} -#pragma comment(linker, "/EXPORT:Vector3_Mul=_Vector3_Mul@8") -#pragma comment(linker, "/EXPORT:Vector3_MulP=_Vector3_MulP@16") -#pragma comment(linker, "/EXPORT:Vector3_MulV=_Vector3_MulV@8") - -DLL_METHOD void Vector3_Div(Vector3* a, float o) { - a->div(o); -} -DLL_METHOD void Vector3_DivP(Vector3* a, float x, float y, float z) { - a->div(x, y, z); -} -DLL_METHOD void Vector3_DivV(Vector3* a, Vector3* b) { - a->div(*b); -} -#pragma comment(linker, "/EXPORT:Vector3_Div=_Vector3_Div@8") -#pragma comment(linker, "/EXPORT:Vector3_DivP=_Vector3_DivP@16") -#pragma comment(linker, "/EXPORT:Vector3_DivV=_Vector3_DivV@8") - -DLL_METHOD float Vector3_Length(Vector3* a) { - return (float)a->length(); -} -DLL_METHOD float Vector3_DistanceP(Vector3* a, float x, float y, float z) { - return (float)a->distance(x, y, z); -} -DLL_METHOD float Vector3_DistanceV(Vector3* a, Vector3* b) { - return (float)a->distance(*b); -} -#pragma comment(linker, "/EXPORT:Vector3_Length=_Vector3_Length@4") -#pragma comment(linker, "/EXPORT:Vector3_DistanceP=_Vector3_DistanceP@16") -#pragma comment(linker, "/EXPORT:Vector3_DistanceV=_Vector3_DistanceV@8") - -DLL_METHOD float Vector3_DotP(Vector3* a, float x, float y, float z) { - return (float)a->dot(x, y, z); -} -DLL_METHOD float Vector3_DotV(Vector3* a, Vector3* b) { - return (float)a->dot(*b); -} -DLL_METHOD void Vector3_CrossP(Vector3* a, float x, float y, float z, Vector3* out) { - Vector3 temp = a->cross(x, y, z); - *out = temp; -} -DLL_METHOD void Vector3_CrossV(Vector3* a, Vector3* b, Vector3* out) { - Vector3 temp = a->cross(*b); - *out = temp; -} -DLL_METHOD void Vector3_Normalize(Vector3* a) { - a->normalize(); -} -#pragma comment(linker, "/EXPORT:Vector3_DotP=_Vector3_DotP@16") -#pragma comment(linker, "/EXPORT:Vector3_DotV=_Vector3_DotV@8") -#pragma comment(linker, "/EXPORT:Vector3_CrossP=_Vector3_CrossP@20") -#pragma comment(linker, "/EXPORT:Vector3_CrossV=_Vector3_CrossV@12") -#pragma comment(linker, "/EXPORT:Vector3_Normalize=_Vector3_Normalize@4") - -DLL_METHOD void Vector3_Rotate(Vector3* a, float pitch, float yaw, float roll) { - a->rotate(pitch, yaw, roll); -} -DLL_METHOD void Vector3_RotateAroundP(Vector3* a, float x, float y, float z, float pitch, float yaw, float roll) { - a->rotateAround(x, y, z, pitch, yaw, roll); -} -DLL_METHOD void Vector3_RotateAroundV(Vector3* a, Vector3* b, float pitch, float yaw, float roll) { - a->rotateAround(*b, pitch, yaw, roll); -} -#pragma comment(linker, "/EXPORT:Vector3_Rotate=_Vector3_Rotate@16") -#pragma comment(linker, "/EXPORT:Vector3_RotateAroundP=_Vector3_RotateAroundP@28") -#pragma comment(linker, "/EXPORT:Vector3_RotateAroundV=_Vector3_RotateAroundV@20") - -DLL_METHOD float Vector3_DeltaPitchP(Vector3* a, float x, float y, float z) { - return (float)a->deltaPitch(x, y, z); -} -DLL_METHOD float Vector3_DeltaPitchV(Vector3* a, Vector3* b) { - return (float)a->deltaPitch(*b); -} -DLL_METHOD float Vector3_DeltaYawP(Vector3* a, float x, float y, float z) { - return (float)a->deltaYaw(x, y, z); -} -DLL_METHOD float Vector3_DeltaYawV(Vector3* a, Vector3* b) { - return (float)a->deltaYaw(*b); -} -#pragma comment(linker, "/EXPORT:Vector3_DeltaPitchP=_Vector3_DeltaPitchP@16") -#pragma comment(linker, "/EXPORT:Vector3_DeltaPitchV=_Vector3_DeltaPitchV@8") -#pragma comment(linker, "/EXPORT:Vector3_DeltaYawP=_Vector3_DeltaYawP@16") -#pragma comment(linker, "/EXPORT:Vector3_DeltaYawV=_Vector3_DeltaYawV@8") - -DLL_METHOD char* Vector3_Serialize(Vector3* a) { - return a->serialize(); -} -DLL_METHOD void Vector3_Deserialize(Vector3* a, char* s) { - a->deserialize(s); -} -#pragma comment(linker, "/EXPORT:Vector3_Serialize=_Vector3_Serialize@4") -#pragma comment(linker, "/EXPORT:Vector3_Deserialize=_Vector3_Deserialize@8") +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +/* +#include "Vector3.h" + +void Vector3::set(const float &o) +{ + this->X = o; + this->Y = o; + this->Z = o; +} +void Vector3::set(const float &x, const float &y, const float &z) +{ + this->X = x; + this->Y = y; + this->Z = z; +} +void Vector3::set(const Vector3 &o) +{ + if (this != &o) { + this->X = o.X; + this->Y = o.Y; + this->Z = o.Z; + } +} + +void Vector3::add(const float &o) +{ + this->X += o; + this->Y += o; + this->Z += o; +} +void Vector3::add(const float &x, const float &y, const float &z) +{ + this->X += x; + this->Y += y; + this->Z += z; +} +void Vector3::add(const Vector3 &o) +{ + this->X += o.X; + this->Y += o.Y; + this->Z += o.Z; +} + +void Vector3::sub(const float &o) +{ + this->X -= o; + this->Y -= o; + this->Z -= o; +} +void Vector3::sub(const float &x, const float &y, const float &z) +{ + this->X -= x; + this->Y -= y; + this->Z -= z; +} +void Vector3::sub(const Vector3 &o) +{ + this->X -= o.X; + this->Y -= o.Y; + this->Z -= o.Z; +} + +void Vector3::mul(const float &o) +{ + this->X *= o; + this->Y *= o; + this->Z *= o; +} +void Vector3::mul(const float &x, const float &y, const float &z) +{ + this->X *= x; + this->Y *= y; + this->Z *= z; +} +void Vector3::mul(const Vector3 &o) +{ + this->X *= o.X; + this->Y *= o.Y; + this->Z *= o.Z; +} + +void Vector3::div(const float &o) +{ + this->X /= o; + this->Y /= o; + this->Z /= o; +} +void Vector3::div(const float &x, const float &y, const float &z) +{ + this->X /= x; + this->Y /= y; + this->Z /= z; +} +void Vector3::div(const Vector3 &o) +{ + this->X /= o.X; + this->Y /= o.Y; + this->Z /= o.Z; +} + +float Vector3::length() +{ + return sqrt(this->X * this->X + this->Y * this->Y + this->Z * this->Z); +} +float Vector3::distance(const float &x, const float &y, const float &z) +{ + float X = (this->X - x); + float Y = (this->Y - y); + float Z = (this->Z - z); + return sqrt(X * X + Y * Y + Z * Z); +} +float Vector3::distance(const Vector3 &o) +{ + float X = (this->X - o.X); + float Y = (this->Y - o.Y); + float Z = (this->Z - o.Z); + return sqrt(X * X + Y * Y + Z * Z); +} + +float Vector3::dot(const float &x, const float &y, const float &z) +{ + return (this->X * x) + (this->Y * y) + (this->Z * z); +} +float Vector3::dot(const Vector3 &o) +{ + return (this->X * o.X) + (this->Y * o.Y) + (this->Z * o.Z); +} +Vector3 Vector3::cross(const float &x, const float &y, const float &z) +{ + Vector3* data = new Vector3(); + data->X = (this->Y * z) - (this->Z * y); + data->Y = (this->Z * x) - (this->X * z); + data->Z = (this->X * y) - (this->Y * x); + return *data; +} +Vector3 Vector3::cross(const Vector3 &o) +{ + Vector3* data = new Vector3(); + data->X = (this->Y * o.Z) - (this->Z * o.Y); + data->Y = (this->Z * o.X) - (this->X * o.Z); + data->Z = (this->X * o.Y) - (this->Y * o.X); + return *data; +} +void Vector3::normalize() +{ + this->div(this->length()); +} + +void Vector3::rotate(float &pitch, float &yaw, float &roll) +{ + float** matrix = new float*[3]; + matrix[0] = new float[3]; matrix[1] = new float[3]; matrix[2] = new float[3]; + matrix[0][0] = cos(yaw) * cos(roll); matrix[0][1] = -sin(roll); matrix[0][2] = sin(yaw); + matrix[1][0] = sin(roll); matrix[1][1] = cos(pitch) * cos(roll); matrix[1][2] = -sin(pitch); + matrix[2][0] = -sin(yaw); matrix[2][1] = sin(pitch); matrix[2][2] = cos(pitch) * cos(yaw); + + float X = (this->X * matrix[0][0]) + (this->Y * matrix[0][1]) + (this->Z * matrix[0][2]); + float Y = (this->X * matrix[1][0]) + (this->Y * matrix[1][1]) + (this->Z * matrix[1][2]); + float Z = (this->X * matrix[2][0]) + (this->Y * matrix[2][1]) + (this->Z * matrix[2][2]); + this->X = X; this->Y = Y; this->Z = Z; +} +void Vector3::rotateAround(const float &x, const float &y, const float &z, float &pitch, float &yaw, float &roll) +{ + this->sub(x, y, z); + this->rotate(pitch, yaw, roll); + this->add(x, y, z); +} +void Vector3::rotateAround(Vector3 &o, float &pitch, float &yaw, float &roll) +{ + this->sub(o); + this->rotate(pitch, yaw, roll); + this->add(o); +} +float Vector3::deltaPitch() { + return (float)(atan(this->X / -this->Y) * (180.0 / M_PI)); +} +float Vector3::deltaPitch(const float &x, const float &y, const float &z) +{ + return (float)(atan((this->X - x) / (-(this->Y - y))) * (180.0 / M_PI)); +} +float Vector3::deltaPitch(Vector3 &o) +{ + return (float)(atan((this->X - o.X) / (-(this->Y - o.Y))) * (180.0 / M_PI)); +} +float Vector3::deltaYaw() { + return (float)(atan(sqrt((this->X * this->X) + (this->Y * this->Y)) / this->Z) * (180.0 / M_PI)); +} +float Vector3::deltaYaw(const float &x, const float &y, const float &z) +{ + float X = (this->X - x); + float Y = (this->Y - y); + return (float)(atan(sqrt((X * X) + (Y * Y)) / (this->Z - z)) * (180.0 / M_PI)); +} +float Vector3::deltaYaw(Vector3 &o) +{ + float X = (this->X - o.X); + float Y = (this->Y - o.Y); + return (float)(atan(sqrt((X * X) + (Y * Y)) / (this->Z - o.Z)) * (180.0 / M_PI)); +} + +char* Vector3::serialize() +{ + char* data = new char[13]; + + memcpy(data, this->Xc, 4); + memcpy(data + 4, this->Yc, 4); + memcpy(data + 8, this->Zc, 4); + data[12] = 0; + + return data; +} +void Vector3::deserialize(char* o) +{ + memcpy(o, this->Xc, 4); + memcpy(o + 4, this->Yc, 4); + memcpy(o + 8, this->Zc, 4); +} + +DLL_METHOD void Vector3_Set(Vector3* a, float o) { + a->set(o); +} +DLL_METHOD void Vector3_SetP(Vector3* a, float x, float y, float z) { + a->set(x, y, z); +} +DLL_METHOD void Vector3_SetV(Vector3* a, Vector3* b) { + a->set(*b); +} +#pragma comment(linker, "/EXPORT:Vector3_Set=_Vector3_Set@8") +#pragma comment(linker, "/EXPORT:Vector3_SetP=_Vector3_SetP@16") +#pragma comment(linker, "/EXPORT:Vector3_SetV=_Vector3_SetV@8") + +DLL_METHOD void Vector3_Add(Vector3* a, float o) { + a->add(o); +} +DLL_METHOD void Vector3_AddP(Vector3* a, float x, float y, float z) { + a->add(x, y, z); +} +DLL_METHOD void Vector3_AddV(Vector3* a, Vector3* b) { + a->add(*b); +} +#pragma comment(linker, "/EXPORT:Vector3_Add=_Vector3_Add@8") +#pragma comment(linker, "/EXPORT:Vector3_AddP=_Vector3_AddP@16") +#pragma comment(linker, "/EXPORT:Vector3_AddV=_Vector3_AddV@8") + +DLL_METHOD void Vector3_Sub(Vector3* a, float o) { + a->sub(o); +} +DLL_METHOD void Vector3_SubP(Vector3* a, float x, float y, float z) { + a->sub(x, y, z); +} +DLL_METHOD void Vector3_SubV(Vector3* a, Vector3* b) { + a->sub(*b); +} +#pragma comment(linker, "/EXPORT:Vector3_Sub=_Vector3_Sub@8") +#pragma comment(linker, "/EXPORT:Vector3_SubP=_Vector3_SubP@16") +#pragma comment(linker, "/EXPORT:Vector3_SubV=_Vector3_SubV@8") + +DLL_METHOD void Vector3_Mul(Vector3* a, float o) { + a->mul(o); +} +DLL_METHOD void Vector3_MulP(Vector3* a, float x, float y, float z) { + a->mul(x, y, z); +} +DLL_METHOD void Vector3_MulV(Vector3* a, Vector3* b) { + a->mul(*b); +} +#pragma comment(linker, "/EXPORT:Vector3_Mul=_Vector3_Mul@8") +#pragma comment(linker, "/EXPORT:Vector3_MulP=_Vector3_MulP@16") +#pragma comment(linker, "/EXPORT:Vector3_MulV=_Vector3_MulV@8") + +DLL_METHOD void Vector3_Div(Vector3* a, float o) { + a->div(o); +} +DLL_METHOD void Vector3_DivP(Vector3* a, float x, float y, float z) { + a->div(x, y, z); +} +DLL_METHOD void Vector3_DivV(Vector3* a, Vector3* b) { + a->div(*b); +} +#pragma comment(linker, "/EXPORT:Vector3_Div=_Vector3_Div@8") +#pragma comment(linker, "/EXPORT:Vector3_DivP=_Vector3_DivP@16") +#pragma comment(linker, "/EXPORT:Vector3_DivV=_Vector3_DivV@8") + +DLL_METHOD float Vector3_Length(Vector3* a) { + return (float)a->length(); +} +DLL_METHOD float Vector3_DistanceP(Vector3* a, float x, float y, float z) { + return (float)a->distance(x, y, z); +} +DLL_METHOD float Vector3_DistanceV(Vector3* a, Vector3* b) { + return (float)a->distance(*b); +} +#pragma comment(linker, "/EXPORT:Vector3_Length=_Vector3_Length@4") +#pragma comment(linker, "/EXPORT:Vector3_DistanceP=_Vector3_DistanceP@16") +#pragma comment(linker, "/EXPORT:Vector3_DistanceV=_Vector3_DistanceV@8") + +DLL_METHOD float Vector3_DotP(Vector3* a, float x, float y, float z) { + return (float)a->dot(x, y, z); +} +DLL_METHOD float Vector3_DotV(Vector3* a, Vector3* b) { + return (float)a->dot(*b); +} +DLL_METHOD void Vector3_CrossP(Vector3* a, float x, float y, float z, Vector3* out) { + Vector3 temp = a->cross(x, y, z); + *out = temp; +} +DLL_METHOD void Vector3_CrossV(Vector3* a, Vector3* b, Vector3* out) { + Vector3 temp = a->cross(*b); + *out = temp; +} +DLL_METHOD void Vector3_Normalize(Vector3* a) { + a->normalize(); +} +#pragma comment(linker, "/EXPORT:Vector3_DotP=_Vector3_DotP@16") +#pragma comment(linker, "/EXPORT:Vector3_DotV=_Vector3_DotV@8") +#pragma comment(linker, "/EXPORT:Vector3_CrossP=_Vector3_CrossP@20") +#pragma comment(linker, "/EXPORT:Vector3_CrossV=_Vector3_CrossV@12") +#pragma comment(linker, "/EXPORT:Vector3_Normalize=_Vector3_Normalize@4") + +DLL_METHOD void Vector3_Rotate(Vector3* a, float pitch, float yaw, float roll) { + a->rotate(pitch, yaw, roll); +} +DLL_METHOD void Vector3_RotateAroundP(Vector3* a, float x, float y, float z, float pitch, float yaw, float roll) { + a->rotateAround(x, y, z, pitch, yaw, roll); +} +DLL_METHOD void Vector3_RotateAroundV(Vector3* a, Vector3* b, float pitch, float yaw, float roll) { + a->rotateAround(*b, pitch, yaw, roll); +} +#pragma comment(linker, "/EXPORT:Vector3_Rotate=_Vector3_Rotate@16") +#pragma comment(linker, "/EXPORT:Vector3_RotateAroundP=_Vector3_RotateAroundP@28") +#pragma comment(linker, "/EXPORT:Vector3_RotateAroundV=_Vector3_RotateAroundV@20") + +DLL_METHOD float Vector3_DeltaPitchP(Vector3* a, float x, float y, float z) { + return (float)a->deltaPitch(x, y, z); +} +DLL_METHOD float Vector3_DeltaPitchV(Vector3* a, Vector3* b) { + return (float)a->deltaPitch(*b); +} +DLL_METHOD float Vector3_DeltaYawP(Vector3* a, float x, float y, float z) { + return (float)a->deltaYaw(x, y, z); +} +DLL_METHOD float Vector3_DeltaYawV(Vector3* a, Vector3* b) { + return (float)a->deltaYaw(*b); +} +#pragma comment(linker, "/EXPORT:Vector3_DeltaPitchP=_Vector3_DeltaPitchP@16") +#pragma comment(linker, "/EXPORT:Vector3_DeltaPitchV=_Vector3_DeltaPitchV@8") +#pragma comment(linker, "/EXPORT:Vector3_DeltaYawP=_Vector3_DeltaYawP@16") +#pragma comment(linker, "/EXPORT:Vector3_DeltaYawV=_Vector3_DeltaYawV@8") + +DLL_METHOD char* Vector3_Serialize(Vector3* a) { + return a->serialize(); +} +DLL_METHOD void Vector3_Deserialize(Vector3* a, char* s) { + a->deserialize(s); +} +#pragma comment(linker, "/EXPORT:Vector3_Serialize=_Vector3_Serialize@4") +#pragma comment(linker, "/EXPORT:Vector3_Deserialize=_Vector3_Deserialize@8") */ \ No newline at end of file diff --git a/Type/BVector3.h b/Type/BVector3.h index 395335e..533a919 100644 --- a/Type/BVector3.h +++ b/Type/BVector3.h @@ -1,82 +1,82 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -/* -#pragma once -#include "dllmain.h" -#ifndef _USE_MATH_DEFINES - #define _USE_MATH_DEFINES - #include - #undef _USE_MATH_DEFINES -#endif - -struct Vector3 { - union { - float X; - char Xc[4]; - }; - union { - float Y; - char Yc[4]; - }; - union { - float Z; - char Zc[4]; - }; - - void set(const float &o); - void set(const float &x, const float &y, const float &z); - void set(const Vector3 &o); - - void add(const float &o); - void add(const float &x, const float &y, const float &z); - void add(const Vector3 &o); - - void sub(const float &o); - void sub(const float &x, const float &y, const float &z); - void sub(const Vector3 &o); - - void mul(const float &o); - void mul(const float &x, const float &y, const float &z); - void mul(const Vector3 &o); - - void div(const float &o); - void div(const float &x, const float &y, const float &z); - void div(const Vector3 &o); - - float length(); - float distance(const float &x, const float &y, const float &z); - float distance(const Vector3 &o); - - float dot(const float &x, const float &y, const float &z); - float dot(const Vector3 &o); - Vector3 cross(const float &x, const float &y, const float &z); - Vector3 cross(const Vector3 &o); - void normalize(); - - void rotate(float &pitch, float &yaw, float &roll); - void rotateAround(const float &x, const float &y, const float &z, float &pitch, float &yaw, float &roll); - void rotateAround(Vector3 &o, float &pitch, float &yaw, float &roll); - float deltaPitch(); - float deltaPitch(const float &x, const float &y, const float &z); - float deltaPitch(Vector3 &o); - float deltaYaw(); - float deltaYaw(const float &x, const float &y, const float &z); - float deltaYaw(Vector3 &o); - - char* serialize(); - void deserialize(char* o); +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +/* +#pragma once +#include "dllmain.h" +#ifndef _USE_MATH_DEFINES + #define _USE_MATH_DEFINES + #include + #undef _USE_MATH_DEFINES +#endif + +struct Vector3 { + union { + float X; + char Xc[4]; + }; + union { + float Y; + char Yc[4]; + }; + union { + float Z; + char Zc[4]; + }; + + void set(const float &o); + void set(const float &x, const float &y, const float &z); + void set(const Vector3 &o); + + void add(const float &o); + void add(const float &x, const float &y, const float &z); + void add(const Vector3 &o); + + void sub(const float &o); + void sub(const float &x, const float &y, const float &z); + void sub(const Vector3 &o); + + void mul(const float &o); + void mul(const float &x, const float &y, const float &z); + void mul(const Vector3 &o); + + void div(const float &o); + void div(const float &x, const float &y, const float &z); + void div(const Vector3 &o); + + float length(); + float distance(const float &x, const float &y, const float &z); + float distance(const Vector3 &o); + + float dot(const float &x, const float &y, const float &z); + float dot(const Vector3 &o); + Vector3 cross(const float &x, const float &y, const float &z); + Vector3 cross(const Vector3 &o); + void normalize(); + + void rotate(float &pitch, float &yaw, float &roll); + void rotateAround(const float &x, const float &y, const float &z, float &pitch, float &yaw, float &roll); + void rotateAround(Vector3 &o, float &pitch, float &yaw, float &roll); + float deltaPitch(); + float deltaPitch(const float &x, const float &y, const float &z); + float deltaPitch(Vector3 &o); + float deltaYaw(); + float deltaYaw(const float &x, const float &y, const float &z); + float deltaYaw(Vector3 &o); + + char* serialize(); + void deserialize(char* o); };*/ \ No newline at end of file diff --git a/Type/BlitzType.h b/Type/BlitzType.h index 60a4ddd..5d4c4ff 100644 --- a/Type/BlitzType.h +++ b/Type/BlitzType.h @@ -1,132 +1,132 @@ -#include "Common.h" -#include -#include - -// Rev-engineered from https://github.com/blitz-research/blitz3d/blob/master/compiler/declnode.cpp -#define BBVARTYPE_GLOBAL 0 -#define BBVARTYPE_INT 1 -#define BBVARTYPE_FLOAT 2 -#define BBVARTYPE_UNUSED 3 -#define BBVARTYPE_STRING 4 -#define BBVARTYPE_TYPE 5 -#define BBVARTYPE_ARRAY 6 - -struct BBVar { - int Type = -1; -}; - -struct BBVarGlobal { - int GlobalType = -1; - int* Value; -}; - -struct BBVarInt : BBVar { - int Value; -}; - -struct BBVarFloat : BBVar { - float Value; -}; - -struct BBVarUnused : BBVar { - // Not a Dim, as you can see here: - // https://github.com/blitz-research/blitz3d/blob/master/compiler/stmtnode.cpp#L86 -}; - -struct BBVarString : BBVar { - int Length; - char* Value; -}; - -struct BBVarElement; -struct BBVarType : BBVar { - BBVarElement used, free; - int fieldCount; // Field Info follows (Exactly int pointers to variable struct) - int* fields[]; -}; - -struct BBVarElement { - int* currentPtr; // Points towards fields. - int* nextPtr, prevPtr; - BBVarType* BBStructPtr; - int refCount; // Fields usually follow here, may be at another location, see currentPtr. - //BBVar* fields[]; -}; - -struct BBVarArray : BBVar { - int Size; //??? - BBVar* ArrayType; -}; - -std::string BBVar_Serialize(void* obj) { - std::stringstream myStream; - - BBVar* var = (BBVar*)obj; - switch (var->Type) { - case BBVARTYPE_GLOBAL: - BBVarGlobal* varGlobal = (BBVarGlobal*)obj; - myStream << "[Global] " << BBVar_Serialize(varGlobal->Value) << std::endl; - break; - case BBVARTYPE_INT: - BBVarInt* varInt = (BBVarInt*)obj; - myStream << "Int" << std::endl; - break; - case BBVARTYPE_FLOAT: - BBVarFloat* varFloat = (BBVarFloat*)obj; - myStream << "Float" << std::endl; - break; - case BBVARTYPE_UNUSED: - BBVarUnused* varUnused = (BBVarUnused*)obj; - myStream << "Unused" << std::endl; - break; - case BBVARTYPE_STRING: - BBVarString* varString = (BBVarString*)obj; - myStream << "String" << std::endl; - break; - case BBVARTYPE_TYPE: - BBVarType* varType = (BBVarType*)obj; - myStream << BBVarType_Serialize(varType); - break; - case BBVARTYPE_ARRAY: - BBVarArray* varArray = (BBVarArray*)obj; - myStream << "Array = " << std::endl; - break; - } - - return myStream.str(); -} - -std::string BBVarType_Serialize(BBVarType* obj, unsigned int indent = 0) { - std::stringstream myStream; - - std::stringstream myPaddingSS; - for (unsigned int pad = 0; pad < indent; pad++) { - myPaddingSS << " "; - } - std::string myPadding = myPaddingSS.str(); - - myStream << myPadding << "Type {" << std::endl; - for (unsigned int fld = 0; fld < obj->fieldCount; fld++) { - myStream << myPadding << " (" << fld << ") => " << BBVar_Serialize(obj->fields[fld]) << std::endl; - } - myStream << myPadding << "}" << std::endl; - - return myStream.str(); -} - -DLL_EXPORT(char*) SerializeObject(void* obj) { - return strdup(BBVar_Serialize(obj).c_str()); -} - -// Laut Mark Sibly: -struct BBType { - int obj_size; - BBObj usedList, freeList; -}; - -struct BBObj { - BBObj *curr; - BBObj *next, *prev; - int* bbtype; - int ref_cnt; -}; +#include "Common.h" +#include +#include + +// Rev-engineered from https://github.com/blitz-research/blitz3d/blob/master/compiler/declnode.cpp +#define BBVARTYPE_GLOBAL 0 +#define BBVARTYPE_INT 1 +#define BBVARTYPE_FLOAT 2 +#define BBVARTYPE_UNUSED 3 +#define BBVARTYPE_STRING 4 +#define BBVARTYPE_TYPE 5 +#define BBVARTYPE_ARRAY 6 + +struct BBVar { + int Type = -1; +}; + +struct BBVarGlobal { + int GlobalType = -1; + int* Value; +}; + +struct BBVarInt : BBVar { + int Value; +}; + +struct BBVarFloat : BBVar { + float Value; +}; + +struct BBVarUnused : BBVar { + // Not a Dim, as you can see here: + // https://github.com/blitz-research/blitz3d/blob/master/compiler/stmtnode.cpp#L86 +}; + +struct BBVarString : BBVar { + int Length; + char* Value; +}; + +struct BBVarElement; +struct BBVarType : BBVar { + BBVarElement used, free; + int fieldCount; // Field Info follows (Exactly int pointers to variable struct) + int* fields[]; +}; + +struct BBVarElement { + int* currentPtr; // Points towards fields. + int* nextPtr, prevPtr; + BBVarType* BBStructPtr; + int refCount; // Fields usually follow here, may be at another location, see currentPtr. + //BBVar* fields[]; +}; + +struct BBVarArray : BBVar { + int Size; //??? + BBVar* ArrayType; +}; + +std::string BBVar_Serialize(void* obj) { + std::stringstream myStream; + + BBVar* var = (BBVar*)obj; + switch (var->Type) { + case BBVARTYPE_GLOBAL: + BBVarGlobal* varGlobal = (BBVarGlobal*)obj; + myStream << "[Global] " << BBVar_Serialize(varGlobal->Value) << std::endl; + break; + case BBVARTYPE_INT: + BBVarInt* varInt = (BBVarInt*)obj; + myStream << "Int" << std::endl; + break; + case BBVARTYPE_FLOAT: + BBVarFloat* varFloat = (BBVarFloat*)obj; + myStream << "Float" << std::endl; + break; + case BBVARTYPE_UNUSED: + BBVarUnused* varUnused = (BBVarUnused*)obj; + myStream << "Unused" << std::endl; + break; + case BBVARTYPE_STRING: + BBVarString* varString = (BBVarString*)obj; + myStream << "String" << std::endl; + break; + case BBVARTYPE_TYPE: + BBVarType* varType = (BBVarType*)obj; + myStream << BBVarType_Serialize(varType); + break; + case BBVARTYPE_ARRAY: + BBVarArray* varArray = (BBVarArray*)obj; + myStream << "Array = " << std::endl; + break; + } + + return myStream.str(); +} + +std::string BBVarType_Serialize(BBVarType* obj, unsigned int indent = 0) { + std::stringstream myStream; + + std::stringstream myPaddingSS; + for (unsigned int pad = 0; pad < indent; pad++) { + myPaddingSS << " "; + } + std::string myPadding = myPaddingSS.str(); + + myStream << myPadding << "Type {" << std::endl; + for (unsigned int fld = 0; fld < obj->fieldCount; fld++) { + myStream << myPadding << " (" << fld << ") => " << BBVar_Serialize(obj->fields[fld]) << std::endl; + } + myStream << myPadding << "}" << std::endl; + + return myStream.str(); +} + +DLL_EXPORT(char*) SerializeObject(void* obj) { + return strdup(BBVar_Serialize(obj).c_str()); +} + +// Laut Mark Sibly: +struct BBType { + int obj_size; + BBObj usedList, freeList; +}; + +struct BBObj { + BBObj *curr; + BBObj *next, *prev; + int* bbtype; + int ref_cnt; +}; diff --git a/Type/Double.cpp b/Type/Double.cpp index a36f812..030884a 100644 --- a/Type/Double.cpp +++ b/Type/Double.cpp @@ -1,122 +1,122 @@ -// Blitz - Steam wrapper for Blitz. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#include "Long.h" - -DLL_FUNCTION(double_t*) BU_Double_New() { - return new double_t; -} -DLL_FUNCTION(double_t*) BU_Double_Copy(double_t* pOther) { - return new double_t(*pOther); -} -DLL_FUNCTION(void) BU_Double_Destroy(double_t* pThis) { - delete pThis; -} - -char* BU_Double_Buffer = new char[32]; -DLL_FUNCTION(const char*) BU_Double_ToString(double_t* pThis) { - std::stringstream myStream; - myStream << (*pThis); - - const char* myBuffer = myStream.str().c_str(); - strcpy_s(BU_Double_Buffer, 32, myBuffer); - return BU_Double_Buffer; -} -DLL_FUNCTION(double_t*) BU_Double_FromString(const char* pString) { - double_t* pThis = new double_t; - std::stringstream myStream = std::stringstream(pString); - myStream >> *pThis; - return pThis; -} - -DLL_FUNCTION(double_t*) BU_Double_FromF(float_t fOther) { - return new double_t(fOther); -} -DLL_FUNCTION(float_t) BU_Double_ToF(double_t* pThis) { - return (float_t)*pThis; -} - -DLL_FUNCTION(double_t*) BU_Double_FromI(int32_t iOther) { - return new double_t(iOther); -} -DLL_FUNCTION(int32_t) BU_Double_ToI(double_t* pThis) { - return (int32_t)*pThis; -} - -DLL_FUNCTION(double_t*) BU_Double_FromL(int64_t* pOther) { - return new double_t((double_t)*pOther); -} -DLL_FUNCTION(int64_t*) BU_Double_ToL(double_t* pThis) { - return new int64_t((int64_t)*pThis); -} - -DLL_FUNCTION(int32_t) BU_Double_Compare(double_t* pThis, double_t* pOther) { - return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ - /* Greater */ - (*pThis > *pOther ? 1 : 0) + - /* Smaller */ - (*pThis < *pOther ? -1 : 0); -} - -DLL_FUNCTION(double_t*) BU_Double_Set(double_t* pThis, double_t* pOther) { - *pThis = *pOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_Add(double_t* pThis, double_t* pOther) { - *pThis += *pOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_Sub(double_t* pThis, double_t* pOther) { - *pThis -= *pOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_Div(double_t* pThis, double_t* pOther) { - *pThis /= *pOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_Mul(double_t* pThis, double_t* pOther) { - *pThis *= *pOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_Mod(double_t* pThis, double_t* pOther) { - *pThis = fmod(*pThis, *pOther); - return pThis; -} - -DLL_FUNCTION(double_t*) BU_Double_SetF(double_t* pThis, float_t fOther) { - *pThis = fOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_AddF(double_t* pThis, float_t fOther) { - *pThis += fOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_SubF(double_t* pThis, float_t fOther) { - *pThis -= fOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_DivF(double_t* pThis, float_t fOther) { - *pThis /= fOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_MulF(double_t* pThis, float_t fOther) { - *pThis *= fOther; - return pThis; -} -DLL_FUNCTION(double_t*) BU_Double_ModF(double_t* pThis, float_t fOther) { - *pThis = fmod(*pThis, fOther); - return pThis; +// Blitz - Steam wrapper for Blitz. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "Long.h" + +DLL_FUNCTION(double_t*) BU_Double_New() { + return new double_t; +} +DLL_FUNCTION(double_t*) BU_Double_Copy(double_t* pOther) { + return new double_t(*pOther); +} +DLL_FUNCTION(void) BU_Double_Destroy(double_t* pThis) { + delete pThis; +} + +char* BU_Double_Buffer = new char[32]; +DLL_FUNCTION(const char*) BU_Double_ToString(double_t* pThis) { + std::stringstream myStream; + myStream << (*pThis); + + const char* myBuffer = myStream.str().c_str(); + strcpy_s(BU_Double_Buffer, 32, myBuffer); + return BU_Double_Buffer; +} +DLL_FUNCTION(double_t*) BU_Double_FromString(const char* pString) { + double_t* pThis = new double_t; + std::stringstream myStream = std::stringstream(pString); + myStream >> *pThis; + return pThis; +} + +DLL_FUNCTION(double_t*) BU_Double_FromF(float_t fOther) { + return new double_t(fOther); +} +DLL_FUNCTION(float_t) BU_Double_ToF(double_t* pThis) { + return (float_t)*pThis; +} + +DLL_FUNCTION(double_t*) BU_Double_FromI(int32_t iOther) { + return new double_t(iOther); +} +DLL_FUNCTION(int32_t) BU_Double_ToI(double_t* pThis) { + return (int32_t)*pThis; +} + +DLL_FUNCTION(double_t*) BU_Double_FromL(int64_t* pOther) { + return new double_t((double_t)*pOther); +} +DLL_FUNCTION(int64_t*) BU_Double_ToL(double_t* pThis) { + return new int64_t((int64_t)*pThis); +} + +DLL_FUNCTION(int32_t) BU_Double_Compare(double_t* pThis, double_t* pOther) { + return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ + /* Greater */ + (*pThis > *pOther ? 1 : 0) + + /* Smaller */ + (*pThis < *pOther ? -1 : 0); +} + +DLL_FUNCTION(double_t*) BU_Double_Set(double_t* pThis, double_t* pOther) { + *pThis = *pOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_Add(double_t* pThis, double_t* pOther) { + *pThis += *pOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_Sub(double_t* pThis, double_t* pOther) { + *pThis -= *pOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_Div(double_t* pThis, double_t* pOther) { + *pThis /= *pOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_Mul(double_t* pThis, double_t* pOther) { + *pThis *= *pOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_Mod(double_t* pThis, double_t* pOther) { + *pThis = fmod(*pThis, *pOther); + return pThis; +} + +DLL_FUNCTION(double_t*) BU_Double_SetF(double_t* pThis, float_t fOther) { + *pThis = fOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_AddF(double_t* pThis, float_t fOther) { + *pThis += fOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_SubF(double_t* pThis, float_t fOther) { + *pThis -= fOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_DivF(double_t* pThis, float_t fOther) { + *pThis /= fOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_MulF(double_t* pThis, float_t fOther) { + *pThis *= fOther; + return pThis; +} +DLL_FUNCTION(double_t*) BU_Double_ModF(double_t* pThis, float_t fOther) { + *pThis = fmod(*pThis, fOther); + return pThis; } \ No newline at end of file diff --git a/Type/Double.h b/Type/Double.h index e73e908..58cd841 100644 --- a/Type/Double.h +++ b/Type/Double.h @@ -1,51 +1,51 @@ -// Blitz - Steam wrapper for Blitz. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include - -DLL_FUNCTION(double_t*) BU_Double_New(); -DLL_FUNCTION(double_t*) BU_Double_Copy(double_t* pRight); -DLL_FUNCTION(void) BU_Double_Destroy(double_t* pThis); - -DLL_FUNCTION(const char*) BU_Double_ToString(double_t* pThis); -DLL_FUNCTION(double_t*) BU_Double_FromString(const char* pString); - -DLL_FUNCTION(double_t*) BU_Double_FromF(float_t fOther); -DLL_FUNCTION(float_t) BU_Double_ToF(double_t* pThis); - -DLL_FUNCTION(double_t*) BU_Double_FromI(int32_t iOther); -DLL_FUNCTION(int32_t) BU_Double_ToI(double_t* pThis); - -DLL_FUNCTION(double_t*) BU_Double_FromL(int64_t* pOther); -DLL_FUNCTION(int64_t*) BU_Double_ToL(double_t* pThis); - -DLL_FUNCTION(int32_t) BU_Double_Compare(double_t* pThis, double_t* pOther); - -DLL_FUNCTION(double_t*) BU_Double_Set(double_t* pThis, double_t* pOther); -DLL_FUNCTION(double_t*) BU_Double_Add(double_t* pThis, double_t* pOther); -DLL_FUNCTION(double_t*) BU_Double_Sub(double_t* pThis, double_t* pOther); -DLL_FUNCTION(double_t*) BU_Double_Div(double_t* pThis, double_t* pOther); -DLL_FUNCTION(double_t*) BU_Double_Mul(double_t* pThis, double_t* pOther); -DLL_FUNCTION(double_t*) BU_Double_Mod(double_t* pThis, double_t* pOther); - -DLL_FUNCTION(double_t*) BU_Double_SetF(double_t* pThis, float_t fOther); -DLL_FUNCTION(double_t*) BU_Double_AddF(double_t* pThis, float_t fOther); -DLL_FUNCTION(double_t*) BU_Double_SubF(double_t* pThis, float_t fOther); -DLL_FUNCTION(double_t*) BU_Double_DivF(double_t* pThis, float_t fOther); -DLL_FUNCTION(double_t*) BU_Double_MulF(double_t* pThis, float_t fOther); -DLL_FUNCTION(double_t*) BU_Double_ModF(double_t* pThis, float_t fOther); +// Blitz - Steam wrapper for Blitz. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include + +DLL_FUNCTION(double_t*) BU_Double_New(); +DLL_FUNCTION(double_t*) BU_Double_Copy(double_t* pRight); +DLL_FUNCTION(void) BU_Double_Destroy(double_t* pThis); + +DLL_FUNCTION(const char*) BU_Double_ToString(double_t* pThis); +DLL_FUNCTION(double_t*) BU_Double_FromString(const char* pString); + +DLL_FUNCTION(double_t*) BU_Double_FromF(float_t fOther); +DLL_FUNCTION(float_t) BU_Double_ToF(double_t* pThis); + +DLL_FUNCTION(double_t*) BU_Double_FromI(int32_t iOther); +DLL_FUNCTION(int32_t) BU_Double_ToI(double_t* pThis); + +DLL_FUNCTION(double_t*) BU_Double_FromL(int64_t* pOther); +DLL_FUNCTION(int64_t*) BU_Double_ToL(double_t* pThis); + +DLL_FUNCTION(int32_t) BU_Double_Compare(double_t* pThis, double_t* pOther); + +DLL_FUNCTION(double_t*) BU_Double_Set(double_t* pThis, double_t* pOther); +DLL_FUNCTION(double_t*) BU_Double_Add(double_t* pThis, double_t* pOther); +DLL_FUNCTION(double_t*) BU_Double_Sub(double_t* pThis, double_t* pOther); +DLL_FUNCTION(double_t*) BU_Double_Div(double_t* pThis, double_t* pOther); +DLL_FUNCTION(double_t*) BU_Double_Mul(double_t* pThis, double_t* pOther); +DLL_FUNCTION(double_t*) BU_Double_Mod(double_t* pThis, double_t* pOther); + +DLL_FUNCTION(double_t*) BU_Double_SetF(double_t* pThis, float_t fOther); +DLL_FUNCTION(double_t*) BU_Double_AddF(double_t* pThis, float_t fOther); +DLL_FUNCTION(double_t*) BU_Double_SubF(double_t* pThis, float_t fOther); +DLL_FUNCTION(double_t*) BU_Double_DivF(double_t* pThis, float_t fOther); +DLL_FUNCTION(double_t*) BU_Double_MulF(double_t* pThis, float_t fOther); +DLL_FUNCTION(double_t*) BU_Double_ModF(double_t* pThis, float_t fOther); diff --git a/Type/FVector2.cpp b/Type/FVector2.cpp index 7d0c742..ef0b852 100644 --- a/Type/FVector2.cpp +++ b/Type/FVector2.cpp @@ -1,220 +1,220 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -/* -#pragma once -#include "FVector2.h" - -double FVector2::length() -{ - return std::sqrtf(std::abs((this->X*this->X) + (this->Y*this->Y))); -} - -void FVector2::normalize() { - double len = this->length(); - double divisor = 1.0 / (len != 0 ? len : FLT_EPSILON); -} - -double FVector2::distance(const FVector2 r) -{ - float X = (this->X - r.X), Y = (this->Y - r.Y); - return std::sqrtf(std::abs(X*X + Y*Y)); -} - -const char* FVector2::serialize() { - -} - -FVector2& FVector2::deserialize(const char* serialized) { - -} - -FVector2::FVector2(float V) { - -} - -FVector2::FVector2(float X, float Y) { - -} - -FVector2::FVector2(FVector2& V) { - -} - -FVector2& FVector2::operator++() { - -} - -FVector2& FVector2::operator--() { - -} - -bool FVector2::operator>(const FVector2& r) { - -} - -bool FVector2::operator>(const float& r) { - -} - - -bool FVector2::operator<(const FVector2& r) { - -} - -bool FVector2::operator<(const float& r) { - -} - - -bool FVector2::operator==(const FVector2& r) { - -} - -bool FVector2::operator==(const float& r) { - -} - - -bool FVector2::operator>=(const FVector2& r) { - -} - -bool FVector2::operator>=(const float& r) { - -} - - -bool FVector2::operator<=(const FVector2& r) { - -} - -bool FVector2::operator<=(const float& r) { - -} - - -bool FVector2::operator!=(const FVector2& r) { - -} - -bool FVector2::operator!=(const float& r) { - -} - - -FVector2& FVector2::operator=(const FVector2& r) { - -} - -FVector2& FVector2::operator=(const float& r) { - -} - - -FVector2& FVector2::operator+(const FVector2& r) { - -} - -FVector2& FVector2::operator+(const float& r) { - -} - - -FVector2& FVector2::operator-(const FVector2& r) { - -} - -FVector2& FVector2::operator*(const FVector2& r) { - -} - -FVector2& FVector2::operator*(const float& r) { - -} - - -FVector2& FVector2::operator/(const FVector2& r) { - -} - -FVector2& FVector2::operator/(const float& r) { - -} - - -FVector2& FVector2::operator+=(const FVector2& r) { - -} - -FVector2& FVector2::operator+=(const float& r) { - -} - - -FVector2& FVector2::operator-=(const FVector2& r) { - -} - -FVector2& FVector2::operator*=(const FVector2& r) { - -} - -FVector2& FVector2::operator*=(const float& r) { - -} - - -FVector2& FVector2::operator/=(const FVector2& r) { - -} - -FVector2& FVector2::operator/=(const float& r) { - -} - - -FVector2& FVector2::operator-(const float& r) { - -} - -FVector2& FVector2::operator-=(const float& r) { - -} - - - - - - - - - - - - - - - - - - - - - - - +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +/* +#pragma once +#include "FVector2.h" + +double FVector2::length() +{ + return std::sqrtf(std::abs((this->X*this->X) + (this->Y*this->Y))); +} + +void FVector2::normalize() { + double len = this->length(); + double divisor = 1.0 / (len != 0 ? len : FLT_EPSILON); +} + +double FVector2::distance(const FVector2 r) +{ + float X = (this->X - r.X), Y = (this->Y - r.Y); + return std::sqrtf(std::abs(X*X + Y*Y)); +} + +const char* FVector2::serialize() { + +} + +FVector2& FVector2::deserialize(const char* serialized) { + +} + +FVector2::FVector2(float V) { + +} + +FVector2::FVector2(float X, float Y) { + +} + +FVector2::FVector2(FVector2& V) { + +} + +FVector2& FVector2::operator++() { + +} + +FVector2& FVector2::operator--() { + +} + +bool FVector2::operator>(const FVector2& r) { + +} + +bool FVector2::operator>(const float& r) { + +} + + +bool FVector2::operator<(const FVector2& r) { + +} + +bool FVector2::operator<(const float& r) { + +} + + +bool FVector2::operator==(const FVector2& r) { + +} + +bool FVector2::operator==(const float& r) { + +} + + +bool FVector2::operator>=(const FVector2& r) { + +} + +bool FVector2::operator>=(const float& r) { + +} + + +bool FVector2::operator<=(const FVector2& r) { + +} + +bool FVector2::operator<=(const float& r) { + +} + + +bool FVector2::operator!=(const FVector2& r) { + +} + +bool FVector2::operator!=(const float& r) { + +} + + +FVector2& FVector2::operator=(const FVector2& r) { + +} + +FVector2& FVector2::operator=(const float& r) { + +} + + +FVector2& FVector2::operator+(const FVector2& r) { + +} + +FVector2& FVector2::operator+(const float& r) { + +} + + +FVector2& FVector2::operator-(const FVector2& r) { + +} + +FVector2& FVector2::operator*(const FVector2& r) { + +} + +FVector2& FVector2::operator*(const float& r) { + +} + + +FVector2& FVector2::operator/(const FVector2& r) { + +} + +FVector2& FVector2::operator/(const float& r) { + +} + + +FVector2& FVector2::operator+=(const FVector2& r) { + +} + +FVector2& FVector2::operator+=(const float& r) { + +} + + +FVector2& FVector2::operator-=(const FVector2& r) { + +} + +FVector2& FVector2::operator*=(const FVector2& r) { + +} + +FVector2& FVector2::operator*=(const float& r) { + +} + + +FVector2& FVector2::operator/=(const FVector2& r) { + +} + +FVector2& FVector2::operator/=(const float& r) { + +} + + +FVector2& FVector2::operator-(const float& r) { + +} + +FVector2& FVector2::operator-=(const float& r) { + +} + + + + + + + + + + + + + + + + + + + + + + + */ \ No newline at end of file diff --git a/Type/FVector2.h b/Type/FVector2.h index cf6f628..e08909d 100644 --- a/Type/FVector2.h +++ b/Type/FVector2.h @@ -1,98 +1,98 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -/* -#pragma once -#include "dllmain.h" -#ifndef _USE_MATH_DEFINES - #define _USE_MATH_DEFINES - #include - #undef _USE_MATH_DEFINES -#endif - -struct FVector2 { - float X, Y; - - // Constructor & Destructor - FVector2(float V); - FVector2(float X, float Y); - FVector2(FVector2& V); - - // Operator Overloading - FVector2& operator++(); - FVector2& operator--(); - bool operator>(const FVector2& r); - bool operator<(const FVector2& r); - bool operator==(const FVector2& r); - bool operator>=(const FVector2& r); - bool operator<=(const FVector2& r); - bool operator!=(const FVector2& r); - FVector2& operator=(const FVector2& r); - FVector2& operator+(const FVector2& r); - FVector2& operator-(const FVector2& r); - FVector2& operator*(const FVector2& r); - FVector2& operator/(const FVector2& r); - FVector2& operator+=(const FVector2& r); - FVector2& operator-=(const FVector2& r); - FVector2& operator*=(const FVector2& r); - FVector2& operator/=(const FVector2& r); - - // Operator Overloading - float - bool operator>(const float& r); - bool operator<(const float& r); - bool operator==(const float& r); - bool operator>=(const float& r); - bool operator<=(const float& r); - bool operator!=(const float& r); - FVector2& operator=(const float& r); - FVector2& operator+(const float& r); - FVector2& operator-(const float& r); - FVector2& operator*(const float& r); - FVector2& operator/(const float& r); - FVector2& operator+=(const float& r); - FVector2& operator-=(const float& r); - FVector2& operator*=(const float& r); - FVector2& operator/=(const float& r); - - // Simple Math - double length(); - void normalize(); - double distance(const FVector2 r); - - // Advanced Math - void rotate(const double ) - - // Serialization - const char* serialize(); - static FVector2& deserialize(const char* serialized); -}; - -DLL_METHOD FVector2* DLL_CALL BU_FVector2_Create(); -DLL_METHOD FVector2* DLL_CALL BU_FVector2_Copy(FVector2* copyVector); -DLL_METHOD void DLL_CALL BU_FVector2_Destroy(); - -DLL_METHOD FVector2* DLL_CALL BU_FVector2_TempCreate(); -DLL_METHOD FVector2* DLL_CALL BU_FVector2_TempCopy(FVector2* copyVector); -DLL_METHOD void DLL_CALL BU_FVector2_SetTemp(FVector2* vector); -DLL_METHOD void DLL_CALL BU_FVector2_UnsetTemp(FVector2* vector); -DLL_METHOD void DLL_CALL BU_FVector2_TempCleanup(); - -DLL_METHOD float DLL_CALL BU_FVector2_Length(FVector2* vector); -DLL_METHOD float DLL_CALL BU_FVector2_Normalize(); -DLL_METHOD float DLL_CALL BU_FVector2_Distance(FVector2* vector); -DLL_METHOD float DLL_CALL BU_FVector2_DistanceL(float X, float Y); - +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Project Kube (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +/* +#pragma once +#include "dllmain.h" +#ifndef _USE_MATH_DEFINES + #define _USE_MATH_DEFINES + #include + #undef _USE_MATH_DEFINES +#endif + +struct FVector2 { + float X, Y; + + // Constructor & Destructor + FVector2(float V); + FVector2(float X, float Y); + FVector2(FVector2& V); + + // Operator Overloading + FVector2& operator++(); + FVector2& operator--(); + bool operator>(const FVector2& r); + bool operator<(const FVector2& r); + bool operator==(const FVector2& r); + bool operator>=(const FVector2& r); + bool operator<=(const FVector2& r); + bool operator!=(const FVector2& r); + FVector2& operator=(const FVector2& r); + FVector2& operator+(const FVector2& r); + FVector2& operator-(const FVector2& r); + FVector2& operator*(const FVector2& r); + FVector2& operator/(const FVector2& r); + FVector2& operator+=(const FVector2& r); + FVector2& operator-=(const FVector2& r); + FVector2& operator*=(const FVector2& r); + FVector2& operator/=(const FVector2& r); + + // Operator Overloading - float + bool operator>(const float& r); + bool operator<(const float& r); + bool operator==(const float& r); + bool operator>=(const float& r); + bool operator<=(const float& r); + bool operator!=(const float& r); + FVector2& operator=(const float& r); + FVector2& operator+(const float& r); + FVector2& operator-(const float& r); + FVector2& operator*(const float& r); + FVector2& operator/(const float& r); + FVector2& operator+=(const float& r); + FVector2& operator-=(const float& r); + FVector2& operator*=(const float& r); + FVector2& operator/=(const float& r); + + // Simple Math + double length(); + void normalize(); + double distance(const FVector2 r); + + // Advanced Math + void rotate(const double ) + + // Serialization + const char* serialize(); + static FVector2& deserialize(const char* serialized); +}; + +DLL_METHOD FVector2* DLL_CALL BU_FVector2_Create(); +DLL_METHOD FVector2* DLL_CALL BU_FVector2_Copy(FVector2* copyVector); +DLL_METHOD void DLL_CALL BU_FVector2_Destroy(); + +DLL_METHOD FVector2* DLL_CALL BU_FVector2_TempCreate(); +DLL_METHOD FVector2* DLL_CALL BU_FVector2_TempCopy(FVector2* copyVector); +DLL_METHOD void DLL_CALL BU_FVector2_SetTemp(FVector2* vector); +DLL_METHOD void DLL_CALL BU_FVector2_UnsetTemp(FVector2* vector); +DLL_METHOD void DLL_CALL BU_FVector2_TempCleanup(); + +DLL_METHOD float DLL_CALL BU_FVector2_Length(FVector2* vector); +DLL_METHOD float DLL_CALL BU_FVector2_Normalize(); +DLL_METHOD float DLL_CALL BU_FVector2_Distance(FVector2* vector); +DLL_METHOD float DLL_CALL BU_FVector2_DistanceL(float X, float Y); + */ \ No newline at end of file diff --git a/Type/Long.cpp b/Type/Long.cpp index f7cd9d2..56d204b 100644 --- a/Type/Long.cpp +++ b/Type/Long.cpp @@ -1,167 +1,167 @@ -// Blitz - Steam wrapper for Blitz. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#include "Long.h" - -DLL_FUNCTION(int64_t*) BU_Long_New() { - return new int64_t; -} -DLL_FUNCTION(int64_t*) BU_Long_Copy(int64_t* pOther) { - return new int64_t(*pOther); -} -DLL_FUNCTION(void) BU_Long_Destroy(int64_t* pThis) { - delete pThis; -} - -char* BU_Long_Buffer = new char[32]; -DLL_FUNCTION(const char*) BU_Long_ToString(int64_t* pThis) { - std::stringstream myStream; - myStream << (*pThis); - - const char* myBuffer = myStream.str().c_str(); - strcpy_s(BU_Long_Buffer, 32, myBuffer); - return BU_Long_Buffer; -} -DLL_FUNCTION(int64_t*) BU_Long_FromString(const char* pString) { - int64_t* pThis = new int64_t; - std::stringstream myStream = std::stringstream(pString); - myStream >> *pThis; - return pThis; -} - -DLL_FUNCTION(int64_t*) BU_Long_FromI(int32_t iRight) { - return new int64_t(iRight); -} -DLL_FUNCTION(int64_t*) BU_Long_FromII(int32_t iLeft, int32_t iRight) { - return new int64_t(((int64_t)(iLeft) << 32) + iRight); -} -DLL_FUNCTION(int32_t) BU_Long_ToI(int64_t* pThis, int32_t iShift) { - if (iShift >= 0) - return (int32_t)(*pThis >> iShift); - else - return (int32_t)(*pThis << -iShift); -} -DLL_FUNCTION(int32_t) BU_Long_ToIH(int64_t* pThis) { - return (int32_t)(*pThis >> 32); -} -DLL_FUNCTION(int32_t) BU_Long_ToIL(int64_t* pThis) { - return (int32_t)*pThis; -} - -DLL_FUNCTION(int64_t*) BU_Long_FromF(float_t fOther) { - return new int64_t((int64_t)fOther); -} -DLL_FUNCTION(float_t) BU_Long_ToF(int64_t* pThis) { - return (float_t)*pThis; -} - -DLL_FUNCTION(int64_t*) BU_Long_FromD(double_t* pOther) { - return new int64_t((int64_t)*pOther); -} -DLL_FUNCTION(double_t*) BU_Long_ToD(int64_t* pThis) { - return new double_t((double_t)*pThis); -} - -DLL_FUNCTION(int32_t) BU_Long_Compare(int64_t* pThis, int64_t* pOther) { - return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ - /* Greater */ - (*pThis > *pOther ? 1 : 0) + - /* Smaller */ - (*pThis < *pOther ? -1 : 0); -} - -DLL_FUNCTION(int64_t*) BU_Long_Set(int64_t* pThis, int64_t* pOther) { - *pThis = *pOther; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_Add(int64_t* pThis, int64_t* pOther) { - *pThis += *pOther; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_Sub(int64_t* pThis, int64_t* pOther) { - *pThis -= *pOther; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_Div(int64_t* pThis, int64_t* pOther) { - *pThis /= *pOther; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_Mul(int64_t* pThis, int64_t* pOther) { - *pThis *= *pOther; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_Mod(int64_t* pThis, int64_t* pOther) { - *pThis %= *pOther; - return pThis; -} - -DLL_FUNCTION(int64_t*) BU_Long_SetI(int64_t* pThis, int32_t iRight) { - *pThis = iRight; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_AddI(int64_t* pThis, int32_t iRight) { - *pThis += iRight; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_SubI(int64_t* pThis, int32_t iRight) { - *pThis -= iRight; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_DivI(int64_t* pThis, int32_t iRight) { - *pThis /= iRight; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_MulI(int64_t* pThis, int32_t iRight) { - *pThis *= iRight; - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_ModI(int64_t* pThis, int32_t iRight) { - *pThis %= iRight; - return pThis; -} - -DLL_FUNCTION(int64_t*) BU_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis = (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis += (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis -= (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis /= (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis *= (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL_FUNCTION(int64_t*) BU_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis %= (((int64_t)iLeft << 32) + iRight); - return pThis; -} - -DLL_FUNCTION(int64_t*) BU_Long_Shift(int64_t* pThis, int32_t iRight) { - if (iRight >= 0) - *pThis >>= iRight; - else - *pThis <<= -iRight; - return pThis; +// Blitz - Steam wrapper for Blitz. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "Long.h" + +DLL_FUNCTION(int64_t*) BU_Long_New() { + return new int64_t; +} +DLL_FUNCTION(int64_t*) BU_Long_Copy(int64_t* pOther) { + return new int64_t(*pOther); +} +DLL_FUNCTION(void) BU_Long_Destroy(int64_t* pThis) { + delete pThis; +} + +char* BU_Long_Buffer = new char[32]; +DLL_FUNCTION(const char*) BU_Long_ToString(int64_t* pThis) { + std::stringstream myStream; + myStream << (*pThis); + + const char* myBuffer = myStream.str().c_str(); + strcpy_s(BU_Long_Buffer, 32, myBuffer); + return BU_Long_Buffer; +} +DLL_FUNCTION(int64_t*) BU_Long_FromString(const char* pString) { + int64_t* pThis = new int64_t; + std::stringstream myStream = std::stringstream(pString); + myStream >> *pThis; + return pThis; +} + +DLL_FUNCTION(int64_t*) BU_Long_FromI(int32_t iRight) { + return new int64_t(iRight); +} +DLL_FUNCTION(int64_t*) BU_Long_FromII(int32_t iLeft, int32_t iRight) { + return new int64_t(((int64_t)(iLeft) << 32) + iRight); +} +DLL_FUNCTION(int32_t) BU_Long_ToI(int64_t* pThis, int32_t iShift) { + if (iShift >= 0) + return (int32_t)(*pThis >> iShift); + else + return (int32_t)(*pThis << -iShift); +} +DLL_FUNCTION(int32_t) BU_Long_ToIH(int64_t* pThis) { + return (int32_t)(*pThis >> 32); +} +DLL_FUNCTION(int32_t) BU_Long_ToIL(int64_t* pThis) { + return (int32_t)*pThis; +} + +DLL_FUNCTION(int64_t*) BU_Long_FromF(float_t fOther) { + return new int64_t((int64_t)fOther); +} +DLL_FUNCTION(float_t) BU_Long_ToF(int64_t* pThis) { + return (float_t)*pThis; +} + +DLL_FUNCTION(int64_t*) BU_Long_FromD(double_t* pOther) { + return new int64_t((int64_t)*pOther); +} +DLL_FUNCTION(double_t*) BU_Long_ToD(int64_t* pThis) { + return new double_t((double_t)*pThis); +} + +DLL_FUNCTION(int32_t) BU_Long_Compare(int64_t* pThis, int64_t* pOther) { + return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ + /* Greater */ + (*pThis > *pOther ? 1 : 0) + + /* Smaller */ + (*pThis < *pOther ? -1 : 0); +} + +DLL_FUNCTION(int64_t*) BU_Long_Set(int64_t* pThis, int64_t* pOther) { + *pThis = *pOther; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_Add(int64_t* pThis, int64_t* pOther) { + *pThis += *pOther; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_Sub(int64_t* pThis, int64_t* pOther) { + *pThis -= *pOther; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_Div(int64_t* pThis, int64_t* pOther) { + *pThis /= *pOther; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_Mul(int64_t* pThis, int64_t* pOther) { + *pThis *= *pOther; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_Mod(int64_t* pThis, int64_t* pOther) { + *pThis %= *pOther; + return pThis; +} + +DLL_FUNCTION(int64_t*) BU_Long_SetI(int64_t* pThis, int32_t iRight) { + *pThis = iRight; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_AddI(int64_t* pThis, int32_t iRight) { + *pThis += iRight; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_SubI(int64_t* pThis, int32_t iRight) { + *pThis -= iRight; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_DivI(int64_t* pThis, int32_t iRight) { + *pThis /= iRight; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_MulI(int64_t* pThis, int32_t iRight) { + *pThis *= iRight; + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_ModI(int64_t* pThis, int32_t iRight) { + *pThis %= iRight; + return pThis; +} + +DLL_FUNCTION(int64_t*) BU_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis = (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis += (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis -= (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis /= (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis *= (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL_FUNCTION(int64_t*) BU_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis %= (((int64_t)iLeft << 32) + iRight); + return pThis; +} + +DLL_FUNCTION(int64_t*) BU_Long_Shift(int64_t* pThis, int32_t iRight) { + if (iRight >= 0) + *pThis >>= iRight; + else + *pThis <<= -iRight; + return pThis; } \ No newline at end of file diff --git a/Type/Long.h b/Type/Long.h index d08e123..974945a 100644 --- a/Type/Long.h +++ b/Type/Long.h @@ -1,63 +1,63 @@ -// Blitz - Steam wrapper for Blitz. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include - -DLL_FUNCTION(int64_t*) BU_Long_New(); -DLL_FUNCTION(int64_t*) BU_Long_Copy(int64_t* pRight); -DLL_FUNCTION(void) BU_Long_Destroy(int64_t* pThis); - -DLL_FUNCTION(const char*) BU_Long_ToString(int64_t* pThis); -DLL_FUNCTION(int64_t*) BU_Long_FromString(const char* pString); - -DLL_FUNCTION(int64_t*) BU_Long_FromI(int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_FromII(int32_t iLeft, int32_t iRight); -DLL_FUNCTION(int32_t) BU_Long_ToI(int64_t* pThis, int32_t iShift); -DLL_FUNCTION(int32_t) BU_Long_ToIH(int64_t* pThis); -DLL_FUNCTION(int32_t) BU_Long_ToIL(int64_t* pThis); - -DLL_FUNCTION(int64_t*) BU_Long_FromF(float_t fOther); -DLL_FUNCTION(float_t) BU_Long_ToF(int64_t* pThis); - -DLL_FUNCTION(int64_t*) BU_Long_FromD(double_t* pOther); -DLL_FUNCTION(double_t*) BU_Long_ToD(int64_t* pThis); - -DLL_FUNCTION(int32_t) BU_Long_Compare(int64_t* pThis, int64_t* pOther); - -DLL_FUNCTION(int64_t*) BU_Long_Set(int64_t* pThis, int64_t* pOther); -DLL_FUNCTION(int64_t*) BU_Long_Add(int64_t* pThis, int64_t* pOther); -DLL_FUNCTION(int64_t*) BU_Long_Sub(int64_t* pThis, int64_t* pOther); -DLL_FUNCTION(int64_t*) BU_Long_Div(int64_t* pThis, int64_t* pOther); -DLL_FUNCTION(int64_t*) BU_Long_Mul(int64_t* pThis, int64_t* pOther); -DLL_FUNCTION(int64_t*) BU_Long_Mod(int64_t* pThis, int64_t* pOther); - -DLL_FUNCTION(int64_t*) BU_Long_SetI(int64_t* pThis, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_AddI(int64_t* pThis, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_SubI(int64_t* pThis, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_DivI(int64_t* pThis, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_MulI(int64_t* pThis, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_ModI(int64_t* pThis, int32_t iRight); - -DLL_FUNCTION(int64_t*) BU_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL_FUNCTION(int64_t*) BU_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight); - +// Blitz - Steam wrapper for Blitz. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include + +DLL_FUNCTION(int64_t*) BU_Long_New(); +DLL_FUNCTION(int64_t*) BU_Long_Copy(int64_t* pRight); +DLL_FUNCTION(void) BU_Long_Destroy(int64_t* pThis); + +DLL_FUNCTION(const char*) BU_Long_ToString(int64_t* pThis); +DLL_FUNCTION(int64_t*) BU_Long_FromString(const char* pString); + +DLL_FUNCTION(int64_t*) BU_Long_FromI(int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_FromII(int32_t iLeft, int32_t iRight); +DLL_FUNCTION(int32_t) BU_Long_ToI(int64_t* pThis, int32_t iShift); +DLL_FUNCTION(int32_t) BU_Long_ToIH(int64_t* pThis); +DLL_FUNCTION(int32_t) BU_Long_ToIL(int64_t* pThis); + +DLL_FUNCTION(int64_t*) BU_Long_FromF(float_t fOther); +DLL_FUNCTION(float_t) BU_Long_ToF(int64_t* pThis); + +DLL_FUNCTION(int64_t*) BU_Long_FromD(double_t* pOther); +DLL_FUNCTION(double_t*) BU_Long_ToD(int64_t* pThis); + +DLL_FUNCTION(int32_t) BU_Long_Compare(int64_t* pThis, int64_t* pOther); + +DLL_FUNCTION(int64_t*) BU_Long_Set(int64_t* pThis, int64_t* pOther); +DLL_FUNCTION(int64_t*) BU_Long_Add(int64_t* pThis, int64_t* pOther); +DLL_FUNCTION(int64_t*) BU_Long_Sub(int64_t* pThis, int64_t* pOther); +DLL_FUNCTION(int64_t*) BU_Long_Div(int64_t* pThis, int64_t* pOther); +DLL_FUNCTION(int64_t*) BU_Long_Mul(int64_t* pThis, int64_t* pOther); +DLL_FUNCTION(int64_t*) BU_Long_Mod(int64_t* pThis, int64_t* pOther); + +DLL_FUNCTION(int64_t*) BU_Long_SetI(int64_t* pThis, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_AddI(int64_t* pThis, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_SubI(int64_t* pThis, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_DivI(int64_t* pThis, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_MulI(int64_t* pThis, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_ModI(int64_t* pThis, int32_t iRight); + +DLL_FUNCTION(int64_t*) BU_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL_FUNCTION(int64_t*) BU_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight); + DLL_FUNCTION(int64_t*) BU_Long_Shift(int64_t* pThis, int32_t iShift); \ No newline at end of file diff --git a/Utility/DisplayEnumerator.cpp b/Utility/DisplayEnumerator.cpp index 06d2484..d874c11 100644 --- a/Utility/DisplayEnumerator.cpp +++ b/Utility/DisplayEnumerator.cpp @@ -1,55 +1,55 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#include "DisplayEnumerator.h" - -BOOL CALLBACK BU_DisplayEnumerator_Callback(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { - DisplayEnumerator* displayEnumerator = (DisplayEnumerator*)dwData; - - displayEnumerator->displays.push_back(RECT(*lprcMonitor)); - return TRUE; -} - -DLL_FUNCTION(DisplayEnumerator*) BU_DisplayEnumerator_Create() { - DisplayEnumerator* displayEnumerator = new DisplayEnumerator(); - return displayEnumerator; -} - -DLL_FUNCTION(void) BU_DisplayEnumerator_Destroy(DisplayEnumerator* displayEnumerator) { - delete displayEnumerator; -} - -DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Enumerate(DisplayEnumerator* displayEnumerator) { - EnumDisplayMonitors(NULL, NULL, BU_DisplayEnumerator_Callback, (LPARAM)displayEnumerator); - - return displayEnumerator->displays.size(); -} - -DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Count(DisplayEnumerator* displayEnumerator) { - return displayEnumerator->displays.size(); -} - -DLL_FUNCTION(void) BU_DisplayEnumerator_Retrieve(DisplayEnumerator* displayEnumerator, uint32_t index, PRECT display) { - // Retrieve the requested index. - auto iterator = displayEnumerator->displays.begin(); - std::advance(iterator, index); - - // Copy data. - display->left = iterator->left; - display->top = iterator->top; - display->right = iterator->right; - display->bottom = iterator->bottom; +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#include "DisplayEnumerator.h" + +BOOL CALLBACK BU_DisplayEnumerator_Callback(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { + DisplayEnumerator* displayEnumerator = (DisplayEnumerator*)dwData; + + displayEnumerator->displays.push_back(RECT(*lprcMonitor)); + return TRUE; +} + +DLL_FUNCTION(DisplayEnumerator*) BU_DisplayEnumerator_Create() { + DisplayEnumerator* displayEnumerator = new DisplayEnumerator(); + return displayEnumerator; +} + +DLL_FUNCTION(void) BU_DisplayEnumerator_Destroy(DisplayEnumerator* displayEnumerator) { + delete displayEnumerator; +} + +DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Enumerate(DisplayEnumerator* displayEnumerator) { + EnumDisplayMonitors(NULL, NULL, BU_DisplayEnumerator_Callback, (LPARAM)displayEnumerator); + + return displayEnumerator->displays.size(); +} + +DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Count(DisplayEnumerator* displayEnumerator) { + return displayEnumerator->displays.size(); +} + +DLL_FUNCTION(void) BU_DisplayEnumerator_Retrieve(DisplayEnumerator* displayEnumerator, uint32_t index, LPRECT display) { + // Retrieve the requested index. + auto iterator = displayEnumerator->displays.begin(); + std::advance(iterator, index); + + // Copy data. + display->left = iterator->left; + display->top = iterator->top; + display->right = iterator->right; + display->bottom = iterator->bottom; } \ No newline at end of file diff --git a/Utility/DisplayEnumerator.h b/Utility/DisplayEnumerator.h index e940df4..afdd93b 100644 --- a/Utility/DisplayEnumerator.h +++ b/Utility/DisplayEnumerator.h @@ -1,38 +1,33 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include - -struct DisplayEnumerator { - std::list displays; -}; - -// Internal Callback -BOOL CALLBACK BU_DisplayEnumerator_Callback(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData); - -// Exported functions. -DLL_FUNCTION(DisplayEnumerator*) BU_DisplayEnumerator_Create(); -#pragma comment(linker, "/EXPORT:BU_DisplayEnumerator_Create=_BU_DisplayEnumerator_Create@0") -DLL_FUNCTION(void) BU_DisplayEnumerator_Destroy(DisplayEnumerator* displayEnumerator); -#pragma comment(linker, "/EXPORT:BU_DisplayEnumerator_Destroy=_BU_DisplayEnumerator_Destroy@4") -DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Enumerate(DisplayEnumerator* displayEnumerator); -#pragma comment(linker, "/EXPORT:BU_DisplayEnumerator_Enumerate=_BU_DisplayEnumerator_Enumerate@4") -DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Count(DisplayEnumerator* displayEnumerator); -#pragma comment(linker, "/EXPORT:BU_DisplayEnumerator_Count=_BU_DisplayEnumerator_Count@4") -DLL_FUNCTION(void) BU_DisplayEnumerator_Retrieve(DisplayEnumerator* displayEnumerator, uint32_t index, LPRECT display); -#pragma comment(linker, "/EXPORT:BU_DisplayEnumerator_Retrieve=_BU_DisplayEnumerator_Retrieve@12") +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include + +struct DisplayEnumerator { + std::list displays; +}; + +// Internal Callback +BOOL CALLBACK BU_DisplayEnumerator_Callback(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData); + +// Exported functions. +DLL_FUNCTION(DisplayEnumerator*) BU_DisplayEnumerator_Create(); +DLL_FUNCTION(void) BU_DisplayEnumerator_Destroy(DisplayEnumerator* displayEnumerator); +DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Enumerate(DisplayEnumerator* displayEnumerator); +DLL_FUNCTION(uint32_t) BU_DisplayEnumerator_Count(DisplayEnumerator* displayEnumerator); +DLL_FUNCTION(void) BU_DisplayEnumerator_Retrieve(DisplayEnumerator* displayEnumerator, uint32_t index, LPRECT display); diff --git a/Utility/IndexerV1.cpp b/Utility/IndexerV1.cpp index 2623fc7..7e11535 100644 --- a/Utility/IndexerV1.cpp +++ b/Utility/IndexerV1.cpp @@ -1,126 +1,126 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "IndexerV1.h" - -void IndexerV1::mark(uint32_t index, bool used) { - uint8_t bit = index & 0x3F; - index = index >> 6; - - this->indexes[index] ^= (!(uint64_t)used ^ this->indexes[index]) & (1ULL << bit); -} - -bool IndexerV1::is(uint32_t index, bool used) { - uint8_t bit = index & 0x3F; - index = index >> 6; - - return (!!(this->indexes[index] & (1ULL << bit)) == used); -} - -uint32_t IndexerV1::get() { - bool hasFoundIndex = false; - uint32_t foundIndex = 0; - - // Our search begins and ends at lastAssignedIndex. - for (uint32_t indexOffset = 0; indexOffset <= INDEXER_INDEXES; indexOffset++) { - uint32_t index = (lastAssignedIndex >> 6) + indexOffset; - uint8_t bit = 0; - - uint64_t checkValue = this->indexes[index]; - for (uint8_t bit = 0; bit < 64; bit++) { - if (this->is((index << 6) + bit, false)) { - hasFoundIndex = true; - foundIndex = (index << 6) + bit; - break; - } - } - } - - if (hasFoundIndex) { - this->mark(foundIndex, true); - return foundIndex; - } - - return FALSE; -} - -uint32_t IndexerV1::count(bool used) { - uint32_t amount = 0; - - for (uint32_t index = 0; index <= INDEXER_INDEXES; index++) { - uint8_t bit = 0; - - uint64_t checkValue = this->indexes[index]; - if (checkValue == !(uint64_t)!used) { - amount += 64; - } else { - for (uint8_t bit = 0; bit < 64; bit++) { - amount += this->is((index << 6) + bit, used); - } - } - } - - return amount; -} - -DLL_FUNCTION(IndexerV1*) BU_IndexerV1_Create() { - return new IndexerV1(); -} - -DLL_FUNCTION(void) BU_IndexerV1_Destroy(IndexerV1* indexer) { - delete indexer; -} - -DLL_FUNCTION(void) BU_IndexerV1_Mark(IndexerV1* indexer, uint32_t index, uint32_t used) { - indexer->mark(index, used != 0); -} - -DLL_FUNCTION(void) BU_IndexerV1_MarkFree(IndexerV1* indexer, uint32_t index) { - indexer->mark(index, false); -} - -DLL_FUNCTION(void) BU_IndexerV1_MarkUsed(IndexerV1* indexer, uint32_t index) { - indexer->mark(index, true); -} - -DLL_FUNCTION(uint32_t) BU_IndexerV1_Is(IndexerV1* indexer, uint32_t index, uint32_t used) { - return indexer->is(index, used != 0); -} - -DLL_FUNCTION(uint32_t) BU_IndexerV1_IsFree(IndexerV1* indexer, uint32_t index) { - return indexer->is(index, false); -} - -DLL_FUNCTION(uint32_t) BU_IndexerV1_IsUsed(IndexerV1* indexer, uint32_t index) { - return indexer->is(index, true); -} - -DLL_FUNCTION(uint32_t) BU_IndexerV1_Get(IndexerV1* indexer) { - return indexer->get(); -} - -DLL_FUNCTION(uint32_t) BU_IndexerV1_Count(IndexerV1* indexer, uint32_t used) { - return indexer->count(used != 0); -} - -DLL_FUNCTION(uint32_t) BU_IndexerV1_CountFree(IndexerV1* indexer) { - return indexer->count(false); -} - -DLL_FUNCTION(uint32_t) BU_IndexerV1_CountUsed(IndexerV1* indexer) { - return indexer->count(true); -} +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "IndexerV1.h" + +void IndexerV1::mark(uint32_t index, bool used) { + uint8_t bit = index & 0x3F; + index = index >> 6; + + this->indexes[index] ^= (!(uint64_t)used ^ this->indexes[index]) & (1ULL << bit); +} + +bool IndexerV1::is(uint32_t index, bool used) { + uint8_t bit = index & 0x3F; + index = index >> 6; + + return (!!(this->indexes[index] & (1ULL << bit)) == used); +} + +uint32_t IndexerV1::get() { + bool hasFoundIndex = false; + uint32_t foundIndex = 0; + + // Our search begins and ends at lastAssignedIndex. + for (uint32_t indexOffset = 0; indexOffset <= INDEXER_INDEXES; indexOffset++) { + uint32_t index = (lastAssignedIndex >> 6) + indexOffset; + uint8_t bit = 0; + + uint64_t checkValue = this->indexes[index]; + for (uint8_t bit = 0; bit < 64; bit++) { + if (this->is((index << 6) + bit, false)) { + hasFoundIndex = true; + foundIndex = (index << 6) + bit; + break; + } + } + } + + if (hasFoundIndex) { + this->mark(foundIndex, true); + return foundIndex; + } + + return FALSE; +} + +uint32_t IndexerV1::count(bool used) { + uint32_t amount = 0; + + for (uint32_t index = 0; index <= INDEXER_INDEXES; index++) { + uint8_t bit = 0; + + uint64_t checkValue = this->indexes[index]; + if (checkValue == !(uint64_t)!used) { + amount += 64; + } else { + for (uint8_t bit = 0; bit < 64; bit++) { + amount += this->is((index << 6) + bit, used); + } + } + } + + return amount; +} + +DLL_FUNCTION(IndexerV1*) BU_IndexerV1_Create() { + return new IndexerV1(); +} + +DLL_FUNCTION(void) BU_IndexerV1_Destroy(IndexerV1* indexer) { + delete indexer; +} + +DLL_FUNCTION(void) BU_IndexerV1_Mark(IndexerV1* indexer, uint32_t index, uint32_t used) { + indexer->mark(index, used != 0); +} + +DLL_FUNCTION(void) BU_IndexerV1_MarkFree(IndexerV1* indexer, uint32_t index) { + indexer->mark(index, false); +} + +DLL_FUNCTION(void) BU_IndexerV1_MarkUsed(IndexerV1* indexer, uint32_t index) { + indexer->mark(index, true); +} + +DLL_FUNCTION(uint32_t) BU_IndexerV1_Is(IndexerV1* indexer, uint32_t index, uint32_t used) { + return indexer->is(index, used != 0); +} + +DLL_FUNCTION(uint32_t) BU_IndexerV1_IsFree(IndexerV1* indexer, uint32_t index) { + return indexer->is(index, false); +} + +DLL_FUNCTION(uint32_t) BU_IndexerV1_IsUsed(IndexerV1* indexer, uint32_t index) { + return indexer->is(index, true); +} + +DLL_FUNCTION(uint32_t) BU_IndexerV1_Get(IndexerV1* indexer) { + return indexer->get(); +} + +DLL_FUNCTION(uint32_t) BU_IndexerV1_Count(IndexerV1* indexer, uint32_t used) { + return indexer->count(used != 0); +} + +DLL_FUNCTION(uint32_t) BU_IndexerV1_CountFree(IndexerV1* indexer) { + return indexer->count(false); +} + +DLL_FUNCTION(uint32_t) BU_IndexerV1_CountUsed(IndexerV1* indexer) { + return indexer->count(true); +} diff --git a/Utility/IndexerV1.h b/Utility/IndexerV1.h index 582a5c6..dac5c67 100644 --- a/Utility/IndexerV1.h +++ b/Utility/IndexerV1.h @@ -1,61 +1,61 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include -#include -#include "BlitzUtility.h" - -// 67108864 = 2 ^ 32 / 64 -#define INDEXER_INDEXES 67108864 //pow(2,32) / 64 - -/** Indexer structure helps with getting unique, unused Indexes (Ids). - * Doing this natively would be too slow, so I'm using a DLL for this. - */ -struct IndexerV1 { - uint64_t indexes[INDEXER_INDEXES]; - uint32_t lastAssignedIndex; - - void mark(uint32_t index, bool used); - bool is(uint32_t index, bool used); - uint32_t get(); - uint32_t count(bool used); -}; - -DLL_FUNCTION(IndexerV1*) BU_IndexerV1_Create(); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_Create=_BU_IndexerV1_Create@0") -DLL_FUNCTION(void) BU_IndexerV1_Destroy(IndexerV1* indexer); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_Destroy=_BU_IndexerV1_Destroy@4") -DLL_FUNCTION(void) BU_IndexerV1_Mark(IndexerV1* indexer, uint32_t used, uint32_t index); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_Mark=_BU_IndexerV1_Mark@12") -DLL_FUNCTION(void) BU_IndexerV1_MarkFree(IndexerV1* indexer, uint32_t index); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_MarkFree=_BU_IndexerV1_MarkFree@8") -DLL_FUNCTION(void) BU_IndexerV1_MarkUsed(IndexerV1* indexer, uint32_t index); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_MarkUsed=_BU_IndexerV1_MarkUsed@8") -DLL_FUNCTION(uint32_t) BU_IndexerV1_Is(IndexerV1* indexer, uint32_t index, uint32_t used); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_Is=_BU_IndexerV1_Is@12") -DLL_FUNCTION(uint32_t) BU_IndexerV1_IsFree(IndexerV1* indexer, uint32_t index); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_IsFree=_BU_IndexerV1_IsFree@8") -DLL_FUNCTION(uint32_t) BU_IndexerV1_IsUsed(IndexerV1* indexer, uint32_t index); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_IsUsed=_BU_IndexerV1_IsUsed@8") -DLL_FUNCTION(uint32_t) BU_IndexerV1_Get(IndexerV1* indexer); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_Get=_BU_IndexerV1_Get@4") -DLL_FUNCTION(uint32_t) BU_IndexerV1_Count(IndexerV1* indexer, uint32_t used); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_Count=_BU_IndexerV1_Count@8") -DLL_FUNCTION(uint32_t) BU_IndexerV1_CountFree(IndexerV1* indexer); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_CountFree=_BU_IndexerV1_CountFree@4") -DLL_FUNCTION(uint32_t) BU_IndexerV1_CountUsed(IndexerV1* indexer); -#pragma comment(linker, "/EXPORT:BU_IndexerV1_CountUsed=_BU_IndexerV1_CountUsed@4") +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include +#include +#include "BlitzUtility.h" + +// 67108864 = 2 ^ 32 / 64 +#define INDEXER_INDEXES 67108864 //pow(2,32) / 64 + +/** Indexer structure helps with getting unique, unused Indexes (Ids). + * Doing this natively would be too slow, so I'm using a DLL for this. + */ +struct IndexerV1 { + uint64_t indexes[INDEXER_INDEXES]; + uint32_t lastAssignedIndex; + + void mark(uint32_t index, bool used); + bool is(uint32_t index, bool used); + uint32_t get(); + uint32_t count(bool used); +}; + +DLL_FUNCTION(IndexerV1*) BU_IndexerV1_Create(); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_Create=_BU_IndexerV1_Create@0") +DLL_FUNCTION(void) BU_IndexerV1_Destroy(IndexerV1* indexer); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_Destroy=_BU_IndexerV1_Destroy@4") +DLL_FUNCTION(void) BU_IndexerV1_Mark(IndexerV1* indexer, uint32_t used, uint32_t index); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_Mark=_BU_IndexerV1_Mark@12") +DLL_FUNCTION(void) BU_IndexerV1_MarkFree(IndexerV1* indexer, uint32_t index); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_MarkFree=_BU_IndexerV1_MarkFree@8") +DLL_FUNCTION(void) BU_IndexerV1_MarkUsed(IndexerV1* indexer, uint32_t index); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_MarkUsed=_BU_IndexerV1_MarkUsed@8") +DLL_FUNCTION(uint32_t) BU_IndexerV1_Is(IndexerV1* indexer, uint32_t index, uint32_t used); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_Is=_BU_IndexerV1_Is@12") +DLL_FUNCTION(uint32_t) BU_IndexerV1_IsFree(IndexerV1* indexer, uint32_t index); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_IsFree=_BU_IndexerV1_IsFree@8") +DLL_FUNCTION(uint32_t) BU_IndexerV1_IsUsed(IndexerV1* indexer, uint32_t index); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_IsUsed=_BU_IndexerV1_IsUsed@8") +DLL_FUNCTION(uint32_t) BU_IndexerV1_Get(IndexerV1* indexer); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_Get=_BU_IndexerV1_Get@4") +DLL_FUNCTION(uint32_t) BU_IndexerV1_Count(IndexerV1* indexer, uint32_t used); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_Count=_BU_IndexerV1_Count@8") +DLL_FUNCTION(uint32_t) BU_IndexerV1_CountFree(IndexerV1* indexer); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_CountFree=_BU_IndexerV1_CountFree@4") +DLL_FUNCTION(uint32_t) BU_IndexerV1_CountUsed(IndexerV1* indexer); +#pragma comment(linker, "/EXPORT:BU_IndexerV1_CountUsed=_BU_IndexerV1_CountUsed@4") diff --git a/Utility/MassOp.cpp b/Utility/MassOp.cpp index 2b7ebd4..8cc1699 100644 --- a/Utility/MassOp.cpp +++ b/Utility/MassOp.cpp @@ -1,182 +1,182 @@ -// Blitz - Steam wrapper for Blitz. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include "MassOp.h" - -MassOp::MassOp(uint32_t length) : length(length) { - this->instructions = new MassOpInstruction[length]; -} - -MassOp::~MassOp() { - delete this->instructions; -} - -DLL_FUNCTION(MassOp*) BU_MassOp_Create(uint32_t length) { - MassOp* myMassOp = new MassOp(length); - return myMassOp; -} - -DLL_FUNCTION(void) BU_MassOp_Destroy(MassOp* massop) { - delete massop; -} - -DLL_FUNCTION(void) BU_MassOp_Instruction(MassOp* massop, uint32_t index, MassOpType type, MassOpCode code, intptr_t leftOperand, intptr_t rightOperand, intptr_t result) { - massop->instructions[index].type = type; - massop->instructions[index].code = code; - massop->instructions[index].leftOperand = leftOperand; - massop->instructions[index].rightOperand = rightOperand; - massop->instructions[index].result = result; -} - -DLL_FUNCTION(void) BU_MassOp_Run(MassOp* massop) { - for (uint32_t index = 0; index < massop->length; index++) { - MassOpInstruction* instr = &massop->instructions[index]; - switch (instr->code) { - case GoTo: - index = instr->leftOperand; - break; - case SetOpCode: - massop->instructions[instr->leftOperand].code = instr->rightOperand; - break; - case CopyLeft: - if (instr->leftOperand != instr->rightOperand) { - switch (instr->result) { - case 0: - massop->instructions[instr->rightOperand].leftOperand = massop->instructions[instr->leftOperand].leftOperand; - break; - case 1: - massop->instructions[instr->rightOperand].rightOperand = massop->instructions[instr->leftOperand].leftOperand; - break; - case 2: - massop->instructions[instr->rightOperand].result = massop->instructions[instr->leftOperand].leftOperand; - break; - } - } - break; - case CopyRight: - if (instr->leftOperand != instr->rightOperand) { - switch (instr->result) { - case 0: - massop->instructions[instr->rightOperand].leftOperand = massop->instructions[instr->leftOperand].rightOperand; - break; - case 1: - massop->instructions[instr->rightOperand].rightOperand = massop->instructions[instr->leftOperand].rightOperand; - break; - case 2: - massop->instructions[instr->rightOperand].result = massop->instructions[instr->leftOperand].rightOperand; - break; - } - } - break; - case CopyOut: - if (instr->leftOperand != instr->rightOperand) { - switch (instr->result) { - case 0: - massop->instructions[instr->rightOperand].leftOperand = massop->instructions[instr->leftOperand].result; - break; - case 1: - massop->instructions[instr->rightOperand].rightOperand = massop->instructions[instr->leftOperand].result; - break; - case 2: - massop->instructions[instr->rightOperand].result = massop->instructions[instr->leftOperand].result; - break; - } - } - break; - case If: - if (instr->leftOperand != instr->rightOperand) { - if (massop->instructions[instr->leftOperand].result == massop->instructions[instr->rightOperand].result) { - index += instr->result; - } - } - break; - case IfValue: - if (instr->leftOperand != instr->rightOperand) { - if (massop->instructions[instr->rightOperand].result == instr->rightOperand) { - index += instr->result; - } - } - break; - default: - switch (instr->type) { - case Double: - switch (instr->code) { - case Create: - instr->result = (uint32_t) BU_Double_New(); - break; - case Destroy: - BU_Double_Destroy((double_t*)instr->leftOperand); - break; - case Copy: - instr->result = (uint32_t) BU_Double_Copy((double_t*)instr->leftOperand); - break; - case Set: - BU_Double_Set((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); - break; - case Add: - BU_Double_Add((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); - break; - case Sub: - BU_Double_Sub((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); - break; - case Mul: - BU_Double_Mul((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); - break; - case Div: - BU_Double_Div((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); - break; - case Compare: - instr->result = BU_Double_Compare((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); - break; - } - break; - case Long: - switch (instr->code) { - case Create: - instr->result = (uint32_t) BU_Long_New(); - break; - case Destroy: - BU_Long_Destroy((int64_t*)instr->leftOperand); - break; - case Copy: - instr->result = (uint32_t) BU_Long_Copy((int64_t*)instr->leftOperand); - break; - case Set: - BU_Long_Set((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); - break; - case Add: - BU_Long_Add((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); - break; - case Sub: - BU_Long_Sub((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); - break; - case Mul: - BU_Long_Mul((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); - break; - case Div: - BU_Long_Div((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); - break; - case Compare: - instr->result = BU_Long_Compare((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); - break; - } - break; - } - } - } -} +// Blitz - Steam wrapper for Blitz. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include "MassOp.h" + +MassOp::MassOp(uint32_t length) : length(length) { + this->instructions = new MassOpInstruction[length]; +} + +MassOp::~MassOp() { + delete this->instructions; +} + +DLL_FUNCTION(MassOp*) BU_MassOp_Create(uint32_t length) { + MassOp* myMassOp = new MassOp(length); + return myMassOp; +} + +DLL_FUNCTION(void) BU_MassOp_Destroy(MassOp* massop) { + delete massop; +} + +DLL_FUNCTION(void) BU_MassOp_Instruction(MassOp* massop, uint32_t index, MassOpType type, MassOpCode code, intptr_t leftOperand, intptr_t rightOperand, intptr_t result) { + massop->instructions[index].type = type; + massop->instructions[index].code = code; + massop->instructions[index].leftOperand = leftOperand; + massop->instructions[index].rightOperand = rightOperand; + massop->instructions[index].result = result; +} + +DLL_FUNCTION(void) BU_MassOp_Run(MassOp* massop) { + for (uint32_t index = 0; index < massop->length; index++) { + MassOpInstruction* instr = &massop->instructions[index]; + switch (instr->code) { + case GoTo: + index = instr->leftOperand; + break; + case SetOpCode: + massop->instructions[instr->leftOperand].code = instr->rightOperand; + break; + case CopyLeft: + if (instr->leftOperand != instr->rightOperand) { + switch (instr->result) { + case 0: + massop->instructions[instr->rightOperand].leftOperand = massop->instructions[instr->leftOperand].leftOperand; + break; + case 1: + massop->instructions[instr->rightOperand].rightOperand = massop->instructions[instr->leftOperand].leftOperand; + break; + case 2: + massop->instructions[instr->rightOperand].result = massop->instructions[instr->leftOperand].leftOperand; + break; + } + } + break; + case CopyRight: + if (instr->leftOperand != instr->rightOperand) { + switch (instr->result) { + case 0: + massop->instructions[instr->rightOperand].leftOperand = massop->instructions[instr->leftOperand].rightOperand; + break; + case 1: + massop->instructions[instr->rightOperand].rightOperand = massop->instructions[instr->leftOperand].rightOperand; + break; + case 2: + massop->instructions[instr->rightOperand].result = massop->instructions[instr->leftOperand].rightOperand; + break; + } + } + break; + case CopyOut: + if (instr->leftOperand != instr->rightOperand) { + switch (instr->result) { + case 0: + massop->instructions[instr->rightOperand].leftOperand = massop->instructions[instr->leftOperand].result; + break; + case 1: + massop->instructions[instr->rightOperand].rightOperand = massop->instructions[instr->leftOperand].result; + break; + case 2: + massop->instructions[instr->rightOperand].result = massop->instructions[instr->leftOperand].result; + break; + } + } + break; + case If: + if (instr->leftOperand != instr->rightOperand) { + if (massop->instructions[instr->leftOperand].result == massop->instructions[instr->rightOperand].result) { + index += instr->result; + } + } + break; + case IfValue: + if (instr->leftOperand != instr->rightOperand) { + if (massop->instructions[instr->rightOperand].result == instr->rightOperand) { + index += instr->result; + } + } + break; + default: + switch (instr->type) { + case Double: + switch (instr->code) { + case Create: + instr->result = (uint32_t) BU_Double_New(); + break; + case Destroy: + BU_Double_Destroy((double_t*)instr->leftOperand); + break; + case Copy: + instr->result = (uint32_t) BU_Double_Copy((double_t*)instr->leftOperand); + break; + case Set: + BU_Double_Set((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); + break; + case Add: + BU_Double_Add((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); + break; + case Sub: + BU_Double_Sub((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); + break; + case Mul: + BU_Double_Mul((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); + break; + case Div: + BU_Double_Div((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); + break; + case Compare: + instr->result = BU_Double_Compare((double_t*)instr->leftOperand, (double_t*)instr->rightOperand); + break; + } + break; + case Long: + switch (instr->code) { + case Create: + instr->result = (uint32_t) BU_Long_New(); + break; + case Destroy: + BU_Long_Destroy((int64_t*)instr->leftOperand); + break; + case Copy: + instr->result = (uint32_t) BU_Long_Copy((int64_t*)instr->leftOperand); + break; + case Set: + BU_Long_Set((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); + break; + case Add: + BU_Long_Add((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); + break; + case Sub: + BU_Long_Sub((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); + break; + case Mul: + BU_Long_Mul((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); + break; + case Div: + BU_Long_Div((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); + break; + case Compare: + instr->result = BU_Long_Compare((int64_t*)instr->leftOperand, (int64_t*)instr->rightOperand); + break; + } + break; + } + } + } +} diff --git a/Utility/MassOp.h b/Utility/MassOp.h index b0d41ce..8de5ef8 100644 --- a/Utility/MassOp.h +++ b/Utility/MassOp.h @@ -1,107 +1,107 @@ -// Blitz - Steam wrapper for Blitz. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include "Type\Double.h" - -enum MassOpType { - Long = 0, - Double = 1, - - Vector2 = 10, - Vector3 = 11, -}; - -enum MassOpCode { - Create = 0, - Destroy = 1, - Copy = 2, - TempCreate = 5, - TempCopy = 6, - TempCleanup = 7, - - Set = 10, - Add = 11, - Sub = 12, - Mul = 13, - Div = 14, - Compare = 15, - - // Special OPCodes (Control MassOp) - // Goto - Go to a specific intruction - // oper_l = target massop index - GoTo = 249, - // SetOpCode - Change OpCode at position - // oper_l = target massop index - // oper_r = new OpCode - SetOpCode = 250, - // CopyLeft - Copy oper_l to new MassOp instruction. - // oper_l = source massop index - // oper_r = target massop index - // out = target position (0/oper_l, 1/oper_r, 2/out) - CopyLeft = 251, - // CopyRight - Copy oper_r to new MassOp instruction. - // oper_l = source massop index - // oper_r = target massop index - // out = target position (0/oper_l, 1/oper_r, 2/out) - CopyRight = 252, - // CopyOut - Copy out to new MassOp instruction. - // oper_l = source massop index - // oper_r = target massop index - // out = target position (0/oper_l, 1/oper_r, 2/out) - CopyOut = 253, - // If - If the result of index oper_l is equal to index oper_r, skip out instructions. - // oper_l = source massop index - // oper_r = target massop index - // out = instructions to skip - If = 254, - // IfValue - If the result of index oper_l is equal to oper_r, skip out instructions. - // oper_l = source massop index - // oper_r = value to compare with - // out = instructions to skip - IfValue = 255 -}; - -struct BlitzBank { - uint32_t identifier; - uint32_t address; - uint32_t size; -}; - -struct MassOpInstruction { - uint8_t type; - uint8_t code; - uint32_t leftOperand, rightOperand; - uint32_t result; -}; - -struct MassOp { - MassOp(uint32_t length); - ~MassOp(); - - uint32_t length; - MassOpInstruction* instructions; -}; - -DLL_FUNCTION(MassOp*) BU_MassOp_Create(uint32_t length); -#pragma comment(linker, "/EXPORT:BU_MassOp_Create=_BU_MassOp_Create@4") -DLL_FUNCTION(void) BU_MassOp_Destroy(MassOp* massop); -#pragma comment(linker, "/EXPORT:BU_MassOp_Destroy=_BU_MassOp_Destroy@4") -DLL_FUNCTION(void) BU_MassOp_Instruction(MassOp* massop, uint32_t index, MassOpType type, MassOpCode code, intptr_t leftOperand, intptr_t rightOperand, intptr_t result); -#pragma comment(linker, "/EXPORT:BU_MassOp_Instruction=_BU_MassOp_Instruction@28") -DLL_FUNCTION(void) BU_MassOp_Run(MassOp* massop); +// Blitz - Steam wrapper for Blitz. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include "Type\Double.h" + +enum MassOpType { + Long = 0, + Double = 1, + + Vector2 = 10, + Vector3 = 11, +}; + +enum MassOpCode { + Create = 0, + Destroy = 1, + Copy = 2, + TempCreate = 5, + TempCopy = 6, + TempCleanup = 7, + + Set = 10, + Add = 11, + Sub = 12, + Mul = 13, + Div = 14, + Compare = 15, + + // Special OPCodes (Control MassOp) + // Goto - Go to a specific intruction + // oper_l = target massop index + GoTo = 249, + // SetOpCode - Change OpCode at position + // oper_l = target massop index + // oper_r = new OpCode + SetOpCode = 250, + // CopyLeft - Copy oper_l to new MassOp instruction. + // oper_l = source massop index + // oper_r = target massop index + // out = target position (0/oper_l, 1/oper_r, 2/out) + CopyLeft = 251, + // CopyRight - Copy oper_r to new MassOp instruction. + // oper_l = source massop index + // oper_r = target massop index + // out = target position (0/oper_l, 1/oper_r, 2/out) + CopyRight = 252, + // CopyOut - Copy out to new MassOp instruction. + // oper_l = source massop index + // oper_r = target massop index + // out = target position (0/oper_l, 1/oper_r, 2/out) + CopyOut = 253, + // If - If the result of index oper_l is equal to index oper_r, skip out instructions. + // oper_l = source massop index + // oper_r = target massop index + // out = instructions to skip + If = 254, + // IfValue - If the result of index oper_l is equal to oper_r, skip out instructions. + // oper_l = source massop index + // oper_r = value to compare with + // out = instructions to skip + IfValue = 255 +}; + +struct BlitzBank { + uint32_t identifier; + uint32_t address; + uint32_t size; +}; + +struct MassOpInstruction { + uint8_t type; + uint8_t code; + uint32_t leftOperand, rightOperand; + uint32_t result; +}; + +struct MassOp { + MassOp(uint32_t length); + ~MassOp(); + + uint32_t length; + MassOpInstruction* instructions; +}; + +DLL_FUNCTION(MassOp*) BU_MassOp_Create(uint32_t length); +#pragma comment(linker, "/EXPORT:BU_MassOp_Create=_BU_MassOp_Create@4") +DLL_FUNCTION(void) BU_MassOp_Destroy(MassOp* massop); +#pragma comment(linker, "/EXPORT:BU_MassOp_Destroy=_BU_MassOp_Destroy@4") +DLL_FUNCTION(void) BU_MassOp_Instruction(MassOp* massop, uint32_t index, MassOpType type, MassOpCode code, intptr_t leftOperand, intptr_t rightOperand, intptr_t result); +#pragma comment(linker, "/EXPORT:BU_MassOp_Instruction=_BU_MassOp_Instruction@28") +DLL_FUNCTION(void) BU_MassOp_Run(MassOp* massop); #pragma comment(linker, "/EXPORT:BU_MassOp_Run=_BU_MassOp_Run@4") \ No newline at end of file diff --git a/Utility/WindowMessageHandler.cpp b/Utility/WindowMessageHandler.cpp index 31cb97f..ff907f2 100644 --- a/Utility/WindowMessageHandler.cpp +++ b/Utility/WindowMessageHandler.cpp @@ -1,118 +1,118 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "WindowMessageHandler.h" - -std::list* WindowMessageHandler_List; - -void BU_WindowMessageHandler_OnProcessAttach() { - WindowMessageHandler_List = new std::list(); -} - -void BU_WindowMessageHandler_OnProcessDetach() { - for (auto iterator = WindowMessageHandler_List->begin(), end = WindowMessageHandler_List->end(); iterator != end; iterator++) { - BU_WindowMessageHandler_Uninstall(iterator->hwnd); - } - - WindowMessageHandler_List->clear(); - delete WindowMessageHandler_List; -} - -LRESULT CALLBACK BU_WindowMessageHandler_Procedure(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); - if (UserData) { - switch (uMsg) { - case WM_SIZE: - UserData->WindowWasResized = true; - UserData->WindowClientWidth = lParam & 0xFFFF; - UserData->WindowClientHeight = lParam & 0xFFFF0000 >> 16; - - return CallWindowProc(UserData->oWindowProcedure, hwnd, uMsg, wParam, lParam); - break; - - case WM_CLOSE: - UserData->DestroyCount++; - return false; - - case WM_DESTROY: - UserData->CloseCount++; - return false; - - default: - return CallWindowProc(UserData->oWindowProcedure, hwnd, uMsg, wParam, lParam); - } - } else { - return DefWindowProc(hwnd, uMsg, wParam, lParam); - } -} - -DLL_FUNCTION(void) BU_WindowMessageHandler_Install(HWND hwnd) -{ - WindowUserData* UserData = new WindowUserData; - ZeroMemory(UserData, sizeof(UserData)); - UserData->oWindowProcedure = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (LONG)&BU_WindowMessageHandler_Procedure); - UserData->oUserData = SetWindowLong(hwnd, GWL_USERDATA, (LONG)UserData); -} - -DLL_FUNCTION(void) BU_WindowMessageHandler_Uninstall(HWND hwnd) -{ - WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); - if (UserData) { - SetWindowLong(hwnd, GWL_USERDATA, UserData->oUserData); - SetWindowLong(hwnd, GWL_WNDPROC, (LONG)(UserData->oWindowProcedure)); - delete UserData; - } -} - -DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Resize(HWND hwnd, LPPOINT point) -{ - WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); - if (UserData) { - int toReturn = UserData->WindowWasResized; - point->x = UserData->WindowClientWidth; - point->y = UserData->WindowClientHeight; - UserData->WindowWasResized = false; - return toReturn; - } - return FALSE; -} - -DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Destroy(HWND hwnd) -{ - WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); - if (UserData) { - int toReturn = UserData->DestroyCount; - UserData->DestroyCount = 0; - return toReturn; - } - return 0; -} - -DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Close(HWND hwnd) -{ - if (hwnd) { - WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); - if (UserData) { - int toReturn = UserData->CloseCount; - UserData->CloseCount = 0; - return toReturn; - } - } - return 0; -} - - +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "WindowMessageHandler.h" + +std::list* WindowMessageHandler_List; + +void BU_WindowMessageHandler_OnProcessAttach() { + WindowMessageHandler_List = new std::list(); +} + +void BU_WindowMessageHandler_OnProcessDetach() { + for (auto iterator = WindowMessageHandler_List->begin(), end = WindowMessageHandler_List->end(); iterator != end; iterator++) { + BU_WindowMessageHandler_Uninstall(iterator->hwnd); + } + + WindowMessageHandler_List->clear(); + delete WindowMessageHandler_List; +} + +LRESULT CALLBACK BU_WindowMessageHandler_Procedure(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); + if (UserData) { + switch (uMsg) { + case WM_SIZE: + UserData->WindowWasResized = true; + UserData->WindowClientWidth = lParam & 0xFFFF; + UserData->WindowClientHeight = lParam & 0xFFFF0000 >> 16; + + return CallWindowProc(UserData->oWindowProcedure, hwnd, uMsg, wParam, lParam); + break; + + case WM_CLOSE: + UserData->DestroyCount++; + return false; + + case WM_DESTROY: + UserData->CloseCount++; + return false; + + default: + return CallWindowProc(UserData->oWindowProcedure, hwnd, uMsg, wParam, lParam); + } + } else { + return DefWindowProc(hwnd, uMsg, wParam, lParam); + } +} + +DLL_FUNCTION(void) BU_WindowMessageHandler_Install(HWND hwnd) +{ + WindowUserData* UserData = new WindowUserData; + ZeroMemory(UserData, sizeof(UserData)); + UserData->oWindowProcedure = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (LONG)&BU_WindowMessageHandler_Procedure); + UserData->oUserData = SetWindowLong(hwnd, GWL_USERDATA, (LONG)UserData); +} + +DLL_FUNCTION(void) BU_WindowMessageHandler_Uninstall(HWND hwnd) +{ + WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); + if (UserData) { + SetWindowLong(hwnd, GWL_USERDATA, UserData->oUserData); + SetWindowLong(hwnd, GWL_WNDPROC, (LONG)(UserData->oWindowProcedure)); + delete UserData; + } +} + +DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Resize(HWND hwnd, LPPOINT point) +{ + WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); + if (UserData) { + int toReturn = UserData->WindowWasResized; + point->x = UserData->WindowClientWidth; + point->y = UserData->WindowClientHeight; + UserData->WindowWasResized = false; + return toReturn; + } + return FALSE; +} + +DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Destroy(HWND hwnd) +{ + WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); + if (UserData) { + int toReturn = UserData->DestroyCount; + UserData->DestroyCount = 0; + return toReturn; + } + return 0; +} + +DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Close(HWND hwnd) +{ + if (hwnd) { + WindowUserData* UserData = (WindowUserData*)GetWindowLong(hwnd, GWL_USERDATA); + if (UserData) { + int toReturn = UserData->CloseCount; + UserData->CloseCount = 0; + return toReturn; + } + } + return 0; +} + + diff --git a/Utility/WindowMessageHandler.h b/Utility/WindowMessageHandler.h index fad7c5c..5225ca4 100644 --- a/Utility/WindowMessageHandler.h +++ b/Utility/WindowMessageHandler.h @@ -1,49 +1,49 @@ -// BlitzUtility - Expanding the normal Blitz functionality. -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your 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 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, see . - -#pragma once -#include "BlitzUtility.h" -#include - -struct WindowUserData { - HWND hwnd; - - WNDPROC oWindowProcedure; - LONG oUserData; - - // WM_SIZE - bool WindowWasResized; - uint32_t WindowClientWidth, WindowClientHeight; - - // WM_DESTROY, WM_CLOSE - uint32_t DestroyCount, CloseCount; -}; - - -void BU_WindowMessageHandler_OnProcessAttach(); -void BU_WindowMessageHandler_OnProcessDetach(); -LRESULT CALLBACK BU_WindowMessageHandler_Procedure(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); - -DLL_FUNCTION(void) BU_WindowMessageHandler_Install(HWND hwnd); -#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Install=_BU_WindowMessageHandler_Install@4") -DLL_FUNCTION(void) BU_WindowMessageHandler_Uninstall(HWND hwnd); -#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Uninstall=_BU_WindowMessageHandler_Uninstall@4") -DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Resize(HWND hwnd, LPPOINT point); -#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Message_Resize=_BU_WindowMessageHandler_Message_Resize@8") -DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Destroy(HWND hwnd); -#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Message_Destroy=_BU_WindowMessageHandler_Message_Destroy@4") -DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Close(HWND hwnd); +// BlitzUtility - Expanding the normal Blitz functionality. +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your 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 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, see . + +#pragma once +#include "BlitzUtility.h" +#include + +struct WindowUserData { + HWND hwnd; + + WNDPROC oWindowProcedure; + LONG oUserData; + + // WM_SIZE + bool WindowWasResized; + uint32_t WindowClientWidth, WindowClientHeight; + + // WM_DESTROY, WM_CLOSE + uint32_t DestroyCount, CloseCount; +}; + + +void BU_WindowMessageHandler_OnProcessAttach(); +void BU_WindowMessageHandler_OnProcessDetach(); +LRESULT CALLBACK BU_WindowMessageHandler_Procedure(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + +DLL_FUNCTION(void) BU_WindowMessageHandler_Install(HWND hwnd); +#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Install=_BU_WindowMessageHandler_Install@4") +DLL_FUNCTION(void) BU_WindowMessageHandler_Uninstall(HWND hwnd); +#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Uninstall=_BU_WindowMessageHandler_Uninstall@4") +DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Resize(HWND hwnd, LPPOINT point); +#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Message_Resize=_BU_WindowMessageHandler_Message_Resize@8") +DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Destroy(HWND hwnd); +#pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Message_Destroy=_BU_WindowMessageHandler_Message_Destroy@4") +DLL_FUNCTION(uint32_t) BU_WindowMessageHandler_Message_Close(HWND hwnd); #pragma comment(linker, "/EXPORT:BU_WindowMessageHandler_Message_Close=_BU_WindowMessageHandler_Message_Close@4") \ No newline at end of file