00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <stdlib.h>
00019 #include <stdio.h>
00020 #include <unistd.h>
00021 #include <getopt.h>
00022 #include <limits.h>
00023 #include <math.h>
00024
00025 #include <libcvautomation/libcvautomation.h>
00026
00027 void usage ();
00028 void checkXTEEnabled (Display *display);
00029
00030 int main( int argc, char** argv )
00031 {
00032
00033 int mouseButton;
00034 mouseButton = 1;
00035 char *separator;
00036 separator = ",";
00037 char *xDisplayLocation;
00038 xDisplayLocation = "";
00039 Display *display;
00040 display = NULL;
00041
00042 int searchMethod, tolerance;
00043 searchMethod = 0;
00044 tolerance = INT_MAX;
00045
00046
00047 while (1)
00048 {
00049 static struct option long_options[] =
00050 {
00051 {"help", no_argument, 0, 'h'},
00052 {"usage", no_argument, 0, 'u'},
00053 {"version", no_argument, 0, 'v'},
00054 {"display", required_argument, 0, 'd'},
00055 {"search-method",required_argument, 0, 'm'},
00056 {"tolerance", required_argument, 0, 't'},
00057 {"button", required_argument, 0, 'b'},
00058 {"string", required_argument, 0, 's'},
00059 {"sane-tolerance", required_argument, 0,'o'},
00060 {"print-format",required_argument, 0, 'p'},
00061
00062
00063 {0, 0, 0, 0}
00064 };
00065
00066 int option_index = 0;
00067 opterr = 0;
00068
00069 int c = getopt_long (argc, argv, "hud:m:t:b:cs:",
00070
00071 long_options, &option_index);
00072
00073
00074 if (c == -1)
00075 break;
00076
00077 switch (c)
00078 {
00079 case 0:
00080 break;
00081
00082 case 'h':
00083 usage();
00084 break;
00085
00086 case 'u':
00087 usage();
00088 break;
00089
00090 case 'v':
00091 usage();
00092 break;
00093
00094 case 'd':
00095 if (display == NULL)
00096 display = XOpenDisplay( optarg );
00097 else
00098 {
00099 XCloseDisplay( display );
00100 XOpenDisplay( optarg );
00101 }
00102
00103 case 'm':
00104 searchMethod = atoi(optarg);
00105 break;
00106
00107 case 't':
00108 tolerance = atoi(optarg);
00109 break;
00110
00111 case 'b':
00112 mouseButton = atoi(optarg);
00113 break;
00114
00115 case 's':
00116 if (display == NULL)
00117 display = XOpenDisplay( xDisplayLocation );
00118 cvaPoint returnPoint;
00119 returnPoint = xte_commandString( display, optarg, mouseButton, searchMethod, tolerance );
00120
00121 if (returnPoint.x != -1 && returnPoint.y != -1)
00122 printf("%s%s%i%s%i\n", optarg, separator, returnPoint.x, separator, returnPoint.y);
00123 else
00124 printf("%s\n", optarg);
00125 break;
00126
00127 case 'o':
00128 tolerance = atoi(optarg);
00129
00130
00131 tolerance = pow(1.2397076, tolerance);
00132 break;
00133
00134 case '?':
00135
00136 break;
00137
00138 default:
00139 fprintf( stderr, "Unknown option..." );
00140 exit(0);
00141 };
00142 }
00143
00144 if ( display != NULL )
00145 XCloseDisplay( display );
00146
00147 return 0;
00148 }
00149
00150
00151
00152
00153
00154
00155
00156 void usage ( )
00157 {
00158 fprintf( stderr, "\
00159 Libcvautomation version: %s\n\
00160 cva-input -s <command_string>\n\
00161 \n\
00162 The cva-input program demonstrates the XTest section of libcvautomation.\n\
00163 \n\
00164 Usage: \n\
00165 \n\
00166 \t-h, --help:\t\tDisplay this usage message.\n\
00167 \t-u, --usage:\t\tDisplay this usage message.\n\
00168 \t-d, --display:\t\tSpecify the X display to use.\n\
00169 \t-m, --search-method:\tSpecify a method to search by. See `cva-match --help\'\n\
00170 \t\t\t\tfor more information on this.\n\
00171 \t-t, --tolerance:\tSpecify how strict the match is.\n\
00172 \t-b, --button:\t\tSpecify the mouse button to press (default 1).\n\
00173 \t-c, --center:\t\tInstead of matching the top-left corner of an image,\n\
00174 \t\t\t\tmatch the center of the image.\n\
00175 \t-o, --sane-tolerance:\tSet the tolerance using a scale of 1-100,\n\
00176 \t-s, --string:\t\tCommand string - see below.\n\
00177 \n\
00178 This program works kind of like a mini-language. All options\n\
00179 are parsed left-to-right, and executed right there. Thus, specifying \"--display\"\n\
00180 at different places in the options will cause this program to use the most recent\n\
00181 given display.\n\
00182 Available commands:\n\
00183 \tmouseclick:\tClick the mouse in-place.\n\
00184 \timouseclick:\tClick the mouse at an image's top-left corner.\n\
00185 \ticmouseclick:\tClick the mouse at an image's center.\n\
00186 \tmousexy:\tMove the mouse to the given coordinate.\n\
00187 \tmouserxy:\tMove the mouse by the given x and y values (relative motion).\n\
00188 \tmouseimage:\tMove the mouse to an image's top-left corner.\n\
00189 \tcmouseimage:\tMove the mouse to an image's center.\n\
00190 \tmousedown:\tPush and leave down a mouse button.\n\
00191 \tmouseup:\tRelease a mouse button.\n\
00192 \tmousejiggle:\tJiggle the mouse (helps to activate some widgets).\n\
00193 \tkeyclick:\tClick a keyboard button.\n\
00194 \tkeydown:\tPush and leave down a keyboard button.\n\
00195 \tkeyup:\tRelease a keyboard button.\n\
00196 \tkeystring:\tInput a string of keys to X11.\n\
00197 \n\
00198 If you have any questions, comments, concerns, email <%s>.\n\n", LIBCVAUTOMATION_VERSION, LIBCVAUTOMATION_BUGREPORT );
00199
00200 exit (0);
00201
00202 }
00203
00204 void checkXTEEnabled ( Display *display )
00205 {
00206
00207
00208 if (! xte_XTestSupported( display ))
00209 {
00210 printf("The XTest extension is not supported! Aborting...");
00211 exit(255);
00212 }
00213 }
00214
00215
00222