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 
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim  *
90d84335fSJung-uk Kim  * 1. Copyright Notice
100d84335fSJung-uk Kim  *
11722b1667SJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2023, Intel Corp.
12a9d8d09cSJung-uk Kim  * All rights reserved.
13a9d8d09cSJung-uk Kim  *
140d84335fSJung-uk Kim  * 2. License
150d84335fSJung-uk Kim  *
160d84335fSJung-uk Kim  * 2.1. This is your license from Intel Corp. under its intellectual property
170d84335fSJung-uk Kim  * rights. You may have additional license terms from the party that provided
180d84335fSJung-uk Kim  * you this software, covering your right to use that party's intellectual
190d84335fSJung-uk Kim  * property rights.
200d84335fSJung-uk Kim  *
210d84335fSJung-uk Kim  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220d84335fSJung-uk Kim  * copy of the source code appearing in this file ("Covered Code") an
230d84335fSJung-uk Kim  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240d84335fSJung-uk Kim  * base code distributed originally by Intel ("Original Intel Code") to copy,
250d84335fSJung-uk Kim  * make derivatives, distribute, use and display any portion of the Covered
260d84335fSJung-uk Kim  * Code in any form, with the right to sublicense such rights; and
270d84335fSJung-uk Kim  *
280d84335fSJung-uk Kim  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290d84335fSJung-uk Kim  * license (with the right to sublicense), under only those claims of Intel
300d84335fSJung-uk Kim  * patents that are infringed by the Original Intel Code, to make, use, sell,
310d84335fSJung-uk Kim  * offer to sell, and import the Covered Code and derivative works thereof
320d84335fSJung-uk Kim  * solely to the minimum extent necessary to exercise the above copyright
330d84335fSJung-uk Kim  * license, and in no event shall the patent license extend to any additions
340d84335fSJung-uk Kim  * to or modifications of the Original Intel Code. No other license or right
350d84335fSJung-uk Kim  * is granted directly or by implication, estoppel or otherwise;
360d84335fSJung-uk Kim  *
370d84335fSJung-uk Kim  * The above copyright and patent license is granted only if the following
380d84335fSJung-uk Kim  * conditions are met:
390d84335fSJung-uk Kim  *
400d84335fSJung-uk Kim  * 3. Conditions
410d84335fSJung-uk Kim  *
420d84335fSJung-uk Kim  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
440d84335fSJung-uk Kim  * Code or modification with rights to further distribute source must include
450d84335fSJung-uk Kim  * the above Copyright Notice, the above License, this list of Conditions,
460d84335fSJung-uk Kim  * and the following Disclaimer and Export Compliance provision. In addition,
470d84335fSJung-uk Kim  * Licensee must cause all Covered Code to which Licensee contributes to
480d84335fSJung-uk Kim  * contain a file documenting the changes Licensee made to create that Covered
490d84335fSJung-uk Kim  * Code and the date of any change. Licensee must include in that file the
500d84335fSJung-uk Kim  * documentation of any changes made by any predecessor Licensee. Licensee
510d84335fSJung-uk Kim  * must include a prominent statement that the modification is derived,
520d84335fSJung-uk Kim  * directly or indirectly, from Original Intel Code.
530d84335fSJung-uk Kim  *
540d84335fSJung-uk Kim  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550d84335fSJung-uk Kim  * Redistribution of source code of any substantial portion of the Covered
560d84335fSJung-uk Kim  * Code or modification without rights to further distribute source must
570d84335fSJung-uk Kim  * include the following Disclaimer and Export Compliance provision in the
580d84335fSJung-uk Kim  * documentation and/or other materials provided with distribution. In
590d84335fSJung-uk Kim  * addition, Licensee may not authorize further sublicense of source of any
600d84335fSJung-uk Kim  * portion of the Covered Code, and must include terms to the effect that the
610d84335fSJung-uk Kim  * license from Licensee to its licensee is limited to the intellectual
620d84335fSJung-uk Kim  * property embodied in the software Licensee provides to its licensee, and
630d84335fSJung-uk Kim  * not to intellectual property embodied in modifications its licensee may
640d84335fSJung-uk Kim  * make.
650d84335fSJung-uk Kim  *
660d84335fSJung-uk Kim  * 3.3. Redistribution of Executable. Redistribution in executable form of any
670d84335fSJung-uk Kim  * substantial portion of the Covered Code or modification must reproduce the
680d84335fSJung-uk Kim  * above Copyright Notice, and the following Disclaimer and Export Compliance
690d84335fSJung-uk Kim  * provision in the documentation and/or other materials provided with the
700d84335fSJung-uk Kim  * distribution.
710d84335fSJung-uk Kim  *
720d84335fSJung-uk Kim  * 3.4. Intel retains all right, title, and interest in and to the Original
730d84335fSJung-uk Kim  * Intel Code.
740d84335fSJung-uk Kim  *
750d84335fSJung-uk Kim  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760d84335fSJung-uk Kim  * Intel shall be used in advertising or otherwise to promote the sale, use or
770d84335fSJung-uk Kim  * other dealings in products derived from or relating to the Covered Code
780d84335fSJung-uk Kim  * without prior written authorization from Intel.
790d84335fSJung-uk Kim  *
800d84335fSJung-uk Kim  * 4. Disclaimer and Export Compliance
810d84335fSJung-uk Kim  *
820d84335fSJung-uk Kim  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830d84335fSJung-uk Kim  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840d84335fSJung-uk Kim  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850d84335fSJung-uk Kim  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860d84335fSJung-uk Kim  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870d84335fSJung-uk Kim  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880d84335fSJung-uk Kim  * PARTICULAR PURPOSE.
890d84335fSJung-uk Kim  *
900d84335fSJung-uk Kim  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910d84335fSJung-uk Kim  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920d84335fSJung-uk Kim  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930d84335fSJung-uk Kim  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940d84335fSJung-uk Kim  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950d84335fSJung-uk Kim  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960d84335fSJung-uk Kim  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970d84335fSJung-uk Kim  * LIMITED REMEDY.
980d84335fSJung-uk Kim  *
990d84335fSJung-uk Kim  * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000d84335fSJung-uk Kim  * software or system incorporating such software without first obtaining any
1010d84335fSJung-uk Kim  * required license or other approval from the U. S. Department of Commerce or
1020d84335fSJung-uk Kim  * any other agency or department of the United States Government. In the
1030d84335fSJung-uk Kim  * event Licensee exports any such software from the United States or
1040d84335fSJung-uk Kim  * re-exports any such software from a foreign destination, Licensee shall
1050d84335fSJung-uk Kim  * ensure that the distribution and export/re-export of the software is in
1060d84335fSJung-uk Kim  * compliance with all laws, regulations, orders, or other restrictions of the
1070d84335fSJung-uk Kim  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080d84335fSJung-uk Kim  * any of its subsidiaries will export/re-export any technical data, process,
1090d84335fSJung-uk Kim  * software, or service, directly or indirectly, to any country for which the
1100d84335fSJung-uk Kim  * United States government or any agency thereof requires an export license,
1110d84335fSJung-uk Kim  * other governmental approval, or letter of assurance, without first obtaining
1120d84335fSJung-uk Kim  * such license, approval or letter.
1130d84335fSJung-uk Kim  *
1140d84335fSJung-uk Kim  *****************************************************************************
1150d84335fSJung-uk Kim  *
1160d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
1170d84335fSJung-uk Kim  * following license:
1180d84335fSJung-uk Kim  *
119a9d8d09cSJung-uk Kim  * Redistribution and use in source and binary forms, with or without
120a9d8d09cSJung-uk Kim  * modification, are permitted provided that the following conditions
121a9d8d09cSJung-uk Kim  * are met:
122a9d8d09cSJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
123a9d8d09cSJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
124a9d8d09cSJung-uk Kim  *    without modification.
125a9d8d09cSJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126a9d8d09cSJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
127a9d8d09cSJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
128a9d8d09cSJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
129a9d8d09cSJung-uk Kim  *    binary redistribution.
130a9d8d09cSJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
131a9d8d09cSJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
132a9d8d09cSJung-uk Kim  *    from this software without specific prior written permission.
133a9d8d09cSJung-uk Kim  *
1340d84335fSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1350d84335fSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1360d84335fSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1370d84335fSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1380d84335fSJung-uk Kim  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1390d84335fSJung-uk Kim  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1400d84335fSJung-uk Kim  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1410d84335fSJung-uk Kim  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1420d84335fSJung-uk Kim  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1430d84335fSJung-uk Kim  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1440d84335fSJung-uk Kim  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1450d84335fSJung-uk Kim  *
1460d84335fSJung-uk Kim  * Alternatively, you may choose to be licensed under the terms of the
147a9d8d09cSJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
148a9d8d09cSJung-uk Kim  * Software Foundation.
149a9d8d09cSJung-uk Kim  *
1500d84335fSJung-uk Kim  *****************************************************************************/
151a9d8d09cSJung-uk Kim 
152a9d8d09cSJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
153a9d8d09cSJung-uk Kim #include <contrib/dev/acpica/include/acapps.h>
154a9d8d09cSJung-uk Kim #include <contrib/dev/acpica/include/acdisasm.h>
1559a4bc520SJung-uk Kim #include <contrib/dev/acpica/include/acglobal.h>
156a9d8d09cSJung-uk Kim 
157a9d8d09cSJung-uk Kim #define _COMPONENT          ACPI_COMPILER
158a9d8d09cSJung-uk Kim         ACPI_MODULE_NAME    ("asloption")
159a9d8d09cSJung-uk Kim 
160a9d8d09cSJung-uk Kim 
161a9d8d09cSJung-uk Kim /* Local prototypes */
162a9d8d09cSJung-uk Kim 
163a9d8d09cSJung-uk Kim static int
164a9d8d09cSJung-uk Kim AslDoOptions (
165a9d8d09cSJung-uk Kim     int                     argc,
166a9d8d09cSJung-uk Kim     char                    **argv,
167a9d8d09cSJung-uk Kim     BOOLEAN                 IsResponseFile);
168a9d8d09cSJung-uk Kim 
169a9d8d09cSJung-uk Kim static void
170a9d8d09cSJung-uk Kim AslMergeOptionTokens (
171a9d8d09cSJung-uk Kim     char                    *InBuffer,
172a9d8d09cSJung-uk Kim     char                    *OutBuffer);
173a9d8d09cSJung-uk Kim 
174a9d8d09cSJung-uk Kim static int
175a9d8d09cSJung-uk Kim AslDoResponseFile (
176a9d8d09cSJung-uk Kim     char                    *Filename);
177a9d8d09cSJung-uk Kim 
178a9d8d09cSJung-uk Kim 
179a9d8d09cSJung-uk Kim #define ASL_TOKEN_SEPARATORS    " \t\n"
1809a4bc520SJung-uk Kim #define ASL_SUPPORTED_OPTIONS   "@:a:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^q^r:s|:t|T+G^v^w|x:z"
181a9d8d09cSJung-uk Kim 
182a9d8d09cSJung-uk Kim 
183a9d8d09cSJung-uk Kim /*******************************************************************************
184a9d8d09cSJung-uk Kim  *
185a9d8d09cSJung-uk Kim  * FUNCTION:    AslCommandLine
186a9d8d09cSJung-uk Kim  *
187a9d8d09cSJung-uk Kim  * PARAMETERS:  argc/argv
188a9d8d09cSJung-uk Kim  *
189a9d8d09cSJung-uk Kim  * RETURN:      Last argv index
190a9d8d09cSJung-uk Kim  *
191a9d8d09cSJung-uk Kim  * DESCRIPTION: Command line processing
192a9d8d09cSJung-uk Kim  *
193a9d8d09cSJung-uk Kim  ******************************************************************************/
194a9d8d09cSJung-uk Kim 
195a9d8d09cSJung-uk Kim int
AslCommandLine(int argc,char ** argv)196a9d8d09cSJung-uk Kim AslCommandLine (
197a9d8d09cSJung-uk Kim     int                     argc,
198a9d8d09cSJung-uk Kim     char                    **argv)
199a9d8d09cSJung-uk Kim {
200a9d8d09cSJung-uk Kim     int                     BadCommandLine = 0;
201a9d8d09cSJung-uk Kim     ACPI_STATUS             Status;
202a9d8d09cSJung-uk Kim 
203a9d8d09cSJung-uk Kim 
204a9d8d09cSJung-uk Kim     /* Minimum command line contains at least the command and an input file */
205a9d8d09cSJung-uk Kim 
206a9d8d09cSJung-uk Kim     if (argc < 2)
207a9d8d09cSJung-uk Kim     {
208a9d8d09cSJung-uk Kim         Usage ();
209a9d8d09cSJung-uk Kim         exit (1);
210a9d8d09cSJung-uk Kim     }
211a9d8d09cSJung-uk Kim 
212a9d8d09cSJung-uk Kim     /* Process all command line options */
213a9d8d09cSJung-uk Kim 
214a9d8d09cSJung-uk Kim     BadCommandLine = AslDoOptions (argc, argv, FALSE);
215a9d8d09cSJung-uk Kim 
2166f1f1a63SJung-uk Kim     if (AslGbl_DoTemplates)
217a9d8d09cSJung-uk Kim     {
218f8146b88SJung-uk Kim         Status = DtCreateTemplates (argv);
219a9d8d09cSJung-uk Kim         if (ACPI_FAILURE (Status))
220a9d8d09cSJung-uk Kim         {
221a9d8d09cSJung-uk Kim             exit (-1);
222a9d8d09cSJung-uk Kim         }
223f9a6772eSJung-uk Kim         exit (0);
224a9d8d09cSJung-uk Kim     }
225a9d8d09cSJung-uk Kim 
226a9d8d09cSJung-uk Kim     /* Next parameter must be the input filename */
227a9d8d09cSJung-uk Kim 
228a9d8d09cSJung-uk Kim     if (!argv[AcpiGbl_Optind] &&
229af051161SJung-uk Kim         !AcpiGbl_DisasmFlag)
230a9d8d09cSJung-uk Kim     {
231a9d8d09cSJung-uk Kim         printf ("Missing input filename\n");
232a9d8d09cSJung-uk Kim         BadCommandLine = TRUE;
233a9d8d09cSJung-uk Kim     }
234a9d8d09cSJung-uk Kim 
2356f1f1a63SJung-uk Kim     if (AslGbl_DoSignon)
236a9d8d09cSJung-uk Kim     {
237a9d8d09cSJung-uk Kim         printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
2386f1f1a63SJung-uk Kim         if (AslGbl_IgnoreErrors)
239a9d8d09cSJung-uk Kim         {
240a9d8d09cSJung-uk Kim             printf ("Ignoring all errors, forcing AML file generation\n\n");
241a9d8d09cSJung-uk Kim         }
242a9d8d09cSJung-uk Kim     }
243a9d8d09cSJung-uk Kim 
244a9d8d09cSJung-uk Kim     if (BadCommandLine)
245a9d8d09cSJung-uk Kim     {
24679c6d946SJung-uk Kim         printf ("Use -h option for help information\n");
247a9d8d09cSJung-uk Kim         exit (1);
248a9d8d09cSJung-uk Kim     }
249a9d8d09cSJung-uk Kim 
250a9d8d09cSJung-uk Kim     return (AcpiGbl_Optind);
251a9d8d09cSJung-uk Kim }
252a9d8d09cSJung-uk Kim 
253a9d8d09cSJung-uk Kim 
254a9d8d09cSJung-uk Kim /*******************************************************************************
255a9d8d09cSJung-uk Kim  *
256a9d8d09cSJung-uk Kim  * FUNCTION:    AslDoOptions
257a9d8d09cSJung-uk Kim  *
258a9d8d09cSJung-uk Kim  * PARAMETERS:  argc/argv           - Standard argc/argv
259a9d8d09cSJung-uk Kim  *              IsResponseFile      - TRUE if executing a response file.
260a9d8d09cSJung-uk Kim  *
261a9d8d09cSJung-uk Kim  * RETURN:      Status
262a9d8d09cSJung-uk Kim  *
263a9d8d09cSJung-uk Kim  * DESCRIPTION: Command line option processing
264a9d8d09cSJung-uk Kim  *
265a9d8d09cSJung-uk Kim  ******************************************************************************/
266a9d8d09cSJung-uk Kim 
267a9d8d09cSJung-uk Kim static int
AslDoOptions(int argc,char ** argv,BOOLEAN IsResponseFile)268a9d8d09cSJung-uk Kim AslDoOptions (
269a9d8d09cSJung-uk Kim     int                     argc,
270a9d8d09cSJung-uk Kim     char                    **argv,
271a9d8d09cSJung-uk Kim     BOOLEAN                 IsResponseFile)
272a9d8d09cSJung-uk Kim {
273a9d8d09cSJung-uk Kim     ACPI_STATUS             Status;
2749a4bc520SJung-uk Kim     INT32                  j;
275a9d8d09cSJung-uk Kim 
276a9d8d09cSJung-uk Kim 
277a9d8d09cSJung-uk Kim     /* Get the command line options */
278a9d8d09cSJung-uk Kim 
279313a0c13SJung-uk Kim     while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
280a9d8d09cSJung-uk Kim     {
281a9d8d09cSJung-uk Kim     case '@':   /* Begin a response file */
282a9d8d09cSJung-uk Kim 
283a9d8d09cSJung-uk Kim         if (IsResponseFile)
284a9d8d09cSJung-uk Kim         {
285a9d8d09cSJung-uk Kim             printf ("Nested command files are not supported\n");
286a9d8d09cSJung-uk Kim             return (-1);
287a9d8d09cSJung-uk Kim         }
288a9d8d09cSJung-uk Kim 
289a9d8d09cSJung-uk Kim         if (AslDoResponseFile (AcpiGbl_Optarg))
290a9d8d09cSJung-uk Kim         {
291a9d8d09cSJung-uk Kim             return (-1);
292a9d8d09cSJung-uk Kim         }
293a9d8d09cSJung-uk Kim         break;
294a9d8d09cSJung-uk Kim 
295f8146b88SJung-uk Kim     case 'a':   /* Debug options */
296f8146b88SJung-uk Kim 
297f8146b88SJung-uk Kim         switch (AcpiGbl_Optarg[0])
298f8146b88SJung-uk Kim         {
299f8146b88SJung-uk Kim         case 'r':
300f8146b88SJung-uk Kim 
3016f1f1a63SJung-uk Kim             AslGbl_EnableReferenceTypechecking = TRUE;
302f8146b88SJung-uk Kim             break;
303f8146b88SJung-uk Kim 
304f8146b88SJung-uk Kim         default:
305f8146b88SJung-uk Kim 
306f8146b88SJung-uk Kim             printf ("Unknown option: -a%s\n", AcpiGbl_Optarg);
307f8146b88SJung-uk Kim             return (-1);
308f8146b88SJung-uk Kim         }
309f8146b88SJung-uk Kim 
310f8146b88SJung-uk Kim         break;
311f8146b88SJung-uk Kim 
312f8146b88SJung-uk Kim 
3131c0e1b6dSJung-uk Kim     case 'b':   /* Debug options */
314a9d8d09cSJung-uk Kim 
315a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
316a9d8d09cSJung-uk Kim         {
3170d84335fSJung-uk Kim 
3180d84335fSJung-uk Kim         case 'c':
3190d84335fSJung-uk Kim 
3200d84335fSJung-uk Kim             printf ("Debug ASL to ASL+ conversion\n");
3210d84335fSJung-uk Kim 
3226f1f1a63SJung-uk Kim             AslGbl_DoAslConversion = TRUE;
3236f1f1a63SJung-uk Kim             AslGbl_FoldConstants = FALSE;
3246f1f1a63SJung-uk Kim             AslGbl_IntegerOptimizationFlag = FALSE;
3256f1f1a63SJung-uk Kim             AslGbl_ReferenceOptimizationFlag = FALSE;
3266f1f1a63SJung-uk Kim             AslGbl_OptimizeTrivialParseNodes = FALSE;
327f1db5ef7SJung-uk Kim             AcpiGbl_CaptureComments = TRUE;
3280d84335fSJung-uk Kim             AcpiGbl_DoDisassemblerOptimizations = FALSE;
3290d84335fSJung-uk Kim             AcpiGbl_DebugAslConversion = TRUE;
3300d84335fSJung-uk Kim             AcpiGbl_DmEmitExternalOpcodes = TRUE;
3316f1f1a63SJung-uk Kim             AslGbl_DoExternalsInPlace = TRUE;
3320d84335fSJung-uk Kim 
3330d84335fSJung-uk Kim             return (0);
3340d84335fSJung-uk Kim 
335a9d8d09cSJung-uk Kim         case 'f':
336a9d8d09cSJung-uk Kim 
337a9d8d09cSJung-uk Kim             AslCompilerdebug = 1; /* same as yydebug */
338a9d8d09cSJung-uk Kim             DtParserdebug = 1;
339a9d8d09cSJung-uk Kim             PrParserdebug = 1;
3406f1f1a63SJung-uk Kim             AslGbl_DebugFlag = TRUE;
3416f1f1a63SJung-uk Kim             AslGbl_KeepPreprocessorTempFile = TRUE;
3421c0e1b6dSJung-uk Kim             break;
3431c0e1b6dSJung-uk Kim 
3441c0e1b6dSJung-uk Kim         case 'p':   /* Prune ASL parse tree */
3451c0e1b6dSJung-uk Kim 
3461c0e1b6dSJung-uk Kim             /* Get the required argument */
3471c0e1b6dSJung-uk Kim 
3481c0e1b6dSJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
3491c0e1b6dSJung-uk Kim             {
3501c0e1b6dSJung-uk Kim                 return (-1);
3511c0e1b6dSJung-uk Kim             }
3521c0e1b6dSJung-uk Kim 
3536f1f1a63SJung-uk Kim             AslGbl_PruneParseTree = TRUE;
3546f1f1a63SJung-uk Kim             AslGbl_PruneDepth = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
3551c0e1b6dSJung-uk Kim             break;
3561c0e1b6dSJung-uk Kim 
3571c0e1b6dSJung-uk Kim         case 's':
3581c0e1b6dSJung-uk Kim 
3596f1f1a63SJung-uk Kim             AslGbl_DebugFlag = TRUE;
360a9d8d09cSJung-uk Kim             break;
361a9d8d09cSJung-uk Kim 
362a9d8d09cSJung-uk Kim         case 't':
363a9d8d09cSJung-uk Kim 
3641c0e1b6dSJung-uk Kim             /* Get the required argument */
3651c0e1b6dSJung-uk Kim 
3661c0e1b6dSJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
3671c0e1b6dSJung-uk Kim             {
3681c0e1b6dSJung-uk Kim                 return (-1);
3691c0e1b6dSJung-uk Kim             }
3706f1f1a63SJung-uk Kim             AslGbl_PruneType = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
371a9d8d09cSJung-uk Kim             break;
372a9d8d09cSJung-uk Kim 
373a9d8d09cSJung-uk Kim         default:
374a9d8d09cSJung-uk Kim 
375a9d8d09cSJung-uk Kim             printf ("Unknown option: -b%s\n", AcpiGbl_Optarg);
376a9d8d09cSJung-uk Kim             return (-1);
377a9d8d09cSJung-uk Kim         }
378a9d8d09cSJung-uk Kim 
379a9d8d09cSJung-uk Kim         break;
380a9d8d09cSJung-uk Kim 
381a9d8d09cSJung-uk Kim     case 'c':
382a9d8d09cSJung-uk Kim 
383a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
384a9d8d09cSJung-uk Kim         {
3850d84335fSJung-uk Kim 
3860d84335fSJung-uk Kim         case 'a':
3870d84335fSJung-uk Kim 
3880d84335fSJung-uk Kim             printf ("Convert ASL to ASL+ with comments\n");
3896f1f1a63SJung-uk Kim             AslGbl_DoAslConversion = TRUE;
3906f1f1a63SJung-uk Kim             AslGbl_FoldConstants = FALSE;
3916f1f1a63SJung-uk Kim             AslGbl_IntegerOptimizationFlag = FALSE;
3926f1f1a63SJung-uk Kim             AslGbl_ReferenceOptimizationFlag = FALSE;
3936f1f1a63SJung-uk Kim             AslGbl_OptimizeTrivialParseNodes = FALSE;
394f1db5ef7SJung-uk Kim             AcpiGbl_CaptureComments = TRUE;
3950d84335fSJung-uk Kim             AcpiGbl_DoDisassemblerOptimizations = FALSE;
3960d84335fSJung-uk Kim             AcpiGbl_DmEmitExternalOpcodes = TRUE;
3976f1f1a63SJung-uk Kim             AslGbl_DoExternalsInPlace = TRUE;
3980d84335fSJung-uk Kim 
3990d84335fSJung-uk Kim             return (0);
4000d84335fSJung-uk Kim 
401a9d8d09cSJung-uk Kim         case 'r':
402a9d8d09cSJung-uk Kim 
4036f1f1a63SJung-uk Kim             AslGbl_NoResourceChecking = TRUE;
404a9d8d09cSJung-uk Kim             break;
405a9d8d09cSJung-uk Kim 
406a9d8d09cSJung-uk Kim         default:
407a9d8d09cSJung-uk Kim 
408a9d8d09cSJung-uk Kim             printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
409a9d8d09cSJung-uk Kim             return (-1);
410a9d8d09cSJung-uk Kim         }
411a9d8d09cSJung-uk Kim         break;
412a9d8d09cSJung-uk Kim 
413a9d8d09cSJung-uk Kim     case 'd':   /* Disassembler */
414a9d8d09cSJung-uk Kim 
415a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
416a9d8d09cSJung-uk Kim         {
417a9d8d09cSJung-uk Kim         case '^':
418a9d8d09cSJung-uk Kim 
4196f1f1a63SJung-uk Kim             AslGbl_DoCompile = FALSE;
420a9d8d09cSJung-uk Kim             break;
421a9d8d09cSJung-uk Kim 
422a9d8d09cSJung-uk Kim         case 'a':
423a9d8d09cSJung-uk Kim 
4246f1f1a63SJung-uk Kim             AslGbl_DoCompile = FALSE;
4256f1f1a63SJung-uk Kim             AslGbl_DisassembleAll = TRUE;
426a9d8d09cSJung-uk Kim             break;
427a9d8d09cSJung-uk Kim 
428a9d8d09cSJung-uk Kim         case 'b':   /* Do not convert buffers to resource descriptors */
429a9d8d09cSJung-uk Kim 
430a9d8d09cSJung-uk Kim             AcpiGbl_NoResourceDisassembly = TRUE;
431a9d8d09cSJung-uk Kim             break;
432a9d8d09cSJung-uk Kim 
433a9d8d09cSJung-uk Kim         case 'c':
434a9d8d09cSJung-uk Kim 
435a9d8d09cSJung-uk Kim             break;
436a9d8d09cSJung-uk Kim 
4377cf3e94aSJung-uk Kim         case 'f':
4387cf3e94aSJung-uk Kim 
4397cf3e94aSJung-uk Kim             AcpiGbl_ForceAmlDisassembly = TRUE;
4407cf3e94aSJung-uk Kim             break;
4417cf3e94aSJung-uk Kim 
4421c0e1b6dSJung-uk Kim         case 'l':   /* Use legacy ASL code (not ASL+) for disassembly */
4431c0e1b6dSJung-uk Kim 
4446f1f1a63SJung-uk Kim             AslGbl_DoCompile = FALSE;
4451c0e1b6dSJung-uk Kim             AcpiGbl_CstyleDisassembly = FALSE;
4461c0e1b6dSJung-uk Kim             break;
4471c0e1b6dSJung-uk Kim 
4489a4bc520SJung-uk Kim         case 's':   /* Specify table signature (Only supported for CDAT table) */
4499a4bc520SJung-uk Kim 
4509a4bc520SJung-uk Kim             /* Get the required argument */
4519a4bc520SJung-uk Kim 
4529a4bc520SJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
4539a4bc520SJung-uk Kim             {
4549a4bc520SJung-uk Kim                 return (-1);
4559a4bc520SJung-uk Kim             }
4569a4bc520SJung-uk Kim 
4579a4bc520SJung-uk Kim             /* Check for exact string "CDAT" (upper or lower case) */
4589a4bc520SJung-uk Kim 
4599a4bc520SJung-uk Kim             AcpiGbl_CDAT = ACPI_CAST_PTR (char, &AcpiGbl_Optarg);
4609a4bc520SJung-uk Kim             if (AcpiUtStricmp (AcpiGbl_Optarg, ACPI_SIG_CDAT))
4619a4bc520SJung-uk Kim             {
4629a4bc520SJung-uk Kim                 printf ("\nUnknown table signature: %s\n", AcpiGbl_Optarg);
4639a4bc520SJung-uk Kim                 return (-1);
4649a4bc520SJung-uk Kim             }
4659a4bc520SJung-uk Kim 
4669a4bc520SJung-uk Kim             AcpiGbl_CDAT = malloc (5);
4679a4bc520SJung-uk Kim             AcpiUtSafeStrncpy ((char *) AcpiGbl_CDAT, ACPI_SIG_CDAT, 5);
4689a4bc520SJung-uk Kim             break;
4699a4bc520SJung-uk Kim 
470a9d8d09cSJung-uk Kim         default:
471a9d8d09cSJung-uk Kim 
472a9d8d09cSJung-uk Kim             printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
473a9d8d09cSJung-uk Kim             return (-1);
474a9d8d09cSJung-uk Kim         }
475a9d8d09cSJung-uk Kim 
476af051161SJung-uk Kim         AcpiGbl_DisasmFlag = TRUE;
477a9d8d09cSJung-uk Kim         break;
478a9d8d09cSJung-uk Kim 
479a9d8d09cSJung-uk Kim     case 'D':   /* Define a symbol */
480a9d8d09cSJung-uk Kim 
481a9d8d09cSJung-uk Kim         PrAddDefine (AcpiGbl_Optarg, NULL, TRUE);
482a9d8d09cSJung-uk Kim         break;
483a9d8d09cSJung-uk Kim 
484a9d8d09cSJung-uk Kim     case 'e':   /* External files for disassembler */
485a9d8d09cSJung-uk Kim 
486313a0c13SJung-uk Kim         /* Get entire list of external files */
487313a0c13SJung-uk Kim 
488313a0c13SJung-uk Kim         AcpiGbl_Optind--;
489313a0c13SJung-uk Kim         argv[AcpiGbl_Optind] = AcpiGbl_Optarg;
490313a0c13SJung-uk Kim 
491313a0c13SJung-uk Kim         while (argv[AcpiGbl_Optind] &&
492313a0c13SJung-uk Kim               (argv[AcpiGbl_Optind][0] != '-'))
493313a0c13SJung-uk Kim         {
494313a0c13SJung-uk Kim             Status = AcpiDmAddToExternalFileList (argv[AcpiGbl_Optind]);
495a9d8d09cSJung-uk Kim             if (ACPI_FAILURE (Status))
496a9d8d09cSJung-uk Kim             {
497f8146b88SJung-uk Kim                 printf ("Could not add %s to external list\n",
498f8146b88SJung-uk Kim                     argv[AcpiGbl_Optind]);
499a9d8d09cSJung-uk Kim                 return (-1);
500a9d8d09cSJung-uk Kim             }
501313a0c13SJung-uk Kim 
502313a0c13SJung-uk Kim             AcpiGbl_Optind++;
503313a0c13SJung-uk Kim         }
504a9d8d09cSJung-uk Kim         break;
505a9d8d09cSJung-uk Kim 
50679c6d946SJung-uk Kim     case 'f':
50779c6d946SJung-uk Kim 
50879c6d946SJung-uk Kim         switch (AcpiGbl_Optarg[0])
50979c6d946SJung-uk Kim         {
51079c6d946SJung-uk Kim         case '^':   /* Ignore errors and force creation of aml file */
511a9d8d09cSJung-uk Kim 
5126f1f1a63SJung-uk Kim             AslGbl_IgnoreErrors = TRUE;
513a9d8d09cSJung-uk Kim             break;
514a9d8d09cSJung-uk Kim 
51579c6d946SJung-uk Kim         case 'e':   /* Disassembler: Get external declaration file */
51679c6d946SJung-uk Kim 
51779c6d946SJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
51879c6d946SJung-uk Kim             {
51979c6d946SJung-uk Kim                 return (-1);
52079c6d946SJung-uk Kim             }
52179c6d946SJung-uk Kim 
5226f1f1a63SJung-uk Kim             AslGbl_ExternalRefFilename = AcpiGbl_Optarg;
52379c6d946SJung-uk Kim             break;
52479c6d946SJung-uk Kim 
52579c6d946SJung-uk Kim         default:
52679c6d946SJung-uk Kim 
52779c6d946SJung-uk Kim             printf ("Unknown option: -f%s\n", AcpiGbl_Optarg);
52879c6d946SJung-uk Kim             return (-1);
52979c6d946SJung-uk Kim         }
53079c6d946SJung-uk Kim         break;
53179c6d946SJung-uk Kim 
532a9d8d09cSJung-uk Kim     case 'G':
533a9d8d09cSJung-uk Kim 
5346f1f1a63SJung-uk Kim         AslGbl_CompileGeneric = TRUE;
535a9d8d09cSJung-uk Kim         break;
536a9d8d09cSJung-uk Kim 
537a9d8d09cSJung-uk Kim     case 'g':   /* Get all ACPI tables */
538a9d8d09cSJung-uk Kim 
539313a0c13SJung-uk Kim         printf ("-g option is deprecated, use acpidump utility instead\n");
540313a0c13SJung-uk Kim         exit (1);
541a9d8d09cSJung-uk Kim 
542a9d8d09cSJung-uk Kim     case 'h':
543a9d8d09cSJung-uk Kim 
544a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
545a9d8d09cSJung-uk Kim         {
546a9d8d09cSJung-uk Kim         case '^':
547a9d8d09cSJung-uk Kim 
548a9d8d09cSJung-uk Kim             Usage ();
549a9d8d09cSJung-uk Kim             exit (0);
550a9d8d09cSJung-uk Kim 
551a9d8d09cSJung-uk Kim         case 'c':
552a9d8d09cSJung-uk Kim 
553a9d8d09cSJung-uk Kim             UtDisplayConstantOpcodes ();
554a9d8d09cSJung-uk Kim             exit (0);
555a9d8d09cSJung-uk Kim 
556493deb39SJung-uk Kim         case 'd':
557493deb39SJung-uk Kim 
558493deb39SJung-uk Kim             AslDisassemblyHelp ();
559493deb39SJung-uk Kim             exit (0);
560493deb39SJung-uk Kim 
561a9d8d09cSJung-uk Kim         case 'f':
562a9d8d09cSJung-uk Kim 
563a9d8d09cSJung-uk Kim             AslFilenameHelp ();
564a9d8d09cSJung-uk Kim             exit (0);
565a9d8d09cSJung-uk Kim 
566a9d8d09cSJung-uk Kim         case 'r':
567a9d8d09cSJung-uk Kim 
568a9d8d09cSJung-uk Kim             /* reserved names */
569a9d8d09cSJung-uk Kim 
570a9d8d09cSJung-uk Kim             ApDisplayReservedNames ();
571a9d8d09cSJung-uk Kim             exit (0);
572a9d8d09cSJung-uk Kim 
573a9d8d09cSJung-uk Kim         case 't':
574a9d8d09cSJung-uk Kim 
575a9d8d09cSJung-uk Kim             UtDisplaySupportedTables ();
576a9d8d09cSJung-uk Kim             exit (0);
577a9d8d09cSJung-uk Kim 
578a9d8d09cSJung-uk Kim         default:
579a9d8d09cSJung-uk Kim 
580a9d8d09cSJung-uk Kim             printf ("Unknown option: -h%s\n", AcpiGbl_Optarg);
581a9d8d09cSJung-uk Kim             return (-1);
582a9d8d09cSJung-uk Kim         }
583a9d8d09cSJung-uk Kim 
584a9d8d09cSJung-uk Kim     case 'I':   /* Add an include file search directory */
585a9d8d09cSJung-uk Kim 
586a9d8d09cSJung-uk Kim         FlAddIncludeDirectory (AcpiGbl_Optarg);
587a9d8d09cSJung-uk Kim         break;
588a9d8d09cSJung-uk Kim 
589a9d8d09cSJung-uk Kim     case 'i':   /* Output AML as an include file */
590a9d8d09cSJung-uk Kim 
591a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
592a9d8d09cSJung-uk Kim         {
593a9d8d09cSJung-uk Kim         case 'a':
594a9d8d09cSJung-uk Kim 
595a9d8d09cSJung-uk Kim             /* Produce assembly code include file */
596a9d8d09cSJung-uk Kim 
5976f1f1a63SJung-uk Kim             AslGbl_AsmIncludeOutputFlag = TRUE;
598a9d8d09cSJung-uk Kim             break;
599a9d8d09cSJung-uk Kim 
600a9d8d09cSJung-uk Kim         case 'c':
601a9d8d09cSJung-uk Kim 
602a9d8d09cSJung-uk Kim             /* Produce C include file */
603a9d8d09cSJung-uk Kim 
6046f1f1a63SJung-uk Kim             AslGbl_C_IncludeOutputFlag = TRUE;
605a9d8d09cSJung-uk Kim             break;
606a9d8d09cSJung-uk Kim 
607a9d8d09cSJung-uk Kim         case 'n':
608a9d8d09cSJung-uk Kim 
609a9d8d09cSJung-uk Kim             /* Compiler/Disassembler: Ignore the NOOP operator */
610a9d8d09cSJung-uk Kim 
611a9d8d09cSJung-uk Kim             AcpiGbl_IgnoreNoopOperator = TRUE;
612a9d8d09cSJung-uk Kim             break;
613a9d8d09cSJung-uk Kim 
614a9d8d09cSJung-uk Kim         default:
615a9d8d09cSJung-uk Kim 
616a9d8d09cSJung-uk Kim             printf ("Unknown option: -i%s\n", AcpiGbl_Optarg);
617a9d8d09cSJung-uk Kim             return (-1);
618a9d8d09cSJung-uk Kim         }
619a9d8d09cSJung-uk Kim         break;
620a9d8d09cSJung-uk Kim 
621a9d8d09cSJung-uk Kim     case 'l':   /* Listing files */
622a9d8d09cSJung-uk Kim 
623a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
624a9d8d09cSJung-uk Kim         {
625a9d8d09cSJung-uk Kim         case '^':
626a9d8d09cSJung-uk Kim 
627a9d8d09cSJung-uk Kim             /* Produce listing file (Mixed source/aml) */
628a9d8d09cSJung-uk Kim 
6296f1f1a63SJung-uk Kim             AslGbl_ListingFlag = TRUE;
63070e6ab8fSJung-uk Kim             AcpiGbl_DmOpt_Listing = TRUE;
631a9d8d09cSJung-uk Kim             break;
632a9d8d09cSJung-uk Kim 
633a9d8d09cSJung-uk Kim         case 'i':
634a9d8d09cSJung-uk Kim 
635a9d8d09cSJung-uk Kim             /* Produce preprocessor output file */
636a9d8d09cSJung-uk Kim 
6376f1f1a63SJung-uk Kim             AslGbl_PreprocessorOutputFlag = TRUE;
638a9d8d09cSJung-uk Kim             break;
639a9d8d09cSJung-uk Kim 
640313a0c13SJung-uk Kim         case 'm':
641313a0c13SJung-uk Kim 
642313a0c13SJung-uk Kim             /* Produce hardware map summary file */
643313a0c13SJung-uk Kim 
6446f1f1a63SJung-uk Kim             AslGbl_MapfileFlag = TRUE;
645313a0c13SJung-uk Kim             break;
646313a0c13SJung-uk Kim 
647a9d8d09cSJung-uk Kim         case 'n':
648a9d8d09cSJung-uk Kim 
649a9d8d09cSJung-uk Kim             /* Produce namespace file */
650a9d8d09cSJung-uk Kim 
6516f1f1a63SJung-uk Kim             AslGbl_NsOutputFlag = TRUE;
652a9d8d09cSJung-uk Kim             break;
653a9d8d09cSJung-uk Kim 
654a9d8d09cSJung-uk Kim         case 's':
655a9d8d09cSJung-uk Kim 
656a9d8d09cSJung-uk Kim             /* Produce combined source file */
657a9d8d09cSJung-uk Kim 
6586f1f1a63SJung-uk Kim             AslGbl_SourceOutputFlag = TRUE;
659a9d8d09cSJung-uk Kim             break;
660a9d8d09cSJung-uk Kim 
661f8146b88SJung-uk Kim         case 'x':
662f8146b88SJung-uk Kim 
663f8146b88SJung-uk Kim             /* Produce cross-reference file */
664f8146b88SJung-uk Kim 
6656f1f1a63SJung-uk Kim             AslGbl_CrossReferenceOutput = TRUE;
666f8146b88SJung-uk Kim             break;
667f8146b88SJung-uk Kim 
668a9d8d09cSJung-uk Kim         default:
669a9d8d09cSJung-uk Kim 
670a9d8d09cSJung-uk Kim             printf ("Unknown option: -l%s\n", AcpiGbl_Optarg);
671a9d8d09cSJung-uk Kim             return (-1);
672a9d8d09cSJung-uk Kim         }
673a9d8d09cSJung-uk Kim         break;
674a9d8d09cSJung-uk Kim 
675a9d8d09cSJung-uk Kim     case 'm':   /* Set line buffer size */
676a9d8d09cSJung-uk Kim 
6776f1f1a63SJung-uk Kim         AslGbl_LineBufferSize = (UINT32) strtoul (AcpiGbl_Optarg, NULL, 0) * 1024;
6786f1f1a63SJung-uk Kim         if (AslGbl_LineBufferSize < ASL_DEFAULT_LINE_BUFFER_SIZE)
679a9d8d09cSJung-uk Kim         {
6806f1f1a63SJung-uk Kim             AslGbl_LineBufferSize = ASL_DEFAULT_LINE_BUFFER_SIZE;
681a9d8d09cSJung-uk Kim         }
6826f1f1a63SJung-uk Kim         printf ("Line Buffer Size: %u\n", AslGbl_LineBufferSize);
683a9d8d09cSJung-uk Kim         break;
684a9d8d09cSJung-uk Kim 
685a9d8d09cSJung-uk Kim     case 'n':   /* Parse only */
686a9d8d09cSJung-uk Kim 
6876f1f1a63SJung-uk Kim         AslGbl_ParseOnlyFlag = TRUE;
688a9d8d09cSJung-uk Kim         break;
689a9d8d09cSJung-uk Kim 
690a9d8d09cSJung-uk Kim     case 'o':   /* Control compiler AML optimizations */
691a9d8d09cSJung-uk Kim 
692a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
693a9d8d09cSJung-uk Kim         {
694a9d8d09cSJung-uk Kim         case 'a':
695a9d8d09cSJung-uk Kim 
696a9d8d09cSJung-uk Kim             /* Disable all optimizations */
697a9d8d09cSJung-uk Kim 
6986f1f1a63SJung-uk Kim             AslGbl_FoldConstants = FALSE;
6996f1f1a63SJung-uk Kim             AslGbl_IntegerOptimizationFlag = FALSE;
7006f1f1a63SJung-uk Kim             AslGbl_ReferenceOptimizationFlag = FALSE;
7016f1f1a63SJung-uk Kim             AslGbl_OptimizeTrivialParseNodes = FALSE;
7020d84335fSJung-uk Kim 
703a9d8d09cSJung-uk Kim             break;
704a9d8d09cSJung-uk Kim 
705f8146b88SJung-uk Kim         case 'c':
706f8146b88SJung-uk Kim 
707f8146b88SJung-uk Kim             /* Display compile time(s) */
708f8146b88SJung-uk Kim 
7096f1f1a63SJung-uk Kim             AslGbl_CompileTimesFlag = TRUE;
710f8146b88SJung-uk Kim             break;
711f8146b88SJung-uk Kim 
712493deb39SJung-uk Kim         case 'd':
713493deb39SJung-uk Kim 
714493deb39SJung-uk Kim             /* Disable disassembler code optimizations */
715493deb39SJung-uk Kim 
716493deb39SJung-uk Kim             AcpiGbl_DoDisassemblerOptimizations = FALSE;
717493deb39SJung-uk Kim             break;
718493deb39SJung-uk Kim 
719f8146b88SJung-uk Kim         case 'e':
720f8146b88SJung-uk Kim 
7213920312eSJung-uk Kim             /* Disassembler: Emit embedded external operators */
7223920312eSJung-uk Kim 
7233920312eSJung-uk Kim             AcpiGbl_DmEmitExternalOpcodes = TRUE;
724f8146b88SJung-uk Kim             break;
725f8146b88SJung-uk Kim 
7260d84335fSJung-uk Kim         case 'E':
7270d84335fSJung-uk Kim 
7280d84335fSJung-uk Kim             /*
7290d84335fSJung-uk Kim              * iASL: keep External opcodes in place.
7300d84335fSJung-uk Kim              * No affect if Gbl_DoExternals is false.
7310d84335fSJung-uk Kim              */
7320d84335fSJung-uk Kim 
7336f1f1a63SJung-uk Kim             AslGbl_DoExternalsInPlace = TRUE;
7340d84335fSJung-uk Kim             break;
7350d84335fSJung-uk Kim 
736a9d8d09cSJung-uk Kim         case 'f':
737a9d8d09cSJung-uk Kim 
738a9d8d09cSJung-uk Kim             /* Disable folding on "normal" expressions */
739a9d8d09cSJung-uk Kim 
7406f1f1a63SJung-uk Kim             AslGbl_FoldConstants = FALSE;
741a9d8d09cSJung-uk Kim             break;
742a9d8d09cSJung-uk Kim 
743a9d8d09cSJung-uk Kim         case 'i':
744a9d8d09cSJung-uk Kim 
745a9d8d09cSJung-uk Kim             /* Disable integer optimization to constants */
746a9d8d09cSJung-uk Kim 
7476f1f1a63SJung-uk Kim             AslGbl_IntegerOptimizationFlag = FALSE;
748a9d8d09cSJung-uk Kim             break;
749a9d8d09cSJung-uk Kim 
750a9d8d09cSJung-uk Kim         case 'n':
751a9d8d09cSJung-uk Kim 
752a9d8d09cSJung-uk Kim             /* Disable named reference optimization */
753a9d8d09cSJung-uk Kim 
7546f1f1a63SJung-uk Kim             AslGbl_ReferenceOptimizationFlag = FALSE;
755a9d8d09cSJung-uk Kim             break;
756a9d8d09cSJung-uk Kim 
757a9d8d09cSJung-uk Kim         case 't':
758a9d8d09cSJung-uk Kim 
759f8146b88SJung-uk Kim             /* Disable heavy typechecking */
760a9d8d09cSJung-uk Kim 
7616f1f1a63SJung-uk Kim             AslGbl_DoTypechecking = FALSE;
762a9d8d09cSJung-uk Kim             break;
763a9d8d09cSJung-uk Kim 
764a9d8d09cSJung-uk Kim         default:
765a9d8d09cSJung-uk Kim 
766a9d8d09cSJung-uk Kim             printf ("Unknown option: -c%s\n", AcpiGbl_Optarg);
767a9d8d09cSJung-uk Kim             return (-1);
768a9d8d09cSJung-uk Kim         }
769a9d8d09cSJung-uk Kim         break;
770a9d8d09cSJung-uk Kim 
771a9d8d09cSJung-uk Kim     case 'P':   /* Preprocessor options */
772a9d8d09cSJung-uk Kim 
773a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
774a9d8d09cSJung-uk Kim         {
775a9d8d09cSJung-uk Kim         case '^':   /* Proprocess only, emit (.i) file */
776a9d8d09cSJung-uk Kim 
7776f1f1a63SJung-uk Kim             AslGbl_PreprocessOnly = TRUE;
7786f1f1a63SJung-uk Kim             AslGbl_PreprocessorOutputFlag = TRUE;
779a9d8d09cSJung-uk Kim             break;
780a9d8d09cSJung-uk Kim 
781a9d8d09cSJung-uk Kim         case 'n':   /* Disable preprocessor */
782a9d8d09cSJung-uk Kim 
7836f1f1a63SJung-uk Kim             AslGbl_PreprocessFlag = FALSE;
784a9d8d09cSJung-uk Kim             break;
785a9d8d09cSJung-uk Kim 
786a9d8d09cSJung-uk Kim         default:
787a9d8d09cSJung-uk Kim 
788a9d8d09cSJung-uk Kim             printf ("Unknown option: -P%s\n", AcpiGbl_Optarg);
789a9d8d09cSJung-uk Kim             return (-1);
790a9d8d09cSJung-uk Kim         }
791a9d8d09cSJung-uk Kim         break;
792a9d8d09cSJung-uk Kim 
793a9d8d09cSJung-uk Kim     case 'p':   /* Override default AML output filename */
794a9d8d09cSJung-uk Kim 
7956f1f1a63SJung-uk Kim         AslGbl_OutputFilenamePrefix = AcpiGbl_Optarg;
7966f1f1a63SJung-uk Kim         UtConvertBackslashes (AslGbl_OutputFilenamePrefix);
7976f1f1a63SJung-uk Kim         AslGbl_UseDefaultAmlFilename = FALSE;
798a9d8d09cSJung-uk Kim         break;
799a9d8d09cSJung-uk Kim 
8000d84335fSJung-uk Kim     case 'q':   /* ASL/ASl+ converter: compile only and leave badaml. */
8010d84335fSJung-uk Kim 
8020d84335fSJung-uk Kim         printf ("Convert ASL to ASL+ with comments\n");
8036f1f1a63SJung-uk Kim         AslGbl_FoldConstants = FALSE;
8046f1f1a63SJung-uk Kim         AslGbl_IntegerOptimizationFlag = FALSE;
8056f1f1a63SJung-uk Kim         AslGbl_ReferenceOptimizationFlag = FALSE;
8066f1f1a63SJung-uk Kim         AslGbl_OptimizeTrivialParseNodes = FALSE;
8076f1f1a63SJung-uk Kim         AslGbl_DoExternalsInPlace = TRUE;
808f1db5ef7SJung-uk Kim         AcpiGbl_CaptureComments = TRUE;
8090d84335fSJung-uk Kim         return (0);
8100d84335fSJung-uk Kim 
811a9d8d09cSJung-uk Kim     case 'r':   /* Override revision found in table header */
812a9d8d09cSJung-uk Kim 
8136f1f1a63SJung-uk Kim         AslGbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
814a9d8d09cSJung-uk Kim         break;
815a9d8d09cSJung-uk Kim 
816a9d8d09cSJung-uk Kim     case 's':   /* Create AML in a source code file */
817a9d8d09cSJung-uk Kim 
818a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
819a9d8d09cSJung-uk Kim         {
820a9d8d09cSJung-uk Kim         case 'a':
821a9d8d09cSJung-uk Kim 
822a9d8d09cSJung-uk Kim             /* Produce assembly code output file */
823a9d8d09cSJung-uk Kim 
8246f1f1a63SJung-uk Kim             AslGbl_AsmOutputFlag = TRUE;
825a9d8d09cSJung-uk Kim             break;
826a9d8d09cSJung-uk Kim 
827a9d8d09cSJung-uk Kim         case 'c':
828a9d8d09cSJung-uk Kim 
829a9d8d09cSJung-uk Kim             /* Produce C hex output file */
830a9d8d09cSJung-uk Kim 
8316f1f1a63SJung-uk Kim             AslGbl_C_OutputFlag = TRUE;
832a9d8d09cSJung-uk Kim             break;
833a9d8d09cSJung-uk Kim 
834a9d8d09cSJung-uk Kim         case 'o':
835a9d8d09cSJung-uk Kim 
836a9d8d09cSJung-uk Kim             /* Produce AML offset table in C */
837a9d8d09cSJung-uk Kim 
8386f1f1a63SJung-uk Kim             AslGbl_C_OffsetTableFlag = TRUE;
839a9d8d09cSJung-uk Kim             break;
840a9d8d09cSJung-uk Kim 
841a9d8d09cSJung-uk Kim         default:
842a9d8d09cSJung-uk Kim 
843a9d8d09cSJung-uk Kim             printf ("Unknown option: -s%s\n", AcpiGbl_Optarg);
844a9d8d09cSJung-uk Kim             return (-1);
845a9d8d09cSJung-uk Kim         }
846a9d8d09cSJung-uk Kim         break;
847a9d8d09cSJung-uk Kim 
848a9d8d09cSJung-uk Kim     case 't':   /* Produce hex table output file */
849a9d8d09cSJung-uk Kim 
850a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
851a9d8d09cSJung-uk Kim         {
852a9d8d09cSJung-uk Kim         case 'a':
853a9d8d09cSJung-uk Kim 
8546f1f1a63SJung-uk Kim             AslGbl_HexOutputFlag = HEX_OUTPUT_ASM;
855a9d8d09cSJung-uk Kim             break;
856a9d8d09cSJung-uk Kim 
857a9d8d09cSJung-uk Kim         case 'c':
858a9d8d09cSJung-uk Kim 
8596f1f1a63SJung-uk Kim             AslGbl_HexOutputFlag = HEX_OUTPUT_C;
860a9d8d09cSJung-uk Kim             break;
861a9d8d09cSJung-uk Kim 
862a009b7dcSJung-uk Kim         case 'p': /* data table flex/bison prototype */
863a009b7dcSJung-uk Kim 
864a009b7dcSJung-uk Kim             AslGbl_DtLexBisonPrototype = TRUE;
865a009b7dcSJung-uk Kim             break;
866a009b7dcSJung-uk Kim 
867a9d8d09cSJung-uk Kim         case 's':
868a9d8d09cSJung-uk Kim 
8696f1f1a63SJung-uk Kim             AslGbl_HexOutputFlag = HEX_OUTPUT_ASL;
870a9d8d09cSJung-uk Kim             break;
871a9d8d09cSJung-uk Kim 
872a9d8d09cSJung-uk Kim         default:
873a9d8d09cSJung-uk Kim 
874a9d8d09cSJung-uk Kim             printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
875a9d8d09cSJung-uk Kim             return (-1);
876a9d8d09cSJung-uk Kim         }
877a9d8d09cSJung-uk Kim         break;
878a9d8d09cSJung-uk Kim 
879a9d8d09cSJung-uk Kim     case 'T':   /* Create a ACPI table template file */
880a9d8d09cSJung-uk Kim 
8816f1f1a63SJung-uk Kim         AslGbl_DoTemplates = TRUE;
882a9d8d09cSJung-uk Kim         break;
883a9d8d09cSJung-uk Kim 
884a9d8d09cSJung-uk Kim     case 'v':   /* Version and verbosity settings */
885a9d8d09cSJung-uk Kim 
886a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
887a9d8d09cSJung-uk Kim         {
888a9d8d09cSJung-uk Kim         case '^':
889a9d8d09cSJung-uk Kim 
890a9d8d09cSJung-uk Kim             printf (ACPI_COMMON_SIGNON (ASL_COMPILER_NAME));
891a9d8d09cSJung-uk Kim             exit (0);
892a9d8d09cSJung-uk Kim 
893a9d8d09cSJung-uk Kim         case 'a':
894a9d8d09cSJung-uk Kim 
895313a0c13SJung-uk Kim             /* Disable all error/warning/remark messages */
896a9d8d09cSJung-uk Kim 
8976f1f1a63SJung-uk Kim             AslGbl_NoErrors = TRUE;
898a9d8d09cSJung-uk Kim             break;
899a9d8d09cSJung-uk Kim 
900313a0c13SJung-uk Kim         case 'e':
901313a0c13SJung-uk Kim 
902313a0c13SJung-uk Kim             /* Disable all warning/remark messages (errors only) */
903313a0c13SJung-uk Kim 
9046f1f1a63SJung-uk Kim             AslGbl_DisplayRemarks = FALSE;
9056f1f1a63SJung-uk Kim             AslGbl_DisplayWarnings = FALSE;
906313a0c13SJung-uk Kim             break;
907313a0c13SJung-uk Kim 
908a9d8d09cSJung-uk Kim         case 'i':
909a9d8d09cSJung-uk Kim             /*
910a9d8d09cSJung-uk Kim              * Support for integrated development environment(s).
911a9d8d09cSJung-uk Kim              *
912a9d8d09cSJung-uk Kim              * 1) No compiler signon
913a9d8d09cSJung-uk Kim              * 2) Send stderr messages to stdout
914a9d8d09cSJung-uk Kim              * 3) Less verbose error messages (single line only for each)
915a9d8d09cSJung-uk Kim              * 4) Error/warning messages are formatted appropriately to
916a9d8d09cSJung-uk Kim              *    be recognized by MS Visual Studio
917a9d8d09cSJung-uk Kim              */
9186f1f1a63SJung-uk Kim             AslGbl_VerboseErrors = FALSE;
9196f1f1a63SJung-uk Kim             AslGbl_DoSignon = FALSE;
920a9d8d09cSJung-uk Kim             break;
921a9d8d09cSJung-uk Kim 
922a9d8d09cSJung-uk Kim         case 'o':
923a9d8d09cSJung-uk Kim 
9246f1f1a63SJung-uk Kim             AslGbl_DisplayOptimizations = TRUE;
925a9d8d09cSJung-uk Kim             break;
926a9d8d09cSJung-uk Kim 
927a9d8d09cSJung-uk Kim         case 'r':
928a9d8d09cSJung-uk Kim 
9296f1f1a63SJung-uk Kim             AslGbl_DisplayRemarks = FALSE;
930a9d8d09cSJung-uk Kim             break;
931a9d8d09cSJung-uk Kim 
932a9d8d09cSJung-uk Kim         case 's':
933a9d8d09cSJung-uk Kim 
9346f1f1a63SJung-uk Kim             AslGbl_DoSignon = FALSE;
935a9d8d09cSJung-uk Kim             break;
936a9d8d09cSJung-uk Kim 
937a9d8d09cSJung-uk Kim         case 't':
938a9d8d09cSJung-uk Kim 
9396f1f1a63SJung-uk Kim             AslGbl_VerboseTemplates = TRUE;
940a9d8d09cSJung-uk Kim             break;
941a9d8d09cSJung-uk Kim 
942a9d8d09cSJung-uk Kim         case 'w':
943a9d8d09cSJung-uk Kim 
944a9d8d09cSJung-uk Kim             /* Get the required argument */
945a9d8d09cSJung-uk Kim 
946a9d8d09cSJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
947a9d8d09cSJung-uk Kim             {
948a9d8d09cSJung-uk Kim                 return (-1);
949a9d8d09cSJung-uk Kim             }
950a9d8d09cSJung-uk Kim 
951a9d8d09cSJung-uk Kim             Status = AslDisableException (AcpiGbl_Optarg);
952a9d8d09cSJung-uk Kim             if (ACPI_FAILURE (Status))
953a9d8d09cSJung-uk Kim             {
954a9d8d09cSJung-uk Kim                 return (-1);
955a9d8d09cSJung-uk Kim             }
956a9d8d09cSJung-uk Kim             break;
957a9d8d09cSJung-uk Kim 
9585f9b24faSJung-uk Kim         case 'x':
9595f9b24faSJung-uk Kim 
9605f9b24faSJung-uk Kim             /* Get the required argument */
9615f9b24faSJung-uk Kim 
9625f9b24faSJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
9635f9b24faSJung-uk Kim             {
9645f9b24faSJung-uk Kim                 return (-1);
9655f9b24faSJung-uk Kim             }
9665f9b24faSJung-uk Kim 
9673ee58df5SJung-uk Kim             Status = AslLogExpectedException (AcpiGbl_Optarg);
9685f9b24faSJung-uk Kim             if (ACPI_FAILURE (Status))
9695f9b24faSJung-uk Kim             {
9705f9b24faSJung-uk Kim                 return (-1);
9715f9b24faSJung-uk Kim             }
9725f9b24faSJung-uk Kim             break;
9735f9b24faSJung-uk Kim 
974a9d8d09cSJung-uk Kim         default:
975a9d8d09cSJung-uk Kim 
976a9d8d09cSJung-uk Kim             printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
977a9d8d09cSJung-uk Kim             return (-1);
978a9d8d09cSJung-uk Kim         }
979a9d8d09cSJung-uk Kim         break;
980a9d8d09cSJung-uk Kim 
981a9d8d09cSJung-uk Kim     case 'w': /* Set warning levels */
982a9d8d09cSJung-uk Kim 
983a9d8d09cSJung-uk Kim         switch (AcpiGbl_Optarg[0])
984a9d8d09cSJung-uk Kim         {
985a9d8d09cSJung-uk Kim         case '1':
986a9d8d09cSJung-uk Kim 
9876f1f1a63SJung-uk Kim             AslGbl_WarningLevel = ASL_WARNING;
988a9d8d09cSJung-uk Kim             break;
989a9d8d09cSJung-uk Kim 
990a9d8d09cSJung-uk Kim         case '2':
991a9d8d09cSJung-uk Kim 
9926f1f1a63SJung-uk Kim             AslGbl_WarningLevel = ASL_WARNING2;
993a9d8d09cSJung-uk Kim             break;
994a9d8d09cSJung-uk Kim 
995a9d8d09cSJung-uk Kim         case '3':
996a9d8d09cSJung-uk Kim 
9976f1f1a63SJung-uk Kim             AslGbl_WarningLevel = ASL_WARNING3;
998a9d8d09cSJung-uk Kim             break;
999a9d8d09cSJung-uk Kim 
1000a9d8d09cSJung-uk Kim         case 'e':
1001a9d8d09cSJung-uk Kim 
10026f1f1a63SJung-uk Kim             AslGbl_WarningsAsErrors = TRUE;
1003a9d8d09cSJung-uk Kim             break;
1004a9d8d09cSJung-uk Kim 
100590b566fdSJung-uk Kim         case 'w':
100690b566fdSJung-uk Kim 
100790b566fdSJung-uk Kim             /* Get the required argument */
100890b566fdSJung-uk Kim 
100990b566fdSJung-uk Kim             if (AcpiGetoptArgument (argc, argv))
101090b566fdSJung-uk Kim             {
101190b566fdSJung-uk Kim                 return (-1);
101290b566fdSJung-uk Kim             }
101390b566fdSJung-uk Kim 
101490b566fdSJung-uk Kim             Status = AslElevateException (AcpiGbl_Optarg);
101590b566fdSJung-uk Kim             if (ACPI_FAILURE (Status))
101690b566fdSJung-uk Kim             {
101790b566fdSJung-uk Kim                 return (-1);
101890b566fdSJung-uk Kim             }
101990b566fdSJung-uk Kim             break;
102090b566fdSJung-uk Kim 
102190b566fdSJung-uk Kim 
1022a9d8d09cSJung-uk Kim         default:
1023a9d8d09cSJung-uk Kim 
1024a9d8d09cSJung-uk Kim             printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
1025a9d8d09cSJung-uk Kim             return (-1);
1026a9d8d09cSJung-uk Kim         }
1027a9d8d09cSJung-uk Kim         break;
1028a9d8d09cSJung-uk Kim 
1029a9d8d09cSJung-uk Kim     case 'x':   /* Set debug print output level */
1030a9d8d09cSJung-uk Kim 
1031a9d8d09cSJung-uk Kim         AcpiDbgLevel = strtoul (AcpiGbl_Optarg, NULL, 16);
1032a9d8d09cSJung-uk Kim         break;
1033a9d8d09cSJung-uk Kim 
1034a9d8d09cSJung-uk Kim     case 'z':
1035a9d8d09cSJung-uk Kim 
10366f1f1a63SJung-uk Kim         AslGbl_UseOriginalCompilerId = TRUE;
1037a9d8d09cSJung-uk Kim         break;
1038a9d8d09cSJung-uk Kim 
1039a9d8d09cSJung-uk Kim     default:
1040a9d8d09cSJung-uk Kim 
1041a9d8d09cSJung-uk Kim         return (-1);
1042a9d8d09cSJung-uk Kim     }
1043a9d8d09cSJung-uk Kim 
1044a9d8d09cSJung-uk Kim     return (0);
1045a9d8d09cSJung-uk Kim }
1046a9d8d09cSJung-uk Kim 
1047a9d8d09cSJung-uk Kim 
1048a9d8d09cSJung-uk Kim /*******************************************************************************
1049a9d8d09cSJung-uk Kim  *
1050a9d8d09cSJung-uk Kim  * FUNCTION:    AslMergeOptionTokens
1051a9d8d09cSJung-uk Kim  *
1052a9d8d09cSJung-uk Kim  * PARAMETERS:  InBuffer            - Input containing an option string
1053a9d8d09cSJung-uk Kim  *              OutBuffer           - Merged output buffer
1054a9d8d09cSJung-uk Kim  *
1055a9d8d09cSJung-uk Kim  * RETURN:      None
1056a9d8d09cSJung-uk Kim  *
1057a9d8d09cSJung-uk Kim  * DESCRIPTION: Remove all whitespace from an option string.
1058a9d8d09cSJung-uk Kim  *
1059a9d8d09cSJung-uk Kim  ******************************************************************************/
1060a9d8d09cSJung-uk Kim 
1061a9d8d09cSJung-uk Kim static void
AslMergeOptionTokens(char * InBuffer,char * OutBuffer)1062a9d8d09cSJung-uk Kim AslMergeOptionTokens (
1063a9d8d09cSJung-uk Kim     char                    *InBuffer,
1064a9d8d09cSJung-uk Kim     char                    *OutBuffer)
1065a9d8d09cSJung-uk Kim {
1066a9d8d09cSJung-uk Kim     char                    *Token;
1067a9d8d09cSJung-uk Kim 
1068a9d8d09cSJung-uk Kim 
1069a9d8d09cSJung-uk Kim     *OutBuffer = 0;
1070a9d8d09cSJung-uk Kim 
1071a9d8d09cSJung-uk Kim     Token = strtok (InBuffer, ASL_TOKEN_SEPARATORS);
1072a9d8d09cSJung-uk Kim     while (Token)
1073a9d8d09cSJung-uk Kim     {
1074a9d8d09cSJung-uk Kim         strcat (OutBuffer, Token);
1075a9d8d09cSJung-uk Kim         Token = strtok (NULL, ASL_TOKEN_SEPARATORS);
1076a9d8d09cSJung-uk Kim     }
1077a9d8d09cSJung-uk Kim }
1078a9d8d09cSJung-uk Kim 
1079a9d8d09cSJung-uk Kim 
1080a9d8d09cSJung-uk Kim /*******************************************************************************
1081a9d8d09cSJung-uk Kim  *
1082a9d8d09cSJung-uk Kim  * FUNCTION:    AslDoResponseFile
1083a9d8d09cSJung-uk Kim  *
1084a9d8d09cSJung-uk Kim  * PARAMETERS:  Filename        - Name of the response file
1085a9d8d09cSJung-uk Kim  *
1086a9d8d09cSJung-uk Kim  * RETURN:      Status
1087a9d8d09cSJung-uk Kim  *
1088a9d8d09cSJung-uk Kim  * DESCRIPTION: Open a response file and process all options within.
1089a9d8d09cSJung-uk Kim  *
1090a9d8d09cSJung-uk Kim  ******************************************************************************/
1091a9d8d09cSJung-uk Kim 
1092a9d8d09cSJung-uk Kim static int
AslDoResponseFile(char * Filename)1093a9d8d09cSJung-uk Kim AslDoResponseFile (
1094a9d8d09cSJung-uk Kim     char                    *Filename)
1095a9d8d09cSJung-uk Kim {
10966f1f1a63SJung-uk Kim     char                    *argv = AslGbl_StringBuffer2;
1097a9d8d09cSJung-uk Kim     FILE                    *ResponseFile;
1098a9d8d09cSJung-uk Kim     int                     OptStatus = 0;
1099a9d8d09cSJung-uk Kim     int                     Opterr;
1100a9d8d09cSJung-uk Kim     int                     Optind;
1101a9d8d09cSJung-uk Kim 
1102a9d8d09cSJung-uk Kim 
1103a9d8d09cSJung-uk Kim     ResponseFile = fopen (Filename, "r");
1104a9d8d09cSJung-uk Kim     if (!ResponseFile)
1105a9d8d09cSJung-uk Kim     {
1106a9d8d09cSJung-uk Kim         printf ("Could not open command file %s, %s\n",
1107a9d8d09cSJung-uk Kim             Filename, strerror (errno));
1108a9d8d09cSJung-uk Kim         return (-1);
1109a9d8d09cSJung-uk Kim     }
1110a9d8d09cSJung-uk Kim 
1111a9d8d09cSJung-uk Kim     /* Must save the current GetOpt globals */
1112a9d8d09cSJung-uk Kim 
1113a9d8d09cSJung-uk Kim     Opterr = AcpiGbl_Opterr;
1114a9d8d09cSJung-uk Kim     Optind = AcpiGbl_Optind;
1115a9d8d09cSJung-uk Kim 
1116a9d8d09cSJung-uk Kim     /*
1117a9d8d09cSJung-uk Kim      * Process all lines in the response file. There must be one complete
1118a9d8d09cSJung-uk Kim      * option per line
1119a9d8d09cSJung-uk Kim      */
11206f1f1a63SJung-uk Kim     while (fgets (AslGbl_StringBuffer, ASL_STRING_BUFFER_SIZE, ResponseFile))
1121a9d8d09cSJung-uk Kim     {
1122a9d8d09cSJung-uk Kim         /* Compress all tokens, allowing us to use a single argv entry */
1123a9d8d09cSJung-uk Kim 
11246f1f1a63SJung-uk Kim         AslMergeOptionTokens (AslGbl_StringBuffer, AslGbl_StringBuffer2);
1125a9d8d09cSJung-uk Kim 
1126a9d8d09cSJung-uk Kim         /* Process the option */
1127a9d8d09cSJung-uk Kim 
1128a9d8d09cSJung-uk Kim         AcpiGbl_Opterr = 0;
1129a9d8d09cSJung-uk Kim         AcpiGbl_Optind = 0;
1130a9d8d09cSJung-uk Kim 
1131a9d8d09cSJung-uk Kim         OptStatus = AslDoOptions (1, &argv, TRUE);
1132a9d8d09cSJung-uk Kim         if (OptStatus)
1133a9d8d09cSJung-uk Kim         {
1134a9d8d09cSJung-uk Kim             printf ("Invalid option in command file %s: %s\n",
11356f1f1a63SJung-uk Kim                 Filename, AslGbl_StringBuffer);
1136a9d8d09cSJung-uk Kim             break;
1137a9d8d09cSJung-uk Kim         }
1138a9d8d09cSJung-uk Kim     }
1139a9d8d09cSJung-uk Kim 
1140a9d8d09cSJung-uk Kim     /* Restore the GetOpt globals */
1141a9d8d09cSJung-uk Kim 
1142a9d8d09cSJung-uk Kim     AcpiGbl_Opterr = Opterr;
1143a9d8d09cSJung-uk Kim     AcpiGbl_Optind = Optind;
1144a9d8d09cSJung-uk Kim 
1145a9d8d09cSJung-uk Kim     fclose (ResponseFile);
1146a9d8d09cSJung-uk Kim     return (OptStatus);
1147a9d8d09cSJung-uk Kim }
1148