Index: ode.h
===================================================================
--- ode.h	(revision 52)
+++ ode.h	(revision 53)
@@ -101,7 +101,7 @@
 When two objects are too near, before lauching "expensive" collision tests,
 Raydium is firing this event.
 
-Callback prototype: ##char f(int obj1, int obj2);##
+Callback prototype: ##signed char f(int obj1, int obj2);##
 ##obj1## and ##obj2## are the two objets, and you must return true (1) if
 you want to "validate" collision, or false (0) if you don't want that two
 objects to collide.
@@ -113,7 +113,7 @@
 objects, with a lot of elements, this callback may be fired a **very** large
 number of times during **one** ODE step ! Do only simple things here.
 
-Callback prototype: ##char f(int e1, int e2, dContact *c);##
+Callback prototype: ##signed char f(int e1, int e2, dContact *c);##
 ##e1## and ##e2## are the two colliding elements, and you must return true (1) 
 if you want to "validate" this contact, or false (0) to cancel this contact 
 (and only this one !)
@@ -126,7 +126,7 @@
 At every explosion, of any type, this event is fired. This is the best
 place to play suitable sound, create particles and such things.
 
-Callback prototype: ##void f(char type, dReal radius, dReal force_or_propag, dReal *pos);##
+Callback prototype: ##void f(signed char type, dReal radius, dReal force_or_propag, dReal *pos);##
 You can find in callback params:
 explosion ##type## (see above), ##radius##, force or propag (depending on
 explosion type) and ##pos##, an array of 3 dReal values for explosion position.
@@ -136,7 +136,7 @@
 When ##raydium_ode_draw_all(0)## is called, for every element to draw, this
 callback is **before** element drawing.
 
-Callback prototype: ##char f(int elem);##
+Callback prototype: ##signed char f(int elem);##
 ##elem## is the element'id. Return true (1) if you want to draw this element,
 or false (0) otherwise. This is also the best place to drawn team colors on 
 cars, for example (see ##raydium_rendering_rgb_force## for this use).
@@ -205,31 +205,31 @@
 Will initialize all RayODE interface. Never call this function by yourself.
 **/
 
-extern char raydium_ode_object_isvalid (int i);
+extern signed char raydium_ode_object_isvalid (int i);
 /**
 Will return 0 (false) if object ##i## is not valid (free slot or out of bounds)
 or 1 (true) otherwise.
 **/
 
-extern char raydium_ode_element_isvalid (int i);
+extern signed char raydium_ode_element_isvalid (int i);
 /**
 Will return 0 (false) if element ##i## is not valid (free slot or out of bounds)
 or 1 (true) otherwise.
 **/
 
-extern char raydium_ode_joint_isvalid (int i);
+extern signed char raydium_ode_joint_isvalid (int i);
 /**
 Will return 0 (false) if joint ##i## is not valid (free slot or out of bounds)
 or 1 (true) otherwise.
 **/
 
-extern char raydium_ode_motor_isvalid (int i);
+extern signed char raydium_ode_motor_isvalid (int i);
 /**
 Will return 0 (false) if motor ##i## is not valid (free slot or out of bounds)
 or 1 (true) otherwise.
 **/
 
-extern char raydium_ode_explosion_isvalid (int i);
+extern signed char raydium_ode_explosion_isvalid (int i);
 /**
 Will return 0 (false) if explosion ##i## is not valid (free slot or out of bounds)
 or 1 (true) otherwise.
@@ -284,17 +284,17 @@
 it fails.
 **/
 
-extern char raydium_ode_object_rename (int o, char *newname);
+extern signed char raydium_ode_object_rename (int o, char *newname);
 /**
 Will rename object ##o## with a ##newname##.
 **/
 
-extern char raydium_ode_object_rename_name (char *o, char *newname);
+extern signed char raydium_ode_object_rename_name (char *o, char *newname);
 /**
 Same as above, but from object's name (##o##).
 **/
 
-extern char raydium_ode_object_colliding (int o, char colliding);
+extern signed char raydium_ode_object_colliding (int o, signed char colliding);
 /**
 By default, all elements from an object are not colliding each others.
 The only exception is for ##GLOBAL## object.
@@ -302,7 +302,7 @@
 to 1 (true). 0 (false) sets back to default behaviour (no internal collisions).
 **/
 
-extern char raydium_ode_object_colliding_name (char *o, char colliding);
+extern signed char raydium_ode_object_colliding_name (char *o, signed char colliding);
 /**
 Same as above, but using object's name.
 **/
@@ -374,7 +374,7 @@
 Same as above, but using 3 dReal values.
 **/
 
-extern char raydium_ode_element_material (int e, dReal erp, dReal cfm);
+extern signed char raydium_ode_element_material (int e, dReal erp, dReal cfm);
 /**
 When two elements collides, there's two important parameters used for
 contact point generation : ERP and CFM.
@@ -388,24 +388,24 @@
 For more informations, see ODE documentation, chapters 3.7 and 3.8.
 **/
 
-extern char raydium_ode_element_material_name (char *name, dReal erp, dReal cfm);
+extern signed char raydium_ode_element_material_name (char *name, dReal erp, dReal cfm);
 /**
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_slip (int e, dReal slip);
+extern signed char raydium_ode_element_slip (int e, dReal slip);
 /**
 Slip parameter is a complement of material values (ERP and CFM, see above).
 Raydium provides a few default values, see ##RAYDIUM_ODE_SLIP_*## defines 
 in ##raydium/ode.h## file (ice, player, normal, default).
 **/
 
-extern char raydium_ode_element_slip_name (char *e, dReal slip);
+extern signed char raydium_ode_element_slip_name (char *e, dReal slip);
 /**
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_rotfriction (int e, dReal rotfriction);
+extern signed char raydium_ode_element_rotfriction (int e, dReal rotfriction);
 /**
 rotfriction stands for "Rotation Friction", "Rolling Friction", 
 "Damping Effect", ...
@@ -417,7 +417,7 @@
 raydium_ode_element_rotfriction(elem,ROTFRICTION);%%
 **/
 
-extern char raydium_ode_element_rotfriction_name (char *e, dReal rotfriction);
+extern signed char raydium_ode_element_rotfriction_name (char *e, dReal rotfriction);
 /**
 Same as above, but using element's name.
 **/
@@ -475,14 +475,14 @@
 Same as above, but using element's name.
 **/
 
-extern void raydium_ode_element_gravity (int e, char enable);
+extern void raydium_ode_element_gravity (int e, signed char enable);
 /**
 By default, gravity applies to every element of the scene. If you want
 to disable gravity for element ##e##, set ##enable## to 0 (false).
 You can restore gravity with ##enable## sets to 1 (true).
 **/
 
-extern void raydium_ode_element_gravity_name (char *e, char enable);
+extern void raydium_ode_element_gravity_name (char *e, signed char enable);
 /**
 Same as above, but using element's name.
 **/
@@ -507,7 +507,7 @@
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_aabb_get (int element, dReal * aabb);
+extern signed char raydium_ode_element_aabb_get (int element, dReal * aabb);
 /**
 AABB means Axis-Aligned Bounding Box. This function will return element's
 bounding box on X, Y and Z axis.
@@ -517,7 +517,7 @@
 Will return 0 (false) in case of failure.
 **/
 
-extern char raydium_ode_element_aabb_get_name (char *element, dReal * aabb);
+extern signed char raydium_ode_element_aabb_get_name (char *element, dReal * aabb);
 /**
 Same as above, but using element's name.
 **/
@@ -533,7 +533,7 @@
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_player_set (int e, char isplayer);
+extern signed char raydium_ode_element_player_set (int e, signed char isplayer);
 /**
 RayODE provides a special behaviour for FPS style players, also
 named "standing geoms". The idea is simple : a player element is always
@@ -541,29 +541,29 @@
 Sets ##isplayer## to 1 (true) to transform element ##e## into a "player element".
 **/
 
-extern char raydium_ode_element_player_set_name (char *name, char isplayer);
+extern signed char raydium_ode_element_player_set_name (char *name, signed char isplayer);
 /**
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_player_get (int e);
+extern signed char raydium_ode_element_player_get (int e);
 /**
 Returns if element ##e## is a "player element" (1, true) or not (0, false).
 See above for more informations about player elements.
 **/
 
-extern char raydium_ode_element_player_get_name (char *name);
+extern signed char raydium_ode_element_player_get_name (char *name);
 /**
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_player_angle (int e, dReal angle);
+extern signed char raydium_ode_element_player_angle (int e, dReal angle);
 /**
 Sets "standing geom" Z rotation ##angle## (radian) for element ##e##.
 See above for more informations about player elements.
 **/
 
-extern char raydium_ode_element_player_angle_name (char *e, dReal angle);
+extern signed char raydium_ode_element_player_angle_name (char *e, dReal angle);
 /**
 Same as above, but using element's name.
 **/
@@ -589,7 +589,7 @@
 Same as above, but using element's name.
 **/
 
-extern int raydium_ode_object_sphere_add (char *name, int group, dReal mass, dReal radius, char type, int tag, char *mesh);
+extern int raydium_ode_object_sphere_add (char *name, int group, dReal mass, dReal radius, signed char type, int tag, char *mesh);
 /**
 This function will add an new "sphere" element to an object (##group##).
 You must provide:
@@ -609,7 +609,7 @@
 disable rendering (and not ##NULL## !).
 **/
 
-extern int raydium_ode_object_box_add (char *name, int group, dReal mass, dReal tx, dReal ty, dReal tz, char type, int tag, char *mesh);
+extern int raydium_ode_object_box_add (char *name, int group, dReal mass, dReal tx, dReal ty, dReal tz, signed char type, int tag, char *mesh);
 /**
 This function will add an new "box" element to an object (##group##).
 Arguments are the same as ##raydium_ode_object_sphere_add## (see above) but
@@ -620,7 +620,7 @@
 "twice the detected size".
 **/
 
-extern int raydium_ode_element_fix (char *name, int *elem, int nelems, char keepgeoms);
+extern int raydium_ode_element_fix (char *name, int *elem, int nelems, signed char keepgeoms);
 /**
 Experimental code.
 
@@ -747,7 +747,7 @@
 Same as above, but using object's name.
 **/
 
-extern void raydium_ode_element_rotate_direction (int elem, char Force0OrVel1);
+extern void raydium_ode_element_rotate_direction (int elem, signed char Force0OrVel1);
 /**
 This function will rotate element ##elem## from its force or velocity.
 Sets ##Force0OrVel1## to ##0## if you want to align element using its
@@ -755,7 +755,7 @@
 Warning: arbitrary rotations may lead to unwanted behaviours.
 **/
 
-extern void raydium_ode_element_rotate_direction_name (char *e, char Force0OrVel1);
+extern void raydium_ode_element_rotate_direction_name (char *e, signed char Force0OrVel1);
 /**
 Same as above, but using element's name.
 **/
@@ -915,14 +915,14 @@
 Same as above, but using joint's name.
 **/
 
-extern void raydium_ode_joint_hinge2_block (int j, char block);
+extern void raydium_ode_joint_hinge2_block (int j, signed char block);
 /**
 Sometime, you may need to block rotation for first axe of hinge2 joints, for
 example with rear wheels of a car. If so, set ##block## to 1 (true).
 Setting ##block## back to 0 (false) will restore standard rotation behaviour.
 **/
 
-extern void raydium_ode_joint_hinge2_block_name (char *name, char block);
+extern void raydium_ode_joint_hinge2_block_name (char *name, signed char block);
 /**
 Same as above, but using joint's name.
 **/
@@ -1058,26 +1058,26 @@
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_rotq_get (int j, dReal * res);
+extern signed char raydium_ode_element_rotq_get (int j, dReal * res);
 /**
 This function will return element ##j##'s current rotation, as an array of
 4 dReal values (quaternion), thru ##res##.
 No memory allocation will be done.
 **/
 
-extern char raydium_ode_element_rotq_get_name (char *name, dReal * res);
+extern signed char raydium_ode_element_rotq_get_name (char *name, dReal * res);
 /**
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_element_rot_get (int e, dReal * rx, dReal * ry, dReal * rz);
+extern signed char raydium_ode_element_rot_get (int e, dReal * rx, dReal * ry, dReal * rz);
 /**
 This code is experimental. It should returns element ##e##'s current rotation
 using 3 dReal angles, in radians. Do not apply back values to the
 element since there're not "ODE formated".
 **/
 
-extern char raydium_ode_element_rot_get_name (char *e, dReal * rx, dReal * ry, dReal * rz);
+extern signed char raydium_ode_element_rot_get_name (char *e, dReal * rx, dReal * ry, dReal * rz);
 /**
 Same as above, but using element's name.
 **/
@@ -1105,7 +1105,7 @@
 Same as above, but using element's name.
 **/
 
-extern int raydium_ode_motor_create (char *name, int obj, char type);
+extern int raydium_ode_motor_create (char *name, int obj, signed char type);
 /**
 This function will create a new motor, using ##name## (single), for
 object ##obj##, with ##type##. As said before, available types are
@@ -1159,39 +1159,39 @@
 same as above, but using motor's name.
 **/
 
-extern void raydium_ode_motor_rocket_playermovement (int m, char isplayermovement);
+extern void raydium_ode_motor_rocket_playermovement (int m, signed char isplayermovement);
 /**
 Will configure rocket ##m## for player movements. This type of rocket will be
 automatically disabled when linked element is not touched by 
 anything (ground in most cases).
 **/
 
-extern void raydium_ode_motor_rocket_playermovement_name (char *m, char isplayermovement);
+extern void raydium_ode_motor_rocket_playermovement_name (char *m, signed char isplayermovement);
 /**
 same as above, but using motor's name.
 **/
 
-extern char raydium_ode_motor_delete (int e);
+extern signed char raydium_ode_motor_delete (int e);
 /**
 Will obviously delete motor ##e##.
 **/
 
-extern char raydium_ode_motor_delete_name (char *name);
+extern signed char raydium_ode_motor_delete_name (char *name);
 /**
 same as above, but using motor's name.
 **/
 
-extern char raydium_ode_joint_delete (int joint);
+extern signed char raydium_ode_joint_delete (int joint);
 /**
 Will obviously delete ##joint##.
 **/
 
-extern char raydium_ode_joint_delete_name (char *name);
+extern signed char raydium_ode_joint_delete_name (char *name);
 /**
 same as above, but using joint's name.
 **/
 
-extern char raydium_ode_element_delete (int e, char deletejoints);
+extern signed char raydium_ode_element_delete (int e, signed char deletejoints);
 /**
 Will obviously delete element ##e##. Deletion may me queued for some reason,
 for a very short time (current collide loop). For now, you **must** set
@@ -1200,28 +1200,28 @@
 Linked rocket engines will be deleted, too.
 **/
 
-extern char raydium_ode_element_delete_name (char *name, char deletejoints);
+extern signed char raydium_ode_element_delete_name (char *name, signed char deletejoints);
 /**
 Same as above, but using element's name.
 **/
 
-extern char raydium_ode_object_delete (int obj);
+extern signed char raydium_ode_object_delete (int obj);
 /**
 Will obviously delete object ##obj##. All elements, joints and motors will
 be deleted with object.
 **/
 
-extern char raydium_ode_object_delete_name (char *name);
+extern signed char raydium_ode_object_delete_name (char *name);
 /**
 Same as above, but using object's name.
 **/
 
-extern char raydium_ode_explosion_delete (int e);
+extern signed char raydium_ode_explosion_delete (int e);
 /**
 Will delete ##RAYDIUM_ODE_NETWORK_EXPLOSION_EXPL## type explosion ##e##.
 **/
 
-extern char raydium_ode_element_moveto (int element, int object, char deletejoints);
+extern signed char raydium_ode_element_moveto (int element, int object, signed char deletejoints);
 /**
 This function will move ##element## from his owner object to another ##object##.
 This "migration" will not be completed until ##element## is not touching
@@ -1229,7 +1229,7 @@
 For now, you **must** set ##deletejoints## to 1 (true), deleting linked joints.
 **/
 
-extern char raydium_ode_element_moveto_name (char *element, char *object, char deletejoints);
+extern signed char raydium_ode_element_moveto_name (char *element, char *object, signed char deletejoints);
 /**
 Same as above, but using element's name and object's name.
 **/
@@ -1239,7 +1239,7 @@
 Internal joint testing function.
 **/
 
-extern char raydium_ode_launcher (int element, int from_element, dReal * rot, dReal force);
+extern signed char raydium_ode_launcher (int element, int from_element, dReal * rot, dReal force);
 /**
 This function will launch an ##element## from ##from_element##.
 You must provide ##rot##, an array of 3 dReal angles in degreees, relative
@@ -1247,29 +1247,29 @@
 You must also provide a ##force##, with no particular unit.
 **/
 
-extern char raydium_ode_launcher_name (char *element, char *from_element, dReal * rot, dReal force);
+extern signed char raydium_ode_launcher_name (char *element, char *from_element, dReal * rot, dReal force);
 /**
 Same as above, using ##element## and ##from_element## names.
 **/
 
-extern char raydium_ode_launcher_name_3f (char *element, char *from_element, dReal rx, dReal ry, dReal rz, dReal force);
+extern signed char raydium_ode_launcher_name_3f (char *element, char *from_element, dReal rx, dReal ry, dReal rz, dReal force);
 /**
 Same as above, but using 3 dReal values for rotation.
 **/
 
-extern char raydium_ode_launcher_simple (int element, int from_element, dReal * lrot, dReal force);
+extern signed char raydium_ode_launcher_simple (int element, int from_element, dReal * lrot, dReal force);
 /**
 This function will act the same as previous ones, adding a few things:
 - ##element## will be aligned with ##from_element## (position and rotation).
 - ##element## will be "migrated" to GLOBAL object during launch.
 **/
 
-extern char raydium_ode_launcher_simple_name (char *element, char *from_element, dReal * rot, dReal force);
+extern signed char raydium_ode_launcher_simple_name (char *element, char *from_element, dReal * rot, dReal force);
 /**
 Same as above, using ##element## and ##from_element## names.
 **/
 
-extern char raydium_ode_launcher_simple_name_3f (char *element, char *from_element, dReal rx, dReal ry, dReal rz, dReal force);
+extern signed char raydium_ode_launcher_simple_name_3f (char *element, char *from_element, dReal rx, dReal ry, dReal rz, dReal force);
 /**
 Same as above, but using 3 dReal values for rotation.
 **/
@@ -1309,7 +1309,7 @@
 Same as above, but using element's name.
 **/
 
-extern void raydium_ode_draw_all (char names);
+extern void raydium_ode_draw_all (signed char names);
 /**
 This function will draw all RayODE scene. You must call this function
 by yourself.