diff --git a/Makefile b/Makefile
index d77b558..1523a6f 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,7 @@ INSTALL = /usr/bin/install
RM = /bin/rm -f
SRCS = \
+ cli.c \
espeakup.c \
queue.c \
softsynth.c \
@@ -33,7 +34,7 @@ ifeq ("$(origin TAG)", "command line")
TIMESTAMP := _p$(shell date +%Y%m%d)
endif
-VERSION := $(shell grep 'Version.*=' espeakup.c | sed 's/.*"\(.*\)";/\1/')
+VERSION := $(shell grep 'Version.*=' cli.c | sed 's/.*"\(.*\)";/\1/')
TAG := v$(VERSION)
TARPREFIX := espeakup-$(VERSION)
TARFILE := $(TARPREFIX)$(TIMESTAMP).tar
diff --git a/cli.c b/cli.c
new file mode 100644
index 0000000..ce1a18e
--- /dev/null
+++ b/cli.c
@@ -0,0 +1,80 @@
+/*
+ * espeakup - interface which allows speakup to use espeak
+ *
+ * Copyright (C) 2008 William Hubbs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#include
+
+#include "espeakup.h"
+
+/* program version */
+const char *Version = "0.2";
+
+/* command line options */
+const char *shortOptions = "dhv";
+const struct option longOptions[] = {
+ {"debug", no_argument, NULL, 'd'},
+ {"help", no_argument, NULL, 'h'},
+ {"version", no_argument, NULL, 'v'},
+ {0, 0, 0, 0}
+};
+
+static void show_help()
+{
+ printf("Usage: espeakup [options]\n\n");
+ printf("Options are as follows:\n");
+ printf(" --debug, -d\tDebug mode (stay in the foreground)\n");
+ printf(" --help, -h\tShow this help\n");
+ printf(" --version, -v\tDisplay the software version.\n");
+ exit(0);
+}
+
+static void show_version(void)
+{
+ printf("espeakup %s\n", Version);
+ printf("Copyright (C) 2008 William Hubbs\n");
+ printf("License GPLv3+: GNU GPL version 3 or later\n");
+ printf("You are free to change and redistribute this software.\n");
+ exit(0);
+}
+
+void process_cli(int argc, char **argv)
+{
+ int opt;
+
+ do {
+ opt = getopt_long(argc, argv, shortOptions, longOptions, NULL);
+ switch (opt) {
+ case 'd':
+ debug = 1;
+ break;
+ case 'h':
+ show_help();
+ break;
+ case 'v':
+ show_version();
+ break;
+ case -1:
+ break;
+ default:
+ show_help();
+ break;
+ }
+ } while (opt != -1);
+}
diff --git a/espeakup.c b/espeakup.c
index 406cce3..26e35d1 100644
--- a/espeakup.c
+++ b/espeakup.c
@@ -26,12 +26,6 @@
#include "espeakup.h"
-/* program version */
-const char *Version = "0.2";
-
-/* command line options */
-const char *shortOptions = "dhv";
-
/* path to our pid file */
const char *pidPath = "/var/run/espeakup.pid";
@@ -90,46 +84,6 @@ void espeakup_sighandler(int sig)
exit(0);
}
-void show_help()
-{
- printf("Usage: espeakup [-d] [-h] [-v]\n\n");
- printf("-d\tDebug mode (stay in the foreground)\n");
- printf("-h\tShow this help\n");
- printf("-v\tDisplay the software version.\n");
- exit(0);
-}
-
-void show_version(void)
-{
- printf("espeakup %s\n", Version);
- printf("Copyright (C) 2008 William Hubbs\n");
- printf("License GPLv3+: GNU GPL version 3 or later\n");
- printf("You are free to change and redistribute this software.\n");
- exit(0);
-}
-
-void process_cli(int argc, char **argv)
-{
- int opt;
-
- while ((opt = getopt(argc, argv, shortOptions)) != -1) {
- switch (opt) {
- case 'd':
- debug = 1;
- break;
- case 'h':
- show_help();
- break;
- case 'v':
- show_version();
- break;
- default:
- show_help();
- break;
- }
- }
-}
-
int main(int argc, char **argv)
{
struct synth_t s;
diff --git a/espeakup.h b/espeakup.h
index 0ed695c..0518ed0 100644
--- a/espeakup.h
+++ b/espeakup.h
@@ -54,6 +54,7 @@ struct synth_t {
extern int debug;
+extern void process_cli(int argc, char **argv);
extern void queue_clear(void);
extern void queue_add_cmd(enum command_t cmd, enum adjust_t adj,
int value);