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