blob: 5a45a7c8db7dacc06202f99f049569a1a92576e5 [file] [log] [blame]
diff --git a/tools/evemu-play.c b/tools/evemu-play.c
index c2aef3e..9c868a2 100644
--- a/tools/evemu-play.c
+++ b/tools/evemu-play.c
@@ -45,43 +45,77 @@
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
+#include <getopt.h>
+
+void usage(char *program_name) {
+ fprintf(stderr, "Usage: %s [--insert-slot0] [--output output_file] <device>\n", program_name);
+ fprintf(stderr, "\n");
+ fprintf(stderr, "--insert-slot0: insert a slot 0 event if missing in the very first packet.\n");
+ fprintf(stderr, "--output: specify the output file name.\n");
+ fprintf(stderr, "Note: event data is read from standard input.\n");
+}
int main(int argc, char *argv[])
{
int fd;
+ int c;
+ int flag_slot0 = 0;
FILE *fp_time = NULL;
char *output_filename = NULL;
- int flag_slot0 = 0;
- if (argc < 2 || argc > 4) {
- fprintf(stderr, "Usage: %s <device> [--insert-slot0] [output_file]\n", argv[0]);
- fprintf(stderr, "\n");
- fprintf(stderr, "--insert-slot0: insert a slot 0 event if missing in the very first packet.\n");
- fprintf(stderr, "Event data is read from standard input.\n");
+ char *device_name = NULL;
+
+ /* Get options */
+ while (1) {
+ static struct option long_options[] = {
+ {"insert-slot0", no_argument, 0, 'i'},
+ {"output", required_argument, 0, 'o'},
+ {0, 0, 0, 0}
+ };
+ int option_index = 0;
+ c = getopt_long(argc, argv, "io:", long_options, &option_index);
+ if (c == -1)
+ break;
+ switch (c) {
+ case 0:
+ break;
+ case 'i':
+ flag_slot0 = 1;
+ break;
+ case 'o':
+ output_filename = optarg;
+ break;
+ case '?':
+ default:
+ usage(argv[0]);
+ return -1;
+ }
+ }
+
+ /* Get command line argument: device */
+ if (optind >= argc) {
+ fprintf(stderr, "You need to supply the <device>.\n");
+ usage(argv[0]);
return -1;
}
- fd = open(argv[1], O_WRONLY);
+ device_name = argv[optind];
+
+ /* Open the event device */
+ fd = open(device_name, O_WRONLY);
if (fd < 0) {
- fprintf(stderr, "error: could not open device\n");
+ fprintf(stderr, "Error: fail to open device %s\n", device_name);
return -1;
}
- if (argc >= 3) {
- if (strcmp(argv[2], "--insert-slot0") == 0) {
- flag_slot0 = 1;
- if (argc == 4) {
- output_filename = argv[3];
- }
- } else {
- output_filename = argv[2];
- }
- if (output_filename != NULL) {
- fp_time = fopen(output_filename, "w");
- if (fp_time == NULL) {
- fprintf(stderr, "error: could not open output file %s.\n",
- output_filename);
- return -1;
- }
+
+ /* Open the optional output file */
+ if (output_filename != NULL) {
+ fp_time = fopen(output_filename, "w");
+ if (fp_time == NULL) {
+ fprintf(stderr, "Error: fail to open output file %s.\n",
+ output_filename);
+ return -1;
}
}
+
if (evemu_play(stdin, fd, fp_time, flag_slot0)) {
fprintf(stderr, "error: could not describe device\n");
}