+typedef struct
+{
+ brush_t *brush;
+ face_t *face;
+ float dist;
+ qboolean selected;
+} trace_t;
+
+#define SF_SELECTED_ONLY 0x0001
+#define SF_ENTITIES_FIRST 0x0002
+#define SF_SINGLEFACE 0x0004
+#define SF_IGNORECURVES 0x0008
+#define SF_IGNOREGROUPS 0x0010
+#define SF_CYCLE 0x0020
+#define SF_CAMERA 0x0040 // set when the operation happens through camera view, otherwise XY
+#define SF_DRAG_ON 0x0080
+#define SF_DRAG_OFF 0x0100
+#define SF_DRAG ( SF_DRAG_ON | SF_DRAG_OFF )
+
+trace_t Test_Ray( vec3_t origin, vec3_t dir, int flags );
+
+void Select_GetBounds( vec3_t mins, vec3_t maxs );
+void Select_GetMid( vec3_t mid );
+void Select_Brush( brush_t *b, bool bComplete = true, bool bStatus = true );
+void Select_Ray( vec3_t origin, vec3_t dir, int flags );
+void Select_Delete( void );
+void Select_Deselect( bool bDeselectFaces = true );
+void Select_Invert( void );
+void Select_Clone( void );
+void Select_Move( vec3_t delta, bool bSnap = true );
+void Select_NudgePoint( vec3_t delta, qboolean bSnap = true );
+void WINAPI Select_SetTexture( texdef_t *texdef, brushprimit_texdef_t *brushprimit_texdef, bool bFitScale = false, void* pPlugTexdef = NULL );
+void Select_FlipAxis( int axis );
+void Select_RotateAxis( int axis, float deg, bool bPaint = true, bool bMouse = false );
+void Select_RealCompleteTall( vec3_t mins, vec3_t maxs );
+void Select_CompleteTall( void );
+void Select_PartialTall( void );
+void Select_Touching( void );
+void Select_Inside( void );
+void Select_Seperate( void );
+void Select_MakeStructural( void );
+void Select_MakeDetail( void );