    rem 3DMaths Functionality

    rem Indexes for vectors
    Vector2Number=1
    Vector3Number=2
    Vector4Number=3
    Vector3Eye=4
    Vector3At=5
    Vector3Up=6

    rem Indexes for matrices
    Matrix4Number=7
    Matrix4Projection=8
    Matrix4View=9
    Matrix4World=10

    rem Standard values
    Width as float=0.0+rnd(100)
    Height as float=0.0+rnd(100)
    Near as float=rnd(100)/100.0
    Far as float=rnd(100)/100.0
    FOV as float=0.0+rnd(90)
    Aspect as float=rnd(100)/100.0
    PlaneA as float=rnd(100)/100.0
    PlaneB as float=rnd(100)/100.0
    PlaneC as float=rnd(100)/100.0
    PlaneD as float=rnd(100)/100.0
    Angle as float=0.0+rnd(359)
    Value as float=0.0+rnd(100)
    FValue as float=0.0+rnd(100)
    GValue as float=0.0+rnd(100)
    SValue as float=0.0+rnd(100)
    X as float=rnd(200)-100.0
    Y as float=rnd(200)-100.0
    Z as float=rnd(200)-100.0
    W as float=rnd(100)/100.0
    Yaw as float=0.0+rnd(359)
    Pitch as float=0.0+rnd(359)
    Roll as float=0.0+rnd(359)

    rem Create math vectors
    ReturnFlag = make vector2(Vector2Number)
    ReturnFlag = make vector3(Vector3Number)
    ReturnFlag = make vector4(Vector4Number)
    ReturnFlag = make vector3(Vector3Eye)
    ReturnFlag = make vector3(Vector3At)
    ReturnFlag = make vector3(Vector3Up)

    rem Create math matrix
    ReturnFlag = make matrix4(Matrix4Number)

    rem Create projection, view and world matrices
    ReturnFlag = make matrix4(Matrix4Projection)
    PROJECTION MATRIX4 Matrix4Projection
    ReturnFlag = make matrix4(Matrix4View)
    VIEW MATRIX4 Matrix4View
    ReturnFlag = make matrix4(Matrix4World)
    WORLD MATRIX4 Matrix4World

    rem All maths for Vector2
    Vector=Vector2Number
    VectorA=Vector2Number
    VectorB=Vector2Number
    VectorC=Vector2Number
    VectorD=Vector2Number
    VectorResult=Vector2Number
    VectorSource=Vector2Number
    Matrix4Source=Matrix4Number

    ADD VECTOR2 VectorResult, VectorA, VectorB
    CATMULLROM VECTOR2 VectorResult, VectorA, VectorB, VectorC, VectorD, Value
    COPY VECTOR2 VectorResult, VectorSource
    DIVIDE VECTOR2 VectorResult, Value
    ReturnFloat = DOT PRODUCT VECTOR2(VectorA, VectorB)
    BCC VECTOR2 VectorResult, VectorA, VectorB, VectorC, FValue, GValue
    ReturnFloat = CCW VECTOR2(VectorA, VectorB)
    ReturnFloat = SQUARED LENGTH VECTOR2(Vector)
    ReturnFloat = LENGTH VECTOR2(Vector)
    ReturnFloat = X VECTOR2(Vector)
    ReturnFloat = Y VECTOR2(Vector)
    HERMITE VECTOR2 VectorResult, VectorA, VectorB, VectorC, VectorD, SValue
    ReturnFlag = IS EQUAL VECTOR2(VectorA, VectorB)
    LINEAR INTERPOLATE VECTOR2 VectorResult, VectorA, VectorB, SValue
    MAXIMIZE VECTOR2 VectorResult, VectorA, VectorB
    MINIMIZE VECTOR2 VectorResult, VectorA, VectorB
    MULTIPLY VECTOR2 VectorResult, Value
    NORMALIZE VECTOR2 VectorResult, VectorSource
    SCALE VECTOR2 VectorResult, VectorSource, Value
    SET VECTOR2 VectorResult, X, Y
    SUBTRACT VECTOR2 VectorResult, VectorA, VectorB
    TRANSFORM COORDS VECTOR2 VectorResult, VectorSource, Matrix4Source

    rem All maths for Vector3
    Vector=Vector3Number
    VectorA=Vector3Number
    VectorB=Vector3Number
    VectorC=Vector3Number
    VectorD=Vector3Number
    VectorResult=Vector3Number
    VectorSource=Vector3Number

    ADD VECTOR3 VectorResult, VectorA, VectorB
    CATMULLROM VECTOR3 VectorResult, VectorA, VectorB, VectorC, VectorD, Value
    COPY VECTOR3 VectorResult, VectorSource
    CROSS PRODUCT VECTOR3 VectorResult, VectorA, VectorB
    DIVIDE VECTOR3 VectorResult, Value
    ReturnFloat = DOT PRODUCT VECTOR3(VectorA, VectorB)
    BCC VECTOR3 VectorResult, VectorA, VectorB, VectorC, FValue, GValue
    ReturnFloat = SQUARED LENGTH VECTOR3(Vector)
    ReturnFloat = LENGTH VECTOR3(Vector)
    ReturnFloat = X VECTOR3(Vector)
    ReturnFloat = Y VECTOR3(Vector)
    ReturnFloat = Z VECTOR3(Vector)
    HERMITE VECTOR3 VectorResult, VectorA, VectorB, VectorC, VectorD, SValue
    ReturnFlag = IS EQUAL VECTOR3(VectorA, VectorB)
    LINEAR INTERPOLATE VECTOR3 VectorResult, VectorA, VectorB, SValue
    MAXIMIZE VECTOR3 VectorResult, VectorA, VectorB
    MINIMIZE VECTOR3 VectorResult, VectorA, VectorB
    MULTIPLY VECTOR3 VectorResult, Value
    NORMALIZE VECTOR3 VectorResult, VectorSource
    PROJECT VECTOR3 VectorResult, VectorSource, Matrix4Projection, Matrix4View, Matrix4World
    SCALE VECTOR3 VectorResult, VectorSource, Value
    SET VECTOR3 VectorResult, X, Y, Z
    SUBTRACT VECTOR3 VectorResult, VectorA, VectorB
    TRANSFORM COORDS VECTOR3 VectorResult, VectorSource, Matrix4Source
    TRANSFORM NORMALS VECTOR3 VectorResult, VectorSource, Matrix4Source

    rem All maths for Vector4
    Vector=Vector4Number
    VectorA=Vector4Number
    VectorB=Vector4Number
    VectorC=Vector4Number
    VectorD=Vector4Number
    VectorResult=Vector4Number
    VectorSource=Vector4Number

    ADD VECTOR4 VectorResult, VectorA, VectorB
    CATMULLROM VECTOR4 VectorResult, VectorA, VectorB, VectorC, VectorD, Value
    COPY VECTOR4 VectorResult, VectorSource
    DIVIDE VECTOR4 VectorResult, Value
    BCC VECTOR4 VectorResult, VectorA, VectorB, VectorC, FValue, GValue
    ReturnFloat = SQUARED LENGTH VECTOR4(Vector)
    ReturnFloat = LENGTH VECTOR4(Vector)
    ReturnFloat = X VECTOR4(Vector)
    ReturnFloat = Y VECTOR4(Vector)
    ReturnFloat = Z VECTOR4(Vector)
    ReturnFloat = W VECTOR4(Vector)
    HERMITE VECTOR4 VectorResult, VectorA, VectorB, VectorC, VectorD, SValue
    ReturnFlag = IS EQUAL VECTOR4(VectorA, VectorB)
    LINEAR INTERPOLATE VECTOR4 VectorResult, VectorA, VectorB, SValue
    MAXIMIZE VECTOR4 VectorResult, VectorA, VectorB
    MINIMIZE VECTOR4 VectorResult, VectorA, VectorB
    MULTIPLY VECTOR4 VectorResult, Value
    NORMALIZE VECTOR4 VectorResult, VectorSource
    SCALE VECTOR4 VectorResult, VectorSource, Value
    SET VECTOR4 VectorResult, X, Y, Z, W
    SUBTRACT VECTOR4 VectorResult, VectorA, VectorB
    TRANSFORM VECTOR4 VectorResult, VectorSource, Matrix4Source
    TRANSFORM NORMALS VECTOR3 VectorResult, VectorSource, Matrix4Source

    rem All maths for Matrix4
    Matrix4Result=Matrix4Number
    Matrix4A=Matrix4Number
    Matrix4B=Matrix4Number
    Matrix4=Matrix4Number
    Vector3Axis=Vector3Number

    ADD MATRIX4 Matrix4Result, Matrix4A, Matrix4B
    BUILD LOOKAT LHMATRIX4 Matrix4Result, Vector3Eye, Vector3At, Vector3Up
    BUILD LOOKAT RHMATRIX4 Matrix4Result, Vector3Eye, Vector3At, Vector3Up
    BUILD ORTHO LHMATRIX4 Matrix4Result, Width, Height, Near, Far
    BUILD ORTHO RHMATRIX4 Matrix4Result, Width, Height, Near, Far
    BUILD FOV LHMATRIX4 Matrix4Result, FOV, Aspect, Near, Far
    BUILD FOV RHMATRIX4 Matrix4Result, FOV, Aspect, Near, Far
    BUILD PERSPECTIVE LHMATRIX4 Matrix4Result, Width, Height, Near, Far
    BUILD PERSPECTIVE RHMATRIX4 Matrix4Result, Width, Height, Near, Far
    BUILD REFLECTION MATRIX4 Matrix4Result, PlaneA, PlaneB, PlaneC, PlaneD
    BUILD ROTATION AXIS MATRIX4 Matrix4Result, Vector3Axis, Angle
    COPY MATRIX4 Matrix4Result, Matrix4Source
    DIVIDE MATRIX4 Matrix4Result, Value
    ReturnFloat = INVERSE MATRIX4(Matrix4Result, Matrix4Source)
    ReturnFlag = IS EQUAL MATRIX4(Matrix4A, Matrix4B)
    ReturnFlag = IS IDENTITY MATRIX4(Matrix4Result)
    MULTIPLY MATRIX4 Matrix4Result, Matrix4A, Matrix4B
    MULTIPLY MATRIX4 Matrix4Result, Value
    ROTATE X MATRIX4 Matrix4Result, Angle
    ROTATE Y MATRIX4 Matrix4Result, Angle
    ROTATE YPR MATRIX4 Matrix4Result, Yaw, Pitch, Roll
    ROTATE Z MATRIX4 Matrix4Result, Angle
    SCALE MATRIX4 Matrix4Result, X, Y, Z
    SET IDENTITY MATRIX4 Matrix4Result
    SUBTRACT MATRIX4 Matrix4Result, Matrix4A, Matrix4B
    TRANSLATE MATRIX4 Matrix4Result, X, Y, Z
    TRANSPOSE MATRIX4 Matrix4Result, Matrix4Source

    rem Delete vectors and matrix
    ReturnFlag = delete vector2(Vector2Number)
    ReturnFlag = delete vector3(Vector3Number)
    ReturnFlag = delete vector4(Vector4Number)
    ReturnFlag = delete vector3(Vector3Eye)
    ReturnFlag = delete vector3(Vector3At)
    ReturnFlag = delete vector3(Vector3Up)
    ReturnFlag = delete matrix4(Matrix4Number)
    ReturnFlag = delete matrix4(Matrix4Projection)
    ReturnFlag = delete matrix4(Matrix4View)
    ReturnFlag = delete matrix4(Matrix4World)

    rem End program
    end