// ------------------------------------------------------------------------------------------------
#include "Common.hpp"
#include "Module.hpp"

// ------------------------------------------------------------------------------------------------
#include <cctype>
#include <cstdio>

// ------------------------------------------------------------------------------------------------
namespace SqMod {

// ------------------------------------------------------------------------------------------------
#define TCC_FUNC(p) reinterpret_cast< const void * >(p)

// ------------------------------------------------------------------------------------------------
static HSQUIRRELVM GetSqVM()
{
    return _SqVM;
}

// ------------------------------------------------------------------------------------------------
void RegisterAPI(StateHnd & s)
{
    // Make sure the state is valid and not relocated
    if (!s || s->mRelocated)
    {
        return;
    }
    // Specify whether this is a 64bit build
#ifdef _SQ64
    s.DefineSymbol("__SQ64", "1");
#endif // _SQ64
    // ctype.h
    s.AddSymbol("isalnum", TCC_FUNC(isalnum));
    s.AddSymbol("isalpha", TCC_FUNC(isalpha));
    s.AddSymbol("isblank", TCC_FUNC(isblank));
    s.AddSymbol("iscntrl", TCC_FUNC(iscntrl));
    s.AddSymbol("isdigit", TCC_FUNC(isdigit));
    s.AddSymbol("isgraph", TCC_FUNC(isgraph));
    s.AddSymbol("islower", TCC_FUNC(islower));
    s.AddSymbol("isprint", TCC_FUNC(isprint));
    s.AddSymbol("ispunct", TCC_FUNC(ispunct));
    s.AddSymbol("isspace", TCC_FUNC(isspace));
    s.AddSymbol("isupper", TCC_FUNC(isupper));
    s.AddSymbol("isxdigit", TCC_FUNC(isxdigit));
    // stdio.h
    s.AddSymbol("printf", TCC_FUNC(printf));
    // Helpers
    s.AddSymbol("get_sqvm", TCC_FUNC(GetSqVM));
    // VC:MP
    s.AddSymbol("vcGetServerVersion", TCC_FUNC(_Func->GetServerVersion));
    s.AddSymbol("vcGetServerSettings", TCC_FUNC(_Func->GetServerSettings));
    s.AddSymbol("vcExportFunctions", TCC_FUNC(_Func->ExportFunctions));
    s.AddSymbol("vcGetNumberOfPlugins", TCC_FUNC(_Func->GetNumberOfPlugins));
    s.AddSymbol("vcGetPluginInfo", TCC_FUNC(_Func->GetPluginInfo));
    s.AddSymbol("vcFindPlugin", TCC_FUNC(_Func->FindPlugin));
    s.AddSymbol("vcGetPluginExports", TCC_FUNC(_Func->GetPluginExports));
    s.AddSymbol("vcGetTime", TCC_FUNC(_Func->GetTime));
    s.AddSymbol("vcprintf", TCC_FUNC(_Func->printf));
    s.AddSymbol("vcSendCustomCommand", TCC_FUNC(_Func->SendCustomCommand));
    s.AddSymbol("vcSendClientMessage", TCC_FUNC(_Func->SendClientMessage));
    s.AddSymbol("vcSendGameMessage", TCC_FUNC(_Func->SendGameMessage));
    s.AddSymbol("vcSetServerName", TCC_FUNC(_Func->SetServerName));
    s.AddSymbol("vcGetServerName", TCC_FUNC(_Func->GetServerName));
    s.AddSymbol("vcSetMaxPlayers", TCC_FUNC(_Func->SetMaxPlayers));
    s.AddSymbol("vcGetMaxPlayers", TCC_FUNC(_Func->GetMaxPlayers));
    s.AddSymbol("vcSetServerPassword", TCC_FUNC(_Func->SetServerPassword));
    s.AddSymbol("vcGetServerPassword", TCC_FUNC(_Func->GetServerPassword));
    s.AddSymbol("vcSetGameModeText", TCC_FUNC(_Func->SetGameModeText));
    s.AddSymbol("vcGetGameModeText", TCC_FUNC(_Func->GetGameModeText));
    s.AddSymbol("vcShutdownServer", TCC_FUNC(_Func->ShutdownServer));
    s.AddSymbol("vcSetWorldBounds", TCC_FUNC(_Func->SetWorldBounds));
    s.AddSymbol("vcGetWorldBounds", TCC_FUNC(_Func->GetWorldBounds));
    s.AddSymbol("vcSetWastedSettings", TCC_FUNC(_Func->SetWastedSettings));
    s.AddSymbol("vcGetWastedSettings", TCC_FUNC(_Func->GetWastedSettings));
    s.AddSymbol("vcSetTimeRate", TCC_FUNC(_Func->SetTimeRate));
    s.AddSymbol("vcGetTimeRate", TCC_FUNC(_Func->GetTimeRate));
    s.AddSymbol("vcSetHour", TCC_FUNC(_Func->SetHour));
    s.AddSymbol("vcGetHour", TCC_FUNC(_Func->GetHour));
    s.AddSymbol("vcSetMinute", TCC_FUNC(_Func->SetMinute));
    s.AddSymbol("vcGetMinute", TCC_FUNC(_Func->GetMinute));
    s.AddSymbol("vcSetWeather", TCC_FUNC(_Func->SetWeather));
    s.AddSymbol("vcGetWeather", TCC_FUNC(_Func->GetWeather));
    s.AddSymbol("vcSetGravity", TCC_FUNC(_Func->SetGravity));
    s.AddSymbol("vcGetGravity", TCC_FUNC(_Func->GetGravity));
    s.AddSymbol("vcSetGamespeed", TCC_FUNC(_Func->SetGamespeed));
    s.AddSymbol("vcGetGamespeed", TCC_FUNC(_Func->GetGamespeed));
    s.AddSymbol("vcSetWaterLevel", TCC_FUNC(_Func->SetWaterLevel));
    s.AddSymbol("vcGetWaterLevel", TCC_FUNC(_Func->GetWaterLevel));
    s.AddSymbol("vcSetMaxHeight", TCC_FUNC(_Func->SetMaxHeight));
    s.AddSymbol("vcGetMaxHeight", TCC_FUNC(_Func->GetMaxHeight));
    s.AddSymbol("vcSetKillCmdDelay", TCC_FUNC(_Func->SetKillCmdDelay));
    s.AddSymbol("vcGetKillCmdDelay", TCC_FUNC(_Func->GetKillCmdDelay));
    s.AddSymbol("vcSetVehiclesForcedRespawnHeight", TCC_FUNC(_Func->SetVehiclesForcedRespawnHeight));
    s.AddSymbol("vcGetVehiclesForcedRespawnHeight", TCC_FUNC(_Func->GetVehiclesForcedRespawnHeight));
    s.AddSymbol("vcToggleSyncFrameLimiter", TCC_FUNC(_Func->ToggleSyncFrameLimiter));
    s.AddSymbol("vcEnabledSyncFrameLimiter", TCC_FUNC(_Func->EnabledSyncFrameLimiter));
    s.AddSymbol("vcToggleFrameLimiter", TCC_FUNC(_Func->ToggleFrameLimiter));
    s.AddSymbol("vcEnabledFrameLimiter", TCC_FUNC(_Func->EnabledFrameLimiter));
    s.AddSymbol("vcToggleTaxiBoostJump", TCC_FUNC(_Func->ToggleTaxiBoostJump));
    s.AddSymbol("vcEnabledTaxiBoostJump", TCC_FUNC(_Func->EnabledTaxiBoostJump));
    s.AddSymbol("vcToggleDriveOnWater", TCC_FUNC(_Func->ToggleDriveOnWater));
    s.AddSymbol("vcEnabledDriveOnWater", TCC_FUNC(_Func->EnabledDriveOnWater));
    s.AddSymbol("vcToggleFastSwitch", TCC_FUNC(_Func->ToggleFastSwitch));
    s.AddSymbol("vcEnabledFastSwitch", TCC_FUNC(_Func->EnabledFastSwitch));
    s.AddSymbol("vcToggleFriendlyFire", TCC_FUNC(_Func->ToggleFriendlyFire));
    s.AddSymbol("vcEnabledFriendlyFire", TCC_FUNC(_Func->EnabledFriendlyFire));
    s.AddSymbol("vcToggleDisableDriveby", TCC_FUNC(_Func->ToggleDisableDriveby));
    s.AddSymbol("vcEnabledDisableDriveby", TCC_FUNC(_Func->EnabledDisableDriveby));
    s.AddSymbol("vcTogglePerfectHandling", TCC_FUNC(_Func->TogglePerfectHandling));
    s.AddSymbol("vcEnabledPerfectHandling", TCC_FUNC(_Func->EnabledPerfectHandling));
    s.AddSymbol("vcToggleFlyingCars", TCC_FUNC(_Func->ToggleFlyingCars));
    s.AddSymbol("vcEnabledFlyingCars", TCC_FUNC(_Func->EnabledFlyingCars));
    s.AddSymbol("vcToggleJumpSwitch", TCC_FUNC(_Func->ToggleJumpSwitch));
    s.AddSymbol("vcEnabledJumpSwitch", TCC_FUNC(_Func->EnabledJumpSwitch));
    s.AddSymbol("vcToggleShowMarkers", TCC_FUNC(_Func->ToggleShowMarkers));
    s.AddSymbol("vcEnabledShowMarkers", TCC_FUNC(_Func->EnabledShowMarkers));
    s.AddSymbol("vcToggleOnlyShowTeamMarkers", TCC_FUNC(_Func->ToggleOnlyShowTeamMarkers));
    s.AddSymbol("vcEnabledOnlyShowTeamMarkers", TCC_FUNC(_Func->EnabledOnlyShowTeamMarkers));
    s.AddSymbol("vcToggleStuntBike", TCC_FUNC(_Func->ToggleStuntBike));
    s.AddSymbol("vcEnabledStuntBike", TCC_FUNC(_Func->EnabledStuntBike));
    s.AddSymbol("vcToggleShootInAir", TCC_FUNC(_Func->ToggleShootInAir));
    s.AddSymbol("vcEnabledShootInAir", TCC_FUNC(_Func->EnabledShootInAir));
    s.AddSymbol("vcToggleShowNametags", TCC_FUNC(_Func->ToggleShowNametags));
    s.AddSymbol("vcEnabledShowNametags", TCC_FUNC(_Func->EnabledShowNametags));
    s.AddSymbol("vcToggleJoinMessages", TCC_FUNC(_Func->ToggleJoinMessages));
    s.AddSymbol("vcEnabledJoinMessages", TCC_FUNC(_Func->EnabledJoinMessages));
    s.AddSymbol("vcToggleDeathMessages", TCC_FUNC(_Func->ToggleDeathMessages));
    s.AddSymbol("vcEnabledDeathMessages", TCC_FUNC(_Func->EnabledDeathMessages));
    s.AddSymbol("vcToggleChatTagsByDefaultEnabled", TCC_FUNC(_Func->ToggleChatTagsByDefaultEnabled));
    s.AddSymbol("vcEnabledChatTagsByDefault", TCC_FUNC(_Func->EnabledChatTagsByDefault));
    s.AddSymbol("vcCreateExplosion", TCC_FUNC(_Func->CreateExplosion));
    s.AddSymbol("vcPlaySound", TCC_FUNC(_Func->PlaySound));
    s.AddSymbol("vcHideMapObject", TCC_FUNC(_Func->HideMapObject));
    s.AddSymbol("vcShowMapObject", TCC_FUNC(_Func->ShowMapObject));
    s.AddSymbol("vcShowAllMapObjects", TCC_FUNC(_Func->ShowAllMapObjects));
    s.AddSymbol("vcSetWeaponDataValue", TCC_FUNC(_Func->SetWeaponDataValue));
    s.AddSymbol("vcGetWeaponDataValue", TCC_FUNC(_Func->GetWeaponDataValue));
    s.AddSymbol("vcResetWeaponDataValue", TCC_FUNC(_Func->ResetWeaponDataValue));
    s.AddSymbol("vcIsWeaponDataValueModified", TCC_FUNC(_Func->IsWeaponDataValueModified));
    s.AddSymbol("vcResetWeaponData", TCC_FUNC(_Func->ResetWeaponData));
    s.AddSymbol("vcResetAllWeaponData", TCC_FUNC(_Func->ResetAllWeaponData));
    s.AddSymbol("vcGetKeyBindUnusedSlot", TCC_FUNC(_Func->GetKeyBindUnusedSlot));
    s.AddSymbol("vcGetKeyBindData", TCC_FUNC(_Func->GetKeyBindData));
    s.AddSymbol("vcRegisterKeyBind", TCC_FUNC(_Func->RegisterKeyBind));
    s.AddSymbol("vcRemoveKeyBind", TCC_FUNC(_Func->RemoveKeyBind));
    s.AddSymbol("vcRemoveAllKeyBinds", TCC_FUNC(_Func->RemoveAllKeyBinds));
    s.AddSymbol("vcCreateCoordBlip", TCC_FUNC(_Func->CreateCoordBlip));
    s.AddSymbol("vcDestroyCoordBlip", TCC_FUNC(_Func->DestroyCoordBlip));
    s.AddSymbol("vcGetCoordBlipInfo", TCC_FUNC(_Func->GetCoordBlipInfo));
    s.AddSymbol("vcCreateSprite", TCC_FUNC(_Func->CreateSprite));
    s.AddSymbol("vcDestroySprite", TCC_FUNC(_Func->DestroySprite));
    s.AddSymbol("vcShowSprite", TCC_FUNC(_Func->ShowSprite));
    s.AddSymbol("vcHideSprite", TCC_FUNC(_Func->HideSprite));
    s.AddSymbol("vcMoveSprite", TCC_FUNC(_Func->MoveSprite));
    s.AddSymbol("vcSetSpriteCenter", TCC_FUNC(_Func->SetSpriteCenter));
    s.AddSymbol("vcRotateSprite", TCC_FUNC(_Func->RotateSprite));
    s.AddSymbol("vcSetSpriteAlpha", TCC_FUNC(_Func->SetSpriteAlpha));
    s.AddSymbol("vcSetSpriteRelativity", TCC_FUNC(_Func->SetSpriteRelativity));
    s.AddSymbol("vcCreateTextdraw", TCC_FUNC(_Func->CreateTextdraw));
    s.AddSymbol("vcDestroyTextdraw", TCC_FUNC(_Func->DestroyTextdraw));
    s.AddSymbol("vcShowTextdraw", TCC_FUNC(_Func->ShowTextdraw));
    s.AddSymbol("vcHideTextdraw", TCC_FUNC(_Func->HideTextdraw));
    s.AddSymbol("vcMoveTextdraw", TCC_FUNC(_Func->MoveTextdraw));
    s.AddSymbol("vcSetTextdrawColour", TCC_FUNC(_Func->SetTextdrawColour));
    s.AddSymbol("vcSetTextdrawRelativity", TCC_FUNC(_Func->SetTextdrawRelativity));
    s.AddSymbol("vcAddRadioStream", TCC_FUNC(_Func->AddRadioStream));
    s.AddSymbol("vcRemoveRadioStream", TCC_FUNC(_Func->RemoveRadioStream));
    s.AddSymbol("vcSetUseClasses", TCC_FUNC(_Func->SetUseClasses));
    s.AddSymbol("vcGetUseClasses", TCC_FUNC(_Func->GetUseClasses));
    s.AddSymbol("vcGetPlayerClass", TCC_FUNC(_Func->GetPlayerClass));
    s.AddSymbol("vcAddPlayerClass", TCC_FUNC(_Func->AddPlayerClass));
    s.AddSymbol("vcSetSpawnPlayerPos", TCC_FUNC(_Func->SetSpawnPlayerPos));
    s.AddSymbol("vcSetSpawnCameraPos", TCC_FUNC(_Func->SetSpawnCameraPos));
    s.AddSymbol("vcSetSpawnCameraLookAt", TCC_FUNC(_Func->SetSpawnCameraLookAt));
    s.AddSymbol("vcIsPlayerAdmin", TCC_FUNC(_Func->IsPlayerAdmin));
    s.AddSymbol("vcSetPlayerAdmin", TCC_FUNC(_Func->SetPlayerAdmin));
    s.AddSymbol("vcGetPlayerIP", TCC_FUNC(_Func->GetPlayerIP));
    s.AddSymbol("vcKickPlayer", TCC_FUNC(_Func->KickPlayer));
    s.AddSymbol("vcBanPlayer", TCC_FUNC(_Func->BanPlayer));
    s.AddSymbol("vcBanIP", TCC_FUNC(_Func->BanIP));
    s.AddSymbol("vcUnbanIP", TCC_FUNC(_Func->UnbanIP));
    s.AddSymbol("vcIsIPBanned", TCC_FUNC(_Func->IsIPBanned));
    s.AddSymbol("vcGetPlayerIDFromName", TCC_FUNC(_Func->GetPlayerIDFromName));
    s.AddSymbol("vcIsPlayerConnected", TCC_FUNC(_Func->IsPlayerConnected));
    s.AddSymbol("vcIsPlayerSpawned", TCC_FUNC(_Func->IsPlayerSpawned));
    s.AddSymbol("vcIsPlayerStreamedForPlayer", TCC_FUNC(_Func->IsPlayerStreamedForPlayer));
    s.AddSymbol("vcGetPlayerKey", TCC_FUNC(_Func->GetPlayerKey));
    s.AddSymbol("vcSetPlayerWorld", TCC_FUNC(_Func->SetPlayerWorld));
    s.AddSymbol("vcGetPlayerWorld", TCC_FUNC(_Func->GetPlayerWorld));
    s.AddSymbol("vcSetPlayerSecWorld", TCC_FUNC(_Func->SetPlayerSecWorld));
    s.AddSymbol("vcGetPlayerSecWorld", TCC_FUNC(_Func->GetPlayerSecWorld));
    s.AddSymbol("vcGetPlayerUniqueWorld", TCC_FUNC(_Func->GetPlayerUniqueWorld));
    s.AddSymbol("vcIsPlayerWorldCompatible", TCC_FUNC(_Func->IsPlayerWorldCompatible));
    s.AddSymbol("vcGetPlayerState", TCC_FUNC(_Func->GetPlayerState));
    s.AddSymbol("vcGetPlayerName", TCC_FUNC(_Func->GetPlayerName));
    s.AddSymbol("vcSetPlayerName", TCC_FUNC(_Func->SetPlayerName));
    s.AddSymbol("vcSetPlayerTeam", TCC_FUNC(_Func->SetPlayerTeam));
    s.AddSymbol("vcGetPlayerTeam", TCC_FUNC(_Func->GetPlayerTeam));
    s.AddSymbol("vcSetPlayerSkin", TCC_FUNC(_Func->SetPlayerSkin));
    s.AddSymbol("vcGetPlayerSkin", TCC_FUNC(_Func->GetPlayerSkin));
    s.AddSymbol("vcSetPlayerColour", TCC_FUNC(_Func->SetPlayerColour));
    s.AddSymbol("vcGetPlayerColour", TCC_FUNC(_Func->GetPlayerColour));
    s.AddSymbol("vcForcePlayerSpawn", TCC_FUNC(_Func->ForcePlayerSpawn));
    s.AddSymbol("vcForcePlayerSelect", TCC_FUNC(_Func->ForcePlayerSelect));
    s.AddSymbol("vcForceAllSelect", TCC_FUNC(_Func->ForceAllSelect));
    s.AddSymbol("vcGivePlayerMoney", TCC_FUNC(_Func->GivePlayerMoney));
    s.AddSymbol("vcSetPlayerMoney", TCC_FUNC(_Func->SetPlayerMoney));
    s.AddSymbol("vcGetPlayerMoney", TCC_FUNC(_Func->GetPlayerMoney));
    s.AddSymbol("vcSetPlayerScore", TCC_FUNC(_Func->SetPlayerScore));
    s.AddSymbol("vcGetPlayerScore", TCC_FUNC(_Func->GetPlayerScore));
    s.AddSymbol("vcGetPlayerPing", TCC_FUNC(_Func->GetPlayerPing));
    s.AddSymbol("vcIsPlayerTyping", TCC_FUNC(_Func->IsPlayerTyping));
    s.AddSymbol("vcGetPlayerFPS", TCC_FUNC(_Func->GetPlayerFPS));
    s.AddSymbol("vcGetPlayerUID", TCC_FUNC(_Func->GetPlayerUID));
    s.AddSymbol("vcGetPlayerWantedLevel", TCC_FUNC(_Func->GetPlayerWantedLevel));
    s.AddSymbol("vcSetPlayerHealth", TCC_FUNC(_Func->SetPlayerHealth));
    s.AddSymbol("vcGetPlayerHealth", TCC_FUNC(_Func->GetPlayerHealth));
    s.AddSymbol("vcSetPlayerArmour", TCC_FUNC(_Func->SetPlayerArmour));
    s.AddSymbol("vcGetPlayerArmour", TCC_FUNC(_Func->GetPlayerArmour));
    s.AddSymbol("vcSetPlayerImmunityFlags", TCC_FUNC(_Func->SetPlayerImmunityFlags));
    s.AddSymbol("vcGetPlayerImmunityFlags", TCC_FUNC(_Func->GetPlayerImmunityFlags));
    s.AddSymbol("vcSetPlayerPos", TCC_FUNC(_Func->SetPlayerPos));
    s.AddSymbol("vcGetPlayerPos", TCC_FUNC(_Func->GetPlayerPos));
    s.AddSymbol("vcSetPlayerSpeed", TCC_FUNC(_Func->SetPlayerSpeed));
    s.AddSymbol("vcGetPlayerSpeed", TCC_FUNC(_Func->GetPlayerSpeed));
    s.AddSymbol("vcAddPlayerSpeed", TCC_FUNC(_Func->AddPlayerSpeed));
    s.AddSymbol("vcSetPlayerHeading", TCC_FUNC(_Func->SetPlayerHeading));
    s.AddSymbol("vcGetPlayerHeading", TCC_FUNC(_Func->GetPlayerHeading));
    s.AddSymbol("vcSetPlayerAlpha", TCC_FUNC(_Func->SetPlayerAlpha));
    s.AddSymbol("vcGetPlayerAlpha", TCC_FUNC(_Func->GetPlayerAlpha));
    s.AddSymbol("vcGetPlayerOnFireStatus", TCC_FUNC(_Func->GetPlayerOnFireStatus));
    s.AddSymbol("vcGetPlayerCrouchStatus", TCC_FUNC(_Func->GetPlayerCrouchStatus));
    s.AddSymbol("vcGetPlayerAction", TCC_FUNC(_Func->GetPlayerAction));
    s.AddSymbol("vcGetPlayerGameKeys", TCC_FUNC(_Func->GetPlayerGameKeys));
    s.AddSymbol("vcGetPlayerAimPos", TCC_FUNC(_Func->GetPlayerAimPos));
    s.AddSymbol("vcGetPlayerAimDir", TCC_FUNC(_Func->GetPlayerAimDir));
    s.AddSymbol("vcPutPlayerInVehicle", TCC_FUNC(_Func->PutPlayerInVehicle));
    s.AddSymbol("vcRemovePlayerFromVehicle", TCC_FUNC(_Func->RemovePlayerFromVehicle));
    s.AddSymbol("vcGetPlayerInVehicleStatus", TCC_FUNC(_Func->GetPlayerInVehicleStatus));
    s.AddSymbol("vcGetPlayerInVehicleSlot", TCC_FUNC(_Func->GetPlayerInVehicleSlot));
    s.AddSymbol("vcGetPlayerVehicleID", TCC_FUNC(_Func->GetPlayerVehicleID));
    s.AddSymbol("vcTogglePlayerControllable", TCC_FUNC(_Func->TogglePlayerControllable));
    s.AddSymbol("vcEnabledPlayerControllable", TCC_FUNC(_Func->EnabledPlayerControllable));
    s.AddSymbol("vcTogglePlayerDriveby", TCC_FUNC(_Func->TogglePlayerDriveby));
    s.AddSymbol("vcEnabledPlayerDriveby", TCC_FUNC(_Func->EnabledPlayerDriveby));
    s.AddSymbol("vcTogglePlayerWhiteScanlines", TCC_FUNC(_Func->TogglePlayerWhiteScanlines));
    s.AddSymbol("vcEnabledPlayerWhiteScanlines", TCC_FUNC(_Func->EnabledPlayerWhiteScanlines));
    s.AddSymbol("vcTogglePlayerGreenScanlines", TCC_FUNC(_Func->TogglePlayerGreenScanlines));
    s.AddSymbol("vcEnabledPlayerGreenScanlines", TCC_FUNC(_Func->EnabledPlayerGreenScanlines));
    s.AddSymbol("vcTogglePlayerWidescreen", TCC_FUNC(_Func->TogglePlayerWidescreen));
    s.AddSymbol("vcEnabledPlayerWidescreen", TCC_FUNC(_Func->EnabledPlayerWidescreen));
    s.AddSymbol("vcTogglePlayerShowMarkers", TCC_FUNC(_Func->TogglePlayerShowMarkers));
    s.AddSymbol("vcEnabledPlayerShowMarkers", TCC_FUNC(_Func->EnabledPlayerShowMarkers));
    s.AddSymbol("vcTogglePlayerAttackPriv", TCC_FUNC(_Func->TogglePlayerAttackPriv));
    s.AddSymbol("vcEnabledPlayerAttackPriv", TCC_FUNC(_Func->EnabledPlayerAttackPriv));
    s.AddSymbol("vcTogglePlayerHasMarker", TCC_FUNC(_Func->TogglePlayerHasMarker));
    s.AddSymbol("vcEnabledPlayerHasMarker", TCC_FUNC(_Func->EnabledPlayerHasMarker));
    s.AddSymbol("vcTogglePlayerChatTagsEnabled", TCC_FUNC(_Func->TogglePlayerChatTagsEnabled));
    s.AddSymbol("vcEnabledPlayerChatTags", TCC_FUNC(_Func->EnabledPlayerChatTags));
    s.AddSymbol("vcTogglePlayerDrunkEffects", TCC_FUNC(_Func->TogglePlayerDrunkEffects));
    s.AddSymbol("vcEnabledPlayerDrunkEffects", TCC_FUNC(_Func->EnabledPlayerDrunkEffects));
    s.AddSymbol("vcGivePlayerWeapon", TCC_FUNC(_Func->GivePlayerWeapon));
    s.AddSymbol("vcSetPlayerWeapon", TCC_FUNC(_Func->SetPlayerWeapon));
    s.AddSymbol("vcGetPlayerWeapon", TCC_FUNC(_Func->GetPlayerWeapon));
    s.AddSymbol("vcGetPlayerWeaponAmmo", TCC_FUNC(_Func->GetPlayerWeaponAmmo));
    s.AddSymbol("vcSetPlayerWeaponSlot", TCC_FUNC(_Func->SetPlayerWeaponSlot));
    s.AddSymbol("vcGetPlayerWeaponSlot", TCC_FUNC(_Func->GetPlayerWeaponSlot));
    s.AddSymbol("vcGetPlayerWeaponAtSlot", TCC_FUNC(_Func->GetPlayerWeaponAtSlot));
    s.AddSymbol("vcGetPlayerAmmoAtSlot", TCC_FUNC(_Func->GetPlayerAmmoAtSlot));
    s.AddSymbol("vcRemovePlayerWeapon", TCC_FUNC(_Func->RemovePlayerWeapon));
    s.AddSymbol("vcRemoveAllWeapons", TCC_FUNC(_Func->RemoveAllWeapons));
    s.AddSymbol("vcSetCameraPosition", TCC_FUNC(_Func->SetCameraPosition));
    s.AddSymbol("vcRestoreCamera", TCC_FUNC(_Func->RestoreCamera));
    s.AddSymbol("vcIsCameraLocked", TCC_FUNC(_Func->IsCameraLocked));
    s.AddSymbol("vcSetPlayerAnimation", TCC_FUNC(_Func->SetPlayerAnimation));
    s.AddSymbol("vcSetPlayerWantedLevel", TCC_FUNC(_Func->SetPlayerWantedLevel));
    s.AddSymbol("vcGetPlayerStandingOnVehicle", TCC_FUNC(_Func->GetPlayerStandingOnVehicle));
    s.AddSymbol("vcGetPlayerStandingOnObject", TCC_FUNC(_Func->GetPlayerStandingOnObject));
    s.AddSymbol("vcIsPlayerAway", TCC_FUNC(_Func->IsPlayerAway));
    s.AddSymbol("vcGetPlayerSpectateTarget", TCC_FUNC(_Func->GetPlayerSpectateTarget));
    s.AddSymbol("vcSetPlayerSpectateTarget", TCC_FUNC(_Func->SetPlayerSpectateTarget));
    s.AddSymbol("vcRedirectPlayerToServer", TCC_FUNC(_Func->RedirectPlayerToServer));
    s.AddSymbol("vcCreateVehicle", TCC_FUNC(_Func->CreateVehicle));
    s.AddSymbol("vcDeleteVehicle", TCC_FUNC(_Func->DeleteVehicle));
    s.AddSymbol("vcGetVehicleSyncSource", TCC_FUNC(_Func->GetVehicleSyncSource));
    s.AddSymbol("vcGetVehicleSyncType", TCC_FUNC(_Func->GetVehicleSyncType));
    s.AddSymbol("vcIsVehicleStreamedForPlayer", TCC_FUNC(_Func->IsVehicleStreamedForPlayer));
    s.AddSymbol("vcSetVehicleWorld", TCC_FUNC(_Func->SetVehicleWorld));
    s.AddSymbol("vcGetVehicleWorld", TCC_FUNC(_Func->GetVehicleWorld));
    s.AddSymbol("vcGetVehicleModel", TCC_FUNC(_Func->GetVehicleModel));
    s.AddSymbol("vcGetVehicleOccupant", TCC_FUNC(_Func->GetVehicleOccupant));
    s.AddSymbol("vcRespawnVehicle", TCC_FUNC(_Func->RespawnVehicle));
    s.AddSymbol("vcSetVehicleImmunityFlags", TCC_FUNC(_Func->SetVehicleImmunityFlags));
    s.AddSymbol("vcGetVehicleImmunityFlags", TCC_FUNC(_Func->GetVehicleImmunityFlags));
    s.AddSymbol("vcKillVehicle", TCC_FUNC(_Func->KillVehicle));
    s.AddSymbol("vcIsVehicleWrecked", TCC_FUNC(_Func->IsVehicleWrecked));
    s.AddSymbol("vcSetVehiclePos", TCC_FUNC(_Func->SetVehiclePos));
    s.AddSymbol("vcGetVehiclePos", TCC_FUNC(_Func->GetVehiclePos));
    s.AddSymbol("vcSetVehicleRot", TCC_FUNC(_Func->SetVehicleRot));
    s.AddSymbol("vcSetVehicleRotEuler", TCC_FUNC(_Func->SetVehicleRotEuler));
    s.AddSymbol("vcGetVehicleRot", TCC_FUNC(_Func->GetVehicleRot));
    s.AddSymbol("vcGetVehicleRotEuler", TCC_FUNC(_Func->GetVehicleRotEuler));
    s.AddSymbol("vcSetVehicleSpeed", TCC_FUNC(_Func->SetVehicleSpeed));
    s.AddSymbol("vcGetVehicleSpeed", TCC_FUNC(_Func->GetVehicleSpeed));
    s.AddSymbol("vcAddVehicleSpeed", TCC_FUNC(_Func->AddVehicleSpeed));
    s.AddSymbol("vcSetVehicleRelSpeed", TCC_FUNC(_Func->SetVehicleRelSpeed));
    s.AddSymbol("vcGetVehicleRelSpeed", TCC_FUNC(_Func->GetVehicleRelSpeed));
    s.AddSymbol("vcAddVehicleRelSpeed", TCC_FUNC(_Func->AddVehicleRelSpeed));
    s.AddSymbol("vcSetVehicleTurnSpeed", TCC_FUNC(_Func->SetVehicleTurnSpeed));
    s.AddSymbol("vcGetVehicleTurnSpeed", TCC_FUNC(_Func->GetVehicleTurnSpeed));
    s.AddSymbol("vcAddVehicleTurnSpeed", TCC_FUNC(_Func->AddVehicleTurnSpeed));
    s.AddSymbol("vcSetVehicleRelTurnSpeed", TCC_FUNC(_Func->SetVehicleRelTurnSpeed));
    s.AddSymbol("vcGetVehicleRelTurnSpeed", TCC_FUNC(_Func->GetVehicleRelTurnSpeed));
    s.AddSymbol("vcAddVehicleRelTurnSpeed", TCC_FUNC(_Func->AddVehicleRelTurnSpeed));
    s.AddSymbol("vcSetVehicleSpawnPos", TCC_FUNC(_Func->SetVehicleSpawnPos));
    s.AddSymbol("vcGetVehicleSpawnPos", TCC_FUNC(_Func->GetVehicleSpawnPos));
    s.AddSymbol("vcSetVehicleSpawnRot", TCC_FUNC(_Func->SetVehicleSpawnRot));
    s.AddSymbol("vcSetVehicleSpawnRotEuler", TCC_FUNC(_Func->SetVehicleSpawnRotEuler));
    s.AddSymbol("vcGetVehicleSpawnRot", TCC_FUNC(_Func->GetVehicleSpawnRot));
    s.AddSymbol("vcGetVehicleSpawnRotEuler", TCC_FUNC(_Func->GetVehicleSpawnRotEuler));
    s.AddSymbol("vcSetVehicleIdleRespawnTimer", TCC_FUNC(_Func->SetVehicleIdleRespawnTimer));
    s.AddSymbol("vcGetVehicleIdleRespawnTimer", TCC_FUNC(_Func->GetVehicleIdleRespawnTimer));
    s.AddSymbol("vcSetVehicleHealth", TCC_FUNC(_Func->SetVehicleHealth));
    s.AddSymbol("vcGetVehicleHealth", TCC_FUNC(_Func->GetVehicleHealth));
    s.AddSymbol("vcSetVehicleColour", TCC_FUNC(_Func->SetVehicleColour));
    s.AddSymbol("vcGetVehicleColour", TCC_FUNC(_Func->GetVehicleColour));
    s.AddSymbol("vcSetVehicleDoorsLocked", TCC_FUNC(_Func->SetVehicleDoorsLocked));
    s.AddSymbol("vcGetVehicleDoorsLocked", TCC_FUNC(_Func->GetVehicleDoorsLocked));
    s.AddSymbol("vcSetVehiclePartStatus", TCC_FUNC(_Func->SetVehiclePartStatus));
    s.AddSymbol("vcGetVehiclePartStatus", TCC_FUNC(_Func->GetVehiclePartStatus));
    s.AddSymbol("vcSetVehicleTyreStatus", TCC_FUNC(_Func->SetVehicleTyreStatus));
    s.AddSymbol("vcGetVehicleTyreStatus", TCC_FUNC(_Func->GetVehicleTyreStatus));
    s.AddSymbol("vcSetVehicleDamageData", TCC_FUNC(_Func->SetVehicleDamageData));
    s.AddSymbol("vcGetVehicleDamageData", TCC_FUNC(_Func->GetVehicleDamageData));
    s.AddSymbol("vcSetVehicleAlarm", TCC_FUNC(_Func->SetVehicleAlarm));
    s.AddSymbol("vcGetVehicleAlarm", TCC_FUNC(_Func->GetVehicleAlarm));
    s.AddSymbol("vcSetVehicleLights", TCC_FUNC(_Func->SetVehicleLights));
    s.AddSymbol("vcGetVehicleLights", TCC_FUNC(_Func->GetVehicleLights));
    s.AddSymbol("vcSetVehicleRadio", TCC_FUNC(_Func->SetVehicleRadio));
    s.AddSymbol("vcGetVehicleRadio", TCC_FUNC(_Func->GetVehicleRadio));
    s.AddSymbol("vcSetVehicleRadioLocked", TCC_FUNC(_Func->SetVehicleRadioLocked));
    s.AddSymbol("vcIsVehicleRadioLocked", TCC_FUNC(_Func->IsVehicleRadioLocked));
    s.AddSymbol("vcGetVehicleGhostState", TCC_FUNC(_Func->GetVehicleGhostState));
    s.AddSymbol("vcSetVehicleGhostState", TCC_FUNC(_Func->SetVehicleGhostState));
    s.AddSymbol("vcGetVehicleTurretRotation", TCC_FUNC(_Func->GetVehicleTurretRotation));
    s.AddSymbol("vcResetAllVehicleHandlings", TCC_FUNC(_Func->ResetAllVehicleHandlings));
    s.AddSymbol("vcExistsHandlingRule", TCC_FUNC(_Func->ExistsHandlingRule));
    s.AddSymbol("vcSetHandlingRule", TCC_FUNC(_Func->SetHandlingRule));
    s.AddSymbol("vcGetHandlingRule", TCC_FUNC(_Func->GetHandlingRule));
    s.AddSymbol("vcResetHandlingRule", TCC_FUNC(_Func->ResetHandlingRule));
    s.AddSymbol("vcResetHandling", TCC_FUNC(_Func->ResetHandling));
    s.AddSymbol("vcExistsInstHandlingRule", TCC_FUNC(_Func->ExistsInstHandlingRule));
    s.AddSymbol("vcSetInstHandlingRule", TCC_FUNC(_Func->SetInstHandlingRule));
    s.AddSymbol("vcGetInstHandlingRule", TCC_FUNC(_Func->GetInstHandlingRule));
    s.AddSymbol("vcResetInstHandlingRule", TCC_FUNC(_Func->ResetInstHandlingRule));
    s.AddSymbol("vcResetInstHandling", TCC_FUNC(_Func->ResetInstHandling));
    s.AddSymbol("vcCreatePickup", TCC_FUNC(_Func->CreatePickup));
    s.AddSymbol("vcDeletePickup", TCC_FUNC(_Func->DeletePickup));
    s.AddSymbol("vcIsPickupStreamedForPlayer", TCC_FUNC(_Func->IsPickupStreamedForPlayer));
    s.AddSymbol("vcSetPickupWorld", TCC_FUNC(_Func->SetPickupWorld));
    s.AddSymbol("vcGetPickupWorld", TCC_FUNC(_Func->GetPickupWorld));
    s.AddSymbol("vcPickupGetAlpha", TCC_FUNC(_Func->PickupGetAlpha));
    s.AddSymbol("vcPickupSetAlpha", TCC_FUNC(_Func->PickupSetAlpha));
    s.AddSymbol("vcPickupIsAutomatic", TCC_FUNC(_Func->PickupIsAutomatic));
    s.AddSymbol("vcPickupSetAutomatic", TCC_FUNC(_Func->PickupSetAutomatic));
    s.AddSymbol("vcSetPickupAutoTimer", TCC_FUNC(_Func->SetPickupAutoTimer));
    s.AddSymbol("vcGetPickupAutoTimer", TCC_FUNC(_Func->GetPickupAutoTimer));
    s.AddSymbol("vcPickupRefresh", TCC_FUNC(_Func->PickupRefresh));
    s.AddSymbol("vcPickupGetPos", TCC_FUNC(_Func->PickupGetPos));
    s.AddSymbol("vcPickupSetPos", TCC_FUNC(_Func->PickupSetPos));
    s.AddSymbol("vcPickupGetModel", TCC_FUNC(_Func->PickupGetModel));
    s.AddSymbol("vcPickupGetQuantity", TCC_FUNC(_Func->PickupGetQuantity));
    s.AddSymbol("vcCreateObject", TCC_FUNC(_Func->CreateObject));
    s.AddSymbol("vcDeleteObject", TCC_FUNC(_Func->DeleteObject));
    s.AddSymbol("vcIsObjectStreamedForPlayer", TCC_FUNC(_Func->IsObjectStreamedForPlayer));
    s.AddSymbol("vcGetObjectModel", TCC_FUNC(_Func->GetObjectModel));
    s.AddSymbol("vcSetObjectWorld", TCC_FUNC(_Func->SetObjectWorld));
    s.AddSymbol("vcGetObjectWorld", TCC_FUNC(_Func->GetObjectWorld));
    s.AddSymbol("vcSetObjectAlpha", TCC_FUNC(_Func->SetObjectAlpha));
    s.AddSymbol("vcGetObjectAlpha", TCC_FUNC(_Func->GetObjectAlpha));
    s.AddSymbol("vcMoveObjectTo", TCC_FUNC(_Func->MoveObjectTo));
    s.AddSymbol("vcMoveObjectBy", TCC_FUNC(_Func->MoveObjectBy));
    s.AddSymbol("vcSetObjectPos", TCC_FUNC(_Func->SetObjectPos));
    s.AddSymbol("vcGetObjectPos", TCC_FUNC(_Func->GetObjectPos));
    s.AddSymbol("vcRotObjectTo", TCC_FUNC(_Func->RotObjectTo));
    s.AddSymbol("vcRotObjectToEuler", TCC_FUNC(_Func->RotObjectToEuler));
    s.AddSymbol("vcRotObjectBy", TCC_FUNC(_Func->RotObjectBy));
    s.AddSymbol("vcRotObjectByEuler", TCC_FUNC(_Func->RotObjectByEuler));
    s.AddSymbol("vcGetObjectRot", TCC_FUNC(_Func->GetObjectRot));
    s.AddSymbol("vcGetObjectRotEuler", TCC_FUNC(_Func->GetObjectRotEuler));
    s.AddSymbol("vcSetObjectShotReport", TCC_FUNC(_Func->SetObjectShotReport));
    s.AddSymbol("vcIsObjectShotReport", TCC_FUNC(_Func->IsObjectShotReport));
    s.AddSymbol("vcSetObjectBumpReport", TCC_FUNC(_Func->SetObjectBumpReport));
    s.AddSymbol("vcIsObjectBumpReport", TCC_FUNC(_Func->IsObjectBumpReport));
    s.AddSymbol("vcToggleWallglitch", TCC_FUNC(_Func->ToggleWallglitch));
    s.AddSymbol("vcEnabledWallglitch", TCC_FUNC(_Func->EnabledWallglitch));
    s.AddSymbol("vcSetVehicleSiren", TCC_FUNC(_Func->SetVehicleSiren));
    s.AddSymbol("vcGetVehicleSiren", TCC_FUNC(_Func->GetVehicleSiren));
    s.AddSymbol("vcGetPlayerUID2", TCC_FUNC(_Func->GetPlayerUID2));
    s.AddSymbol("vcCreateCheckpoint", TCC_FUNC(_Func->CreateCheckpoint));
    s.AddSymbol("vcDeleteCheckpoint", TCC_FUNC(_Func->DeleteCheckpoint));
    s.AddSymbol("vcIsCheckpointStreamedForPlayer", TCC_FUNC(_Func->IsCheckpointStreamedForPlayer));
    s.AddSymbol("vcSetCheckpointWorld", TCC_FUNC(_Func->SetCheckpointWorld));
    s.AddSymbol("vcGetCheckpointWorld", TCC_FUNC(_Func->GetCheckpointWorld));
    s.AddSymbol("vcSetCheckpointColor", TCC_FUNC(_Func->SetCheckpointColor));
    s.AddSymbol("vcGetCheckpointColor", TCC_FUNC(_Func->GetCheckpointColor));
    s.AddSymbol("vcSetCheckpointPos", TCC_FUNC(_Func->SetCheckpointPos));
    s.AddSymbol("vcGetCheckpointPos", TCC_FUNC(_Func->GetCheckpointPos));
    s.AddSymbol("vcSetCheckpointRadius", TCC_FUNC(_Func->SetCheckpointRadius));
    s.AddSymbol("vcGetCheckpointRadius", TCC_FUNC(_Func->GetCheckpointRadius));
    s.AddSymbol("vcGetCheckpointOwner", TCC_FUNC(_Func->GetCheckpointOwner));
    s.AddSymbol("vcCreateSphere", TCC_FUNC(_Func->CreateSphere));
    s.AddSymbol("vcDeleteSphere", TCC_FUNC(_Func->DeleteSphere));
    s.AddSymbol("vcIsSphereStreamedForPlayer", TCC_FUNC(_Func->IsSphereStreamedForPlayer));
    s.AddSymbol("vcSetSphereWorld", TCC_FUNC(_Func->SetSphereWorld));
    s.AddSymbol("vcGetSphereWorld", TCC_FUNC(_Func->GetSphereWorld));
    s.AddSymbol("vcSetSphereColor", TCC_FUNC(_Func->SetSphereColor));
    s.AddSymbol("vcGetSphereColor", TCC_FUNC(_Func->GetSphereColor));
    s.AddSymbol("vcSetSpherePos", TCC_FUNC(_Func->SetSpherePos));
    s.AddSymbol("vcGetSpherePos", TCC_FUNC(_Func->GetSpherePos));
    s.AddSymbol("vcSetSphereRadius", TCC_FUNC(_Func->SetSphereRadius));
    s.AddSymbol("vcGetSphereRadius", TCC_FUNC(_Func->GetSphereRadius));
    s.AddSymbol("vcGetSphereOwner", TCC_FUNC(_Func->GetSphereOwner));
    // Squirrel Library
    s.AddSymbol("sq_open", TCC_FUNC(_SqAPI->open));
    s.AddSymbol("sq_newthread", TCC_FUNC(_SqAPI->newthread));
    s.AddSymbol("sq_seterrorhandler", TCC_FUNC(_SqAPI->seterrorhandler));
    s.AddSymbol("sq_close", TCC_FUNC(_SqAPI->close));
    s.AddSymbol("sq_setforeignptr", TCC_FUNC(_SqAPI->setforeignptr));
    s.AddSymbol("sq_getforeignptr", TCC_FUNC(_SqAPI->getforeignptr));
    s.AddSymbol("sq_setsharedforeignptr", TCC_FUNC(_SqAPI->setsharedforeignptr));
    s.AddSymbol("sq_getsharedforeignptr", TCC_FUNC(_SqAPI->getsharedforeignptr));
    s.AddSymbol("sq_setvmreleasehook", TCC_FUNC(_SqAPI->setvmreleasehook));
    s.AddSymbol("sq_getvmreleasehook", TCC_FUNC(_SqAPI->getvmreleasehook));
    s.AddSymbol("sq_setsharedreleasehook", TCC_FUNC(_SqAPI->setsharedreleasehook));
    s.AddSymbol("sq_getsharedreleasehook", TCC_FUNC(_SqAPI->getsharedreleasehook));
    s.AddSymbol("sq_setprintfunc", TCC_FUNC(_SqAPI->setprintfunc));
    s.AddSymbol("sq_getprintfunc", TCC_FUNC(_SqAPI->getprintfunc));
    s.AddSymbol("sq_geterrorfunc", TCC_FUNC(_SqAPI->geterrorfunc));
    s.AddSymbol("sq_suspendvm", TCC_FUNC(_SqAPI->suspendvm));
    s.AddSymbol("sq_wakeupvm", TCC_FUNC(_SqAPI->wakeupvm));
    s.AddSymbol("sq_getvmstate", TCC_FUNC(_SqAPI->getvmstate));
    s.AddSymbol("sq_getversion", TCC_FUNC(_SqAPI->getversion));
    s.AddSymbol("sq_compile", TCC_FUNC(_SqAPI->compile));
    s.AddSymbol("sq_compilebuffer", TCC_FUNC(_SqAPI->compilebuffer));
    s.AddSymbol("sq_enabledebuginfo", TCC_FUNC(_SqAPI->enabledebuginfo));
    s.AddSymbol("sq_notifyallexceptions", TCC_FUNC(_SqAPI->notifyallexceptions));
    s.AddSymbol("sq_setcompilererrorhandler", TCC_FUNC(_SqAPI->setcompilererrorhandler));
    s.AddSymbol("sq_push", TCC_FUNC(_SqAPI->push));
    s.AddSymbol("sq_pop", TCC_FUNC(_SqAPI->pop));
    s.AddSymbol("sq_poptop", TCC_FUNC(_SqAPI->poptop));
    s.AddSymbol("sq_remove", TCC_FUNC(_SqAPI->remove));
    s.AddSymbol("sq_gettop", TCC_FUNC(_SqAPI->gettop));
    s.AddSymbol("sq_settop", TCC_FUNC(_SqAPI->settop));
    s.AddSymbol("sq_reservestack", TCC_FUNC(_SqAPI->reservestack));
    s.AddSymbol("sq_cmp", TCC_FUNC(_SqAPI->cmp));
    s.AddSymbol("sq_move", TCC_FUNC(_SqAPI->move));
    s.AddSymbol("sq_newuserdata", TCC_FUNC(_SqAPI->newuserdata));
    s.AddSymbol("sq_newtable", TCC_FUNC(_SqAPI->newtable));
    s.AddSymbol("sq_newtableex", TCC_FUNC(_SqAPI->newtableex));
    s.AddSymbol("sq_newarray", TCC_FUNC(_SqAPI->newarray));
    s.AddSymbol("sq_newclosure", TCC_FUNC(_SqAPI->newclosure));
    s.AddSymbol("sq_setparamscheck", TCC_FUNC(_SqAPI->setparamscheck));
    s.AddSymbol("sq_bindenv", TCC_FUNC(_SqAPI->bindenv));
    s.AddSymbol("sq_setclosureroot", TCC_FUNC(_SqAPI->setclosureroot));
    s.AddSymbol("sq_getclosureroot", TCC_FUNC(_SqAPI->getclosureroot));
    s.AddSymbol("sq_pushstring", TCC_FUNC(_SqAPI->pushstring));
    s.AddSymbol("sq_pushfloat", TCC_FUNC(_SqAPI->pushfloat));
    s.AddSymbol("sq_pushinteger", TCC_FUNC(_SqAPI->pushinteger));
    s.AddSymbol("sq_pushbool", TCC_FUNC(_SqAPI->pushbool));
    s.AddSymbol("sq_pushuserpointer", TCC_FUNC(_SqAPI->pushuserpointer));
    s.AddSymbol("sq_pushnull", TCC_FUNC(_SqAPI->pushnull));
    s.AddSymbol("sq_pushthread", TCC_FUNC(_SqAPI->pushthread));
    s.AddSymbol("sq_gettype", TCC_FUNC(_SqAPI->gettype));
    s.AddSymbol("sq_typeof", TCC_FUNC(_SqAPI->typeof_));
    s.AddSymbol("sq_getsize", TCC_FUNC(_SqAPI->getsize));
    s.AddSymbol("sq_gethash", TCC_FUNC(_SqAPI->gethash));
    s.AddSymbol("sq_getbase", TCC_FUNC(_SqAPI->getbase));
    s.AddSymbol("sq_instanceof", TCC_FUNC(_SqAPI->instanceof));
    s.AddSymbol("sq_tostring", TCC_FUNC(_SqAPI->tostring));
    s.AddSymbol("sq_tobool", TCC_FUNC(_SqAPI->tobool));
    s.AddSymbol("sq_getstring", TCC_FUNC(_SqAPI->getstring));
    s.AddSymbol("sq_getinteger", TCC_FUNC(_SqAPI->getinteger));
    s.AddSymbol("sq_getfloat", TCC_FUNC(_SqAPI->getfloat));
    s.AddSymbol("sq_getbool", TCC_FUNC(_SqAPI->getbool));
    s.AddSymbol("sq_getthread", TCC_FUNC(_SqAPI->getthread));
    s.AddSymbol("sq_getuserpointer", TCC_FUNC(_SqAPI->getuserpointer));
    s.AddSymbol("sq_getuserdata", TCC_FUNC(_SqAPI->getuserdata));
    s.AddSymbol("sq_settypetag", TCC_FUNC(_SqAPI->settypetag));
    s.AddSymbol("sq_gettypetag", TCC_FUNC(_SqAPI->gettypetag));
    s.AddSymbol("sq_setreleasehook", TCC_FUNC(_SqAPI->setreleasehook));
    s.AddSymbol("sq_getreleasehook", TCC_FUNC(_SqAPI->getreleasehook));
    s.AddSymbol("sq_getscratchpad", TCC_FUNC(_SqAPI->getscratchpad));
    s.AddSymbol("sq_getfunctioninfo", TCC_FUNC(_SqAPI->getfunctioninfo));
    s.AddSymbol("sq_getclosureinfo", TCC_FUNC(_SqAPI->getclosureinfo));
    s.AddSymbol("sq_getclosurename", TCC_FUNC(_SqAPI->getclosurename));
    s.AddSymbol("sq_setnativeclosurename", TCC_FUNC(_SqAPI->setnativeclosurename));
    s.AddSymbol("sq_setinstanceup", TCC_FUNC(_SqAPI->setinstanceup));
    s.AddSymbol("sq_getinstanceup", TCC_FUNC(_SqAPI->getinstanceup));
    s.AddSymbol("sq_setclassudsize", TCC_FUNC(_SqAPI->setclassudsize));
    s.AddSymbol("sq_newclass", TCC_FUNC(_SqAPI->newclass));
    s.AddSymbol("sq_createinstance", TCC_FUNC(_SqAPI->createinstance));
    s.AddSymbol("sq_setattributes", TCC_FUNC(_SqAPI->setattributes));
    s.AddSymbol("sq_getattributes", TCC_FUNC(_SqAPI->getattributes));
    s.AddSymbol("sq_getclass", TCC_FUNC(_SqAPI->getclass));
    s.AddSymbol("sq_weakref", TCC_FUNC(_SqAPI->weakref));
    s.AddSymbol("sq_getdefaultdelegate", TCC_FUNC(_SqAPI->getdefaultdelegate));
    s.AddSymbol("sq_getmemberhandle", TCC_FUNC(_SqAPI->getmemberhandle));
    s.AddSymbol("sq_getbyhandle", TCC_FUNC(_SqAPI->getbyhandle));
    s.AddSymbol("sq_setbyhandle", TCC_FUNC(_SqAPI->setbyhandle));
    s.AddSymbol("sq_pushroottable", TCC_FUNC(_SqAPI->pushroottable));
    s.AddSymbol("sq_pushregistrytable", TCC_FUNC(_SqAPI->pushregistrytable));
    s.AddSymbol("sq_pushconsttable", TCC_FUNC(_SqAPI->pushconsttable));
    s.AddSymbol("sq_setroottable", TCC_FUNC(_SqAPI->setroottable));
    s.AddSymbol("sq_setconsttable", TCC_FUNC(_SqAPI->setconsttable));
    s.AddSymbol("sq_newslot", TCC_FUNC(_SqAPI->newslot));
    s.AddSymbol("sq_deleteslot", TCC_FUNC(_SqAPI->deleteslot));
    s.AddSymbol("sq_set", TCC_FUNC(_SqAPI->set));
    s.AddSymbol("sq_get", TCC_FUNC(_SqAPI->get));
    s.AddSymbol("sq_rawget", TCC_FUNC(_SqAPI->rawget));
    s.AddSymbol("sq_rawset", TCC_FUNC(_SqAPI->rawset));
    s.AddSymbol("sq_rawdeleteslot", TCC_FUNC(_SqAPI->rawdeleteslot));
    s.AddSymbol("sq_newmember", TCC_FUNC(_SqAPI->newmember));
    s.AddSymbol("sq_rawnewmember", TCC_FUNC(_SqAPI->rawnewmember));
    s.AddSymbol("sq_arrayappend", TCC_FUNC(_SqAPI->arrayappend));
    s.AddSymbol("sq_arraypop", TCC_FUNC(_SqAPI->arraypop));
    s.AddSymbol("sq_arrayresize", TCC_FUNC(_SqAPI->arrayresize));
    s.AddSymbol("sq_arrayreverse", TCC_FUNC(_SqAPI->arrayreverse));
    s.AddSymbol("sq_arrayremove", TCC_FUNC(_SqAPI->arrayremove));
    s.AddSymbol("sq_arrayinsert", TCC_FUNC(_SqAPI->arrayinsert));
    s.AddSymbol("sq_setdelegate", TCC_FUNC(_SqAPI->setdelegate));
    s.AddSymbol("sq_getdelegate", TCC_FUNC(_SqAPI->getdelegate));
    s.AddSymbol("sq_clone", TCC_FUNC(_SqAPI->clone));
    s.AddSymbol("sq_setfreevariable", TCC_FUNC(_SqAPI->setfreevariable));
    s.AddSymbol("sq_next", TCC_FUNC(_SqAPI->next));
    s.AddSymbol("sq_getweakrefval", TCC_FUNC(_SqAPI->getweakrefval));
    s.AddSymbol("sq_clear", TCC_FUNC(_SqAPI->clear));
    s.AddSymbol("sq_call", TCC_FUNC(_SqAPI->call));
    s.AddSymbol("sq_resume", TCC_FUNC(_SqAPI->resume));
    s.AddSymbol("sq_getlocal", TCC_FUNC(_SqAPI->getlocal));
    s.AddSymbol("sq_getcallee", TCC_FUNC(_SqAPI->getcallee));
    s.AddSymbol("sq_getfreevariable", TCC_FUNC(_SqAPI->getfreevariable));
    s.AddSymbol("sq_throwerror", TCC_FUNC(_SqAPI->throwerror));
    s.AddSymbol("sq_throwobject", TCC_FUNC(_SqAPI->throwobject));
    s.AddSymbol("sq_reseterror", TCC_FUNC(_SqAPI->reseterror));
    s.AddSymbol("sq_getlasterror", TCC_FUNC(_SqAPI->getlasterror));
    s.AddSymbol("sq_getstackobj", TCC_FUNC(_SqAPI->getstackobj));
    s.AddSymbol("sq_pushobject", TCC_FUNC(_SqAPI->pushobject));
    s.AddSymbol("sq_addref", TCC_FUNC(_SqAPI->addref));
    s.AddSymbol("sq_release", TCC_FUNC(_SqAPI->release));
    s.AddSymbol("sq_getrefcount", TCC_FUNC(_SqAPI->getrefcount));
    s.AddSymbol("sq_resetobject", TCC_FUNC(_SqAPI->resetobject));
    s.AddSymbol("sq_objtostring", TCC_FUNC(_SqAPI->objtostring));
    s.AddSymbol("sq_objtobool", TCC_FUNC(_SqAPI->objtobool));
    s.AddSymbol("sq_objtointeger", TCC_FUNC(_SqAPI->objtointeger));
    s.AddSymbol("sq_objtofloat", TCC_FUNC(_SqAPI->objtofloat));
    s.AddSymbol("sq_objtouserpointer", TCC_FUNC(_SqAPI->objtouserpointer));
    s.AddSymbol("sq_getobjtypetag", TCC_FUNC(_SqAPI->getobjtypetag));
    s.AddSymbol("sq_getvmrefcount", TCC_FUNC(_SqAPI->getvmrefcount));
    s.AddSymbol("sq_collectgarbage", TCC_FUNC(_SqAPI->collectgarbage));
    s.AddSymbol("sq_resurrectunreachable", TCC_FUNC(_SqAPI->resurrectunreachable));
    s.AddSymbol("sq_writeclosure", TCC_FUNC(_SqAPI->writeclosure));
    s.AddSymbol("sq_readclosure", TCC_FUNC(_SqAPI->readclosure));
    s.AddSymbol("sq_malloc", TCC_FUNC(_SqAPI->malloc));
    s.AddSymbol("sq_realloc", TCC_FUNC(_SqAPI->realloc));
    s.AddSymbol("sq_free", TCC_FUNC(_SqAPI->free));
    s.AddSymbol("sq_stackinfos", TCC_FUNC(_SqAPI->stackinfos));
    s.AddSymbol("sq_setdebughook", TCC_FUNC(_SqAPI->setdebughook));
    s.AddSymbol("sq_setnativedebughook", TCC_FUNC(_SqAPI->setnativedebughook));
    s.AddSymbol("sqstd_loadfile", TCC_FUNC(_SqAPI->loadfile));
    s.AddSymbol("sqstd_dofile", TCC_FUNC(_SqAPI->dofile));
    s.AddSymbol("sqstd_writeclosuretofile", TCC_FUNC(_SqAPI->writeclosuretofile));
    s.AddSymbol("sqstd_createblob", TCC_FUNC(_SqAPI->createblob));
    s.AddSymbol("sqstd_getblob", TCC_FUNC(_SqAPI->getblob));
    s.AddSymbol("sqstd_getblobsize", TCC_FUNC(_SqAPI->getblobsize));
    s.AddSymbol("sqstd_format", TCC_FUNC(_SqAPI->format));
    // Host Module
    s.AddSymbol("SqMod_GetSquirrelVM", TCC_FUNC(_SqMod->GetSquirrelVM));
    s.AddSymbol("SqMod_LogDbg", TCC_FUNC(_SqMod->LogDbg));
    s.AddSymbol("SqMod_LogUsr", TCC_FUNC(_SqMod->LogUsr));
    s.AddSymbol("SqMod_LogScs", TCC_FUNC(_SqMod->LogScs));
    s.AddSymbol("SqMod_LogInf", TCC_FUNC(_SqMod->LogInf));
    s.AddSymbol("SqMod_LogWrn", TCC_FUNC(_SqMod->LogWrn));
    s.AddSymbol("SqMod_LogErr", TCC_FUNC(_SqMod->LogErr));
    s.AddSymbol("SqMod_LogFtl", TCC_FUNC(_SqMod->LogFtl));
    s.AddSymbol("SqMod_LogSDbg", TCC_FUNC(_SqMod->LogSDbg));
    s.AddSymbol("SqMod_LogSUsr", TCC_FUNC(_SqMod->LogSUsr));
    s.AddSymbol("SqMod_LogSScs", TCC_FUNC(_SqMod->LogSScs));
    s.AddSymbol("SqMod_LogSInf", TCC_FUNC(_SqMod->LogSInf));
    s.AddSymbol("SqMod_LogSWrn", TCC_FUNC(_SqMod->LogSWrn));
    s.AddSymbol("SqMod_LogSErr", TCC_FUNC(_SqMod->LogSErr));
    s.AddSymbol("SqMod_LogSFtl", TCC_FUNC(_SqMod->LogSFtl));
    s.AddSymbol("SqMod_LoadScript", TCC_FUNC(_SqMod->LoadScript));
    s.AddSymbol("SqMod_GetSLongValue", TCC_FUNC(_SqMod->GetSLongValue));
    s.AddSymbol("SqMod_PushSLongObject", TCC_FUNC(_SqMod->PushSLongObject));
    s.AddSymbol("SqMod_GetULongValue", TCC_FUNC(_SqMod->GetULongValue));
    s.AddSymbol("SqMod_PushULongObject", TCC_FUNC(_SqMod->PushULongObject));
    s.AddSymbol("SqMod_GetCurrentSysTime", TCC_FUNC(_SqMod->GetCurrentSysTime));
    s.AddSymbol("SqMod_GetEpochTimeMicro", TCC_FUNC(_SqMod->GetEpochTimeMicro));
    s.AddSymbol("SqMod_GetEpochTimeMilli", TCC_FUNC(_SqMod->GetEpochTimeMilli));
    s.AddSymbol("SqMod_GetTimestamp", TCC_FUNC(_SqMod->GetTimestamp));
    s.AddSymbol("SqMod_PushTimestamp", TCC_FUNC(_SqMod->PushTimestamp));

}

} // Namespace:: SqMod