Hi,

here's a patch against the touch screen lib (tslib)
(see http://www.arm.linux.org.uk/cvs/).

Changes are:
- support for all the config variables of the linear
   plugin module
- a bigger buffer for the config line
- bugfix to enable config line parsing

Cheers,
Frank.
diff --exclude=CVS -ruN tslib/plugins/linear.c tslib.patched/plugins/linear.c
--- tslib/plugins/linear.c      Tue Jan 15 05:56:48 2002
+++ tslib.patched/plugins/linear.c      Tue Feb 26 15:27:42 2002
@@ -12,6 +12,8 @@
  */
 #include <stdlib.h>
 #include <string.h>
+#include <errno.h>
+#include <limits.h>
 
 #include "tslib.h"
 #include "tslib-filter.h"
@@ -77,10 +79,74 @@
        return 0;
 }
 
+static int linear_adjust(struct tslib_module_info *inf, char *str, void *data)
+{
+       struct tslib_linear *lin = (struct tslib_linear *)inf;
+       unsigned long v;
+       int err = errno;
+
+       v = strtoul(str, NULL, 0);
+
+       if (v == ULONG_MAX && errno == ERANGE)
+               return -1;
+
+       errno = err;
+       switch ((int)data) {
+               case 2:
+                       lin->x_offset = v;
+                       break;
+
+               case 3:
+                       lin->x_mult = v;
+                       break;
+
+               case 4:
+                       lin->x_div = v;
+                       break;
+
+               case 5:
+                       lin->y_offset = v;
+                       break;
+
+               case 6:
+                       lin->y_mult = v;
+                       break;
+
+               case 7:
+                       lin->y_div = v;
+                       break;
+
+               case 8:
+                       lin->p_offset = v;
+                       break;
+
+               case 9:
+                       lin->p_mult = v;
+                       break;
+
+               case 10:
+                       lin->p_div = v;
+                       break;
+
+               default:
+                       return -1;
+       }
+       return 0;
+}
+
 static const struct tslib_vars linear_vars[] =
 {
        { "noxyswap",   (void *)0, linear_xyswap },
-       { "xyswap",     (void *)1, linear_xyswap }
+       { "xyswap",     (void *)1, linear_xyswap },
+       { "x_offset",   (void *)2, linear_adjust },
+       { "x_mult",     (void *)3, linear_adjust },
+       { "x_div",      (void *)4, linear_adjust },
+       { "y_offset",   (void *)5, linear_adjust },
+       { "y_mult",     (void *)6, linear_adjust },
+       { "y_div",      (void *)7, linear_adjust },
+       { "p_offset",   (void *)8, linear_adjust },
+       { "p_mult",     (void *)9, linear_adjust },
+       { "p_div",      (void *)10, linear_adjust }
 };
 
 #define NR_VARS (sizeof(linear_vars) / sizeof(linear_vars[0]))
diff --exclude=CVS -ruN tslib/src/ts_config.c tslib.patched/src/ts_config.c
--- tslib/src/ts_config.c       Sat Dec 22 13:12:06 2001
+++ tslib.patched/src/ts_config.c       Mon Feb 25 14:28:27 2002
@@ -36,7 +36,7 @@
 
 int ts_config(struct tsdev *ts)
 {
-       char buf[80], *p;
+       char buf[256], *p;
        FILE *f;
        int line = 0, ret = 0;
 
diff --exclude=CVS -ruN tslib/src/ts_parse_vars.c tslib.patched/src/ts_parse_vars.c
--- tslib/src/ts_parse_vars.c   Sat Dec 22 13:12:06 2001
+++ tslib.patched/src/ts_parse_vars.c   Tue Feb 26 11:12:08 2002
@@ -29,7 +29,8 @@
        if (!str)
                return 0;
 
-       s = alloca(strlen(str));
+       s = alloca(strlen(str)+1);
+       strcpy( s, str);
 
        while ((p = strsep(&s, " \t")) != NULL && ret == 0) {
                const struct tslib_vars *v;

Reply via email to