1 | /*****************************************************************************/ |
2 | /* */ |
3 | /* main.c */ |
4 | /* */ |
5 | /* Main program for the ar65 archiver */ |
6 | /* */ |
7 | /* */ |
8 | /* */ |
9 | /* (C) 1998-2013, Ullrich von Bassewitz */ |
10 | /* Roemerstrasse 52 */ |
11 | /* D-70794 Filderstadt */ |
12 | /* EMail: uz@cc65.org */ |
13 | /* */ |
14 | /* */ |
15 | /* This software is provided 'as-is', without any expressed or implied */ |
16 | /* warranty. In no event will the authors be held liable for any damages */ |
17 | /* arising from the use of this software. */ |
18 | /* */ |
19 | /* Permission is granted to anyone to use this software for any purpose, */ |
20 | /* including commercial applications, and to alter it and redistribute it */ |
21 | /* freely, subject to the following restrictions: */ |
22 | /* */ |
23 | /* 1. The origin of this software must not be misrepresented; you must not */ |
24 | /* claim that you wrote the original software. If you use this software */ |
25 | /* in a product, an acknowledgment in the product documentation would be */ |
26 | /* appreciated but is not required. */ |
27 | /* 2. Altered source versions must be plainly marked as such, and must not */ |
28 | /* be misrepresented as being the original software. */ |
29 | /* 3. This notice may not be removed or altered from any source */ |
30 | /* distribution. */ |
31 | /* */ |
32 | /*****************************************************************************/ |
33 | |
34 | |
35 | |
36 | #include <stdio.h> |
37 | #include <stdlib.h> |
38 | #include <string.h> |
39 | #include <time.h> |
40 | |
41 | /* common */ |
42 | #include "cmdline.h" |
43 | #include "print.h" |
44 | #include "version.h" |
45 | |
46 | #include "global.h" |
47 | #include "add.h" |
48 | #include "del.h" |
49 | #include "list.h" |
50 | #include "extract.h" |
51 | |
52 | |
53 | |
54 | /*****************************************************************************/ |
55 | /* Code */ |
56 | /*****************************************************************************/ |
57 | |
58 | |
59 | |
60 | static void Usage (void) |
61 | /* Print usage information and exit */ |
62 | { |
63 | fprintf (stderr, "Usage: %s <operation ...> lib file|module ...\n" |
64 | "Operations are some of:\n" |
65 | "\tr\tAdd modules\n" |
66 | "\td\tDelete modules\n" |
67 | "\tt\tList library table\n" |
68 | "\tv\tIncrease verbosity (put before other operation)\n" |
69 | "\tx\tExtract modules\n" |
70 | "\tV\tPrint the archiver version\n" , |
71 | ProgName); |
72 | exit (EXIT_FAILURE); |
73 | } |
74 | |
75 | |
76 | |
77 | int main (int argc, char* argv []) |
78 | /* Assembler main program */ |
79 | { |
80 | unsigned I; |
81 | |
82 | /* Initialize the cmdline module */ |
83 | InitCmdLine (&argc, &argv, "ar65" ); |
84 | |
85 | /* We must have a file name */ |
86 | if (ArgCount < 2) { |
87 | Usage (); |
88 | } |
89 | |
90 | /* Check the parameters */ |
91 | I = 1; |
92 | while (I < ArgCount) { |
93 | |
94 | /* Get the argument */ |
95 | const char* Arg = ArgVec [I]; |
96 | |
97 | switch (Arg [0]) { |
98 | |
99 | case 'r': /* POSIX.2 */ |
100 | case 'a': /* staying compatible */ |
101 | AddObjFiles (ArgCount - I - 1, &ArgVec[I+1]); |
102 | break; |
103 | |
104 | case 'd': |
105 | DelObjFiles (ArgCount - I - 1, &ArgVec [I+1]); |
106 | break; |
107 | |
108 | case 't': /* POSIX.2 */ |
109 | case 'l': /* staying compatible */ |
110 | if (Arg [1] == 'v') { |
111 | ++Verbosity; |
112 | } |
113 | ListObjFiles (ArgCount - I - 1, &ArgVec [I+1]); |
114 | break; |
115 | |
116 | case 'v': |
117 | ++Verbosity; |
118 | break; |
119 | |
120 | case 'x': |
121 | ExtractObjFiles (ArgCount - I - 1, &ArgVec [I+1]); |
122 | break; |
123 | |
124 | case 'V': |
125 | fprintf (stderr, "%s V%s\n" , ProgName, GetVersionAsString ()); |
126 | break; |
127 | |
128 | default: |
129 | fprintf (stderr, "Unknown option: %s\n" , Arg); |
130 | Usage (); |
131 | |
132 | } |
133 | |
134 | /* Next argument */ |
135 | ++I; |
136 | } |
137 | |
138 | /* Return an apropriate exit code */ |
139 | return EXIT_SUCCESS; |
140 | } |
141 | |