summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy.zurcher@heraeus.com>2014-01-06 15:39:05 +0100
committerJérémy Zurcher <jeremy.zurcher@heraeus.com>2014-01-06 15:39:05 +0100
commit09397c778731916891d660ac4ebbb6f3ac5a15fb (patch)
tree9ec6b32f0a32f2744d173ca0fe91bc5ea2f2cb50 /main.c
downloaddjb-way-09397c778731916891d660ac4ebbb6f3ac5a15fb.zip
djb-way-09397c778731916891d660ac4ebbb6f3ac5a15fb.tar.gz
Initial commit
Diffstat (limited to 'main.c')
-rw-r--r--main.c146
1 files changed, 146 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..3979896
--- /dev/null
+++ b/main.c
@@ -0,0 +1,146 @@
+
+/*
+ main.c
+
+ Copyright (C) 2004 Jeremy Zurcher <jeremy@asynk.ch>
+
+ This is a 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 2 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 libdaemon; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libgen.h>
+#include <string.h>
+/*#ifdef SYSV */
+ #include <time.h>
+/*#else
+ #include <sys/time.h>
+#endif
+*/
+#include "main.h"
+#include "myflag.h"
+#include "lib/mylib.h"
+#include "ar/arch.h"
+
+static char *prog_name = NULL;
+
+static void usage(void)
+{
+ fprintf(stderr,"\n/*\n *\t=> %s <= version "VERSION", "COPYRIGHT"\n *\n",prog_name);
+ fprintf(stderr," *\t\tThis program is a free software; you can redistribute it and/or modify\n");
+ fprintf(stderr," *\t\tit under the terms of the GNU General Public License as published by\n");
+ fprintf(stderr," *\t\tthe Free Software Foundation; either version 2 of the License, or\n");
+ fprintf(stderr," *\t\t(at your option) any later version.\n *\n");
+ fprintf(stderr," *\t\tThis program is distributed in the hope that it will be useful,\n");
+ fprintf(stderr," *\t\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n");
+ fprintf(stderr," *\t\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n");
+ fprintf(stderr," *\t\tGNU General Public License for more details.\n");
+ fprintf(stderr," */\n\n");
+
+ fprintf(stderr,"usage : %s [-v] [ -a argument ]\n",prog_name);
+ fprintf(stderr,"\t\t--version : print version\n");
+ fprintf(stderr,"\t\t--help : print this screen\n");
+ fprintf(stderr,"\t\t-v : verbose mode\n");
+ fprintf(stderr,"\t\t-a : an argument\n");
+ exit(EXIT_FAILURE);
+}
+
+static void version()
+{
+ fprintf(stderr,"%s version "VERSION", "COPYRIGHT"\n",prog_name);
+ exit(EXIT_FAILURE);
+}
+
+static void argv_err(int i, char *opt, char *arg)
+{
+ if(i<0) fprintf(stderr,"%s : unknown option -%s.\n",prog_name,opt);
+ else if(i==0) fprintf(stderr,"%s : -%s option, argument is mandatory.\n",prog_name,opt);
+ else fprintf(stderr,"%s : -%s option, wrong argument %s.\n",prog_name,opt,arg);
+ exit(EXIT_FAILURE);
+}
+
+int main(int argc, char **argv)
+{
+ int verbose = 0;
+ char *arg = NULL;
+
+ char *tmp = NULL;
+
+ struct timespec s0, s1; /* defined in <time.h> as a time_t and a long */
+
+ clock_gettime(CLOCK_REALTIME, &s0);
+
+ /* eat progname */
+ prog_name = basename(*argv);
+ ++argv;
+ --argc;
+ while(argc){
+ tmp = *argv;
+ if(*tmp=='-'){
+ tmp++;
+ if(*tmp=='-'){
+ /* long options */
+ tmp++;
+ if(!strncmp(tmp,"help",5)) usage();
+ else if(!strncmp(tmp,"version",8)) version();
+ else argv_err(-1,tmp-1,NULL);
+ }
+ /* short otions */
+ else if(*tmp=='v') {
+ verbose = 1;
+ }
+ else if(*tmp=='a') {
+ if(!--argc) argv_err(0,"a",NULL); /* need argument */
+ arg = *++argv;
+ }
+ else {
+ argv_err(-1,*argv,NULL); /* unknown option */
+ }
+ }
+ else {
+ /* no (more) options */
+ break;
+ }
+ argc--;
+ argv++;
+ }
+
+ printf("-v : %d\n",verbose);
+ printf("-a : %s\n",arg);
+
+ while(argc--) printf("argument : %s\n",*argv++);
+
+ mylib();
+ arch();
+ printf("HAS_MYFLAG : %d\n",HAS_MYFLAG);
+
+ clock_gettime(CLOCK_REALTIME, &s1);
+ printf ("time measure : %f sec.\n",
+ (float)(s1.tv_sec - s0.tv_sec)+((float)(s1.tv_nsec-s0.tv_nsec))/1E9);
+ exit(EXIT_SUCCESS);
+}
+