ahmain.c revision 1.1.1.1 1 /******************************************************************************
2 *
3 * Module Name: ahmain - Main module for the acpi help utility
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2011, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44 #include "acpihelp.h"
45
46
47 /* Local prototypes */
48
49 static void
50 AhDisplayUsage (
51 void);
52
53
54 /******************************************************************************
55 *
56 * FUNCTION: AhDisplayUsage
57 *
58 * DESCRIPTION: Usage message
59 *
60 ******************************************************************************/
61
62 static void
63 AhDisplayUsage (
64 void)
65 {
66
67 printf ("\n");
68 printf ("Usage: acpihelp <options> [NamePrefix | HexValue]\n\n");
69 printf ("Where: -k [NamePrefix] Find/Display ASL non-operator keyword(s)\n");
70 printf (" -m [NamePrefix] Find/Display AML opcode name(s)\n");
71 printf (" -o [HexValue] Decode hex AML opcode\n");
72 printf (" -p [NamePrefix] Find/Display ASL predefined method name(s)\n");
73 printf (" -s [NamePrefix] Find/Display ASL operator name(s)\n");
74 printf ("\nNamePrefix/HexValue not specified means \"Display All\"\n");
75 printf ("\nDefault search with NamePrefix and no options:\n");
76 printf (" Find ASL operator names - if NamePrefix does not start with underscore\n");
77 printf (" Find ASL predefined method names - if NamePrefix starts with underscore\n");
78 printf ("\n");
79 }
80
81
82 /******************************************************************************
83 *
84 * FUNCTION: main
85 *
86 * DESCRIPTION: C main function for AcpiHelp utility.
87 *
88 ******************************************************************************/
89
90 int ACPI_SYSTEM_XFACE
91 main (
92 int argc,
93 char *argv[])
94 {
95 char *Name;
96 UINT32 DecodeType;
97 int j;
98
99
100 printf (ACPI_COMMON_SIGNON ("ACPI Help Utility"));
101 DecodeType = AH_DECODE_DEFAULT;
102
103 if (argc < 2)
104 {
105 AhDisplayUsage ();
106 return (0);
107 }
108
109 /* Command line options */
110
111 while ((j = AcpiGetopt (argc, argv, "hkmops")) != EOF) switch (j)
112 {
113 case 'k':
114 DecodeType = AH_DECODE_ASL_KEYWORD;
115 break;
116
117 case 'm':
118 DecodeType = AH_DECODE_AML;
119 break;
120
121 case 'o':
122 DecodeType = AH_DECODE_AML_OPCODE;
123 break;
124
125 case 'p':
126 DecodeType = AH_DECODE_PREDEFINED_NAME;
127 break;
128
129 case 's':
130 DecodeType = AH_DECODE_ASL;
131 break;
132
133 case 'h':
134 default:
135 AhDisplayUsage ();
136 return (-1);
137 }
138
139 /* Missing (null) name means "display all" */
140
141 Name = argv[AcpiGbl_Optind];
142
143 switch (DecodeType)
144 {
145 case AH_DECODE_AML:
146 AhFindAmlOpcode (Name);
147 break;
148
149 case AH_DECODE_AML_OPCODE:
150 AhDecodeAmlOpcode (Name);
151 break;
152
153 case AH_DECODE_PREDEFINED_NAME:
154 AhFindPredefinedNames (Name);
155 break;
156
157 case AH_DECODE_ASL:
158 AhFindAslOperators (Name);
159 break;
160
161 case AH_DECODE_ASL_KEYWORD:
162 AhFindAslKeywords (Name);
163 break;
164
165 default:
166 if (!Name)
167 {
168 AhFindAslOperators (Name);
169 break;
170 }
171
172 if (*Name == '_')
173 {
174 AhFindPredefinedNames (Name);
175 }
176 else
177 {
178 AhFindAslOperators (Name);
179 }
180 break;
181 }
182
183 return (0);
184 }
185
186
187 /*******************************************************************************
188 *
189 * FUNCTION: AhStrupr (strupr)
190 *
191 * PARAMETERS: SrcString - The source string to convert
192 *
193 * RETURN: None
194 *
195 * DESCRIPTION: Convert string to uppercase
196 *
197 * NOTE: This is not a POSIX function, so it appears here, not in utclib.c
198 *
199 ******************************************************************************/
200
201 void
202 AhStrupr (
203 char *SrcString)
204 {
205 char *String;
206
207
208 if (!SrcString)
209 {
210 return;
211 }
212
213 /* Walk entire string, uppercasing the letters */
214
215 for (String = SrcString; *String; String++)
216 {
217 *String = (char) toupper ((int) *String);
218 }
219
220 return;
221 }
222