On Tue, Sep 27, 2011 at 06:03:54PM -0700, Jason Gerecke wrote:
> Extends the parameters by filling in missing data that is known
> beforehand (see the rotation-related hunk) and adding a new
> 'prop_type' field to allow for better type handling. While this
> info won't really be used until '_get' and '_set' appear, the
> 'get_param' function has been updated to take advantage of them
> in the meantime.
> 
> Signed-off-by: Jason Gerecke <killert...@gmail.com>
> ---
>  tools/xsetwacom.c |   64 +++++++++++++++++++++++++++++++++++++---------------
>  1 files changed, 45 insertions(+), 19 deletions(-)
> 
> diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c
> index 7670d4d..7202b23 100644
> --- a/tools/xsetwacom.c
> +++ b/tools/xsetwacom.c
> @@ -86,6 +86,7 @@ typedef struct _param
>       const char *name;       /* param name as specified by the user */
>       const char *desc;       /* description */
>       const char *prop_name;  /* property name */
> +     const int prop_type;    /* property type */
>       const int prop_format;  /* property format */
>       const int prop_offset;  /* offset (index) into the property values */
>       const int arg_count;   /* extra number of items after first one */
> @@ -120,6 +121,7 @@ static param_t parameters[] =
>               .name = "Area",
>               .desc = "Valid tablet area in device coordinates. ",
>               .prop_name = WACOM_PROP_TABLET_AREA,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 4,
> @@ -137,6 +139,7 @@ static param_t parameters[] =
>               .desc = "Level of debugging trace for individual tools "
>               "(default is 0 [off]). ",
>               .prop_name = WACOM_PROP_DEBUGLEVELS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 8,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -147,6 +150,7 @@ static param_t parameters[] =
>               "code paths between all tools "
>               "associated with the same tablet (default is 0 [off]). ",
>               .prop_name = WACOM_PROP_DEBUGLEVELS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 8,
>               .prop_offset = 1,
>               .arg_count = 1,
> @@ -155,6 +159,7 @@ static param_t parameters[] =
>               .name = "Suppress",
>               .desc = "Number of points trimmed (default is 2). ",
>               .prop_name = WACOM_PROP_SAMPLE,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -164,6 +169,7 @@ static param_t parameters[] =
>               .desc = "Number of raw data used to filter the points "
>               "(default is 4). ",
>               .prop_name = WACOM_PROP_SAMPLE,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 1,
>               .arg_count = 1,
> @@ -172,6 +178,7 @@ static param_t parameters[] =
>               .name = "PressureCurve",
>               .desc = "Bezier curve for pressure (default is 0 0 100 100 
> [linear]). ",
>               .prop_name = WACOM_PROP_PRESSURECURVE,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 4,
> @@ -189,6 +196,7 @@ static param_t parameters[] =
>               "(default is off for regular tablets, "
>               "on for Tablet PC). ",
>               .prop_name = WACOM_PROP_HOVER,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 8,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -198,6 +206,7 @@ static param_t parameters[] =
>               .name = "Touch",
>               .desc = "Turns on/off Touch events (default is on). ",
>               .prop_name = WACOM_PROP_TOUCH,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 8,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -208,6 +217,7 @@ static param_t parameters[] =
>               .desc = "Turns on/off multi-touch gesture events "
>               "(default is on). ",
>               .prop_name = WACOM_PROP_ENABLE_GESTURE,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 8,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -218,6 +228,7 @@ static param_t parameters[] =
>               .desc = "Minimum distance for a zoom gesture "
>               "(default is 50). ",
>               .prop_name = WACOM_PROP_GESTURE_PARAMETERS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -227,6 +238,7 @@ static param_t parameters[] =
>               .desc = "Minimum motion before sending a scroll gesture "
>               "(default is 20). ",
>               .prop_name = WACOM_PROP_GESTURE_PARAMETERS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 1,
>               .arg_count = 1,
> @@ -236,6 +248,7 @@ static param_t parameters[] =
>               .desc = "Minimum time between taps for a right click "
>               "(default is 250). ",
>               .prop_name = WACOM_PROP_GESTURE_PARAMETERS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 2,
>               .arg_count = 1,
> @@ -247,6 +260,7 @@ static param_t parameters[] =
>               "(default is 10 for Intuos series, "
>               "42 for Graphire series). ",
>               .prop_name = WACOM_PROP_PROXIMITY_THRESHOLD,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -256,6 +270,9 @@ static param_t parameters[] =
>               .desc = "Sets the rotation of the tablet. "
>               "Values = none, cw, ccw, half (default is none). ",
>               .prop_name = WACOM_PROP_ROTATION,
> +             .prop_type = XA_INTEGER,
> +             .prop_format = 8,
> +             .prop_offset = 0,
>               .set_func = set_rotate,
>               .get_func = get_rotate,
>               .arg_count = 1,
> @@ -345,6 +362,7 @@ static param_t parameters[] =
>               .desc = "Sets tip/eraser pressure threshold "
>               "(default is 27). ",
>               .prop_name = WACOM_PROP_PRESSURE_THRESHOLD,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -353,6 +371,7 @@ static param_t parameters[] =
>               .name = "ResetArea",
>               .desc = "Resets the bounding coordinates to default in tablet 
> units. ",
>               .prop_name = WACOM_PROP_TABLET_AREA,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 0,
> @@ -363,6 +382,7 @@ static param_t parameters[] =
>               .name = "ToolID",
>               .desc = "Returns the ID of the associated device. ",
>               .prop_name = WACOM_PROP_TOOL_TYPE,
> +             .prop_type = XA_ATOM,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -372,6 +392,7 @@ static param_t parameters[] =
>               .name = "ToolSerial",
>               .desc = "Returns the serial number of the current device in 
> proximity.",
>               .prop_name = WACOM_PROP_SERIALIDS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 3,
>               .arg_count = 1,
> @@ -381,6 +402,7 @@ static param_t parameters[] =
>               .name = "ToolSerialPrevious",
>               .desc = "Returns the serial number of the previous device in 
> proximity.",
>               .prop_name = WACOM_PROP_SERIALIDS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 1,
>               .arg_count = 1,
> @@ -390,6 +412,7 @@ static param_t parameters[] =
>               .name = "BindToSerial",
>               .desc = "Binds this device to the serial number.",
>               .prop_name = WACOM_PROP_SERIAL_BIND,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -398,6 +421,7 @@ static param_t parameters[] =
>               .name = "TabletID",
>               .desc = "Returns the tablet ID of the associated device. ",
>               .prop_name = WACOM_PROP_SERIALIDS,
> +             .prop_type = XA_INTEGER,
>               .prop_format = 32,
>               .prop_offset = 0,
>               .arg_count = 1,
> @@ -2450,13 +2474,19 @@ static void get_param(Display *dpy, XDevice *dev, 
> param_t *param, int argc, char
>               return;
>       }
>  
> -
> -     switch(param->prop_format)
> +     for (i = 0; i < param->arg_count; i++)
>       {
> -             case 8:
> -                     for (i = 0; i < param->arg_count; i++)
> +             switch (param->prop_type)
> +             {
> +                     case XA_INTEGER:
>                       {
> -                             int val = data[param->prop_offset + i];
> +                             long val;
> +                             switch (param->prop_format)
> +                             {
> +                                     case 8:  val = ((char*)data)[i];  break;
> +                                     case 16: val = ((short*)data)[i]; break;
> +                                     case 32: val = ((long*)data)[i];  break;
> +                             }
>  
>                               if (param->prop_flags & PROP_FLAG_BOOLEAN)
>                                       if (param->prop_flags & 
> PROP_FLAG_INVERTED)
> @@ -2465,24 +2495,20 @@ static void get_param(Display *dpy, XDevice *dev, 
> param_t *param, int argc, char
>                                               sprintf(&str[strlen(str)], 
> "%s", val ?  "on" : "off");
>                               else
>                                       sprintf(&str[strlen(str)], "%d", val);
> -
> -                             if (i < param->arg_count - 1)
> -                                     strcat(str, " ");
> +                             break;
>                       }
> -                     print_value(param, "%s", str);
> -                     break;
> -             case 32:
> -                     for (i = 0; i < param->arg_count; i++)
> +                     case XA_ATOM:
>                       {
> -                             long *ldata = (long*)data;
> -                             sprintf(&str[strlen(str)], "%ld", 
> ldata[param->prop_offset + i]);
> -
> -                             if (i < param->arg_count - 1)
> -                                     strcat(str, " ");
> +                             sprintf(&str[strlen(str)], "%s", 
> XGetAtomName(dpy, ((Atom*)data)[i]));

this leaks, the name must be freed.

> +                             break;
>                       }
> -                     print_value(param, "%s", str);
> -                     break;
> +             }
> +
> +             if (i < param->arg_count - 1)
> +                     strcat(str, " ");
>       }
> +     print_value(param, "%s", str);
> +     free(data);
>  }
>  
>  
> -- 
> 1.7.6

Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net> otherwise 


Cheers,
  Peter

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to