/*
 * Copyright (c) Contributors, http://opensimulator.org/
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the OpenSim Project nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/* Original code: Tedd Hansen */
using System;

namespace OpenSim.Region.ScriptEngine.LSOEngine.LSO
{
    public static class LSO_Enums
    {
        //public System.Collections.Generic.Dictionary<Byte, Type> OpCode_Add_Types;

        //LSO_Enums() {
        //    OpCode_Add_Types.Add(51, typeof(String));
        //    OpCode_Add_Types.Add(17, typeof(UInt32));
        //}

        [Serializable]
        public enum OpCode_Add_TypeDefs
        {
            String = 51,
            UInt32 = 17
        }

        [Serializable]
        public enum OpCode_Cast_TypeDefs
        {
            String = 19
        }

        [Serializable]
        public struct Key
        {
            public string KeyString;
        }

        [Serializable]
        public struct Vector
        {
            public UInt32 Z;
            public UInt32 Y;
            public UInt32 X;
        }

        [Serializable]
        public struct Rotation
        {
            public UInt32 S;
            public UInt32 Z;
            public UInt32 Y;
            public UInt32 X;
        }

        [Serializable]
        public enum Variable_Type_Codes
        {
            Void = 0,
            Integer = 1,
            Float = 2,
            String = 3,
            Key = 4,
            Vector = 5,
            Rotation = 6,
            List = 7,
            Null = 8
        }

        [Serializable]
        public enum Event_Mask_Values
        {
            state_entry = 0,
            state_exit = 1,
            touch_start = 2,
            touch = 3,
            touch_end = 4,
            collision_start = 5,
            collision = 6,
            collision_end = 7,
            land_collision_start = 8,
            land_collision = 9,
            land_collision_end = 10,
            timer = 11,
            listen = 12,
            on_rez = 13,
            sensor = 14,
            no_sensor = 15,
            control = 16,
            money = 17,
            email = 18,
            at_target = 19,
            not_at_target = 20,
            at_rot_target = 21,
            not_at_rot_target = 22,
            run_time_permissions = 23,
            changed = 24,
            attach = 25,
            dataserver = 26,
            link_message = 27,
            moving_start = 28,
            moving_end = 29,
            object_rez = 30,
            remote_data = 31,
            http_response = 32
        }

        [Serializable]
        public enum Operation_Table
        {
            NOOP = 0x0,
            POP = 0x1,
            POPS = 0x2,
            POPL = 0x3,
            POPV = 0x4,
            POPQ = 0x5,
            POPARG = 0x6,
            POPIP = 0x7,
            POPBP = 0x8,
            POPSP = 0x9,
            POPSLR = 0xa,
            DUP = 0x20,
            DUPS = 0x21,
            DUPL = 0x22,
            DUPV = 0x23,
            DUPQ = 0x24,
            STORE = 0x30,
            STORES = 0x31,
            STOREL = 0x32,
            STOREV = 0x33,
            STOREQ = 0x34,
            STOREG = 0x35,
            STOREGS = 0x36,
            STOREGL = 0x37,
            STOREGV = 0x38,
            STOREGQ = 0x39,
            LOADP = 0x3a,
            LOADSP = 0x3b,
            LOADLP = 0x3c,
            LOADVP = 0x3d,
            LOADQP = 0x3e,
            LOADGP = 0x3f,
            LOADGSP = 0x40,
            LOADGLP = 0x41,
            LOADGVP = 0x42,
            LOADGQP = 0x43,
            PUSH = 0x50,
            PUSHS = 0x51,
            PUSHL = 0x52,
            PUSHV = 0x53,
            PUSHQ = 0x54,
            PUSHG = 0x55,
            PUSHGS = 0x56,
            PUSHGL = 0x57,
            PUSHGV = 0x58,
            PUSHGQ = 0x59,
            PUSHIP = 0x5a,
            PUSHBP = 0x5b,
            PUSHSP = 0x5c,
            PUSHARGB = 0x5d,
            PUSHARGI = 0x5e,
            PUSHARGF = 0x5f,
            PUSHARGS = 0x60,
            PUSHARGV = 0x61,
            PUSHARGQ = 0x62,
            PUSHE = 0x63,
            PUSHEV = 0x64,
            PUSHEQ = 0x65,
            PUSHARGE = 0x66,
            ADD = 0x70,
            SUB = 0x71,
            MUL = 0x72,
            DIV = 0x73,
            MOD = 0x74,
            EQ = 0x75,
            NEQ = 0x76,
            LEQ = 0x77,
            GEQ = 0x78,
            LESS = 0x79,
            GREATER = 0x7a,
            BITAND = 0x7b,
            BITOR = 0x7c,
            BITXOR = 0x7d,
            BOOLAND = 0x7e,
            BOOLOR = 0x7f,
            NEG = 0x80,
            BITNOT = 0x81,
            BOOLNOT = 0x82,
            JUMP = 0x90,
            JUMPIF = 0x91,
            JUMPNIF = 0x92,
            STATE = 0x93,
            CALL = 0x94,
            RETURN = 0x95,
            CAST = 0xa0,
            STACKTOS = 0xb0,
            STACKTOL = 0xb1,
            PRINT = 0xc0,
            CALLLIB = 0xd0,
            CALLLIB_TWO_BYTE = 0xd1,
            SHL = 0xe0,
            SHR = 0xe1
        }

        [Serializable]
        public enum BuiltIn_Functions
        {
            llSin = 0,
            llCos = 1,
            llTan = 2,
            llAtan2 = 3,
            llSqrt = 4,
            llPow = 5,
            llAbs = 6,
            llFabs = 7,
            llFrand = 8,
            llFloor = 9,
            llCeil = 10,
            llRound = 11,
            llVecMag = 12,
            llVecNorm = 13,
            llVecDist = 14,
            llRot2Euler = 15,
            llEuler2Rot = 16,
            llAxes2Rot = 17,
            llRot2Fwd = 18,
            llRot2Left = 19,
            llRot2Up = 20,
            llRotBetween = 21,
            llWhisper = 22,
            llSay = 23,
            llShout = 24,
            llListen = 25,
            llListenControl = 26,
            llListenRemove = 27,
            llSensor = 28,
            llSensorRepeat = 29,
            llSensorRemove = 30,
            llDetectedName = 31,
            llDetectedKey = 32,
            llDetectedOwner = 33,
            llDetectedType = 34,
            llDetectedPos = 35,
            llDetectedVel = 36,
            llDetectedGrab = 37,
            llDetectedRot = 38,
            llDetectedGroup = 39,
            llDetectedLinkNumber = 40,
            llDie = 41,
            llGround = 42,
            llCloud = 43,
            llWind = 44,
            llSetStatus = 45,
            llGetStatus = 46,
            llSetScale = 47,
            llGetScale = 48,
            llSetColor = 49,
            llGetAlpha = 50,
            llSetAlpha = 51,
            llGetColor = 52,
            llSetTexture = 53,
            llScaleTexture = 54,
            llOffsetTexture = 55,
            llRotateTexture = 56,
            llGetTexture = 57,
            llSetPos = 58,
            llGetPos = 59,
            llGetLocalPos = 60,
            llSetRot = 61,
            llGetRot = 62,
            llGetLocalRot = 63,
            llSetForce = 64,
            llGetForce = 65,
            llTarget = 66,
            llTargetRemove = 67,
            llRotTarget = 68,
            llRotTargetRemove = 69,
            llMoveToTarget = 70,
            llStopMoveToTarget = 71,
            llApplyImpulse = 72,
            llApplyRotationalImpulse = 73,
            llSetTorque = 74,
            llGetTorque = 75,
            llSetForceAndTorque = 76,
            llGetVel = 77,
            llGetAccel = 78,
            llGetOmega = 79,
            llGetTimeOfDay = 80,
            llGetWallclock = 81,
            llGetTime = 82,
            llResetTime = 83,
            llGetAndResetTime = 84,
            llSound = 85,
            llPlaySound = 86,
            llLoopSound = 87,
            llLoopSoundMaster = 88,
            llLoopSoundSlave = 89,
            llPlaySoundSlave = 90,
            llTriggerSound = 91,
            llStopSound = 92,
            llPreloadSound = 93,
            llGetSubString = 94,
            llDeleteSubString = 95,
            llInsertString = 96,
            llToUpper = 97,
            llToLower = 98,
            llGiveMoney = 99,
            llMakeExplosion = 100,
            llMakeFountain = 101,
            llMakeSmoke = 102,
            llMakeFire = 103,
            llRezObject = 104,
            llLookAt = 105,
            llStopLookAt = 106,
            llSetTimerEvent = 107,
            llSleep = 108,
            llGetMass = 109,
            llCollisionFilter = 110,
            llTakeControls = 111,
            llReleaseControls = 112,
            llAttachToAvatar = 113,
            llDetachFromAvatar = 114,
            llTakeCamera = 115,
            llReleaseCamera = 116,
            llGetOwner = 117,
            llInstantMessage = 118,
            llEmail = 119,
            llGetNextEmail = 120,
            llGetKey = 121,
            llSetBuoyancy = 122,
            llSetHoverHeight = 123,
            llStopHover = 124,
            llMinEventDelay = 125,
            llSoundPreload = 126,
            llRotLookAt = 127,
            llStringLength = 128,
            llStartAnimation = 129,
            llStopAnimation = 130,
            llPointAt = 131,
            llStopPointAt = 132,
            llTargetOmega = 133,
            llGetStartParameter = 134,
            llGodLikeRezObject = 135,
            llRequestPermissions = 136,
            llGetPermissionsKey = 137,
            llGetPermissions = 138,
            llGetLinkNumber = 139,
            llSetLinkColor = 140,
            llCreateLink = 141,
            llBreakLink = 142,
            llBreakAllLinks = 143,
            llGetLinkKey = 144,
            llGetLinkName = 145,
            llGetInventoryNumber = 146,
            llGetInventoryName = 147,
            llSetScriptState = 148,
            llGetEnergy = 149,
            llGiveInventory = 150,
            llRemoveInventory = 151,
            llSetText = 152,
            llWater = 153,
            llPassTouches = 154,
            llRequestAgentData = 155,
            llRequestInventoryData = 156,
            llSetDamage = 157,
            llTeleportAgentHome = 158,
            llModifyLand = 159,
            llCollisionSound = 160,
            llCollisionSprite = 161,
            llGetAnimation = 162,
            llResetScript = 163,
            llMessageLinked = 164,
            llPushObject = 165,
            llPassCollisions = 166,
            llGetScriptName = 167,
            llGetNumberOfSides = 168,
            llAxisAngle2Rot = 169,
            llRot2Axis = 170,
            llRot2Angle = 171,
            llAcos = 172,
            llAsin = 173,
            llAngleBetween = 174,
            llGetInventoryKey = 175,
            llAllowInventoryDrop = 176,
            llGetSunDirection = 177,
            llGetTextureOffset = 178,
            llGetTextureScale = 179,
            llGetTextureRot = 180,
            llSubStringIndex = 181,
            llGetOwnerKey = 182,
            llGetCenterOfMass = 183,
            llListSort = 184,
            llGetListLength = 185,
            llList2Integer = 186,
            llList2Float = 187,
            llList2String = 188,
            llList2Key = 189,
            llList2Vector = 190,
            llList2Rot = 191,
            llList2List = 192,
            llDeleteSubList = 193,
            llGetListEntryType = 194,
            llList2CSV = 195,
            llCSV2List = 196,
            llListRandomize = 197,
            llList2ListStrided = 198,
            llGetRegionCorner = 199,
            llListInsertList = 200,
            llListFindList = 201,
            llGetObjectName = 202,
            llSetObjectName = 203,
            llGetDate = 204,
            llEdgeOfWorld = 205,
            llGetAgentInfo = 206,
            llAdjustSoundVolume = 207,
            llSetSoundQueueing = 208,
            llSetSoundRadius = 209,
            llKey2Name = 210,
            llSetTextureAnim = 211,
            llTriggerSoundLimited = 212,
            llEjectFromLand = 213,
            llParseString2List = 214,
            llOverMyLand = 215,
            llGetLandOwnerAt = 216,
            llGetNotecardLine = 217,
            llGetAgentSize = 218,
            llSameGroup = 219,
            llUnSit = 220,
            llGroundSlope = 221,
            llGroundNormal = 222,
            llGroundContour = 223,
            llGetAttached = 224,
            llGetFreeMemory = 225,
            llGetRegionName = 226,
            llGetRegionTimeDilation = 227,
            llGetRegionFPS = 228,
            llParticleSystem = 229,
            llGroundRepel = 230,
            llGiveInventoryList = 231,
            llSetVehicleType = 232,
            llSetVehicleFloatParam = 233,
            llSetVehicleVectorParam = 234,
            llSetVehicleRotationParam = 235,
            llSetVehicleFlags = 236,
            llRemoveVehicleFlags = 237,
            llSitTarget = 238,
            llAvatarOnSitTarget = 239,
            llAddToLandPassList = 240,
            llSetTouchText = 241,
            llSetSitText = 242,
            llSetCameraEyeOffset = 243,
            llSetCameraAtOffset = 244,
            llDumpList2String = 245,
            llScriptDanger = 246,
            llDialog = 247,
            llVolumeDetect = 248,
            llResetOtherScript = 249,
            llGetScriptState = 250,
            llRemoteLoadScript = 251,
            llSetRemoteScriptAccessPin = 252,
            llRemoteLoadScriptPin = 253,
            llOpenRemoteDataChannel = 254,
            llSendRemoteData = 255,
            llRemoteDataReply = 256,
            llCloseRemoteDataChannel = 257,
            llMD5String = 258,
            llSetPrimitiveParams = 259,
            llStringToBase64 = 260,
            llBase64ToString = 261,
            llXorBase64Strings = 262,
            llRemoteDataSetRegion = 263,
            llLog10 = 264,
            llLog = 265,
            llGetAnimationList = 266,
            llSetParcelMusicURL = 267,
            llGetRootPosition = 268,
            llGetRootRotation = 269,
            llGetObjectDesc = 270,
            llSetObjectDesc = 271,
            llGetCreator = 272,
            llGetTimestamp = 273,
            llSetLinkAlpha = 274,
            llGetNumberOfPrims = 275,
            llGetNumberOfNotecardLines = 276,
            llGetBoundingBox = 277,
            llGetGeometricCenter = 278,
            llGetPrimitiveParams = 279,
            llIntegerToBase64 = 280,
            llBase64ToInteger = 281,
            llGetGMTclock = 282,
            llGetSimulatorHostname = 283,
            llSetLocalRot = 284,
            llParseStringKeepNulls = 285,
            llRezAtRoot = 286,
            llGetObjectPermMask = 287,
            llSetObjectPermMask = 288,
            llGetInventoryPermMask = 289,
            llSetInventoryPermMask = 290,
            llGetInventoryCreator = 291,
            llOwnerSay = 292,
            llRequestSimulatorData = 293,
            llForceMouselook = 294,
            llGetObjectMass = 295,
            llListReplaceList = 296,
            llLoadURL = 297,
            llParcelMediaCommandList = 298,
            llParcelMediaQuery = 299,
            llModPow = 300,
            llGetInventoryType = 301,
            llSetPayPrice = 302,
            llGetCameraPos = 303,
            llGetCameraRot = 304,
            llSetPrimURL = 305,
            llRefreshPrimURL = 306,
            llEscapeURL = 307,
            llUnescapeURL = 308,
            llMapDestination = 309,
            llAddToLandBanList = 310,
            llRemoveFromLandPassList = 311,
            llRemoveFromLandBanList = 312,
            llSetCameraParams = 313,
            llClearCameraParams = 314,
            llListStatistics = 315,
            llGetUnixTime = 316,
            llGetParcelFlags = 317,
            llGetRegionFlags = 318,
            llXorBase64StringsCorrect = 319,
            llHTTPRequest = 320,
            llResetLandBanList = 321,
            llResetLandPassList = 322,
            llGetParcelPrimCount = 323,
            llGetParcelPrimOwners = 324,
            llGetObjectPrimCount = 325,
            llGetParcelMaxPrims = 326,
            llGetParcelDetails = 327
        }
    }
}
