Home | History | Annotate | Line # | Download | only in acpisrc
ascase.c revision 1.1.1.2.2.2
      1  1.1.1.2.2.2  bouyer 
      2  1.1.1.2.2.2  bouyer /******************************************************************************
      3  1.1.1.2.2.2  bouyer  *
      4  1.1.1.2.2.2  bouyer  * Module Name: ascase - Source conversion - lower/upper case utilities
      5  1.1.1.2.2.2  bouyer  *
      6  1.1.1.2.2.2  bouyer  *****************************************************************************/
      7  1.1.1.2.2.2  bouyer 
      8  1.1.1.2.2.2  bouyer /*
      9  1.1.1.2.2.2  bouyer  * Copyright (C) 2000 - 2011, Intel Corp.
     10  1.1.1.2.2.2  bouyer  * All rights reserved.
     11  1.1.1.2.2.2  bouyer  *
     12  1.1.1.2.2.2  bouyer  * Redistribution and use in source and binary forms, with or without
     13  1.1.1.2.2.2  bouyer  * modification, are permitted provided that the following conditions
     14  1.1.1.2.2.2  bouyer  * are met:
     15  1.1.1.2.2.2  bouyer  * 1. Redistributions of source code must retain the above copyright
     16  1.1.1.2.2.2  bouyer  *    notice, this list of conditions, and the following disclaimer,
     17  1.1.1.2.2.2  bouyer  *    without modification.
     18  1.1.1.2.2.2  bouyer  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     19  1.1.1.2.2.2  bouyer  *    substantially similar to the "NO WARRANTY" disclaimer below
     20  1.1.1.2.2.2  bouyer  *    ("Disclaimer") and any redistribution must be conditioned upon
     21  1.1.1.2.2.2  bouyer  *    including a substantially similar Disclaimer requirement for further
     22  1.1.1.2.2.2  bouyer  *    binary redistribution.
     23  1.1.1.2.2.2  bouyer  * 3. Neither the names of the above-listed copyright holders nor the names
     24  1.1.1.2.2.2  bouyer  *    of any contributors may be used to endorse or promote products derived
     25  1.1.1.2.2.2  bouyer  *    from this software without specific prior written permission.
     26  1.1.1.2.2.2  bouyer  *
     27  1.1.1.2.2.2  bouyer  * Alternatively, this software may be distributed under the terms of the
     28  1.1.1.2.2.2  bouyer  * GNU General Public License ("GPL") version 2 as published by the Free
     29  1.1.1.2.2.2  bouyer  * Software Foundation.
     30  1.1.1.2.2.2  bouyer  *
     31  1.1.1.2.2.2  bouyer  * NO WARRANTY
     32  1.1.1.2.2.2  bouyer  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     33  1.1.1.2.2.2  bouyer  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     34  1.1.1.2.2.2  bouyer  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     35  1.1.1.2.2.2  bouyer  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     36  1.1.1.2.2.2  bouyer  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     37  1.1.1.2.2.2  bouyer  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     38  1.1.1.2.2.2  bouyer  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     39  1.1.1.2.2.2  bouyer  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     40  1.1.1.2.2.2  bouyer  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     41  1.1.1.2.2.2  bouyer  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     42  1.1.1.2.2.2  bouyer  * POSSIBILITY OF SUCH DAMAGES.
     43  1.1.1.2.2.2  bouyer  */
     44  1.1.1.2.2.2  bouyer 
     45  1.1.1.2.2.2  bouyer #include "acpisrc.h"
     46  1.1.1.2.2.2  bouyer 
     47  1.1.1.2.2.2  bouyer /* Local prototypes */
     48  1.1.1.2.2.2  bouyer 
     49  1.1.1.2.2.2  bouyer void
     50  1.1.1.2.2.2  bouyer AsUppercaseTokens (
     51  1.1.1.2.2.2  bouyer     char                    *Buffer,
     52  1.1.1.2.2.2  bouyer     char                    *PrefixString);
     53  1.1.1.2.2.2  bouyer 
     54  1.1.1.2.2.2  bouyer 
     55  1.1.1.2.2.2  bouyer /******************************************************************************
     56  1.1.1.2.2.2  bouyer  *
     57  1.1.1.2.2.2  bouyer  * FUNCTION:    AsLowerCaseString
     58  1.1.1.2.2.2  bouyer  *
     59  1.1.1.2.2.2  bouyer  * DESCRIPTION: LowerCase all instances of a target string with a replacement
     60  1.1.1.2.2.2  bouyer  *              string.  Returns count of the strings replaced.
     61  1.1.1.2.2.2  bouyer  *
     62  1.1.1.2.2.2  bouyer  ******************************************************************************/
     63  1.1.1.2.2.2  bouyer 
     64  1.1.1.2.2.2  bouyer int
     65  1.1.1.2.2.2  bouyer AsLowerCaseString (
     66  1.1.1.2.2.2  bouyer     char                    *Target,
     67  1.1.1.2.2.2  bouyer     char                    *Buffer)
     68  1.1.1.2.2.2  bouyer {
     69  1.1.1.2.2.2  bouyer     char                    *SubString1;
     70  1.1.1.2.2.2  bouyer     char                    *SubString2;
     71  1.1.1.2.2.2  bouyer     char                    *SubBuffer;
     72  1.1.1.2.2.2  bouyer     int                     TargetLength;
     73  1.1.1.2.2.2  bouyer     int                     LowerCaseCount = 0;
     74  1.1.1.2.2.2  bouyer     int                     i;
     75  1.1.1.2.2.2  bouyer 
     76  1.1.1.2.2.2  bouyer 
     77  1.1.1.2.2.2  bouyer     TargetLength = strlen (Target);
     78  1.1.1.2.2.2  bouyer 
     79  1.1.1.2.2.2  bouyer     SubBuffer = Buffer;
     80  1.1.1.2.2.2  bouyer     SubString1 = Buffer;
     81  1.1.1.2.2.2  bouyer 
     82  1.1.1.2.2.2  bouyer     while (SubString1)
     83  1.1.1.2.2.2  bouyer     {
     84  1.1.1.2.2.2  bouyer         /* Find the target string */
     85  1.1.1.2.2.2  bouyer 
     86  1.1.1.2.2.2  bouyer         SubString1 = strstr (SubBuffer, Target);
     87  1.1.1.2.2.2  bouyer         if (!SubString1)
     88  1.1.1.2.2.2  bouyer         {
     89  1.1.1.2.2.2  bouyer             return LowerCaseCount;
     90  1.1.1.2.2.2  bouyer         }
     91  1.1.1.2.2.2  bouyer 
     92  1.1.1.2.2.2  bouyer         /*
     93  1.1.1.2.2.2  bouyer          * Check for translation escape string -- means to ignore
     94  1.1.1.2.2.2  bouyer          * blocks of code while replacing
     95  1.1.1.2.2.2  bouyer          */
     96  1.1.1.2.2.2  bouyer         SubString2 = strstr (SubBuffer, AS_START_IGNORE);
     97  1.1.1.2.2.2  bouyer 
     98  1.1.1.2.2.2  bouyer         if ((SubString2) &&
     99  1.1.1.2.2.2  bouyer             (SubString2 < SubString1))
    100  1.1.1.2.2.2  bouyer         {
    101  1.1.1.2.2.2  bouyer             /* Find end of the escape block starting at "Substring2" */
    102  1.1.1.2.2.2  bouyer 
    103  1.1.1.2.2.2  bouyer             SubString2 = strstr (SubString2, AS_STOP_IGNORE);
    104  1.1.1.2.2.2  bouyer             if (!SubString2)
    105  1.1.1.2.2.2  bouyer             {
    106  1.1.1.2.2.2  bouyer                 /* Didn't find terminator */
    107  1.1.1.2.2.2  bouyer 
    108  1.1.1.2.2.2  bouyer                 return LowerCaseCount;
    109  1.1.1.2.2.2  bouyer             }
    110  1.1.1.2.2.2  bouyer 
    111  1.1.1.2.2.2  bouyer             /* Move buffer to end of escape block and continue */
    112  1.1.1.2.2.2  bouyer 
    113  1.1.1.2.2.2  bouyer             SubBuffer = SubString2;
    114  1.1.1.2.2.2  bouyer         }
    115  1.1.1.2.2.2  bouyer 
    116  1.1.1.2.2.2  bouyer         /* Do the actual replace if the target was found */
    117  1.1.1.2.2.2  bouyer 
    118  1.1.1.2.2.2  bouyer         else
    119  1.1.1.2.2.2  bouyer         {
    120  1.1.1.2.2.2  bouyer             if (!AsMatchExactWord (SubString1, TargetLength))
    121  1.1.1.2.2.2  bouyer             {
    122  1.1.1.2.2.2  bouyer                 SubBuffer = SubString1 + 1;
    123  1.1.1.2.2.2  bouyer                 continue;
    124  1.1.1.2.2.2  bouyer             }
    125  1.1.1.2.2.2  bouyer 
    126  1.1.1.2.2.2  bouyer             for (i = 0; i < TargetLength; i++)
    127  1.1.1.2.2.2  bouyer             {
    128  1.1.1.2.2.2  bouyer                 SubString1[i] = (char) tolower ((int) SubString1[i]);
    129  1.1.1.2.2.2  bouyer             }
    130  1.1.1.2.2.2  bouyer 
    131  1.1.1.2.2.2  bouyer             SubBuffer = SubString1 + TargetLength;
    132  1.1.1.2.2.2  bouyer 
    133  1.1.1.2.2.2  bouyer             if ((Gbl_WidenDeclarations) && (!Gbl_StructDefs))
    134  1.1.1.2.2.2  bouyer             {
    135  1.1.1.2.2.2  bouyer                 if ((SubBuffer[0] == ' ') && (SubBuffer[1] == ' '))
    136  1.1.1.2.2.2  bouyer                 {
    137  1.1.1.2.2.2  bouyer                     AsInsertData (SubBuffer, "        ", 8);
    138  1.1.1.2.2.2  bouyer                 }
    139  1.1.1.2.2.2  bouyer             }
    140  1.1.1.2.2.2  bouyer 
    141  1.1.1.2.2.2  bouyer             LowerCaseCount++;
    142  1.1.1.2.2.2  bouyer         }
    143  1.1.1.2.2.2  bouyer     }
    144  1.1.1.2.2.2  bouyer 
    145  1.1.1.2.2.2  bouyer     return LowerCaseCount;
    146  1.1.1.2.2.2  bouyer }
    147  1.1.1.2.2.2  bouyer 
    148  1.1.1.2.2.2  bouyer 
    149  1.1.1.2.2.2  bouyer /******************************************************************************
    150  1.1.1.2.2.2  bouyer  *
    151  1.1.1.2.2.2  bouyer  * FUNCTION:    AsMixedCaseToUnderscores
    152  1.1.1.2.2.2  bouyer  *
    153  1.1.1.2.2.2  bouyer  * DESCRIPTION: Converts mixed case identifiers to underscored identifiers.
    154  1.1.1.2.2.2  bouyer  *              for example,
    155  1.1.1.2.2.2  bouyer  *
    156  1.1.1.2.2.2  bouyer  *              ThisUsefullyNamedIdentifier   becomes:
    157  1.1.1.2.2.2  bouyer  *
    158  1.1.1.2.2.2  bouyer  *              this_usefully_named_identifier
    159  1.1.1.2.2.2  bouyer  *
    160  1.1.1.2.2.2  bouyer  ******************************************************************************/
    161  1.1.1.2.2.2  bouyer 
    162  1.1.1.2.2.2  bouyer void
    163  1.1.1.2.2.2  bouyer AsMixedCaseToUnderscores (
    164  1.1.1.2.2.2  bouyer     char                    *Buffer)
    165  1.1.1.2.2.2  bouyer {
    166  1.1.1.2.2.2  bouyer     UINT32                  Length;
    167  1.1.1.2.2.2  bouyer     char                    *SubBuffer = Buffer;
    168  1.1.1.2.2.2  bouyer     char                    *TokenEnd;
    169  1.1.1.2.2.2  bouyer     char                    *TokenStart = NULL;
    170  1.1.1.2.2.2  bouyer     char                    *SubString;
    171  1.1.1.2.2.2  bouyer     BOOLEAN                 HasLowerCase = FALSE;
    172  1.1.1.2.2.2  bouyer 
    173  1.1.1.2.2.2  bouyer 
    174  1.1.1.2.2.2  bouyer     while (*SubBuffer)
    175  1.1.1.2.2.2  bouyer     {
    176  1.1.1.2.2.2  bouyer         /* Ignore whitespace */
    177  1.1.1.2.2.2  bouyer 
    178  1.1.1.2.2.2  bouyer         if (*SubBuffer == ' ')
    179  1.1.1.2.2.2  bouyer         {
    180  1.1.1.2.2.2  bouyer             while (*SubBuffer == ' ')
    181  1.1.1.2.2.2  bouyer             {
    182  1.1.1.2.2.2  bouyer                 SubBuffer++;
    183  1.1.1.2.2.2  bouyer             }
    184  1.1.1.2.2.2  bouyer             TokenStart = NULL;
    185  1.1.1.2.2.2  bouyer             HasLowerCase = FALSE;
    186  1.1.1.2.2.2  bouyer             continue;
    187  1.1.1.2.2.2  bouyer         }
    188  1.1.1.2.2.2  bouyer 
    189  1.1.1.2.2.2  bouyer         /* Ignore commas */
    190  1.1.1.2.2.2  bouyer 
    191  1.1.1.2.2.2  bouyer         if ((*SubBuffer == ',') ||
    192  1.1.1.2.2.2  bouyer             (*SubBuffer == '>') ||
    193  1.1.1.2.2.2  bouyer             (*SubBuffer == ')'))
    194  1.1.1.2.2.2  bouyer         {
    195  1.1.1.2.2.2  bouyer             SubBuffer++;
    196  1.1.1.2.2.2  bouyer             TokenStart = NULL;
    197  1.1.1.2.2.2  bouyer             HasLowerCase = FALSE;
    198  1.1.1.2.2.2  bouyer             continue;
    199  1.1.1.2.2.2  bouyer         }
    200  1.1.1.2.2.2  bouyer 
    201  1.1.1.2.2.2  bouyer         /* Check for quoted string -- ignore */
    202  1.1.1.2.2.2  bouyer 
    203  1.1.1.2.2.2  bouyer         if (*SubBuffer == '"')
    204  1.1.1.2.2.2  bouyer         {
    205  1.1.1.2.2.2  bouyer             SubBuffer++;
    206  1.1.1.2.2.2  bouyer             while (*SubBuffer != '"')
    207  1.1.1.2.2.2  bouyer             {
    208  1.1.1.2.2.2  bouyer                 if (!*SubBuffer)
    209  1.1.1.2.2.2  bouyer                 {
    210  1.1.1.2.2.2  bouyer                     return;
    211  1.1.1.2.2.2  bouyer                 }
    212  1.1.1.2.2.2  bouyer 
    213  1.1.1.2.2.2  bouyer                 /* Handle embedded escape sequences */
    214  1.1.1.2.2.2  bouyer 
    215  1.1.1.2.2.2  bouyer                 if (*SubBuffer == '\\')
    216  1.1.1.2.2.2  bouyer                 {
    217  1.1.1.2.2.2  bouyer                     SubBuffer++;
    218  1.1.1.2.2.2  bouyer                 }
    219  1.1.1.2.2.2  bouyer                 SubBuffer++;
    220  1.1.1.2.2.2  bouyer             }
    221  1.1.1.2.2.2  bouyer             SubBuffer++;
    222  1.1.1.2.2.2  bouyer             continue;
    223  1.1.1.2.2.2  bouyer         }
    224  1.1.1.2.2.2  bouyer 
    225  1.1.1.2.2.2  bouyer         if (islower ((int) *SubBuffer))
    226  1.1.1.2.2.2  bouyer         {
    227  1.1.1.2.2.2  bouyer             HasLowerCase = TRUE;
    228  1.1.1.2.2.2  bouyer         }
    229  1.1.1.2.2.2  bouyer 
    230  1.1.1.2.2.2  bouyer         /*
    231  1.1.1.2.2.2  bouyer          * Check for translation escape string -- means to ignore
    232  1.1.1.2.2.2  bouyer          * blocks of code while replacing
    233  1.1.1.2.2.2  bouyer          */
    234  1.1.1.2.2.2  bouyer         if ((SubBuffer[0] == '/') &&
    235  1.1.1.2.2.2  bouyer             (SubBuffer[1] == '*') &&
    236  1.1.1.2.2.2  bouyer             (SubBuffer[2] == '!'))
    237  1.1.1.2.2.2  bouyer         {
    238  1.1.1.2.2.2  bouyer             SubBuffer = strstr (SubBuffer, "!*/");
    239  1.1.1.2.2.2  bouyer             if (!SubBuffer)
    240  1.1.1.2.2.2  bouyer             {
    241  1.1.1.2.2.2  bouyer                 return;
    242  1.1.1.2.2.2  bouyer             }
    243  1.1.1.2.2.2  bouyer             continue;
    244  1.1.1.2.2.2  bouyer         }
    245  1.1.1.2.2.2  bouyer 
    246  1.1.1.2.2.2  bouyer         /* Ignore hex constants */
    247  1.1.1.2.2.2  bouyer 
    248  1.1.1.2.2.2  bouyer         if (SubBuffer[0] == '0')
    249  1.1.1.2.2.2  bouyer         {
    250  1.1.1.2.2.2  bouyer             if ((SubBuffer[1] == 'x') ||
    251  1.1.1.2.2.2  bouyer                 (SubBuffer[1] == 'X'))
    252  1.1.1.2.2.2  bouyer             {
    253  1.1.1.2.2.2  bouyer                 SubBuffer += 2;
    254  1.1.1.2.2.2  bouyer                 while (isxdigit ((int) *SubBuffer))
    255  1.1.1.2.2.2  bouyer                 {
    256  1.1.1.2.2.2  bouyer                     SubBuffer++;
    257  1.1.1.2.2.2  bouyer                 }
    258  1.1.1.2.2.2  bouyer                 continue;
    259  1.1.1.2.2.2  bouyer             }
    260  1.1.1.2.2.2  bouyer         }
    261  1.1.1.2.2.2  bouyer 
    262  1.1.1.2.2.2  bouyer /* OBSOLETE CODE, all quoted strings now completely ignored. */
    263  1.1.1.2.2.2  bouyer #if 0
    264  1.1.1.2.2.2  bouyer         /* Ignore format specification fields */
    265  1.1.1.2.2.2  bouyer 
    266  1.1.1.2.2.2  bouyer         if (SubBuffer[0] == '%')
    267  1.1.1.2.2.2  bouyer         {
    268  1.1.1.2.2.2  bouyer             SubBuffer++;
    269  1.1.1.2.2.2  bouyer 
    270  1.1.1.2.2.2  bouyer             while ((isalnum (*SubBuffer)) || (*SubBuffer == '.'))
    271  1.1.1.2.2.2  bouyer             {
    272  1.1.1.2.2.2  bouyer                 SubBuffer++;
    273  1.1.1.2.2.2  bouyer             }
    274  1.1.1.2.2.2  bouyer 
    275  1.1.1.2.2.2  bouyer             continue;
    276  1.1.1.2.2.2  bouyer         }
    277  1.1.1.2.2.2  bouyer #endif
    278  1.1.1.2.2.2  bouyer 
    279  1.1.1.2.2.2  bouyer         /* Ignore standard escape sequences (\n, \r, etc.)  Not Hex or Octal escapes */
    280  1.1.1.2.2.2  bouyer 
    281  1.1.1.2.2.2  bouyer         if (SubBuffer[0] == '\\')
    282  1.1.1.2.2.2  bouyer         {
    283  1.1.1.2.2.2  bouyer             SubBuffer += 2;
    284  1.1.1.2.2.2  bouyer             continue;
    285  1.1.1.2.2.2  bouyer         }
    286  1.1.1.2.2.2  bouyer 
    287  1.1.1.2.2.2  bouyer         /*
    288  1.1.1.2.2.2  bouyer          * Ignore identifiers that already contain embedded underscores
    289  1.1.1.2.2.2  bouyer          * These are typically C macros or defines (all upper case)
    290  1.1.1.2.2.2  bouyer          * Note: there are some cases where identifiers have underscores
    291  1.1.1.2.2.2  bouyer          * AcpiGbl_* for example. HasLowerCase flag handles these.
    292  1.1.1.2.2.2  bouyer          */
    293  1.1.1.2.2.2  bouyer         if ((*SubBuffer == '_') && (!HasLowerCase) && (TokenStart))
    294  1.1.1.2.2.2  bouyer         {
    295  1.1.1.2.2.2  bouyer             /* Check the rest of the identifier for any lower case letters */
    296  1.1.1.2.2.2  bouyer 
    297  1.1.1.2.2.2  bouyer             SubString = SubBuffer;
    298  1.1.1.2.2.2  bouyer             while ((isalnum ((int) *SubString)) || (*SubString == '_'))
    299  1.1.1.2.2.2  bouyer             {
    300  1.1.1.2.2.2  bouyer                 if (islower ((int) *SubString))
    301  1.1.1.2.2.2  bouyer                 {
    302  1.1.1.2.2.2  bouyer                     HasLowerCase = TRUE;
    303  1.1.1.2.2.2  bouyer                 }
    304  1.1.1.2.2.2  bouyer                 SubString++;
    305  1.1.1.2.2.2  bouyer             }
    306  1.1.1.2.2.2  bouyer 
    307  1.1.1.2.2.2  bouyer             /* If no lower case letters, we can safely ignore the entire token */
    308  1.1.1.2.2.2  bouyer 
    309  1.1.1.2.2.2  bouyer             if (!HasLowerCase)
    310  1.1.1.2.2.2  bouyer             {
    311  1.1.1.2.2.2  bouyer                 SubBuffer = SubString;
    312  1.1.1.2.2.2  bouyer                 continue;
    313  1.1.1.2.2.2  bouyer             }
    314  1.1.1.2.2.2  bouyer         }
    315  1.1.1.2.2.2  bouyer 
    316  1.1.1.2.2.2  bouyer         /* A capital letter may indicate the start of a token; save it */
    317  1.1.1.2.2.2  bouyer 
    318  1.1.1.2.2.2  bouyer         if (isupper ((int) SubBuffer[0]))
    319  1.1.1.2.2.2  bouyer         {
    320  1.1.1.2.2.2  bouyer             TokenStart = SubBuffer;
    321  1.1.1.2.2.2  bouyer         }
    322  1.1.1.2.2.2  bouyer 
    323  1.1.1.2.2.2  bouyer         /*
    324  1.1.1.2.2.2  bouyer          * Convert each pair of letters that matches the form:
    325  1.1.1.2.2.2  bouyer          *
    326  1.1.1.2.2.2  bouyer          *      <LowerCase><UpperCase>
    327  1.1.1.2.2.2  bouyer          * to
    328  1.1.1.2.2.2  bouyer          *      <LowerCase><Underscore><LowerCase>
    329  1.1.1.2.2.2  bouyer          */
    330  1.1.1.2.2.2  bouyer         else if ((islower ((int) SubBuffer[0]) || isdigit ((int) SubBuffer[0])) &&
    331  1.1.1.2.2.2  bouyer                  (isupper ((int) SubBuffer[1])))
    332  1.1.1.2.2.2  bouyer         {
    333  1.1.1.2.2.2  bouyer             if (isdigit ((int) SubBuffer[0]))
    334  1.1.1.2.2.2  bouyer             {
    335  1.1.1.2.2.2  bouyer                 /* Ignore <UpperCase><Digit><UpperCase> */
    336  1.1.1.2.2.2  bouyer                 /* Ignore <Underscore><Digit><UpperCase> */
    337  1.1.1.2.2.2  bouyer 
    338  1.1.1.2.2.2  bouyer                 if (isupper ((int) *(SubBuffer-1)) ||
    339  1.1.1.2.2.2  bouyer                     *(SubBuffer-1) == '_')
    340  1.1.1.2.2.2  bouyer                 {
    341  1.1.1.2.2.2  bouyer                     SubBuffer++;
    342  1.1.1.2.2.2  bouyer                     continue;
    343  1.1.1.2.2.2  bouyer                 }
    344  1.1.1.2.2.2  bouyer             }
    345  1.1.1.2.2.2  bouyer 
    346  1.1.1.2.2.2  bouyer             /*
    347  1.1.1.2.2.2  bouyer              * Matched the pattern.
    348  1.1.1.2.2.2  bouyer              * Find the end of this identifier (token)
    349  1.1.1.2.2.2  bouyer              */
    350  1.1.1.2.2.2  bouyer             TokenEnd = SubBuffer;
    351  1.1.1.2.2.2  bouyer             while ((isalnum ((int) *TokenEnd)) || (*TokenEnd == '_'))
    352  1.1.1.2.2.2  bouyer             {
    353  1.1.1.2.2.2  bouyer                 TokenEnd++;
    354  1.1.1.2.2.2  bouyer             }
    355  1.1.1.2.2.2  bouyer 
    356  1.1.1.2.2.2  bouyer             /* Force the UpperCase letter (#2) to lower case */
    357  1.1.1.2.2.2  bouyer 
    358  1.1.1.2.2.2  bouyer             Gbl_MadeChanges = TRUE;
    359  1.1.1.2.2.2  bouyer             SubBuffer[1] = (char) tolower ((int) SubBuffer[1]);
    360  1.1.1.2.2.2  bouyer 
    361  1.1.1.2.2.2  bouyer             SubString = TokenEnd;
    362  1.1.1.2.2.2  bouyer             Length = 0;
    363  1.1.1.2.2.2  bouyer 
    364  1.1.1.2.2.2  bouyer             while (*SubString != '\n')
    365  1.1.1.2.2.2  bouyer             {
    366  1.1.1.2.2.2  bouyer                 /*
    367  1.1.1.2.2.2  bouyer                  * If we have at least two trailing spaces, we can get rid of
    368  1.1.1.2.2.2  bouyer                  * one to make up for the newly inserted underscore.  This will
    369  1.1.1.2.2.2  bouyer                  * help preserve the alignment of the text
    370  1.1.1.2.2.2  bouyer                  */
    371  1.1.1.2.2.2  bouyer                 if ((SubString[0] == ' ') &&
    372  1.1.1.2.2.2  bouyer                     (SubString[1] == ' '))
    373  1.1.1.2.2.2  bouyer                 {
    374  1.1.1.2.2.2  bouyer                     Length = SubString - SubBuffer - 2;
    375  1.1.1.2.2.2  bouyer                     break;
    376  1.1.1.2.2.2  bouyer                 }
    377  1.1.1.2.2.2  bouyer 
    378  1.1.1.2.2.2  bouyer                 SubString++;
    379  1.1.1.2.2.2  bouyer             }
    380  1.1.1.2.2.2  bouyer 
    381  1.1.1.2.2.2  bouyer             if (!Length)
    382  1.1.1.2.2.2  bouyer             {
    383  1.1.1.2.2.2  bouyer                 Length = strlen (&SubBuffer[1]);
    384  1.1.1.2.2.2  bouyer             }
    385  1.1.1.2.2.2  bouyer 
    386  1.1.1.2.2.2  bouyer             memmove (&SubBuffer[2], &SubBuffer[1], Length + 1);
    387  1.1.1.2.2.2  bouyer             SubBuffer[1] = '_';
    388  1.1.1.2.2.2  bouyer             SubBuffer +=2;
    389  1.1.1.2.2.2  bouyer 
    390  1.1.1.2.2.2  bouyer             /* Lower case the leading character of the token */
    391  1.1.1.2.2.2  bouyer 
    392  1.1.1.2.2.2  bouyer             if (TokenStart)
    393  1.1.1.2.2.2  bouyer             {
    394  1.1.1.2.2.2  bouyer                 *TokenStart = (char) tolower ((int) *TokenStart);
    395  1.1.1.2.2.2  bouyer                 TokenStart = NULL;
    396  1.1.1.2.2.2  bouyer             }
    397  1.1.1.2.2.2  bouyer         }
    398  1.1.1.2.2.2  bouyer 
    399  1.1.1.2.2.2  bouyer         SubBuffer++;
    400  1.1.1.2.2.2  bouyer     }
    401  1.1.1.2.2.2  bouyer }
    402  1.1.1.2.2.2  bouyer 
    403  1.1.1.2.2.2  bouyer 
    404  1.1.1.2.2.2  bouyer /******************************************************************************
    405  1.1.1.2.2.2  bouyer  *
    406  1.1.1.2.2.2  bouyer  * FUNCTION:    AsLowerCaseIdentifiers
    407  1.1.1.2.2.2  bouyer  *
    408  1.1.1.2.2.2  bouyer  * DESCRIPTION: Converts mixed case identifiers to lower case.  Leaves comments,
    409  1.1.1.2.2.2  bouyer  *              quoted strings, and all-upper-case macros alone.
    410  1.1.1.2.2.2  bouyer  *
    411  1.1.1.2.2.2  bouyer  ******************************************************************************/
    412  1.1.1.2.2.2  bouyer 
    413  1.1.1.2.2.2  bouyer void
    414  1.1.1.2.2.2  bouyer AsLowerCaseIdentifiers (
    415  1.1.1.2.2.2  bouyer     char                    *Buffer)
    416  1.1.1.2.2.2  bouyer {
    417  1.1.1.2.2.2  bouyer     char                    *SubBuffer = Buffer;
    418  1.1.1.2.2.2  bouyer 
    419  1.1.1.2.2.2  bouyer 
    420  1.1.1.2.2.2  bouyer     while (*SubBuffer)
    421  1.1.1.2.2.2  bouyer     {
    422  1.1.1.2.2.2  bouyer         /*
    423  1.1.1.2.2.2  bouyer          * Check for translation escape string -- means to ignore
    424  1.1.1.2.2.2  bouyer          * blocks of code while replacing
    425  1.1.1.2.2.2  bouyer          */
    426  1.1.1.2.2.2  bouyer         if ((SubBuffer[0] == '/') &&
    427  1.1.1.2.2.2  bouyer             (SubBuffer[1] == '*') &&
    428  1.1.1.2.2.2  bouyer             (SubBuffer[2] == '!'))
    429  1.1.1.2.2.2  bouyer         {
    430  1.1.1.2.2.2  bouyer             SubBuffer = strstr (SubBuffer, "!*/");
    431  1.1.1.2.2.2  bouyer             if (!SubBuffer)
    432  1.1.1.2.2.2  bouyer             {
    433  1.1.1.2.2.2  bouyer                 return;
    434  1.1.1.2.2.2  bouyer             }
    435  1.1.1.2.2.2  bouyer         }
    436  1.1.1.2.2.2  bouyer 
    437  1.1.1.2.2.2  bouyer         /* Ignore comments */
    438  1.1.1.2.2.2  bouyer 
    439  1.1.1.2.2.2  bouyer         if ((SubBuffer[0] == '/') &&
    440  1.1.1.2.2.2  bouyer             (SubBuffer[1] == '*'))
    441  1.1.1.2.2.2  bouyer         {
    442  1.1.1.2.2.2  bouyer             SubBuffer = strstr (SubBuffer, "*/");
    443  1.1.1.2.2.2  bouyer             if (!SubBuffer)
    444  1.1.1.2.2.2  bouyer             {
    445  1.1.1.2.2.2  bouyer                 return;
    446  1.1.1.2.2.2  bouyer             }
    447  1.1.1.2.2.2  bouyer 
    448  1.1.1.2.2.2  bouyer             SubBuffer += 2;
    449  1.1.1.2.2.2  bouyer         }
    450  1.1.1.2.2.2  bouyer 
    451  1.1.1.2.2.2  bouyer         /* Ignore quoted strings */
    452  1.1.1.2.2.2  bouyer 
    453  1.1.1.2.2.2  bouyer         if ((SubBuffer[0] == '\"') && (SubBuffer[1] != '\''))
    454  1.1.1.2.2.2  bouyer         {
    455  1.1.1.2.2.2  bouyer             SubBuffer++;
    456  1.1.1.2.2.2  bouyer 
    457  1.1.1.2.2.2  bouyer             /* Find the closing quote */
    458  1.1.1.2.2.2  bouyer 
    459  1.1.1.2.2.2  bouyer             while (SubBuffer[0])
    460  1.1.1.2.2.2  bouyer             {
    461  1.1.1.2.2.2  bouyer                 /* Ignore escaped quote characters */
    462  1.1.1.2.2.2  bouyer 
    463  1.1.1.2.2.2  bouyer                 if (SubBuffer[0] == '\\')
    464  1.1.1.2.2.2  bouyer                 {
    465  1.1.1.2.2.2  bouyer                     SubBuffer++;
    466  1.1.1.2.2.2  bouyer                 }
    467  1.1.1.2.2.2  bouyer                 else if (SubBuffer[0] == '\"')
    468  1.1.1.2.2.2  bouyer                 {
    469  1.1.1.2.2.2  bouyer                     SubBuffer++;
    470  1.1.1.2.2.2  bouyer                     break;
    471  1.1.1.2.2.2  bouyer                 }
    472  1.1.1.2.2.2  bouyer                 SubBuffer++;
    473  1.1.1.2.2.2  bouyer             }
    474  1.1.1.2.2.2  bouyer         }
    475  1.1.1.2.2.2  bouyer 
    476  1.1.1.2.2.2  bouyer         if (!SubBuffer[0])
    477  1.1.1.2.2.2  bouyer         {
    478  1.1.1.2.2.2  bouyer             return;
    479  1.1.1.2.2.2  bouyer         }
    480  1.1.1.2.2.2  bouyer 
    481  1.1.1.2.2.2  bouyer         /*
    482  1.1.1.2.2.2  bouyer          * Only lower case if we have an upper followed by a lower
    483  1.1.1.2.2.2  bouyer          * This leaves the all-uppercase things (macros, etc.) intact
    484  1.1.1.2.2.2  bouyer          */
    485  1.1.1.2.2.2  bouyer         if ((isupper ((int) SubBuffer[0])) &&
    486  1.1.1.2.2.2  bouyer             (islower ((int) SubBuffer[1])))
    487  1.1.1.2.2.2  bouyer         {
    488  1.1.1.2.2.2  bouyer             Gbl_MadeChanges = TRUE;
    489  1.1.1.2.2.2  bouyer             *SubBuffer = (char) tolower ((int) *SubBuffer);
    490  1.1.1.2.2.2  bouyer         }
    491  1.1.1.2.2.2  bouyer 
    492  1.1.1.2.2.2  bouyer         SubBuffer++;
    493  1.1.1.2.2.2  bouyer     }
    494  1.1.1.2.2.2  bouyer }
    495  1.1.1.2.2.2  bouyer 
    496  1.1.1.2.2.2  bouyer 
    497  1.1.1.2.2.2  bouyer /******************************************************************************
    498  1.1.1.2.2.2  bouyer  *
    499  1.1.1.2.2.2  bouyer  * FUNCTION:    AsUppercaseTokens
    500  1.1.1.2.2.2  bouyer  *
    501  1.1.1.2.2.2  bouyer  * DESCRIPTION: Force to uppercase all tokens that begin with the prefix string.
    502  1.1.1.2.2.2  bouyer  *              used to convert mixed-case macros and constants to uppercase.
    503  1.1.1.2.2.2  bouyer  *
    504  1.1.1.2.2.2  bouyer  ******************************************************************************/
    505  1.1.1.2.2.2  bouyer 
    506  1.1.1.2.2.2  bouyer void
    507  1.1.1.2.2.2  bouyer AsUppercaseTokens (
    508  1.1.1.2.2.2  bouyer     char                    *Buffer,
    509  1.1.1.2.2.2  bouyer     char                    *PrefixString)
    510  1.1.1.2.2.2  bouyer {
    511  1.1.1.2.2.2  bouyer     char                    *SubBuffer;
    512  1.1.1.2.2.2  bouyer     char                    *TokenEnd;
    513  1.1.1.2.2.2  bouyer     char                    *SubString;
    514  1.1.1.2.2.2  bouyer     int                     i;
    515  1.1.1.2.2.2  bouyer     UINT32                  Length;
    516  1.1.1.2.2.2  bouyer 
    517  1.1.1.2.2.2  bouyer 
    518  1.1.1.2.2.2  bouyer     SubBuffer = Buffer;
    519  1.1.1.2.2.2  bouyer 
    520  1.1.1.2.2.2  bouyer     while (SubBuffer)
    521  1.1.1.2.2.2  bouyer     {
    522  1.1.1.2.2.2  bouyer         SubBuffer = strstr (SubBuffer, PrefixString);
    523  1.1.1.2.2.2  bouyer         if (SubBuffer)
    524  1.1.1.2.2.2  bouyer         {
    525  1.1.1.2.2.2  bouyer             TokenEnd = SubBuffer;
    526  1.1.1.2.2.2  bouyer             while ((isalnum ((int) *TokenEnd)) || (*TokenEnd == '_'))
    527  1.1.1.2.2.2  bouyer             {
    528  1.1.1.2.2.2  bouyer                 TokenEnd++;
    529  1.1.1.2.2.2  bouyer             }
    530  1.1.1.2.2.2  bouyer 
    531  1.1.1.2.2.2  bouyer             for (i = 0; i < (TokenEnd - SubBuffer); i++)
    532  1.1.1.2.2.2  bouyer             {
    533  1.1.1.2.2.2  bouyer                 if ((islower ((int) SubBuffer[i])) &&
    534  1.1.1.2.2.2  bouyer                     (isupper ((int) SubBuffer[i+1])))
    535  1.1.1.2.2.2  bouyer                 {
    536  1.1.1.2.2.2  bouyer 
    537  1.1.1.2.2.2  bouyer                     SubString = TokenEnd;
    538  1.1.1.2.2.2  bouyer                     Length = 0;
    539  1.1.1.2.2.2  bouyer 
    540  1.1.1.2.2.2  bouyer                     while (*SubString != '\n')
    541  1.1.1.2.2.2  bouyer                     {
    542  1.1.1.2.2.2  bouyer                         if ((SubString[0] == ' ') &&
    543  1.1.1.2.2.2  bouyer                             (SubString[1] == ' '))
    544  1.1.1.2.2.2  bouyer                         {
    545  1.1.1.2.2.2  bouyer                             Length = SubString - &SubBuffer[i] - 2;
    546  1.1.1.2.2.2  bouyer                             break;
    547  1.1.1.2.2.2  bouyer                         }
    548  1.1.1.2.2.2  bouyer 
    549  1.1.1.2.2.2  bouyer                         SubString++;
    550  1.1.1.2.2.2  bouyer                     }
    551  1.1.1.2.2.2  bouyer 
    552  1.1.1.2.2.2  bouyer                     if (!Length)
    553  1.1.1.2.2.2  bouyer                     {
    554  1.1.1.2.2.2  bouyer                         Length = strlen (&SubBuffer[i+1]);
    555  1.1.1.2.2.2  bouyer                     }
    556  1.1.1.2.2.2  bouyer 
    557  1.1.1.2.2.2  bouyer                     memmove (&SubBuffer[i+2], &SubBuffer[i+1], (Length+1));
    558  1.1.1.2.2.2  bouyer                     SubBuffer[i+1] = '_';
    559  1.1.1.2.2.2  bouyer                     i +=2;
    560  1.1.1.2.2.2  bouyer                     TokenEnd++;
    561  1.1.1.2.2.2  bouyer                 }
    562  1.1.1.2.2.2  bouyer             }
    563  1.1.1.2.2.2  bouyer 
    564  1.1.1.2.2.2  bouyer             for (i = 0; i < (TokenEnd - SubBuffer); i++)
    565  1.1.1.2.2.2  bouyer             {
    566  1.1.1.2.2.2  bouyer                 SubBuffer[i] = (char) toupper ((int) SubBuffer[i]);
    567  1.1.1.2.2.2  bouyer             }
    568  1.1.1.2.2.2  bouyer 
    569  1.1.1.2.2.2  bouyer             SubBuffer = TokenEnd;
    570  1.1.1.2.2.2  bouyer         }
    571  1.1.1.2.2.2  bouyer     }
    572  1.1.1.2.2.2  bouyer }
    573  1.1.1.2.2.2  bouyer 
    574  1.1.1.2.2.2  bouyer 
    575