xref: /freebsd/sys/contrib/dev/acpica/compiler/asloptions.c (revision 79c6d946797dd4db2f2a943f664a4e976f6c942b)
1a9d8d09cSJung-uk Kim /******************************************************************************
2a9d8d09cSJung-uk Kim  *
3a9d8d09cSJung-uk Kim  * Module Name: asloptions - compiler command line processing
4a9d8d09cSJung-uk Kim  *
5a9d8d09cSJung-uk Kim  *****************************************************************************/
6a9d8d09cSJung-uk Kim 
7a9d8d09cSJung-uk Kim /*
8a9d8d09cSJung-uk Kim  * Copyright (C) 2000 - 2013, Intel Corp.
9a9d8d09cSJung-uk Kim  * All rights reserved.
10a9d8d09cSJung-uk Kim  *
11a9d8d09cSJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12a9d8d09cSJung-uk Kim  * modification, are permitted provided that the following conditions
13a9d8d09cSJung-uk Kim  * are met:
14a9d8d09cSJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15a9d8d09cSJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16a9d8d09cSJung-uk Kim  *    without modification.
17a9d8d09cSJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18a9d8d09cSJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19a9d8d09cSJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20a9d8d09cSJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21a9d8d09cSJung-uk Kim  *    binary redistribution.
22a9d8d09cSJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23a9d8d09cSJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24a9d8d09cSJung-uk Kim  *    from this software without specific prior written permission.
25a9d8d09cSJung-uk Kim  *
26a9d8d09cSJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27a9d8d09cSJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28a9d8d09cSJung-uk Kim  * Software Foundation.
29a9d8d09cSJung-uk Kim  *
30a9d8d09cSJung-uk Kim  * NO WARRANTY
31a9d8d09cSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32a9d8d09cSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33a9d8d09cSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34a9d8d09cSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35a9d8d09cSJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36a9d8d09cSJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37a9d8d09cSJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38a9d8d09cSJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39a9d8d09cSJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40a9d8d09cSJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41a9d8d09cSJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42a9d8d09cSJung-uk Kim  */
43a9d8d09cSJung-uk Kim 
44a9d8d09cSJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
45a9d8d09cSJung-uk Kim #include <contrib/dev/acpica/include/acapps.h>
46a9d8d09cSJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h>
47a9d8d09cSJung-uk Kim 
48a9d8d09cSJung-uk Kim #define _COMPONENT          ACPI_COMPILER
49a9d8d09cSJung-uk Kim         ACPI_MODULE_NAME    ("asloption")
50a9d8d09cSJung-uk Kim 
51a9d8d09cSJung-uk Kim 
52a9d8d09cSJung-uk Kim /* Local prototypes */
53a9d8d09cSJung-uk Kim 
54a9d8d09cSJung-uk Kim static int
55a9d8d09cSJung-uk Kim AslDoOptions (
56a9d8d09cSJung-uk Kim     int                     argc,
57a9d8d09cSJung-uk Kim     char                    **argv,
58a9d8d09cSJung-uk Kim     BOOLEAN                 IsResponseFile);
59a9d8d09cSJung-uk Kim 
60a9d8d09cSJung-uk Kim static void
61a9d8d09cSJung-uk Kim AslMergeOptionTokens (
62a9d8d09cSJung-uk Kim     char                    *InBuffer,
63a9d8d09cSJung-uk Kim     char                    *OutBuffer);
64a9d8d09cSJung-uk Kim 
65a9d8d09cSJung-uk Kim static int
66a9d8d09cSJung-uk Kim AslDoResponseFile (
67a9d8d09cSJung-uk Kim     char                    *Filename);
68a9d8d09cSJung-uk Kim 
69a9d8d09cSJung-uk Kim 
70a9d8d09cSJung-uk Kim #define ASL_TOKEN_SEPARATORS    " \t\n"
71*79c6d946SJung-uk Kim #define ASL_SUPPORTED_OPTIONS   "@:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^r:s|t|T+G^v^w|x:z"
72a9d8d09cSJung-uk Kim 
73a9d8d09cSJung-uk Kim 
74a9d8d09cSJung-uk Kim /*******************************************************************************
75a9d8d09cSJung-uk Kim  *
76a9d8d09cSJung-uk Kim  * FUNCTION:    AslCommandLine
77a9d8d09cSJung-uk Kim  *
78a9d8d09cSJung-uk Kim  * PARAMETERS:  argc/argv
79a9d8d09cSJung-uk Kim  *
80a9d8d09cSJung-uk Kim  * RETURN:      Last argv index
81a9d8d09cSJung-uk Kim  *
82a9d8d09cSJung-uk Kim  * DESCRIPTION: Command line processing
83a9d8d09cSJung-uk Kim  *
84a9d8d09cSJung-uk Kim  ******************************************************************************/
85a9d8d09cSJung-uk Kim 
86a9d8d09cSJung-uk Kim int
87a9d8d09cSJung-uk Kim AslCommandLine (
88a9d8d09cSJung-uk Kim     int                     argc,
89a9d8d09cSJung-uk Kim     char                    **argv)
90a9d8d09cSJung-uk Kim {
91a9d8d09cSJung-uk Kim     int                     BadCommandLine = 0;
92a9d8d09cSJung-uk Kim     ACPI_STATUS             Status;
93a9d8d09cSJung-uk Kim 
94a9d8d09cSJung-uk Kim 
95a9d8d09cSJung-uk Kim     /* Minimum command line contains at least the command and an input file */
96a9d8d09cSJung-uk Kim 
97a9d8d09cSJung-uk Kim     if (argc < 2)
98a9d8d09cSJung-uk Kim     {
99a9d8d09cSJung-uk Kim         printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
100a9d8d09cSJung-uk Kim         Usage ();
101a9d8d09cSJung-uk Kim         exit (1);
102a9d8d09cSJung-uk Kim     }
103a9d8d09cSJung-uk Kim 
104a9d8d09cSJung-uk Kim     /* Process all command line options */
105a9d8d09cSJung-uk Kim 
106a9d8d09cSJung-uk Kim     BadCommandLine = AslDoOptions (argc, argv, FALSE);
107a9d8d09cSJung-uk Kim 
108a9d8d09cSJung-uk Kim     if (Gbl_DoTemplates)
109a9d8d09cSJung-uk Kim     {
110a9d8d09cSJung-uk Kim         Status = DtCreateTemplates (Gbl_TemplateSignature);
111a9d8d09cSJung-uk Kim         if (ACPI_FAILURE (Status))
112a9d8d09cSJung-uk Kim         {
113a9d8d09cSJung-uk Kim             exit (-1);
114a9d8d09cSJung-uk Kim         }
115a9d8d09cSJung-uk Kim         exit (1);
116a9d8d09cSJung-uk Kim     }
117a9d8d09cSJung-uk Kim 
118a9d8d09cSJung-uk Kim     /* Next parameter must be the input filename */
119a9d8d09cSJung-uk Kim 
120a9d8d09cSJung-uk Kim     if (!argv[AcpiGbl_Optind] &&
121a9d8d09cSJung-uk Kim         !Gbl_DisasmFlag &&
122a9d8d09cSJung-uk Kim         !Gbl_GetAllTables)
123a9d8d09cSJung-uk Kim     {
124a9d8d09cSJung-uk Kim         printf ("Missing input filename\n");
125a9d8d09cSJung-uk Kim         BadCommandLine = TRUE;
126a9d8d09cSJung-uk Kim     }
127a9d8d09cSJung-uk Kim 
128a9d8d09cSJung-uk Kim     if (Gbl_DoSignon)
129a9d8d09cSJung-uk Kim     {
130a9d8d09cSJung-uk Kim         printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
131a9d8d09cSJung-uk Kim         if (Gbl_IgnoreErrors)
132a9d8d09cSJung-uk Kim         {
133a9d8d09cSJung-uk Kim             printf ("Ignoring all errors, forcing AML file generation\n\n");
134a9d8d09cSJung-uk Kim         }
135a9d8d09cSJung-uk Kim     }
136a9d8d09cSJung-uk Kim 
137a9d8d09cSJung-uk Kim     if (BadCommandLine)
138a9d8d09cSJung-uk Kim     {
139*79c6d946SJung-uk Kim         printf ("Use -h option for help information\n");
140a9d8d09cSJung-uk Kim         exit (1);
141a9d8d09cSJung-uk Kim     }
142a9d8d09cSJung-uk Kim 
143a9d8d09cSJung-uk Kim     return (AcpiGbl_Optind);
144a9d8d09cSJung-uk Kim }
145a9d8d09cSJung-uk Kim 
146a9d8d09cSJung-uk Kim 
147a9d8d09cSJung-uk Kim /*******************************************************************************
148a9d8d09cSJung-uk Kim  *
149a9d8d09cSJung-uk Kim  * FUNCTION:    AslDoOptions
150a9d8d09cSJung-uk Kim  *
151a9d8d09cSJung-uk Kim  * PARAMETERS:  argc/argv           - Standard argc/argv
152a9d8d09cSJung-uk Kim  *              IsResponseFile      - TRUE if executing a response file.
153a9d8d09cSJung-uk Kim  *
154a9d8d09cSJung-uk Kim  * RETURN:      Status
155a9d8d09cSJung-uk Kim  *
156a9d8d09cSJung-uk Kim  * DESCRIPTION: Command line option processing
157a9d8d09cSJung-uk Kim  *
158a9d8d09cSJung-uk Kim  ******************************************************************************/
159a9d8d09cSJung-uk Kim 
160a9d8d09cSJung-uk Kim static int
161a9d8d09cSJung-uk Kim AslDoOptions (
162a9d8d09cSJung-uk Kim     int                     argc,
163a9d8d09cSJung-uk Kim     char                    **argv,
164a9d8d09cSJung-uk Kim     BOOLEAN                 IsResponseFile)
165a9d8d09cSJung-uk Kim {
166a9d8d09cSJung-uk Kim     ACPI_STATUS             Status;
167a9d8d09cSJung-uk Kim     UINT32                  j;
168a9d8d09cSJung-uk Kim 
169a9d8d09cSJung-uk Kim 
170a9d8d09cSJung-uk Kim     /* Get the command line options */
171a9d8d09cSJung-uk Kim 
172a9d8d09cSJung-uk Kim     while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j)
173a9d8d09cSJung-uk Kim     {
174a9d8d09cSJung-uk Kim     case '@':   /* Begin a response file */
175a9d8d09cSJung-uk Kim 
176a9d8d09cSJung-uk Kim         if (IsResponseFile)
177a9d8d09cSJung-uk Kim         {
178a9d8d09cSJung-uk Kim             printf ("Nested command files are not supported\n");
179a9d8d09cSJung-uk Kim             return (-1);
180a9d8d09cSJung-uk Kim         }
181a9d8d09cSJung-uk Kim 
182a9d8d09cSJung-uk Kim         if (AslDoResponseFile (AcpiGbl_Optarg))
183a9d8d09cSJung-uk Kim         {
184a9d8d09cSJung-uk Kim             return (-1);
185a9d8d09cSJung-uk Kim         }
186a9d8d09cSJung-uk Kim         break;
187a9d8d09cSJung-uk Kim 
188a9d8d09cSJung-uk Kim     case 'b':   /* Debug output options */
189a9d8d09cSJung-uk Kim 
190a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
191a9d8d09cSJung-uk Kim         {
192a9d8d09cSJung-uk Kim         case 'f':
193a9d8d09cSJung-uk Kim 
194a9d8d09cSJung-uk Kim             AslCompilerdebug = 1; /* same as yydebug */
195a9d8d09cSJung-uk Kim             DtParserdebug = 1;
196a9d8d09cSJung-uk Kim             PrParserdebug = 1;
197a9d8d09cSJung-uk Kim             break;
198a9d8d09cSJung-uk Kim 
199a9d8d09cSJung-uk Kim         case 't':
200a9d8d09cSJung-uk Kim 
201a9d8d09cSJung-uk Kim             break;
202a9d8d09cSJung-uk Kim 
203a9d8d09cSJung-uk Kim         default:
204a9d8d09cSJung-uk Kim 
205a9d8d09cSJung-uk Kim             printf ("Unknown option: -b%s\n", AcpiGbl_Optarg);
206a9d8d09cSJung-uk Kim             return (-1);
207a9d8d09cSJung-uk Kim         }
208a9d8d09cSJung-uk Kim 
209a9d8d09cSJung-uk Kim         /* Produce debug output file */
210a9d8d09cSJung-uk Kim 
211a9d8d09cSJung-uk Kim         Gbl_DebugFlag = TRUE;
212a9d8d09cSJung-uk Kim         break;
213a9d8d09cSJung-uk Kim 
214a9d8d09cSJung-uk Kim     case 'c':
215a9d8d09cSJung-uk Kim 
216a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
217a9d8d09cSJung-uk Kim         {
218a9d8d09cSJung-uk Kim         case 'r':
219a9d8d09cSJung-uk Kim 
220a9d8d09cSJung-uk Kim             Gbl_NoResourceChecking = TRUE;
221a9d8d09cSJung-uk Kim             break;
222a9d8d09cSJung-uk Kim 
223a9d8d09cSJung-uk Kim         default:
224a9d8d09cSJung-uk Kim 
225a9d8d09cSJung-uk Kim             printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
226a9d8d09cSJung-uk Kim             return (-1);
227a9d8d09cSJung-uk Kim         }
228a9d8d09cSJung-uk Kim         break;
229a9d8d09cSJung-uk Kim 
230a9d8d09cSJung-uk Kim     case 'd':   /* Disassembler */
231a9d8d09cSJung-uk Kim 
232a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
233a9d8d09cSJung-uk Kim         {
234a9d8d09cSJung-uk Kim         case '^':
235a9d8d09cSJung-uk Kim 
236a9d8d09cSJung-uk Kim             Gbl_DoCompile = FALSE;
237a9d8d09cSJung-uk Kim             break;
238a9d8d09cSJung-uk Kim 
239a9d8d09cSJung-uk Kim         case 'a':
240a9d8d09cSJung-uk Kim 
241a9d8d09cSJung-uk Kim             Gbl_DoCompile = FALSE;
242a9d8d09cSJung-uk Kim             Gbl_DisassembleAll = TRUE;
243a9d8d09cSJung-uk Kim             break;
244a9d8d09cSJung-uk Kim 
245a9d8d09cSJung-uk Kim         case 'b':   /* Do not convert buffers to resource descriptors */
246a9d8d09cSJung-uk Kim 
247a9d8d09cSJung-uk Kim             AcpiGbl_NoResourceDisassembly = TRUE;
248a9d8d09cSJung-uk Kim             break;
249a9d8d09cSJung-uk Kim 
250a9d8d09cSJung-uk Kim         case 'c':
251a9d8d09cSJung-uk Kim 
252a9d8d09cSJung-uk Kim             break;
253a9d8d09cSJung-uk Kim 
254a9d8d09cSJung-uk Kim         default:
255a9d8d09cSJung-uk Kim 
256a9d8d09cSJung-uk Kim             printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
257a9d8d09cSJung-uk Kim             return (-1);
258a9d8d09cSJung-uk Kim         }
259a9d8d09cSJung-uk Kim 
260a9d8d09cSJung-uk Kim         Gbl_DisasmFlag = TRUE;
261a9d8d09cSJung-uk Kim         break;
262a9d8d09cSJung-uk Kim 
263a9d8d09cSJung-uk Kim     case 'D':   /* Define a symbol */
264a9d8d09cSJung-uk Kim 
265a9d8d09cSJung-uk Kim         PrAddDefine (AcpiGbl_Optarg, NULL, TRUE);
266a9d8d09cSJung-uk Kim         break;
267a9d8d09cSJung-uk Kim 
268a9d8d09cSJung-uk Kim     case 'e':   /* External files for disassembler */
269a9d8d09cSJung-uk Kim 
270a9d8d09cSJung-uk Kim         Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg);
271a9d8d09cSJung-uk Kim         if (ACPI_FAILURE (Status))
272a9d8d09cSJung-uk Kim         {
273a9d8d09cSJung-uk Kim             printf ("Could not add %s to external list\n", AcpiGbl_Optarg);
274a9d8d09cSJung-uk Kim             return (-1);
275a9d8d09cSJung-uk Kim         }
276a9d8d09cSJung-uk Kim         break;
277a9d8d09cSJung-uk Kim 
278*79c6d946SJung-uk Kim     case 'f':
279*79c6d946SJung-uk Kim 
280*79c6d946SJung-uk Kim         switch (AcpiGbl_Optarg[0])
281*79c6d946SJung-uk Kim         {
282*79c6d946SJung-uk Kim         case '^':   /* Ignore errors and force creation of aml file */
283a9d8d09cSJung-uk Kim 
284a9d8d09cSJung-uk Kim             Gbl_IgnoreErrors = TRUE;
285a9d8d09cSJung-uk Kim             break;
286a9d8d09cSJung-uk Kim 
287*79c6d946SJung-uk Kim         case 'e':   /* Disassembler: Get external declaration file */
288*79c6d946SJung-uk Kim 
289*79c6d946SJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
290*79c6d946SJung-uk Kim             {
291*79c6d946SJung-uk Kim                 return (-1);
292*79c6d946SJung-uk Kim             }
293*79c6d946SJung-uk Kim 
294*79c6d946SJung-uk Kim             Gbl_ExternalRefFilename = AcpiGbl_Optarg;
295*79c6d946SJung-uk Kim             break;
296*79c6d946SJung-uk Kim 
297*79c6d946SJung-uk Kim         default:
298*79c6d946SJung-uk Kim 
299*79c6d946SJung-uk Kim             printf ("Unknown option: -f%s\n", AcpiGbl_Optarg);
300*79c6d946SJung-uk Kim             return (-1);
301*79c6d946SJung-uk Kim         }
302*79c6d946SJung-uk Kim         break;
303*79c6d946SJung-uk Kim 
304a9d8d09cSJung-uk Kim     case 'G':
305a9d8d09cSJung-uk Kim 
306a9d8d09cSJung-uk Kim         Gbl_CompileGeneric = TRUE;
307a9d8d09cSJung-uk Kim         break;
308a9d8d09cSJung-uk Kim 
309a9d8d09cSJung-uk Kim     case 'g':   /* Get all ACPI tables */
310a9d8d09cSJung-uk Kim 
311a9d8d09cSJung-uk Kim         Gbl_GetAllTables = TRUE;
312a9d8d09cSJung-uk Kim         Gbl_DoCompile = FALSE;
313a9d8d09cSJung-uk Kim         break;
314a9d8d09cSJung-uk Kim 
315a9d8d09cSJung-uk Kim     case 'h':
316a9d8d09cSJung-uk Kim 
317a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
318a9d8d09cSJung-uk Kim         {
319a9d8d09cSJung-uk Kim         case '^':
320a9d8d09cSJung-uk Kim 
321a9d8d09cSJung-uk Kim             Usage ();
322a9d8d09cSJung-uk Kim             exit (0);
323a9d8d09cSJung-uk Kim 
324a9d8d09cSJung-uk Kim         case 'c':
325a9d8d09cSJung-uk Kim 
326a9d8d09cSJung-uk Kim             UtDisplayConstantOpcodes ();
327a9d8d09cSJung-uk Kim             exit (0);
328a9d8d09cSJung-uk Kim 
329a9d8d09cSJung-uk Kim         case 'f':
330a9d8d09cSJung-uk Kim 
331a9d8d09cSJung-uk Kim             AslFilenameHelp ();
332a9d8d09cSJung-uk Kim             exit (0);
333a9d8d09cSJung-uk Kim 
334a9d8d09cSJung-uk Kim         case 'r':
335a9d8d09cSJung-uk Kim 
336a9d8d09cSJung-uk Kim             /* reserved names */
337a9d8d09cSJung-uk Kim 
338a9d8d09cSJung-uk Kim             ApDisplayReservedNames ();
339a9d8d09cSJung-uk Kim             exit (0);
340a9d8d09cSJung-uk Kim 
341a9d8d09cSJung-uk Kim         case 't':
342a9d8d09cSJung-uk Kim 
343a9d8d09cSJung-uk Kim             UtDisplaySupportedTables ();
344a9d8d09cSJung-uk Kim             exit (0);
345a9d8d09cSJung-uk Kim 
346a9d8d09cSJung-uk Kim         default:
347a9d8d09cSJung-uk Kim 
348a9d8d09cSJung-uk Kim             printf ("Unknown option: -h%s\n", AcpiGbl_Optarg);
349a9d8d09cSJung-uk Kim             return (-1);
350a9d8d09cSJung-uk Kim         }
351a9d8d09cSJung-uk Kim 
352a9d8d09cSJung-uk Kim     case 'I':   /* Add an include file search directory */
353a9d8d09cSJung-uk Kim 
354a9d8d09cSJung-uk Kim         FlAddIncludeDirectory (AcpiGbl_Optarg);
355a9d8d09cSJung-uk Kim         break;
356a9d8d09cSJung-uk Kim 
357a9d8d09cSJung-uk Kim     case 'i':   /* Output AML as an include file */
358a9d8d09cSJung-uk Kim 
359a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
360a9d8d09cSJung-uk Kim         {
361a9d8d09cSJung-uk Kim         case 'a':
362a9d8d09cSJung-uk Kim 
363a9d8d09cSJung-uk Kim             /* Produce assembly code include file */
364a9d8d09cSJung-uk Kim 
365a9d8d09cSJung-uk Kim             Gbl_AsmIncludeOutputFlag = TRUE;
366a9d8d09cSJung-uk Kim             break;
367a9d8d09cSJung-uk Kim 
368a9d8d09cSJung-uk Kim         case 'c':
369a9d8d09cSJung-uk Kim 
370a9d8d09cSJung-uk Kim             /* Produce C include file */
371a9d8d09cSJung-uk Kim 
372a9d8d09cSJung-uk Kim             Gbl_C_IncludeOutputFlag = TRUE;
373a9d8d09cSJung-uk Kim             break;
374a9d8d09cSJung-uk Kim 
375a9d8d09cSJung-uk Kim         case 'n':
376a9d8d09cSJung-uk Kim 
377a9d8d09cSJung-uk Kim             /* Compiler/Disassembler: Ignore the NOOP operator */
378a9d8d09cSJung-uk Kim 
379a9d8d09cSJung-uk Kim             AcpiGbl_IgnoreNoopOperator = TRUE;
380a9d8d09cSJung-uk Kim             break;
381a9d8d09cSJung-uk Kim 
382a9d8d09cSJung-uk Kim         default:
383a9d8d09cSJung-uk Kim 
384a9d8d09cSJung-uk Kim             printf ("Unknown option: -i%s\n", AcpiGbl_Optarg);
385a9d8d09cSJung-uk Kim             return (-1);
386a9d8d09cSJung-uk Kim         }
387a9d8d09cSJung-uk Kim         break;
388a9d8d09cSJung-uk Kim 
389a9d8d09cSJung-uk Kim     case 'l':   /* Listing files */
390a9d8d09cSJung-uk Kim 
391a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
392a9d8d09cSJung-uk Kim         {
393a9d8d09cSJung-uk Kim         case '^':
394a9d8d09cSJung-uk Kim 
395a9d8d09cSJung-uk Kim             /* Produce listing file (Mixed source/aml) */
396a9d8d09cSJung-uk Kim 
397a9d8d09cSJung-uk Kim             Gbl_ListingFlag = TRUE;
398a9d8d09cSJung-uk Kim             break;
399a9d8d09cSJung-uk Kim 
400a9d8d09cSJung-uk Kim         case 'i':
401a9d8d09cSJung-uk Kim 
402a9d8d09cSJung-uk Kim             /* Produce preprocessor output file */
403a9d8d09cSJung-uk Kim 
404a9d8d09cSJung-uk Kim             Gbl_PreprocessorOutputFlag = TRUE;
405a9d8d09cSJung-uk Kim             break;
406a9d8d09cSJung-uk Kim 
407a9d8d09cSJung-uk Kim         case 'n':
408a9d8d09cSJung-uk Kim 
409a9d8d09cSJung-uk Kim             /* Produce namespace file */
410a9d8d09cSJung-uk Kim 
411a9d8d09cSJung-uk Kim             Gbl_NsOutputFlag = TRUE;
412a9d8d09cSJung-uk Kim             break;
413a9d8d09cSJung-uk Kim 
414a9d8d09cSJung-uk Kim         case 's':
415a9d8d09cSJung-uk Kim 
416a9d8d09cSJung-uk Kim             /* Produce combined source file */
417a9d8d09cSJung-uk Kim 
418a9d8d09cSJung-uk Kim             Gbl_SourceOutputFlag = TRUE;
419a9d8d09cSJung-uk Kim             break;
420a9d8d09cSJung-uk Kim 
421a9d8d09cSJung-uk Kim         default:
422a9d8d09cSJung-uk Kim 
423a9d8d09cSJung-uk Kim             printf ("Unknown option: -l%s\n", AcpiGbl_Optarg);
424a9d8d09cSJung-uk Kim             return (-1);
425a9d8d09cSJung-uk Kim         }
426a9d8d09cSJung-uk Kim         break;
427a9d8d09cSJung-uk Kim 
428a9d8d09cSJung-uk Kim     case 'm':   /* Set line buffer size */
429a9d8d09cSJung-uk Kim 
430a9d8d09cSJung-uk Kim         Gbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024;
431a9d8d09cSJung-uk Kim         if (Gbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE)
432a9d8d09cSJung-uk Kim         {
433a9d8d09cSJung-uk Kim             Gbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE;
434a9d8d09cSJung-uk Kim         }
435a9d8d09cSJung-uk Kim         printf ("Line Buffer Size: %u\n", Gbl_LineBufferSize);
436a9d8d09cSJung-uk Kim         break;
437a9d8d09cSJung-uk Kim 
438a9d8d09cSJung-uk Kim     case 'n':   /* Parse only */
439a9d8d09cSJung-uk Kim 
440a9d8d09cSJung-uk Kim         Gbl_ParseOnlyFlag = TRUE;
441a9d8d09cSJung-uk Kim         break;
442a9d8d09cSJung-uk Kim 
443a9d8d09cSJung-uk Kim     case 'o':   /* Control compiler AML optimizations */
444a9d8d09cSJung-uk Kim 
445a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
446a9d8d09cSJung-uk Kim         {
447a9d8d09cSJung-uk Kim         case 'a':
448a9d8d09cSJung-uk Kim 
449a9d8d09cSJung-uk Kim             /* Disable all optimizations */
450a9d8d09cSJung-uk Kim 
451a9d8d09cSJung-uk Kim             Gbl_FoldConstants = FALSE;
452a9d8d09cSJung-uk Kim             Gbl_IntegerOptimizationFlag = FALSE;
453a9d8d09cSJung-uk Kim             Gbl_ReferenceOptimizationFlag = FALSE;
454a9d8d09cSJung-uk Kim             break;
455a9d8d09cSJung-uk Kim 
456a9d8d09cSJung-uk Kim         case 'f':
457a9d8d09cSJung-uk Kim 
458a9d8d09cSJung-uk Kim             /* Disable folding on "normal" expressions */
459a9d8d09cSJung-uk Kim 
460a9d8d09cSJung-uk Kim             Gbl_FoldConstants = FALSE;
461a9d8d09cSJung-uk Kim             break;
462a9d8d09cSJung-uk Kim 
463a9d8d09cSJung-uk Kim         case 'i':
464a9d8d09cSJung-uk Kim 
465a9d8d09cSJung-uk Kim             /* Disable integer optimization to constants */
466a9d8d09cSJung-uk Kim 
467a9d8d09cSJung-uk Kim             Gbl_IntegerOptimizationFlag = FALSE;
468a9d8d09cSJung-uk Kim             break;
469a9d8d09cSJung-uk Kim 
470a9d8d09cSJung-uk Kim         case 'n':
471a9d8d09cSJung-uk Kim 
472a9d8d09cSJung-uk Kim             /* Disable named reference optimization */
473a9d8d09cSJung-uk Kim 
474a9d8d09cSJung-uk Kim             Gbl_ReferenceOptimizationFlag = FALSE;
475a9d8d09cSJung-uk Kim             break;
476a9d8d09cSJung-uk Kim 
477a9d8d09cSJung-uk Kim         case 't':
478a9d8d09cSJung-uk Kim 
479a9d8d09cSJung-uk Kim             /* Display compile time(s) */
480a9d8d09cSJung-uk Kim 
481a9d8d09cSJung-uk Kim             Gbl_CompileTimesFlag = TRUE;
482a9d8d09cSJung-uk Kim             break;
483a9d8d09cSJung-uk Kim 
484a9d8d09cSJung-uk Kim         default:
485a9d8d09cSJung-uk Kim 
486a9d8d09cSJung-uk Kim             printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
487a9d8d09cSJung-uk Kim             return (-1);
488a9d8d09cSJung-uk Kim         }
489a9d8d09cSJung-uk Kim         break;
490a9d8d09cSJung-uk Kim 
491a9d8d09cSJung-uk Kim     case 'P':   /* Preprocessor options */
492a9d8d09cSJung-uk Kim 
493a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
494a9d8d09cSJung-uk Kim         {
495a9d8d09cSJung-uk Kim         case '^':   /* Proprocess only, emit (.i) file */
496a9d8d09cSJung-uk Kim 
497a9d8d09cSJung-uk Kim             Gbl_PreprocessOnly = TRUE;
498a9d8d09cSJung-uk Kim             Gbl_PreprocessorOutputFlag = TRUE;
499a9d8d09cSJung-uk Kim             break;
500a9d8d09cSJung-uk Kim 
501a9d8d09cSJung-uk Kim         case 'n':   /* Disable preprocessor */
502a9d8d09cSJung-uk Kim 
503a9d8d09cSJung-uk Kim             Gbl_PreprocessFlag = FALSE;
504a9d8d09cSJung-uk Kim             break;
505a9d8d09cSJung-uk Kim 
506a9d8d09cSJung-uk Kim         default:
507a9d8d09cSJung-uk Kim 
508a9d8d09cSJung-uk Kim             printf ("Unknown option: -P%s\n", AcpiGbl_Optarg);
509a9d8d09cSJung-uk Kim             return (-1);
510a9d8d09cSJung-uk Kim         }
511a9d8d09cSJung-uk Kim         break;
512a9d8d09cSJung-uk Kim 
513a9d8d09cSJung-uk Kim     case 'p':   /* Override default AML output filename */
514a9d8d09cSJung-uk Kim 
515a9d8d09cSJung-uk Kim         Gbl_OutputFilenamePrefix = AcpiGbl_Optarg;
516a9d8d09cSJung-uk Kim         Gbl_UseDefaultAmlFilename = FALSE;
517a9d8d09cSJung-uk Kim         break;
518a9d8d09cSJung-uk Kim 
519a9d8d09cSJung-uk Kim     case 'r':   /* Override revision found in table header */
520a9d8d09cSJung-uk Kim 
521a9d8d09cSJung-uk Kim         Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
522a9d8d09cSJung-uk Kim         break;
523a9d8d09cSJung-uk Kim 
524a9d8d09cSJung-uk Kim     case 's':   /* Create AML in a source code file */
525a9d8d09cSJung-uk Kim 
526a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
527a9d8d09cSJung-uk Kim         {
528a9d8d09cSJung-uk Kim         case 'a':
529a9d8d09cSJung-uk Kim 
530a9d8d09cSJung-uk Kim             /* Produce assembly code output file */
531a9d8d09cSJung-uk Kim 
532a9d8d09cSJung-uk Kim             Gbl_AsmOutputFlag = TRUE;
533a9d8d09cSJung-uk Kim             break;
534a9d8d09cSJung-uk Kim 
535a9d8d09cSJung-uk Kim         case 'c':
536a9d8d09cSJung-uk Kim 
537a9d8d09cSJung-uk Kim             /* Produce C hex output file */
538a9d8d09cSJung-uk Kim 
539a9d8d09cSJung-uk Kim             Gbl_C_OutputFlag = TRUE;
540a9d8d09cSJung-uk Kim             break;
541a9d8d09cSJung-uk Kim 
542a9d8d09cSJung-uk Kim         case 'o':
543a9d8d09cSJung-uk Kim 
544a9d8d09cSJung-uk Kim             /* Produce AML offset table in C */
545a9d8d09cSJung-uk Kim 
546a9d8d09cSJung-uk Kim             Gbl_C_OffsetTableFlag = TRUE;
547a9d8d09cSJung-uk Kim             break;
548a9d8d09cSJung-uk Kim 
549a9d8d09cSJung-uk Kim         default:
550a9d8d09cSJung-uk Kim 
551a9d8d09cSJung-uk Kim             printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
552a9d8d09cSJung-uk Kim             return (-1);
553a9d8d09cSJung-uk Kim         }
554a9d8d09cSJung-uk Kim         break;
555a9d8d09cSJung-uk Kim 
556a9d8d09cSJung-uk Kim     case 't':   /* Produce hex table output file */
557a9d8d09cSJung-uk Kim 
558a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
559a9d8d09cSJung-uk Kim         {
560a9d8d09cSJung-uk Kim         case 'a':
561a9d8d09cSJung-uk Kim 
562a9d8d09cSJung-uk Kim             Gbl_HexOutputFlag = HEX_OUTPUT_ASM;
563a9d8d09cSJung-uk Kim             break;
564a9d8d09cSJung-uk Kim 
565a9d8d09cSJung-uk Kim         case 'c':
566a9d8d09cSJung-uk Kim 
567a9d8d09cSJung-uk Kim             Gbl_HexOutputFlag = HEX_OUTPUT_C;
568a9d8d09cSJung-uk Kim             break;
569a9d8d09cSJung-uk Kim 
570a9d8d09cSJung-uk Kim         case 's':
571a9d8d09cSJung-uk Kim 
572a9d8d09cSJung-uk Kim             Gbl_HexOutputFlag = HEX_OUTPUT_ASL;
573a9d8d09cSJung-uk Kim             break;
574a9d8d09cSJung-uk Kim 
575a9d8d09cSJung-uk Kim         default:
576a9d8d09cSJung-uk Kim 
577a9d8d09cSJung-uk Kim             printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
578a9d8d09cSJung-uk Kim             return (-1);
579a9d8d09cSJung-uk Kim         }
580a9d8d09cSJung-uk Kim         break;
581a9d8d09cSJung-uk Kim 
582a9d8d09cSJung-uk Kim     case 'T':   /* Create a ACPI table template file */
583a9d8d09cSJung-uk Kim 
584a9d8d09cSJung-uk Kim         Gbl_DoTemplates = TRUE;
585a9d8d09cSJung-uk Kim         Gbl_TemplateSignature = AcpiGbl_Optarg;
586a9d8d09cSJung-uk Kim         break;
587a9d8d09cSJung-uk Kim 
588a9d8d09cSJung-uk Kim     case 'v':   /* Version and verbosity settings */
589a9d8d09cSJung-uk Kim 
590a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
591a9d8d09cSJung-uk Kim         {
592a9d8d09cSJung-uk Kim         case '^':
593a9d8d09cSJung-uk Kim 
594a9d8d09cSJung-uk Kim             printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
595a9d8d09cSJung-uk Kim             exit (0);
596a9d8d09cSJung-uk Kim 
597a9d8d09cSJung-uk Kim         case 'a':
598a9d8d09cSJung-uk Kim 
599a9d8d09cSJung-uk Kim             /* Disable All error/warning messages */
600a9d8d09cSJung-uk Kim 
601a9d8d09cSJung-uk Kim             Gbl_NoErrors = TRUE;
602a9d8d09cSJung-uk Kim             break;
603a9d8d09cSJung-uk Kim 
604a9d8d09cSJung-uk Kim         case 'i':
605a9d8d09cSJung-uk Kim             /*
606a9d8d09cSJung-uk Kim              * Support for integrated development environment(s).
607a9d8d09cSJung-uk Kim              *
608a9d8d09cSJung-uk Kim              * 1) No compiler signon
609a9d8d09cSJung-uk Kim              * 2) Send stderr messages to stdout
610a9d8d09cSJung-uk Kim              * 3) Less verbose error messages (single line only for each)
611a9d8d09cSJung-uk Kim              * 4) Error/warning messages are formatted appropriately to
612a9d8d09cSJung-uk Kim              *    be recognized by MS Visual Studio
613a9d8d09cSJung-uk Kim              */
614a9d8d09cSJung-uk Kim             Gbl_VerboseErrors = FALSE;
615a9d8d09cSJung-uk Kim             Gbl_DoSignon = FALSE;
616a9d8d09cSJung-uk Kim             Gbl_Files[ASL_FILE_STDERR].Handle = stdout;
617a9d8d09cSJung-uk Kim             break;
618a9d8d09cSJung-uk Kim 
619a9d8d09cSJung-uk Kim         case 'o':
620a9d8d09cSJung-uk Kim 
621a9d8d09cSJung-uk Kim             Gbl_DisplayOptimizations = TRUE;
622a9d8d09cSJung-uk Kim             break;
623a9d8d09cSJung-uk Kim 
624a9d8d09cSJung-uk Kim         case 'r':
625a9d8d09cSJung-uk Kim 
626a9d8d09cSJung-uk Kim             Gbl_DisplayRemarks = FALSE;
627a9d8d09cSJung-uk Kim             break;
628a9d8d09cSJung-uk Kim 
629a9d8d09cSJung-uk Kim         case 's':
630a9d8d09cSJung-uk Kim 
631a9d8d09cSJung-uk Kim             Gbl_DoSignon = FALSE;
632a9d8d09cSJung-uk Kim             break;
633a9d8d09cSJung-uk Kim 
634a9d8d09cSJung-uk Kim         case 't':
635a9d8d09cSJung-uk Kim 
636a9d8d09cSJung-uk Kim             Gbl_VerboseTemplates = TRUE;
637a9d8d09cSJung-uk Kim             break;
638a9d8d09cSJung-uk Kim 
639a9d8d09cSJung-uk Kim         case 'w':
640a9d8d09cSJung-uk Kim 
641a9d8d09cSJung-uk Kim             /* Get the required argument */
642a9d8d09cSJung-uk Kim 
643a9d8d09cSJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
644a9d8d09cSJung-uk Kim             {
645a9d8d09cSJung-uk Kim                 return (-1);
646a9d8d09cSJung-uk Kim             }
647a9d8d09cSJung-uk Kim 
648a9d8d09cSJung-uk Kim             Status = AslDisableException (AcpiGbl_Optarg);
649a9d8d09cSJung-uk Kim             if (ACPI_FAILURE (Status))
650a9d8d09cSJung-uk Kim             {
651a9d8d09cSJung-uk Kim                 return (-1);
652a9d8d09cSJung-uk Kim             }
653a9d8d09cSJung-uk Kim             break;
654a9d8d09cSJung-uk Kim 
655a9d8d09cSJung-uk Kim         default:
656a9d8d09cSJung-uk Kim 
657a9d8d09cSJung-uk Kim             printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
658a9d8d09cSJung-uk Kim             return (-1);
659a9d8d09cSJung-uk Kim         }
660a9d8d09cSJung-uk Kim         break;
661a9d8d09cSJung-uk Kim 
662a9d8d09cSJung-uk Kim     case 'w': /* Set warning levels */
663a9d8d09cSJung-uk Kim 
664a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
665a9d8d09cSJung-uk Kim         {
666a9d8d09cSJung-uk Kim         case '1':
667a9d8d09cSJung-uk Kim 
668a9d8d09cSJung-uk Kim             Gbl_WarningLevel = ASL_WARNING;
669a9d8d09cSJung-uk Kim             break;
670a9d8d09cSJung-uk Kim 
671a9d8d09cSJung-uk Kim         case '2':
672a9d8d09cSJung-uk Kim 
673a9d8d09cSJung-uk Kim             Gbl_WarningLevel = ASL_WARNING2;
674a9d8d09cSJung-uk Kim             break;
675a9d8d09cSJung-uk Kim 
676a9d8d09cSJung-uk Kim         case '3':
677a9d8d09cSJung-uk Kim 
678a9d8d09cSJung-uk Kim             Gbl_WarningLevel = ASL_WARNING3;
679a9d8d09cSJung-uk Kim             break;
680a9d8d09cSJung-uk Kim 
681a9d8d09cSJung-uk Kim         case 'e':
682a9d8d09cSJung-uk Kim 
683a9d8d09cSJung-uk Kim             Gbl_WarningsAsErrors = TRUE;
684a9d8d09cSJung-uk Kim             break;
685a9d8d09cSJung-uk Kim 
686a9d8d09cSJung-uk Kim         default:
687a9d8d09cSJung-uk Kim 
688a9d8d09cSJung-uk Kim             printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
689a9d8d09cSJung-uk Kim             return (-1);
690a9d8d09cSJung-uk Kim         }
691a9d8d09cSJung-uk Kim         break;
692a9d8d09cSJung-uk Kim 
693a9d8d09cSJung-uk Kim     case 'x':   /* Set debug print output level */
694a9d8d09cSJung-uk Kim 
695a9d8d09cSJung-uk Kim         AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16);
696a9d8d09cSJung-uk Kim         break;
697a9d8d09cSJung-uk Kim 
698a9d8d09cSJung-uk Kim     case 'z':
699a9d8d09cSJung-uk Kim 
700a9d8d09cSJung-uk Kim         Gbl_UseOriginalCompilerId = TRUE;
701a9d8d09cSJung-uk Kim         break;
702a9d8d09cSJung-uk Kim 
703a9d8d09cSJung-uk Kim     default:
704a9d8d09cSJung-uk Kim 
705a9d8d09cSJung-uk Kim         return (-1);
706a9d8d09cSJung-uk Kim     }
707a9d8d09cSJung-uk Kim 
708a9d8d09cSJung-uk Kim     return (0);
709a9d8d09cSJung-uk Kim }
710a9d8d09cSJung-uk Kim 
711a9d8d09cSJung-uk Kim 
712a9d8d09cSJung-uk Kim /*******************************************************************************
713a9d8d09cSJung-uk Kim  *
714a9d8d09cSJung-uk Kim  * FUNCTION:    AslMergeOptionTokens
715a9d8d09cSJung-uk Kim  *
716a9d8d09cSJung-uk Kim  * PARAMETERS:  InBuffer            - Input containing an option string
717a9d8d09cSJung-uk Kim  *              OutBuffer           - Merged output buffer
718a9d8d09cSJung-uk Kim  *
719a9d8d09cSJung-uk Kim  * RETURN:      None
720a9d8d09cSJung-uk Kim  *
721a9d8d09cSJung-uk Kim  * DESCRIPTION: Remove all whitespace from an option string.
722a9d8d09cSJung-uk Kim  *
723a9d8d09cSJung-uk Kim  ******************************************************************************/
724a9d8d09cSJung-uk Kim 
725a9d8d09cSJung-uk Kim static void
726a9d8d09cSJung-uk Kim AslMergeOptionTokens (
727a9d8d09cSJung-uk Kim     char                    *InBuffer,
728a9d8d09cSJung-uk Kim     char                    *OutBuffer)
729a9d8d09cSJung-uk Kim {
730a9d8d09cSJung-uk Kim     char                    *Token;
731a9d8d09cSJung-uk Kim 
732a9d8d09cSJung-uk Kim 
733a9d8d09cSJung-uk Kim     *OutBuffer = 0;
734a9d8d09cSJung-uk Kim 
735a9d8d09cSJung-uk Kim     Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS);
736a9d8d09cSJung-uk Kim     while (Token)
737a9d8d09cSJung-uk Kim     {
738a9d8d09cSJung-uk Kim         strcat (OutBuffer, Token);
739a9d8d09cSJung-uk Kim         Token = strtok (NULL, ASL_TOKEN_SEPARATORS);
740a9d8d09cSJung-uk Kim     }
741a9d8d09cSJung-uk Kim }
742a9d8d09cSJung-uk Kim 
743a9d8d09cSJung-uk Kim 
744a9d8d09cSJung-uk Kim /*******************************************************************************
745a9d8d09cSJung-uk Kim  *
746a9d8d09cSJung-uk Kim  * FUNCTION:    AslDoResponseFile
747a9d8d09cSJung-uk Kim  *
748a9d8d09cSJung-uk Kim  * PARAMETERS:  Filename        - Name of the response file
749a9d8d09cSJung-uk Kim  *
750a9d8d09cSJung-uk Kim  * RETURN:      Status
751a9d8d09cSJung-uk Kim  *
752a9d8d09cSJung-uk Kim  * DESCRIPTION: Open a response file and process all options within.
753a9d8d09cSJung-uk Kim  *
754a9d8d09cSJung-uk Kim  ******************************************************************************/
755a9d8d09cSJung-uk Kim 
756a9d8d09cSJung-uk Kim static int
757a9d8d09cSJung-uk Kim AslDoResponseFile (
758a9d8d09cSJung-uk Kim     char                    *Filename)
759a9d8d09cSJung-uk Kim {
760a9d8d09cSJung-uk Kim     char                    *argv = StringBuffer2;
761a9d8d09cSJung-uk Kim     FILE                    *ResponseFile;
762a9d8d09cSJung-uk Kim     int                     OptStatus = 0;
763a9d8d09cSJung-uk Kim     int                     Opterr;
764a9d8d09cSJung-uk Kim     int                     Optind;
765a9d8d09cSJung-uk Kim 
766a9d8d09cSJung-uk Kim 
767a9d8d09cSJung-uk Kim     ResponseFile = fopen (Filename, "r");
768a9d8d09cSJung-uk Kim     if (!ResponseFile)
769a9d8d09cSJung-uk Kim     {
770a9d8d09cSJung-uk Kim         printf ("Could not open command file %s, %s\n",
771a9d8d09cSJung-uk Kim             Filename, strerror (errno));
772a9d8d09cSJung-uk Kim         return (-1);
773a9d8d09cSJung-uk Kim     }
774a9d8d09cSJung-uk Kim 
775a9d8d09cSJung-uk Kim     /* Must save the current GetOpt globals */
776a9d8d09cSJung-uk Kim 
777a9d8d09cSJung-uk Kim     Opterr = AcpiGbl_Opterr;
778a9d8d09cSJung-uk Kim     Optind = AcpiGbl_Optind;
779a9d8d09cSJung-uk Kim 
780a9d8d09cSJung-uk Kim     /*
781a9d8d09cSJung-uk Kim      * Process all lines in the response file. There must be one complete
782a9d8d09cSJung-uk Kim      * option per line
783a9d8d09cSJung-uk Kim      */
784a9d8d09cSJung-uk Kim     while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile))
785a9d8d09cSJung-uk Kim     {
786a9d8d09cSJung-uk Kim         /* Compress all tokens, allowing us to use a single argv entry */
787a9d8d09cSJung-uk Kim 
788a9d8d09cSJung-uk Kim         AslMergeOptionTokens (StringBuffer, StringBuffer2);
789a9d8d09cSJung-uk Kim 
790a9d8d09cSJung-uk Kim         /* Process the option */
791a9d8d09cSJung-uk Kim 
792a9d8d09cSJung-uk Kim         AcpiGbl_Opterr = 0;
793a9d8d09cSJung-uk Kim         AcpiGbl_Optind = 0;
794a9d8d09cSJung-uk Kim 
795a9d8d09cSJung-uk Kim         OptStatus = AslDoOptions (1, &argv, TRUE);
796a9d8d09cSJung-uk Kim         if (OptStatus)
797a9d8d09cSJung-uk Kim         {
798a9d8d09cSJung-uk Kim             printf ("Invalid option in command file %s: %s\n",
799a9d8d09cSJung-uk Kim                 Filename, StringBuffer);
800a9d8d09cSJung-uk Kim             break;
801a9d8d09cSJung-uk Kim         }
802a9d8d09cSJung-uk Kim     }
803a9d8d09cSJung-uk Kim 
804a9d8d09cSJung-uk Kim     /* Restore the GetOpt globals */
805a9d8d09cSJung-uk Kim 
806a9d8d09cSJung-uk Kim     AcpiGbl_Opterr = Opterr;
807a9d8d09cSJung-uk Kim     AcpiGbl_Optind = Optind;
808a9d8d09cSJung-uk Kim 
809a9d8d09cSJung-uk Kim     fclose (ResponseFile);
810a9d8d09cSJung-uk Kim     return (OptStatus);
811a9d8d09cSJung-uk Kim }
812