Add a git revision number
[gpgme.git] / complus / guidgen.c
1 /* guidgen.c - Tool to create GUIDs
2  *      Copyright (C) 2001 g10 Code GmbH
3  *
4  * This file is part of GPGME.
5  *
6  * GPGME is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GPGME is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20
21
22 #include <config.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <errno.h>
27 #include <assert.h>
28 #include <time.h>
29 #include <windows.h>
30
31 #include "obj_base.h"
32
33 #include "argparse.h"
34
35
36 enum cmd_and_opt_values { aNull = 0,
37     oVerbose      = 'v',
38
39 aTest };
40
41
42 static ARGPARSE_OPTS opts[] = {
43
44     { 301, NULL, 0, "@Options:\n " },
45
46     { oVerbose, "verbose",   0, "verbose" },
47 {0} };
48
49 static struct {
50     int verbose;
51 } opt;
52
53
54 static void create_guid (void);
55
56 static const char *
57 my_strusage( int level )
58 {
59     const char *p;
60     switch( level ) {
61       case 11: p = "guidgen";
62         break;
63       case 13: p = VERSION; break;
64       /*case 17: p = PRINTABLE_OS_NAME; break;*/
65       case 19: p =
66             "Please report bugs to <gpgme-bugs@gnupg.org>.\n";
67         break;
68       case 1:
69       case 40:  p =
70             "Usage: guidgen [options] (-h for help)";
71         break;
72       case 41:  p =
73             "Syntax: guidgen [options]\n"
74               "Generate GUIDs\n";
75         break;
76
77       default:  p = NULL;
78     }
79     return p;
80 }
81
82
83 int
84 main (int argc, char **argv )
85 {
86     ARGPARSE_ARGS pargs;
87
88     set_strusage( my_strusage );
89     /*log_set_name ("gpa"); not yet implemented in logging.c */
90
91     pargs.argc = &argc;
92     pargs.argv = &argv;
93     pargs.flags=  0;
94     while( arg_parse( &pargs, opts) ) {
95         switch( pargs.r_opt ) {
96           case oVerbose: opt.verbose++; break;
97
98           default : pargs.err = 2; break;
99         }
100     }
101
102     if (!argc)
103         create_guid();
104     else {
105         int n;
106
107         for (n = atoi (argv[0]); n > 0; n-- )
108             create_guid ();
109     }
110
111     return 0;
112 }
113
114
115 static void
116 create_guid ()
117 {
118     GUID guid, *id;
119     id = &guid;
120     if ( CoCreateGuid (id) ) {
121         fprintf (stderr,"failed to create GUID\n");
122         exit (1);
123     }
124     printf( "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
125             id->Data1, id->Data2, id->Data3,
126             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
127             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
128 }
129
130