Initial revision
[mono.git] / mono / dis / main.c
1 /*
2  * dis.c: Sample disassembler
3  *
4  * Author:
5  *   Miguel de Icaza (miguel@ximian.com)
6  *
7  * (C) 2001 Ximian, Inc.
8  */
9 #include <config.h>
10 #include <stdio.h>
11 #include <glib.h>
12 #include <mono/metadata/assembly.h>
13 #include <mono/metadata/cil-coff.h>
14
15 FILE *output;
16
17 /* True if you want to get a dump of the header data */
18 gboolean dump_header_data_p = FALSE;
19
20 static void
21 dump_header_data (MonoAssembly *ass)
22 {
23         if (!dump_header_data_p)
24                 return;
25
26         fprintf (output,
27                  "// Ximian's CIL disassembler, version 1.0\n"
28                  "// Copyright (C) 2001 Ximian, Inc.\n\n");
29 }
30
31 static void
32 disassemble_file (const char *file)
33 {
34         enum MonoAssemblyOpenStatus status;
35         MonoAssembly *ass;
36
37         ass = mono_assembly_open (file, &status);
38         if (ass == NULL){
39                 fprintf (stderr, "Error while trying to process %s\n", file);
40                 
41         }
42
43         dump_header_data (ass);
44
45         mono_assembly_close (ass);
46 }
47
48 static void
49 usage (void)
50 {
51         fprintf (stderr, "Usage is: monodis file1 ..\n");
52         exit (1);
53 }
54
55 int
56 main (int argc, char *argv [])
57 {
58         GList *input_files = NULL, *l;
59         int i;
60
61         output = stdout;
62         for (i = 1; i < argc; i++){
63                 if (argv [i][0] == '-'){
64                         if (argv [i][1] == 'h')
65                                 usage ();
66                         else if (argv [i][1] == 'd')
67                                 dump_header_data_p = TRUE;
68                 } else
69                         input_files = g_list_append (input_files, argv [i]);
70         }
71
72         if (input_files == NULL)
73                 usage ();
74         
75         for (l = input_files; l; l = l->next)
76                 disassemble_file (l->data);
77 }