Index: Include/abgl.ab
===================================================================
--- Include/abgl.ab	(revision 63)
+++ Include/abgl.ab	(revision 67)
@@ -4,4 +4,197 @@
 #include <GL/gl.sbp>
 #include <GL/glu.sbp>
+
+Type XY_FLOAT
+	x As GLfloat
+	y As GLfloat
+End Type
+
+Type XY_DOUBLE
+	x As GLdouble
+	y As GLdouble
+End Type
+
+Class Vector2f
+Public /* constructor */
+	Sub Vector2f(x As GLfloat, y As GLfloat)
+		This.X=x
+		This.Y=y
+	End Sub
+
+Public /* destructor */
+	Sub ~Vector2f()
+	End Sub
+
+Public /* property */
+	Function X() As GLfloat
+		Return xy.x
+	End Function
+	Function Y() As GLfloat
+		Return xy.y
+	End Function
+	Sub X(x As GLfloat)
+		xy.x=x
+	End Sub
+	Sub Y(y As GLfloat)
+		xy.y=y
+	End Sub
+
+Public /* operator */
+	Sub Operator = (vec As Vector2f)
+		This.X=vec.X
+		This.Y=vec.Y
+	End Sub
+	Function Operator + (vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+		Return Add(vec1,vec2)
+	End Function
+	Function Operator - (vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+		Return Substract(vec1,vec2)
+	End Function
+/*	Function Operator * (vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+		Return Dot(vec1,vec2)
+	End Function
+*/
+	Function Operator * (vec As Vector2f, sca As GLfloat) As Vector2f
+		Dim ret As Vector2f(vec.X*sca,vec.Y*sca)
+		Return ret
+	End Function
+	Function Operator / (vec As Vector2f, sca As GLfloat) As Vector2f
+		Dim ret As Vector2f(vec.X/sca,vec.Y/sca)
+		Return ret
+	End Function
+
+
+Public /* method */
+	Function Add(vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+		Dim ret As Vector2f(vec1.X+vec2.X,vec1.Y+vec2.Y)
+		Return ret
+	End Function
+	Function Distance(vec1 As Vector2f, vec2 As Vector2f) As GLfloat
+		Dim ret As Vector2f
+		ret=vec1-vec2
+		Return ret.Magnitude
+	End Function
+	Function Dot(vec1 As Vector2f, vec2 As Vector2f) As GLfloat
+		Return vec1.X*vec2.X+vec1.Y*vec2.Y
+	End Function
+	Function Magnitude() As GLfloat
+		Return Math.Sqrt(This.X^2+This.Y^2) As GLfloat
+	End Function
+	Sub Normalize()
+		Dim ret As Vector2f(This.X/This.Magnitude,This.Y/This.Magnitude)
+		This = ret
+	End Sub
+	Function NormalizedVector() As Vector2f
+		Dim ret As Vector2f(This.X/This.Magnitude,This.Y/This.Magnitude)
+		Return ret
+	End Function
+	Function Substract(vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+		Dim ret As Vector2f(vec1.X-vec2.X,vec1.Y-vec2.Y)
+		Return ret
+	End Function
+	Sub Reverse()
+		Dim ret As Vector2f(-This.X,-This.Y)
+		This = ret
+	End Sub
+	Function ReversedVector() As Vector2f
+		Dim ret As Vector2f(-This.X,-This.Y)
+		Return ret
+	End Function
+
+Protected
+	xy As XY_FLOAT
+End Class
+
+Class Vector2d
+Public /* constructor */
+	Sub Vector2d(x As GLdouble, y As GLdouble)
+		xy.x=x
+		xy.y=y
+	End Sub
+
+Public /* destructor */
+	Sub ~Vector2d()
+	End Sub
+
+Public /* property */
+	Function X() As GLdouble
+		Return xy.x
+	End Function
+	Function Y() As GLdouble
+		Return xy.y
+	End Function
+	Sub X(x As GLdouble)
+		xy.x=x
+	End Sub
+	Sub Y(y As GLdouble)
+		xy.y=y
+	End Sub
+
+Public /* operator */
+	Sub Operator = (vec As Vector2d)
+		This.X=vec.X
+		This.Y=vec.Y
+	End Sub
+	Function Operator + (vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+		Return Add(vec1,vec2)
+	End Function
+	Function Operator - (vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+		Return Substract(vec1,vec2)
+	End Function
+/*	Function Operator * (vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+		Return Dot(vec1,vec2)
+	End Function
+*/
+	Function Operator * (vec As Vector2d, sca As GLfloat) As Vector2d
+		Dim ret As Vector2d(vec.X*sca,vec.Y*sca)
+		Return ret
+	End Function
+	Function Operator / (vec As Vector2d, sca As GLfloat) As Vector2d
+		Dim ret As Vector2d(vec.X/sca,vec.Y/sca)
+		Return ret
+	End Function
+
+
+Public /* method */
+	Function Add(vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+		Dim ret As Vector2d(vec1.X+vec2.X,vec1.Y+vec2.Y)
+		Return ret
+	End Function
+	Function Distance(vec1 As Vector2d, vec2 As Vector2d) As GLfloat
+		Dim ret As Vector2d
+		ret=vec1-vec2
+		Return ret.Magnitude
+	End Function
+	Function Dot(vec1 As Vector2d, vec2 As Vector2d) As GLfloat
+		Return vec1.X*vec2.X+vec1.Y*vec2.Y
+	End Function
+	Function Magnitude() As GLfloat
+		Return Math.Sqrt(This.X^2+This.Y^2) As GLfloat
+	End Function
+	Sub Normalize()
+		Dim ret As Vector2d(This.X/This.Magnitude,This.Y/This.Magnitude)
+		This = ret
+	End Sub
+	Function NormalizedVector() As Vector2d
+		Dim ret As Vector2d(This.X/This.Magnitude,This.Y/This.Magnitude)
+		Return ret
+	End Function
+	Function Substract(vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+		Dim ret As Vector2d(vec1.X-vec2.X,vec1.Y-vec2.Y)
+		Return ret
+	End Function
+	Sub Reverse()
+		Dim ret As Vector2d(-This.X,-This.Y)
+		This = ret
+	End Sub
+	Function ReversedVector() As Vector2d
+		Dim ret As Vector2d(-This.X,-This.Y)
+		Return ret
+	End Function
+
+Protected
+	xz As XY_DOUBLE
+End Class
+
 
 Type XYZ_FLOAT
@@ -88,4 +281,5 @@
 	xyz As XYZ_DOUBLE
 End Class
+
 
 Type RGB_FLOAT
