1 1.1 jruoho /****************************************************************************** 2 1.1 jruoho * 3 1.1 jruoho * Module Name: asremove - Source conversion - removal functions 4 1.1 jruoho * 5 1.1 jruoho *****************************************************************************/ 6 1.1 jruoho 7 1.1.1.18 christos /****************************************************************************** 8 1.1.1.18 christos * 9 1.1.1.18 christos * 1. Copyright Notice 10 1.1.1.18 christos * 11 1.1.1.19 christos * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp. 12 1.1 jruoho * All rights reserved. 13 1.1 jruoho * 14 1.1.1.18 christos * 2. License 15 1.1.1.18 christos * 16 1.1.1.18 christos * 2.1. This is your license from Intel Corp. under its intellectual property 17 1.1.1.18 christos * rights. You may have additional license terms from the party that provided 18 1.1.1.18 christos * you this software, covering your right to use that party's intellectual 19 1.1.1.18 christos * property rights. 20 1.1.1.18 christos * 21 1.1.1.18 christos * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22 1.1.1.18 christos * copy of the source code appearing in this file ("Covered Code") an 23 1.1.1.18 christos * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24 1.1.1.18 christos * base code distributed originally by Intel ("Original Intel Code") to copy, 25 1.1.1.18 christos * make derivatives, distribute, use and display any portion of the Covered 26 1.1.1.18 christos * Code in any form, with the right to sublicense such rights; and 27 1.1.1.18 christos * 28 1.1.1.18 christos * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29 1.1.1.18 christos * license (with the right to sublicense), under only those claims of Intel 30 1.1.1.18 christos * patents that are infringed by the Original Intel Code, to make, use, sell, 31 1.1.1.18 christos * offer to sell, and import the Covered Code and derivative works thereof 32 1.1.1.18 christos * solely to the minimum extent necessary to exercise the above copyright 33 1.1.1.18 christos * license, and in no event shall the patent license extend to any additions 34 1.1.1.18 christos * to or modifications of the Original Intel Code. No other license or right 35 1.1.1.18 christos * is granted directly or by implication, estoppel or otherwise; 36 1.1.1.18 christos * 37 1.1.1.18 christos * The above copyright and patent license is granted only if the following 38 1.1.1.18 christos * conditions are met: 39 1.1.1.18 christos * 40 1.1.1.18 christos * 3. Conditions 41 1.1.1.18 christos * 42 1.1.1.18 christos * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43 1.1.1.18 christos * Redistribution of source code of any substantial portion of the Covered 44 1.1.1.18 christos * Code or modification with rights to further distribute source must include 45 1.1.1.18 christos * the above Copyright Notice, the above License, this list of Conditions, 46 1.1.1.18 christos * and the following Disclaimer and Export Compliance provision. In addition, 47 1.1.1.18 christos * Licensee must cause all Covered Code to which Licensee contributes to 48 1.1.1.18 christos * contain a file documenting the changes Licensee made to create that Covered 49 1.1.1.18 christos * Code and the date of any change. Licensee must include in that file the 50 1.1.1.18 christos * documentation of any changes made by any predecessor Licensee. Licensee 51 1.1.1.18 christos * must include a prominent statement that the modification is derived, 52 1.1.1.18 christos * directly or indirectly, from Original Intel Code. 53 1.1.1.18 christos * 54 1.1.1.18 christos * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55 1.1.1.18 christos * Redistribution of source code of any substantial portion of the Covered 56 1.1.1.18 christos * Code or modification without rights to further distribute source must 57 1.1.1.18 christos * include the following Disclaimer and Export Compliance provision in the 58 1.1.1.18 christos * documentation and/or other materials provided with distribution. In 59 1.1.1.18 christos * addition, Licensee may not authorize further sublicense of source of any 60 1.1.1.18 christos * portion of the Covered Code, and must include terms to the effect that the 61 1.1.1.18 christos * license from Licensee to its licensee is limited to the intellectual 62 1.1.1.18 christos * property embodied in the software Licensee provides to its licensee, and 63 1.1.1.18 christos * not to intellectual property embodied in modifications its licensee may 64 1.1.1.18 christos * make. 65 1.1.1.18 christos * 66 1.1.1.18 christos * 3.3. Redistribution of Executable. Redistribution in executable form of any 67 1.1.1.18 christos * substantial portion of the Covered Code or modification must reproduce the 68 1.1.1.18 christos * above Copyright Notice, and the following Disclaimer and Export Compliance 69 1.1.1.18 christos * provision in the documentation and/or other materials provided with the 70 1.1.1.18 christos * distribution. 71 1.1.1.18 christos * 72 1.1.1.18 christos * 3.4. Intel retains all right, title, and interest in and to the Original 73 1.1.1.18 christos * Intel Code. 74 1.1.1.18 christos * 75 1.1.1.18 christos * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76 1.1.1.18 christos * Intel shall be used in advertising or otherwise to promote the sale, use or 77 1.1.1.18 christos * other dealings in products derived from or relating to the Covered Code 78 1.1.1.18 christos * without prior written authorization from Intel. 79 1.1.1.18 christos * 80 1.1.1.18 christos * 4. Disclaimer and Export Compliance 81 1.1.1.18 christos * 82 1.1.1.18 christos * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83 1.1.1.18 christos * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84 1.1.1.18 christos * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85 1.1.1.18 christos * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86 1.1.1.18 christos * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87 1.1.1.18 christos * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88 1.1.1.18 christos * PARTICULAR PURPOSE. 89 1.1.1.18 christos * 90 1.1.1.18 christos * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91 1.1.1.18 christos * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92 1.1.1.18 christos * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93 1.1.1.18 christos * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94 1.1.1.18 christos * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95 1.1.1.18 christos * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96 1.1.1.18 christos * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97 1.1.1.18 christos * LIMITED REMEDY. 98 1.1.1.18 christos * 99 1.1.1.18 christos * 4.3. Licensee shall not export, either directly or indirectly, any of this 100 1.1.1.18 christos * software or system incorporating such software without first obtaining any 101 1.1.1.18 christos * required license or other approval from the U. S. Department of Commerce or 102 1.1.1.18 christos * any other agency or department of the United States Government. In the 103 1.1.1.18 christos * event Licensee exports any such software from the United States or 104 1.1.1.18 christos * re-exports any such software from a foreign destination, Licensee shall 105 1.1.1.18 christos * ensure that the distribution and export/re-export of the software is in 106 1.1.1.18 christos * compliance with all laws, regulations, orders, or other restrictions of the 107 1.1.1.18 christos * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108 1.1.1.18 christos * any of its subsidiaries will export/re-export any technical data, process, 109 1.1.1.18 christos * software, or service, directly or indirectly, to any country for which the 110 1.1.1.18 christos * United States government or any agency thereof requires an export license, 111 1.1.1.18 christos * other governmental approval, or letter of assurance, without first obtaining 112 1.1.1.18 christos * such license, approval or letter. 113 1.1.1.18 christos * 114 1.1.1.18 christos ***************************************************************************** 115 1.1.1.18 christos * 116 1.1.1.18 christos * Alternatively, you may choose to be licensed under the terms of the 117 1.1.1.18 christos * following license: 118 1.1.1.18 christos * 119 1.1.1.2 jruoho * Redistribution and use in source and binary forms, with or without 120 1.1.1.2 jruoho * modification, are permitted provided that the following conditions 121 1.1.1.2 jruoho * are met: 122 1.1.1.2 jruoho * 1. Redistributions of source code must retain the above copyright 123 1.1.1.2 jruoho * notice, this list of conditions, and the following disclaimer, 124 1.1.1.2 jruoho * without modification. 125 1.1.1.2 jruoho * 2. Redistributions in binary form must reproduce at minimum a disclaimer 126 1.1.1.2 jruoho * substantially similar to the "NO WARRANTY" disclaimer below 127 1.1.1.2 jruoho * ("Disclaimer") and any redistribution must be conditioned upon 128 1.1.1.2 jruoho * including a substantially similar Disclaimer requirement for further 129 1.1.1.2 jruoho * binary redistribution. 130 1.1.1.2 jruoho * 3. Neither the names of the above-listed copyright holders nor the names 131 1.1.1.2 jruoho * of any contributors may be used to endorse or promote products derived 132 1.1.1.2 jruoho * from this software without specific prior written permission. 133 1.1.1.2 jruoho * 134 1.1.1.2 jruoho * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 135 1.1.1.2 jruoho * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 136 1.1.1.15 christos * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 137 1.1.1.2 jruoho * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 138 1.1.1.18 christos * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 139 1.1.1.18 christos * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 140 1.1.1.18 christos * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 141 1.1.1.18 christos * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 142 1.1.1.18 christos * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 143 1.1.1.18 christos * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 144 1.1.1.18 christos * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 145 1.1.1.18 christos * 146 1.1.1.18 christos * Alternatively, you may choose to be licensed under the terms of the 147 1.1.1.18 christos * GNU General Public License ("GPL") version 2 as published by the Free 148 1.1.1.18 christos * Software Foundation. 149 1.1.1.18 christos * 150 1.1.1.18 christos *****************************************************************************/ 151 1.1 jruoho 152 1.1 jruoho #include "acpisrc.h" 153 1.1 jruoho 154 1.1 jruoho /* Local prototypes */ 155 1.1 jruoho 156 1.1 jruoho void 157 1.1 jruoho AsRemoveStatement ( 158 1.1 jruoho char *Buffer, 159 1.1 jruoho char *Keyword, 160 1.1 jruoho UINT32 Type); 161 1.1 jruoho 162 1.1 jruoho 163 1.1 jruoho /****************************************************************************** 164 1.1 jruoho * 165 1.1 jruoho * FUNCTION: AsRemoveStatement 166 1.1 jruoho * 167 1.1 jruoho * DESCRIPTION: Remove all statements that contain the given keyword. 168 1.1 jruoho * Limitations: Removes text from the start of the line that 169 1.1.1.3 christos * contains the keyword to the next semicolon. Currently 170 1.1 jruoho * doesn't ignore comments. 171 1.1 jruoho * 172 1.1 jruoho ******************************************************************************/ 173 1.1 jruoho 174 1.1 jruoho void 175 1.1 jruoho AsRemoveStatement ( 176 1.1 jruoho char *Buffer, 177 1.1 jruoho char *Keyword, 178 1.1 jruoho UINT32 Type) 179 1.1 jruoho { 180 1.1 jruoho char *SubString; 181 1.1 jruoho char *SubBuffer; 182 1.1 jruoho int KeywordLength; 183 1.1 jruoho 184 1.1 jruoho 185 1.1 jruoho KeywordLength = strlen (Keyword); 186 1.1 jruoho SubBuffer = Buffer; 187 1.1 jruoho SubString = Buffer; 188 1.1 jruoho 189 1.1 jruoho while (SubString) 190 1.1 jruoho { 191 1.1 jruoho SubString = strstr (SubBuffer, Keyword); 192 1.1 jruoho 193 1.1 jruoho if (SubString) 194 1.1 jruoho { 195 1.1 jruoho SubBuffer = SubString; 196 1.1 jruoho 197 1.1 jruoho if ((Type == REPLACE_WHOLE_WORD) && 198 1.1 jruoho (!AsMatchExactWord (SubString, KeywordLength))) 199 1.1 jruoho { 200 1.1 jruoho SubBuffer++; 201 1.1 jruoho continue; 202 1.1 jruoho } 203 1.1 jruoho 204 1.1 jruoho /* Find start of this line */ 205 1.1 jruoho 206 1.1 jruoho while (*SubString != '\n') 207 1.1 jruoho { 208 1.1 jruoho SubString--; 209 1.1 jruoho } 210 1.1 jruoho SubString++; 211 1.1 jruoho 212 1.1 jruoho /* Find end of this statement */ 213 1.1 jruoho 214 1.1 jruoho SubBuffer = AsSkipPastChar (SubBuffer, ';'); 215 1.1 jruoho if (!SubBuffer) 216 1.1 jruoho { 217 1.1 jruoho return; 218 1.1 jruoho } 219 1.1 jruoho 220 1.1 jruoho /* Find end of this line */ 221 1.1 jruoho 222 1.1 jruoho SubBuffer = AsSkipPastChar (SubBuffer, '\n'); 223 1.1 jruoho if (!SubBuffer) 224 1.1 jruoho { 225 1.1 jruoho return; 226 1.1 jruoho } 227 1.1 jruoho 228 1.1 jruoho /* If next line is blank, remove it too */ 229 1.1 jruoho 230 1.1 jruoho if (*SubBuffer == '\n') 231 1.1 jruoho { 232 1.1 jruoho SubBuffer++; 233 1.1 jruoho } 234 1.1 jruoho 235 1.1 jruoho /* Remove the lines */ 236 1.1 jruoho 237 1.1 jruoho SubBuffer = AsRemoveData (SubString, SubBuffer); 238 1.1 jruoho } 239 1.1 jruoho } 240 1.1 jruoho } 241 1.1 jruoho 242 1.1 jruoho 243 1.1 jruoho /****************************************************************************** 244 1.1 jruoho * 245 1.1 jruoho * FUNCTION: AsRemoveConditionalCompile 246 1.1 jruoho * 247 1.1 jruoho * DESCRIPTION: Remove a "#ifdef" statement, and all text that it encompasses. 248 1.1 jruoho * Limitations: cannot handle nested ifdefs. 249 1.1 jruoho * 250 1.1 jruoho ******************************************************************************/ 251 1.1 jruoho 252 1.1 jruoho void 253 1.1 jruoho AsRemoveConditionalCompile ( 254 1.1 jruoho char *Buffer, 255 1.1 jruoho char *Keyword) 256 1.1 jruoho { 257 1.1 jruoho char *SubString; 258 1.1 jruoho char *SubBuffer; 259 1.1 jruoho char *IfPtr; 260 1.1 jruoho char *EndifPtr; 261 1.1 jruoho char *ElsePtr; 262 1.1 jruoho char *Comment; 263 1.1 jruoho int KeywordLength; 264 1.1 jruoho 265 1.1 jruoho 266 1.1 jruoho KeywordLength = strlen (Keyword); 267 1.1 jruoho SubString = Buffer; 268 1.1 jruoho 269 1.1 jruoho while (SubString) 270 1.1 jruoho { 271 1.1 jruoho SubBuffer = strstr (SubString, Keyword); 272 1.1 jruoho if (!SubBuffer) 273 1.1 jruoho { 274 1.1 jruoho return; 275 1.1 jruoho } 276 1.1 jruoho 277 1.1 jruoho /* 278 1.1 jruoho * Check for translation escape string -- means to ignore 279 1.1 jruoho * blocks of code while replacing 280 1.1 jruoho */ 281 1.1.1.3 christos if (Gbl_IgnoreTranslationEscapes) 282 1.1.1.3 christos { 283 1.1.1.3 christos Comment = NULL; 284 1.1.1.3 christos } 285 1.1.1.3 christos else 286 1.1.1.3 christos { 287 1.1.1.3 christos Comment = strstr (SubString, AS_START_IGNORE); 288 1.1.1.3 christos } 289 1.1 jruoho 290 1.1 jruoho if ((Comment) && 291 1.1 jruoho (Comment < SubBuffer)) 292 1.1 jruoho { 293 1.1 jruoho SubString = strstr (Comment, AS_STOP_IGNORE); 294 1.1 jruoho if (!SubString) 295 1.1 jruoho { 296 1.1 jruoho return; 297 1.1 jruoho } 298 1.1 jruoho 299 1.1 jruoho SubString += 3; 300 1.1 jruoho continue; 301 1.1 jruoho } 302 1.1 jruoho 303 1.1 jruoho /* Check for ordinary comment */ 304 1.1 jruoho 305 1.1 jruoho Comment = strstr (SubString, "/*"); 306 1.1 jruoho 307 1.1 jruoho if ((Comment) && 308 1.1 jruoho (Comment < SubBuffer)) 309 1.1 jruoho { 310 1.1 jruoho SubString = strstr (Comment, "*/"); 311 1.1 jruoho if (!SubString) 312 1.1 jruoho { 313 1.1 jruoho return; 314 1.1 jruoho } 315 1.1 jruoho 316 1.1 jruoho SubString += 2; 317 1.1 jruoho continue; 318 1.1 jruoho } 319 1.1 jruoho 320 1.1 jruoho SubString = SubBuffer; 321 1.1 jruoho if (!AsMatchExactWord (SubString, KeywordLength)) 322 1.1 jruoho { 323 1.1 jruoho SubString++; 324 1.1 jruoho continue; 325 1.1 jruoho } 326 1.1 jruoho 327 1.1 jruoho /* Find start of this line */ 328 1.1 jruoho 329 1.1 jruoho while (*SubString != '\n' && (SubString > Buffer)) 330 1.1 jruoho { 331 1.1 jruoho SubString--; 332 1.1 jruoho } 333 1.1.1.7 christos 334 1.1 jruoho SubString++; 335 1.1 jruoho 336 1.1 jruoho /* Find the "#ifxxxx" */ 337 1.1 jruoho 338 1.1 jruoho IfPtr = strstr (SubString, "#if"); 339 1.1 jruoho if (!IfPtr) 340 1.1 jruoho { 341 1.1 jruoho return; 342 1.1 jruoho } 343 1.1 jruoho 344 1.1 jruoho if (IfPtr > SubBuffer) 345 1.1 jruoho { 346 1.1 jruoho /* Not the right #if */ 347 1.1 jruoho 348 1.1 jruoho SubString = SubBuffer + strlen (Keyword); 349 1.1 jruoho continue; 350 1.1 jruoho } 351 1.1 jruoho 352 1.1 jruoho /* Find closing #endif or #else */ 353 1.1 jruoho 354 1.1 jruoho EndifPtr = strstr (SubBuffer, "#endif"); 355 1.1 jruoho if (!EndifPtr) 356 1.1 jruoho { 357 1.1 jruoho /* There has to be an #endif */ 358 1.1 jruoho 359 1.1 jruoho return; 360 1.1 jruoho } 361 1.1 jruoho 362 1.1 jruoho ElsePtr = strstr (SubBuffer, "#else"); 363 1.1 jruoho if ((ElsePtr) && 364 1.1 jruoho (EndifPtr > ElsePtr)) 365 1.1 jruoho { 366 1.1 jruoho /* This #ifdef contains an #else clause */ 367 1.1 jruoho /* Find end of this line */ 368 1.1 jruoho 369 1.1 jruoho SubBuffer = AsSkipPastChar (ElsePtr, '\n'); 370 1.1 jruoho if (!SubBuffer) 371 1.1 jruoho { 372 1.1 jruoho return; 373 1.1 jruoho } 374 1.1 jruoho 375 1.1 jruoho /* Remove the #ifdef .... #else code */ 376 1.1 jruoho 377 1.1 jruoho AsRemoveData (SubString, SubBuffer); 378 1.1 jruoho 379 1.1 jruoho /* Next, we will remove the #endif statement */ 380 1.1 jruoho 381 1.1 jruoho EndifPtr = strstr (SubString, "#endif"); 382 1.1 jruoho if (!EndifPtr) 383 1.1 jruoho { 384 1.1 jruoho /* There has to be an #endif */ 385 1.1 jruoho 386 1.1 jruoho return; 387 1.1 jruoho } 388 1.1 jruoho 389 1.1 jruoho SubString = EndifPtr; 390 1.1 jruoho } 391 1.1 jruoho 392 1.1 jruoho /* Remove the ... #endif part */ 393 1.1 jruoho /* Find end of this line */ 394 1.1 jruoho 395 1.1 jruoho SubBuffer = AsSkipPastChar (EndifPtr, '\n'); 396 1.1 jruoho if (!SubBuffer) 397 1.1 jruoho { 398 1.1 jruoho return; 399 1.1 jruoho } 400 1.1 jruoho 401 1.1 jruoho /* Remove the lines */ 402 1.1 jruoho 403 1.1.1.13 christos (void) AsRemoveData (SubString, SubBuffer); 404 1.1 jruoho } 405 1.1 jruoho } 406 1.1 jruoho 407 1.1 jruoho 408 1.1.1.6 christos #ifdef _OBSOLETE_FUNCTIONS 409 1.1 jruoho /****************************************************************************** 410 1.1 jruoho * 411 1.1 jruoho * FUNCTION: AsRemoveMacro 412 1.1 jruoho * 413 1.1.1.3 christos * DESCRIPTION: Remove every line that contains the keyword. Does not 414 1.1 jruoho * skip comments. 415 1.1 jruoho * 416 1.1 jruoho ******************************************************************************/ 417 1.1 jruoho 418 1.1.1.6 christos NOTE: This function is no longer used and is commented out for now. 419 1.1.1.6 christos 420 1.1.1.6 christos Also, it appears to have one or more bugs in it. It can incorrectly remove 421 1.1.1.6 christos lines of code, producing some garbage. 422 1.1.1.6 christos 423 1.1 jruoho void 424 1.1 jruoho AsRemoveMacro ( 425 1.1 jruoho char *Buffer, 426 1.1 jruoho char *Keyword) 427 1.1 jruoho { 428 1.1 jruoho char *SubString; 429 1.1 jruoho char *SubBuffer; 430 1.1 jruoho int NestLevel; 431 1.1 jruoho 432 1.1 jruoho 433 1.1 jruoho SubBuffer = Buffer; 434 1.1 jruoho SubString = Buffer; 435 1.1 jruoho 436 1.1 jruoho while (SubString) 437 1.1 jruoho { 438 1.1 jruoho SubString = strstr (SubBuffer, Keyword); 439 1.1 jruoho 440 1.1 jruoho if (SubString) 441 1.1 jruoho { 442 1.1 jruoho SubBuffer = SubString; 443 1.1 jruoho 444 1.1 jruoho /* Find start of the macro parameters */ 445 1.1 jruoho 446 1.1 jruoho while (*SubString != '(') 447 1.1 jruoho { 448 1.1 jruoho SubString++; 449 1.1 jruoho } 450 1.1 jruoho SubString++; 451 1.1 jruoho 452 1.1 jruoho /* Remove the macro name and opening paren */ 453 1.1 jruoho 454 1.1 jruoho SubString = AsRemoveData (SubBuffer, SubString); 455 1.1 jruoho 456 1.1 jruoho NestLevel = 1; 457 1.1 jruoho while (*SubString) 458 1.1 jruoho { 459 1.1 jruoho if (*SubString == '(') 460 1.1 jruoho { 461 1.1 jruoho NestLevel++; 462 1.1 jruoho } 463 1.1 jruoho else if (*SubString == ')') 464 1.1 jruoho { 465 1.1 jruoho NestLevel--; 466 1.1 jruoho } 467 1.1 jruoho 468 1.1 jruoho SubString++; 469 1.1 jruoho 470 1.1 jruoho if (NestLevel == 0) 471 1.1 jruoho { 472 1.1 jruoho break; 473 1.1 jruoho } 474 1.1 jruoho } 475 1.1 jruoho 476 1.1 jruoho /* Remove the closing paren */ 477 1.1 jruoho 478 1.1 jruoho SubBuffer = AsRemoveData (SubString-1, SubString); 479 1.1 jruoho } 480 1.1 jruoho } 481 1.1 jruoho } 482 1.1.1.6 christos #endif 483 1.1 jruoho 484 1.1 jruoho /****************************************************************************** 485 1.1 jruoho * 486 1.1 jruoho * FUNCTION: AsRemoveLine 487 1.1 jruoho * 488 1.1.1.3 christos * DESCRIPTION: Remove every line that contains the keyword. Does not 489 1.1 jruoho * skip comments. 490 1.1 jruoho * 491 1.1 jruoho ******************************************************************************/ 492 1.1 jruoho 493 1.1 jruoho void 494 1.1 jruoho AsRemoveLine ( 495 1.1 jruoho char *Buffer, 496 1.1 jruoho char *Keyword) 497 1.1 jruoho { 498 1.1 jruoho char *SubString; 499 1.1 jruoho char *SubBuffer; 500 1.1 jruoho 501 1.1 jruoho 502 1.1 jruoho SubBuffer = Buffer; 503 1.1 jruoho SubString = Buffer; 504 1.1 jruoho 505 1.1 jruoho while (SubString) 506 1.1 jruoho { 507 1.1 jruoho SubString = strstr (SubBuffer, Keyword); 508 1.1 jruoho 509 1.1 jruoho if (SubString) 510 1.1 jruoho { 511 1.1 jruoho SubBuffer = SubString; 512 1.1 jruoho 513 1.1 jruoho /* Find start of this line */ 514 1.1 jruoho 515 1.1 jruoho while (*SubString != '\n') 516 1.1 jruoho { 517 1.1 jruoho SubString--; 518 1.1 jruoho } 519 1.1 jruoho SubString++; 520 1.1 jruoho 521 1.1 jruoho /* Find end of this line */ 522 1.1 jruoho 523 1.1 jruoho SubBuffer = AsSkipPastChar (SubBuffer, '\n'); 524 1.1 jruoho if (!SubBuffer) 525 1.1 jruoho { 526 1.1 jruoho return; 527 1.1 jruoho } 528 1.1 jruoho 529 1.1 jruoho /* Remove the line */ 530 1.1 jruoho 531 1.1 jruoho SubBuffer = AsRemoveData (SubString, SubBuffer); 532 1.1 jruoho } 533 1.1 jruoho } 534 1.1 jruoho } 535 1.1 jruoho 536 1.1 jruoho 537 1.1 jruoho /****************************************************************************** 538 1.1 jruoho * 539 1.1 jruoho * FUNCTION: AsReduceTypedefs 540 1.1 jruoho * 541 1.1 jruoho * DESCRIPTION: Eliminate certain typedefs 542 1.1 jruoho * 543 1.1 jruoho ******************************************************************************/ 544 1.1 jruoho 545 1.1 jruoho void 546 1.1 jruoho AsReduceTypedefs ( 547 1.1 jruoho char *Buffer, 548 1.1 jruoho char *Keyword) 549 1.1 jruoho { 550 1.1 jruoho char *SubString; 551 1.1 jruoho char *SubBuffer; 552 1.1.1.10 christos char *SubSubString; 553 1.1 jruoho int NestLevel; 554 1.1 jruoho 555 1.1 jruoho 556 1.1 jruoho SubBuffer = Buffer; 557 1.1 jruoho SubString = Buffer; 558 1.1 jruoho 559 1.1 jruoho while (SubString) 560 1.1 jruoho { 561 1.1 jruoho SubString = strstr (SubBuffer, Keyword); 562 1.1 jruoho 563 1.1 jruoho if (SubString) 564 1.1 jruoho { 565 1.1.1.10 christos SubSubString = SubString + strlen (Keyword); 566 1.1 jruoho 567 1.1.1.10 christos /* skip spaces */ 568 1.1 jruoho 569 1.1.1.10 christos while (strchr(" \t\r\n", *SubSubString)) 570 1.1.1.10 christos { 571 1.1.1.10 christos SubSubString++; 572 1.1.1.10 christos } 573 1.1.1.10 christos 574 1.1.1.10 christos /* skip type name */ 575 1.1 jruoho 576 1.1.1.10 christos while (!strchr(" \t\r\n", *SubSubString)) 577 1.1 jruoho { 578 1.1.1.10 christos SubSubString++; 579 1.1 jruoho } 580 1.1 jruoho 581 1.1.1.10 christos /* skip spaces */ 582 1.1 jruoho 583 1.1.1.10 christos while (strchr(" \t\r\n", *SubSubString)) 584 1.1.1.10 christos { 585 1.1.1.10 christos SubSubString++; 586 1.1.1.10 christos } 587 1.1.1.10 christos 588 1.1.1.10 christos if (*SubSubString == '{') 589 1.1 jruoho { 590 1.1.1.10 christos /* Remove the typedef itself */ 591 1.1.1.10 christos 592 1.1.1.10 christos SubBuffer = SubString + strlen ("typedef") + 1; 593 1.1.1.13 christos (void) AsRemoveData (SubString, SubBuffer); 594 1.1.1.10 christos 595 1.1.1.10 christos /* Find the opening brace of the struct or union */ 596 1.1.1.10 christos 597 1.1.1.10 christos while (*SubString != '{') 598 1.1 jruoho { 599 1.1.1.10 christos SubString++; 600 1.1 jruoho } 601 1.1.1.10 christos SubString++; 602 1.1.1.10 christos 603 1.1.1.10 christos /* Find the closing brace. Handles nested braces */ 604 1.1.1.10 christos 605 1.1.1.10 christos NestLevel = 1; 606 1.1.1.10 christos while (*SubString) 607 1.1 jruoho { 608 1.1.1.10 christos if (*SubString == '{') 609 1.1.1.10 christos { 610 1.1.1.10 christos NestLevel++; 611 1.1.1.10 christos } 612 1.1.1.10 christos else if (*SubString == '}') 613 1.1.1.10 christos { 614 1.1.1.10 christos NestLevel--; 615 1.1.1.10 christos } 616 1.1.1.10 christos 617 1.1.1.10 christos SubString++; 618 1.1.1.10 christos 619 1.1.1.10 christos if (NestLevel == 0) 620 1.1.1.10 christos { 621 1.1.1.10 christos break; 622 1.1.1.10 christos } 623 1.1 jruoho } 624 1.1 jruoho 625 1.1.1.10 christos /* Remove an extra line feed if present */ 626 1.1 jruoho 627 1.1.1.10 christos if (!strncmp (SubString - 3, "\n\n", 2)) 628 1.1 jruoho { 629 1.1.1.10 christos *(SubString -2) = '}'; 630 1.1.1.10 christos SubString--; 631 1.1 jruoho } 632 1.1 jruoho 633 1.1.1.10 christos /* Find the end of the typedef name */ 634 1.1 jruoho 635 1.1.1.10 christos SubBuffer = AsSkipUntilChar (SubString, ';'); 636 1.1 jruoho 637 1.1.1.10 christos /* And remove the typedef name */ 638 1.1 jruoho 639 1.1.1.10 christos SubBuffer = AsRemoveData (SubString, SubBuffer); 640 1.1.1.10 christos } 641 1.1.1.10 christos else 642 1.1.1.10 christos { 643 1.1.1.10 christos /* Skip the entire definition */ 644 1.1 jruoho 645 1.1.1.10 christos SubString = strchr (SubString, ';') + 1; 646 1.1.1.10 christos SubBuffer = SubString; 647 1.1.1.10 christos } 648 1.1 jruoho } 649 1.1 jruoho } 650 1.1 jruoho } 651 1.1 jruoho 652 1.1 jruoho 653 1.1 jruoho /****************************************************************************** 654 1.1 jruoho * 655 1.1 jruoho * FUNCTION: AsRemoveEmptyBlocks 656 1.1 jruoho * 657 1.1.1.3 christos * DESCRIPTION: Remove any C blocks (e.g., if {}) that contain no code. This 658 1.1 jruoho * can happen as a result of removing lines such as DEBUG_PRINT. 659 1.1 jruoho * 660 1.1 jruoho ******************************************************************************/ 661 1.1 jruoho 662 1.1 jruoho void 663 1.1 jruoho AsRemoveEmptyBlocks ( 664 1.1 jruoho char *Buffer, 665 1.1 jruoho char *Filename) 666 1.1 jruoho { 667 1.1 jruoho char *SubBuffer; 668 1.1 jruoho char *BlockStart; 669 1.1 jruoho BOOLEAN EmptyBlock = TRUE; 670 1.1 jruoho BOOLEAN AnotherPassRequired = TRUE; 671 1.1 jruoho UINT32 BlockCount = 0; 672 1.1 jruoho 673 1.1 jruoho 674 1.1 jruoho while (AnotherPassRequired) 675 1.1 jruoho { 676 1.1 jruoho SubBuffer = Buffer; 677 1.1 jruoho AnotherPassRequired = FALSE; 678 1.1 jruoho 679 1.1 jruoho while (*SubBuffer) 680 1.1 jruoho { 681 1.1 jruoho if (*SubBuffer == '{') 682 1.1 jruoho { 683 1.1 jruoho BlockStart = SubBuffer; 684 1.1 jruoho EmptyBlock = TRUE; 685 1.1 jruoho 686 1.1 jruoho SubBuffer++; 687 1.1 jruoho while (*SubBuffer != '}') 688 1.1 jruoho { 689 1.1 jruoho if ((*SubBuffer != ' ') && 690 1.1 jruoho (*SubBuffer != '\n')) 691 1.1 jruoho { 692 1.1 jruoho EmptyBlock = FALSE; 693 1.1 jruoho break; 694 1.1 jruoho } 695 1.1.1.7 christos 696 1.1 jruoho SubBuffer++; 697 1.1 jruoho } 698 1.1 jruoho 699 1.1 jruoho if (EmptyBlock) 700 1.1 jruoho { 701 1.1 jruoho /* Find start of the first line of the block */ 702 1.1 jruoho 703 1.1 jruoho while (*BlockStart != '\n') 704 1.1 jruoho { 705 1.1 jruoho BlockStart--; 706 1.1 jruoho } 707 1.1 jruoho 708 1.1 jruoho /* Find end of the last line of the block */ 709 1.1 jruoho 710 1.1 jruoho SubBuffer = AsSkipUntilChar (SubBuffer, '\n'); 711 1.1 jruoho if (!SubBuffer) 712 1.1 jruoho { 713 1.1 jruoho break; 714 1.1 jruoho } 715 1.1 jruoho 716 1.1 jruoho /* Remove the block */ 717 1.1 jruoho 718 1.1 jruoho SubBuffer = AsRemoveData (BlockStart, SubBuffer); 719 1.1 jruoho BlockCount++; 720 1.1 jruoho AnotherPassRequired = TRUE; 721 1.1 jruoho continue; 722 1.1 jruoho } 723 1.1 jruoho } 724 1.1 jruoho 725 1.1 jruoho SubBuffer++; 726 1.1 jruoho } 727 1.1 jruoho } 728 1.1 jruoho 729 1.1 jruoho if (BlockCount) 730 1.1 jruoho { 731 1.1 jruoho Gbl_MadeChanges = TRUE; 732 1.1 jruoho AsPrint ("Code blocks deleted", BlockCount, Filename); 733 1.1 jruoho } 734 1.1 jruoho } 735 1.1 jruoho 736 1.1 jruoho 737 1.1 jruoho /****************************************************************************** 738 1.1 jruoho * 739 1.1 jruoho * FUNCTION: AsRemoveDebugMacros 740 1.1 jruoho * 741 1.1 jruoho * DESCRIPTION: Remove all "Debug" macros -- macros that produce debug output. 742 1.1 jruoho * 743 1.1 jruoho ******************************************************************************/ 744 1.1 jruoho 745 1.1 jruoho void 746 1.1 jruoho AsRemoveDebugMacros ( 747 1.1 jruoho char *Buffer) 748 1.1 jruoho { 749 1.1 jruoho AsRemoveConditionalCompile (Buffer, "ACPI_DEBUG_OUTPUT"); 750 1.1 jruoho 751 1.1 jruoho AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT", REPLACE_WHOLE_WORD); 752 1.1 jruoho AsRemoveStatement (Buffer, "ACPI_DEBUG_PRINT_RAW", REPLACE_WHOLE_WORD); 753 1.1 jruoho AsRemoveStatement (Buffer, "DEBUG_EXEC", REPLACE_WHOLE_WORD); 754 1.1 jruoho AsRemoveStatement (Buffer, "FUNCTION_ENTRY", REPLACE_WHOLE_WORD); 755 1.1 jruoho AsRemoveStatement (Buffer, "PROC_NAME", REPLACE_WHOLE_WORD); 756 1.1 jruoho AsRemoveStatement (Buffer, "FUNCTION_TRACE", REPLACE_SUBSTRINGS); 757 1.1 jruoho AsRemoveStatement (Buffer, "DUMP_", REPLACE_SUBSTRINGS); 758 1.1 jruoho 759 1.1 jruoho AsReplaceString ("return_VOID", "return", REPLACE_WHOLE_WORD, Buffer); 760 1.1 jruoho AsReplaceString ("return_PTR", "return", REPLACE_WHOLE_WORD, Buffer); 761 1.1.1.8 christos AsReplaceString ("return_STR", "return", REPLACE_WHOLE_WORD, Buffer); 762 1.1 jruoho AsReplaceString ("return_ACPI_STATUS", "return", REPLACE_WHOLE_WORD, Buffer); 763 1.1 jruoho AsReplaceString ("return_acpi_status", "return", REPLACE_WHOLE_WORD, Buffer); 764 1.1 jruoho AsReplaceString ("return_VALUE", "return", REPLACE_WHOLE_WORD, Buffer); 765 1.1 jruoho } 766 1.1 jruoho 767 1.1 jruoho 768 1.1.1.3 christos /****************************************************************************** 769 1.1.1.3 christos * 770 1.1.1.3 christos * FUNCTION: AsCleanupSpecialMacro 771 1.1.1.3 christos * 772 1.1.1.3 christos * DESCRIPTION: For special macro invocations (invoked without ";" at the end 773 1.1.1.3 christos * of the lines), do the following: 774 1.1.1.3 christos * 1. Remove spaces appended by indent at the beginning of lines. 775 1.1.1.3 christos * 2. Add an empty line between two special macro invocations. 776 1.1.1.3 christos * 777 1.1.1.3 christos ******************************************************************************/ 778 1.1.1.3 christos 779 1.1.1.3 christos void 780 1.1.1.3 christos AsCleanupSpecialMacro ( 781 1.1.1.3 christos char *Buffer, 782 1.1.1.3 christos char *Keyword) 783 1.1.1.3 christos { 784 1.1.1.3 christos char *SubString; 785 1.1.1.3 christos char *SubBuffer; 786 1.1.1.3 christos char *CommentEnd; 787 1.1.1.3 christos int NewLine; 788 1.1.1.3 christos int NestLevel; 789 1.1.1.3 christos 790 1.1.1.3 christos 791 1.1.1.3 christos SubBuffer = Buffer; 792 1.1.1.3 christos SubString = Buffer; 793 1.1.1.3 christos 794 1.1.1.3 christos while (SubString) 795 1.1.1.3 christos { 796 1.1.1.3 christos SubString = strstr (SubBuffer, Keyword); 797 1.1.1.3 christos 798 1.1.1.3 christos if (SubString) 799 1.1.1.3 christos { 800 1.1.1.3 christos /* Find start of the macro parameters */ 801 1.1.1.3 christos 802 1.1.1.3 christos while (*SubString != '(') 803 1.1.1.3 christos { 804 1.1.1.3 christos SubString++; 805 1.1.1.3 christos } 806 1.1.1.7 christos 807 1.1.1.3 christos SubString++; 808 1.1.1.3 christos 809 1.1.1.3 christos NestLevel = 1; 810 1.1.1.3 christos while (*SubString) 811 1.1.1.3 christos { 812 1.1.1.3 christos if (*SubString == '(') 813 1.1.1.3 christos { 814 1.1.1.3 christos NestLevel++; 815 1.1.1.3 christos } 816 1.1.1.3 christos else if (*SubString == ')') 817 1.1.1.3 christos { 818 1.1.1.3 christos NestLevel--; 819 1.1.1.3 christos } 820 1.1.1.3 christos 821 1.1.1.3 christos SubString++; 822 1.1.1.3 christos 823 1.1.1.3 christos if (NestLevel == 0) 824 1.1.1.3 christos { 825 1.1.1.3 christos break; 826 1.1.1.3 christos } 827 1.1.1.3 christos } 828 1.1.1.3 christos 829 1.1.1.3 christos SkipLine: 830 1.1.1.3 christos 831 1.1.1.3 christos /* Find end of the line */ 832 1.1.1.3 christos 833 1.1.1.3 christos NewLine = FALSE; 834 1.1.1.3 christos while (!NewLine && *SubString) 835 1.1.1.3 christos { 836 1.1.1.3 christos if (*SubString == '\n' && *(SubString - 1) != '\\') 837 1.1.1.3 christos { 838 1.1.1.3 christos NewLine = TRUE; 839 1.1.1.3 christos } 840 1.1.1.7 christos 841 1.1.1.3 christos SubString++; 842 1.1.1.3 christos } 843 1.1.1.3 christos 844 1.1.1.3 christos /* Find end of the line */ 845 1.1.1.3 christos 846 1.1.1.3 christos if (*SubString == '#' || *SubString == '\n') 847 1.1.1.3 christos { 848 1.1.1.3 christos goto SkipLine; 849 1.1.1.3 christos } 850 1.1.1.3 christos 851 1.1.1.3 christos SubBuffer = SubString; 852 1.1.1.3 christos 853 1.1.1.3 christos /* Find start of the non-space */ 854 1.1.1.3 christos 855 1.1.1.3 christos while (*SubString == ' ') 856 1.1.1.3 christos { 857 1.1.1.3 christos SubString++; 858 1.1.1.3 christos } 859 1.1.1.3 christos 860 1.1.1.3 christos /* Find end of the line */ 861 1.1.1.3 christos 862 1.1.1.3 christos if (*SubString == '#' || *SubString == '\n') 863 1.1.1.3 christos { 864 1.1.1.3 christos goto SkipLine; 865 1.1.1.3 christos } 866 1.1.1.3 christos 867 1.1.1.3 christos /* Find end of the line */ 868 1.1.1.3 christos 869 1.1.1.3 christos if (*SubString == '/' || *SubString == '*') 870 1.1.1.3 christos { 871 1.1.1.3 christos CommentEnd = strstr (SubString, "*/"); 872 1.1.1.3 christos if (CommentEnd) 873 1.1.1.3 christos { 874 1.1.1.3 christos SubString = CommentEnd + 2; 875 1.1.1.3 christos goto SkipLine; 876 1.1.1.3 christos } 877 1.1.1.3 christos } 878 1.1.1.3 christos 879 1.1.1.3 christos SubString = AsRemoveData (SubBuffer, SubString); 880 1.1.1.3 christos } 881 1.1.1.3 christos } 882 1.1.1.3 christos } 883