Home | History | Annotate | Line # | Download | only in acpisrc
asconvrt.c revision 1.1.1.2.20.1
      1           1.1  jruoho /******************************************************************************
      2           1.1  jruoho  *
      3           1.1  jruoho  * Module Name: asconvrt - Source conversion code
      4           1.1  jruoho  *
      5           1.1  jruoho  *****************************************************************************/
      6           1.1  jruoho 
      7       1.1.1.2  jruoho /*
      8  1.1.1.2.20.1     tls  * Copyright (C) 2000 - 2013, Intel Corp.
      9           1.1  jruoho  * All rights reserved.
     10           1.1  jruoho  *
     11       1.1.1.2  jruoho  * Redistribution and use in source and binary forms, with or without
     12       1.1.1.2  jruoho  * modification, are permitted provided that the following conditions
     13       1.1.1.2  jruoho  * are met:
     14       1.1.1.2  jruoho  * 1. Redistributions of source code must retain the above copyright
     15       1.1.1.2  jruoho  *    notice, this list of conditions, and the following disclaimer,
     16       1.1.1.2  jruoho  *    without modification.
     17       1.1.1.2  jruoho  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18       1.1.1.2  jruoho  *    substantially similar to the "NO WARRANTY" disclaimer below
     19       1.1.1.2  jruoho  *    ("Disclaimer") and any redistribution must be conditioned upon
     20       1.1.1.2  jruoho  *    including a substantially similar Disclaimer requirement for further
     21       1.1.1.2  jruoho  *    binary redistribution.
     22       1.1.1.2  jruoho  * 3. Neither the names of the above-listed copyright holders nor the names
     23       1.1.1.2  jruoho  *    of any contributors may be used to endorse or promote products derived
     24       1.1.1.2  jruoho  *    from this software without specific prior written permission.
     25       1.1.1.2  jruoho  *
     26       1.1.1.2  jruoho  * Alternatively, this software may be distributed under the terms of the
     27       1.1.1.2  jruoho  * GNU General Public License ("GPL") version 2 as published by the Free
     28       1.1.1.2  jruoho  * Software Foundation.
     29       1.1.1.2  jruoho  *
     30       1.1.1.2  jruoho  * NO WARRANTY
     31       1.1.1.2  jruoho  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32       1.1.1.2  jruoho  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33       1.1.1.2  jruoho  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34       1.1.1.2  jruoho  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35       1.1.1.2  jruoho  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36       1.1.1.2  jruoho  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37       1.1.1.2  jruoho  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38       1.1.1.2  jruoho  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39       1.1.1.2  jruoho  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40       1.1.1.2  jruoho  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41       1.1.1.2  jruoho  * POSSIBILITY OF SUCH DAMAGES.
     42       1.1.1.2  jruoho  */
     43           1.1  jruoho 
     44           1.1  jruoho #include "acpisrc.h"
     45           1.1  jruoho 
     46           1.1  jruoho /* Local prototypes */
     47           1.1  jruoho 
     48           1.1  jruoho char *
     49           1.1  jruoho AsCheckAndSkipLiterals (
     50           1.1  jruoho     char                    *Buffer,
     51           1.1  jruoho     UINT32                  *TotalLines);
     52           1.1  jruoho 
     53           1.1  jruoho UINT32
     54           1.1  jruoho AsCountLines (
     55           1.1  jruoho     char                    *Buffer,
     56           1.1  jruoho     char                    *Filename);
     57           1.1  jruoho 
     58           1.1  jruoho /* Opening signature of the Intel legal header */
     59           1.1  jruoho 
     60           1.1  jruoho char        *HeaderBegin = "/******************************************************************************\n *\n * 1. Copyright Notice";
     61           1.1  jruoho 
     62           1.1  jruoho 
     63           1.1  jruoho /******************************************************************************
     64           1.1  jruoho  *
     65  1.1.1.2.20.1     tls  * FUNCTION:    AsRemoveExtraLines
     66  1.1.1.2.20.1     tls  *
     67  1.1.1.2.20.1     tls  * DESCRIPTION: Remove all extra lines at the start and end of the file.
     68  1.1.1.2.20.1     tls  *
     69  1.1.1.2.20.1     tls  ******************************************************************************/
     70  1.1.1.2.20.1     tls 
     71  1.1.1.2.20.1     tls void
     72  1.1.1.2.20.1     tls AsRemoveExtraLines (
     73  1.1.1.2.20.1     tls     char                    *FileBuffer,
     74  1.1.1.2.20.1     tls     char                    *Filename)
     75  1.1.1.2.20.1     tls {
     76  1.1.1.2.20.1     tls     char                    *FileEnd;
     77  1.1.1.2.20.1     tls     int                     Length;
     78  1.1.1.2.20.1     tls 
     79  1.1.1.2.20.1     tls 
     80  1.1.1.2.20.1     tls     /* Remove any extra lines at the start of the file */
     81  1.1.1.2.20.1     tls 
     82  1.1.1.2.20.1     tls     while (*FileBuffer == '\n')
     83  1.1.1.2.20.1     tls     {
     84  1.1.1.2.20.1     tls         printf ("Removing extra line at start of file: %s\n", Filename);
     85  1.1.1.2.20.1     tls         AsRemoveData (FileBuffer, FileBuffer + 1);
     86  1.1.1.2.20.1     tls     }
     87  1.1.1.2.20.1     tls 
     88  1.1.1.2.20.1     tls     /* Remove any extra lines at the end of the file */
     89  1.1.1.2.20.1     tls 
     90  1.1.1.2.20.1     tls     Length = strlen (FileBuffer);
     91  1.1.1.2.20.1     tls     FileEnd = FileBuffer + (Length - 2);
     92  1.1.1.2.20.1     tls 
     93  1.1.1.2.20.1     tls     while (*FileEnd == '\n')
     94  1.1.1.2.20.1     tls     {
     95  1.1.1.2.20.1     tls         printf ("Removing extra line at end of file: %s\n", Filename);
     96  1.1.1.2.20.1     tls         AsRemoveData (FileEnd, FileEnd + 1);
     97  1.1.1.2.20.1     tls         FileEnd--;
     98  1.1.1.2.20.1     tls     }
     99  1.1.1.2.20.1     tls }
    100  1.1.1.2.20.1     tls 
    101  1.1.1.2.20.1     tls 
    102  1.1.1.2.20.1     tls /******************************************************************************
    103  1.1.1.2.20.1     tls  *
    104  1.1.1.2.20.1     tls  * FUNCTION:    AsRemoveSpacesAfterPeriod
    105  1.1.1.2.20.1     tls  *
    106  1.1.1.2.20.1     tls  * DESCRIPTION: Remove an extra space after a period.
    107  1.1.1.2.20.1     tls  *
    108  1.1.1.2.20.1     tls  ******************************************************************************/
    109  1.1.1.2.20.1     tls 
    110  1.1.1.2.20.1     tls void
    111  1.1.1.2.20.1     tls AsRemoveSpacesAfterPeriod (
    112  1.1.1.2.20.1     tls     char                    *FileBuffer,
    113  1.1.1.2.20.1     tls     char                    *Filename)
    114  1.1.1.2.20.1     tls {
    115  1.1.1.2.20.1     tls     int                     ReplaceCount = 0;
    116  1.1.1.2.20.1     tls     char                    *Possible;
    117  1.1.1.2.20.1     tls 
    118  1.1.1.2.20.1     tls 
    119  1.1.1.2.20.1     tls     Possible = FileBuffer;
    120  1.1.1.2.20.1     tls     while (Possible)
    121  1.1.1.2.20.1     tls     {
    122  1.1.1.2.20.1     tls         Possible = strstr (Possible, ".  ");
    123  1.1.1.2.20.1     tls         if (Possible)
    124  1.1.1.2.20.1     tls         {
    125  1.1.1.2.20.1     tls             if ((*(Possible -1) == '.')  ||
    126  1.1.1.2.20.1     tls                 (*(Possible -1) == '\"') ||
    127  1.1.1.2.20.1     tls                 (*(Possible -1) == '\n'))
    128  1.1.1.2.20.1     tls             {
    129  1.1.1.2.20.1     tls                 Possible += 3;
    130  1.1.1.2.20.1     tls                 continue;
    131  1.1.1.2.20.1     tls             }
    132  1.1.1.2.20.1     tls 
    133  1.1.1.2.20.1     tls             Possible = AsReplaceData (Possible, 3, ". ", 2);
    134  1.1.1.2.20.1     tls             ReplaceCount++;
    135  1.1.1.2.20.1     tls         }
    136  1.1.1.2.20.1     tls     }
    137  1.1.1.2.20.1     tls 
    138  1.1.1.2.20.1     tls     if (ReplaceCount)
    139  1.1.1.2.20.1     tls     {
    140  1.1.1.2.20.1     tls         printf ("Removed %d extra blanks after a period: %s\n",
    141  1.1.1.2.20.1     tls             ReplaceCount, Filename);
    142  1.1.1.2.20.1     tls     }
    143  1.1.1.2.20.1     tls }
    144  1.1.1.2.20.1     tls 
    145  1.1.1.2.20.1     tls 
    146  1.1.1.2.20.1     tls /******************************************************************************
    147  1.1.1.2.20.1     tls  *
    148           1.1  jruoho  * FUNCTION:    AsMatchExactWord
    149           1.1  jruoho  *
    150           1.1  jruoho  * DESCRIPTION: Check previous and next characters for whitespace
    151           1.1  jruoho  *
    152           1.1  jruoho  ******************************************************************************/
    153           1.1  jruoho 
    154           1.1  jruoho BOOLEAN
    155           1.1  jruoho AsMatchExactWord (
    156           1.1  jruoho     char                    *Word,
    157           1.1  jruoho     UINT32                  WordLength)
    158           1.1  jruoho {
    159           1.1  jruoho     char                    NextChar;
    160           1.1  jruoho     char                    PrevChar;
    161           1.1  jruoho 
    162           1.1  jruoho 
    163           1.1  jruoho     NextChar = Word[WordLength];
    164           1.1  jruoho     PrevChar = * (Word -1);
    165           1.1  jruoho 
    166           1.1  jruoho     if (isalnum ((int) NextChar) ||
    167           1.1  jruoho         (NextChar == '_')  ||
    168           1.1  jruoho         isalnum ((int) PrevChar) ||
    169           1.1  jruoho         (PrevChar == '_'))
    170           1.1  jruoho     {
    171           1.1  jruoho         return (FALSE);
    172           1.1  jruoho     }
    173           1.1  jruoho 
    174           1.1  jruoho     return (TRUE);
    175           1.1  jruoho }
    176           1.1  jruoho 
    177           1.1  jruoho 
    178           1.1  jruoho /******************************************************************************
    179           1.1  jruoho  *
    180           1.1  jruoho  * FUNCTION:    AsPrint
    181           1.1  jruoho  *
    182           1.1  jruoho  * DESCRIPTION: Common formatted print
    183           1.1  jruoho  *
    184           1.1  jruoho  ******************************************************************************/
    185           1.1  jruoho 
    186           1.1  jruoho void
    187           1.1  jruoho AsPrint (
    188           1.1  jruoho     char                    *Message,
    189           1.1  jruoho     UINT32                  Count,
    190           1.1  jruoho     char                    *Filename)
    191           1.1  jruoho {
    192           1.1  jruoho 
    193           1.1  jruoho     if (Gbl_QuietMode)
    194           1.1  jruoho     {
    195           1.1  jruoho         return;
    196           1.1  jruoho     }
    197           1.1  jruoho 
    198           1.1  jruoho     printf ("-- %4u %28.28s : %s\n", Count, Message, Filename);
    199           1.1  jruoho }
    200           1.1  jruoho 
    201           1.1  jruoho 
    202           1.1  jruoho /******************************************************************************
    203           1.1  jruoho  *
    204           1.1  jruoho  * FUNCTION:    AsCheckAndSkipLiterals
    205           1.1  jruoho  *
    206           1.1  jruoho  * DESCRIPTION: Generic routine to skip comments and quoted string literals.
    207           1.1  jruoho  *              Keeps a line count.
    208           1.1  jruoho  *
    209           1.1  jruoho  ******************************************************************************/
    210           1.1  jruoho 
    211           1.1  jruoho char *
    212           1.1  jruoho AsCheckAndSkipLiterals (
    213           1.1  jruoho     char                    *Buffer,
    214           1.1  jruoho     UINT32                  *TotalLines)
    215           1.1  jruoho {
    216           1.1  jruoho     UINT32                  NewLines = 0;
    217           1.1  jruoho     char                    *SubBuffer = Buffer;
    218           1.1  jruoho     char                    *LiteralEnd;
    219           1.1  jruoho 
    220           1.1  jruoho 
    221           1.1  jruoho     /* Ignore comments */
    222           1.1  jruoho 
    223           1.1  jruoho     if ((SubBuffer[0] == '/') &&
    224           1.1  jruoho         (SubBuffer[1] == '*'))
    225           1.1  jruoho     {
    226           1.1  jruoho         LiteralEnd = strstr (SubBuffer, "*/");
    227           1.1  jruoho         SubBuffer += 2;     /* Get past comment opening */
    228           1.1  jruoho 
    229           1.1  jruoho         if (!LiteralEnd)
    230           1.1  jruoho         {
    231  1.1.1.2.20.1     tls             return (SubBuffer);
    232           1.1  jruoho         }
    233           1.1  jruoho 
    234           1.1  jruoho         while (SubBuffer < LiteralEnd)
    235           1.1  jruoho         {
    236           1.1  jruoho             if (*SubBuffer == '\n')
    237           1.1  jruoho             {
    238           1.1  jruoho                 NewLines++;
    239           1.1  jruoho             }
    240           1.1  jruoho 
    241           1.1  jruoho             SubBuffer++;
    242           1.1  jruoho         }
    243           1.1  jruoho 
    244           1.1  jruoho         SubBuffer += 2;     /* Get past comment close */
    245           1.1  jruoho     }
    246           1.1  jruoho 
    247           1.1  jruoho     /* Ignore quoted strings */
    248           1.1  jruoho 
    249           1.1  jruoho     else if (*SubBuffer == '\"')
    250           1.1  jruoho     {
    251           1.1  jruoho         SubBuffer++;
    252           1.1  jruoho         LiteralEnd = AsSkipPastChar (SubBuffer, '\"');
    253           1.1  jruoho         if (!LiteralEnd)
    254           1.1  jruoho         {
    255  1.1.1.2.20.1     tls             return (SubBuffer);
    256           1.1  jruoho         }
    257           1.1  jruoho     }
    258           1.1  jruoho 
    259           1.1  jruoho     if (TotalLines)
    260           1.1  jruoho     {
    261           1.1  jruoho         (*TotalLines) += NewLines;
    262           1.1  jruoho     }
    263  1.1.1.2.20.1     tls     return (SubBuffer);
    264           1.1  jruoho }
    265           1.1  jruoho 
    266           1.1  jruoho 
    267           1.1  jruoho /******************************************************************************
    268           1.1  jruoho  *
    269           1.1  jruoho  * FUNCTION:    AsAsCheckForBraces
    270           1.1  jruoho  *
    271           1.1  jruoho  * DESCRIPTION: Check for an open brace after each if statement
    272           1.1  jruoho  *
    273           1.1  jruoho  ******************************************************************************/
    274           1.1  jruoho 
    275           1.1  jruoho void
    276           1.1  jruoho AsCheckForBraces (
    277           1.1  jruoho     char                    *Buffer,
    278           1.1  jruoho     char                    *Filename)
    279           1.1  jruoho {
    280           1.1  jruoho     char                    *SubBuffer = Buffer;
    281           1.1  jruoho     char                    *NextBrace;
    282           1.1  jruoho     char                    *NextSemicolon;
    283           1.1  jruoho     char                    *NextIf;
    284           1.1  jruoho     UINT32                  TotalLines = 1;
    285           1.1  jruoho 
    286           1.1  jruoho 
    287           1.1  jruoho     while (*SubBuffer)
    288           1.1  jruoho     {
    289           1.1  jruoho 
    290           1.1  jruoho         SubBuffer = AsCheckAndSkipLiterals (SubBuffer, &TotalLines);
    291           1.1  jruoho 
    292           1.1  jruoho         if (*SubBuffer == '\n')
    293           1.1  jruoho         {
    294           1.1  jruoho             TotalLines++;
    295           1.1  jruoho         }
    296           1.1  jruoho         else if (!(strncmp (" if", SubBuffer, 3)))
    297           1.1  jruoho         {
    298           1.1  jruoho             SubBuffer += 2;
    299           1.1  jruoho             NextBrace = strstr (SubBuffer, "{");
    300           1.1  jruoho             NextSemicolon = strstr (SubBuffer, ";");
    301           1.1  jruoho             NextIf = strstr (SubBuffer, " if");
    302           1.1  jruoho 
    303           1.1  jruoho             if ((!NextBrace) ||
    304           1.1  jruoho                (NextSemicolon && (NextBrace > NextSemicolon)) ||
    305           1.1  jruoho                (NextIf && (NextBrace > NextIf)))
    306           1.1  jruoho             {
    307           1.1  jruoho                 Gbl_MissingBraces++;
    308           1.1  jruoho 
    309           1.1  jruoho                 if (!Gbl_QuietMode)
    310           1.1  jruoho                 {
    311           1.1  jruoho                     printf ("Missing braces for <if>, line %u: %s\n", TotalLines, Filename);
    312           1.1  jruoho                 }
    313           1.1  jruoho             }
    314           1.1  jruoho         }
    315           1.1  jruoho         else if (!(strncmp (" else if", SubBuffer, 8)))
    316           1.1  jruoho         {
    317           1.1  jruoho             SubBuffer += 7;
    318           1.1  jruoho             NextBrace = strstr (SubBuffer, "{");
    319           1.1  jruoho             NextSemicolon = strstr (SubBuffer, ";");
    320           1.1  jruoho             NextIf = strstr (SubBuffer, " if");
    321           1.1  jruoho 
    322           1.1  jruoho             if ((!NextBrace) ||
    323           1.1  jruoho                (NextSemicolon && (NextBrace > NextSemicolon)) ||
    324           1.1  jruoho                (NextIf && (NextBrace > NextIf)))
    325           1.1  jruoho             {
    326           1.1  jruoho                 Gbl_MissingBraces++;
    327           1.1  jruoho 
    328           1.1  jruoho                 if (!Gbl_QuietMode)
    329           1.1  jruoho                 {
    330           1.1  jruoho                     printf ("Missing braces for <if>, line %u: %s\n", TotalLines, Filename);
    331           1.1  jruoho                 }
    332           1.1  jruoho             }
    333           1.1  jruoho         }
    334           1.1  jruoho         else if (!(strncmp (" else", SubBuffer, 5)))
    335           1.1  jruoho         {
    336           1.1  jruoho             SubBuffer += 4;
    337           1.1  jruoho             NextBrace = strstr (SubBuffer, "{");
    338           1.1  jruoho             NextSemicolon = strstr (SubBuffer, ";");
    339           1.1  jruoho             NextIf = strstr (SubBuffer, " if");
    340           1.1  jruoho 
    341           1.1  jruoho             if ((!NextBrace) ||
    342           1.1  jruoho                (NextSemicolon && (NextBrace > NextSemicolon)) ||
    343           1.1  jruoho                (NextIf && (NextBrace > NextIf)))
    344           1.1  jruoho             {
    345           1.1  jruoho                 Gbl_MissingBraces++;
    346           1.1  jruoho 
    347           1.1  jruoho                 if (!Gbl_QuietMode)
    348           1.1  jruoho                 {
    349           1.1  jruoho                     printf ("Missing braces for <else>, line %u: %s\n", TotalLines, Filename);
    350           1.1  jruoho                 }
    351           1.1  jruoho             }
    352           1.1  jruoho         }
    353           1.1  jruoho 
    354           1.1  jruoho         SubBuffer++;
    355           1.1  jruoho     }
    356           1.1  jruoho }
    357           1.1  jruoho 
    358           1.1  jruoho 
    359           1.1  jruoho /******************************************************************************
    360           1.1  jruoho  *
    361           1.1  jruoho  * FUNCTION:    AsTrimLines
    362           1.1  jruoho  *
    363  1.1.1.2.20.1     tls  * DESCRIPTION: Remove extra blanks from the end of source lines. Does not
    364           1.1  jruoho  *              check for tabs.
    365           1.1  jruoho  *
    366           1.1  jruoho  ******************************************************************************/
    367           1.1  jruoho 
    368           1.1  jruoho void
    369           1.1  jruoho AsTrimLines (
    370           1.1  jruoho     char                    *Buffer,
    371           1.1  jruoho     char                    *Filename)
    372           1.1  jruoho {
    373           1.1  jruoho     char                    *SubBuffer = Buffer;
    374           1.1  jruoho     char                    *StartWhiteSpace = NULL;
    375           1.1  jruoho     UINT32                  SpaceCount = 0;
    376           1.1  jruoho 
    377           1.1  jruoho 
    378           1.1  jruoho     while (*SubBuffer)
    379           1.1  jruoho     {
    380           1.1  jruoho         while (*SubBuffer != '\n')
    381           1.1  jruoho         {
    382           1.1  jruoho             if (!*SubBuffer)
    383           1.1  jruoho             {
    384           1.1  jruoho                 goto Exit;
    385           1.1  jruoho             }
    386           1.1  jruoho 
    387           1.1  jruoho             if (*SubBuffer == ' ')
    388           1.1  jruoho             {
    389           1.1  jruoho                 if (!StartWhiteSpace)
    390           1.1  jruoho                 {
    391           1.1  jruoho                     StartWhiteSpace = SubBuffer;
    392           1.1  jruoho                 }
    393           1.1  jruoho             }
    394           1.1  jruoho             else
    395           1.1  jruoho             {
    396           1.1  jruoho                 StartWhiteSpace = NULL;
    397           1.1  jruoho             }
    398           1.1  jruoho 
    399           1.1  jruoho             SubBuffer++;
    400           1.1  jruoho         }
    401           1.1  jruoho 
    402           1.1  jruoho         if (StartWhiteSpace)
    403           1.1  jruoho         {
    404           1.1  jruoho             SpaceCount += (SubBuffer - StartWhiteSpace);
    405           1.1  jruoho 
    406           1.1  jruoho             /* Remove the spaces */
    407           1.1  jruoho 
    408           1.1  jruoho             SubBuffer = AsRemoveData (StartWhiteSpace, SubBuffer);
    409           1.1  jruoho             StartWhiteSpace = NULL;
    410           1.1  jruoho         }
    411           1.1  jruoho 
    412           1.1  jruoho         SubBuffer++;
    413           1.1  jruoho     }
    414           1.1  jruoho 
    415           1.1  jruoho 
    416           1.1  jruoho Exit:
    417           1.1  jruoho     if (SpaceCount)
    418           1.1  jruoho     {
    419           1.1  jruoho         Gbl_MadeChanges = TRUE;
    420           1.1  jruoho         AsPrint ("Extraneous spaces removed", SpaceCount, Filename);
    421           1.1  jruoho     }
    422           1.1  jruoho }
    423           1.1  jruoho 
    424           1.1  jruoho 
    425           1.1  jruoho /******************************************************************************
    426           1.1  jruoho  *
    427           1.1  jruoho  * FUNCTION:    AsTrimWhitespace
    428           1.1  jruoho  *
    429           1.1  jruoho  * DESCRIPTION: Remove "excess" blank lines - any more than 2 blank lines.
    430           1.1  jruoho  *              this can happen during the translation when lines are removed.
    431           1.1  jruoho  *
    432           1.1  jruoho  ******************************************************************************/
    433           1.1  jruoho 
    434           1.1  jruoho void
    435           1.1  jruoho AsTrimWhitespace (
    436           1.1  jruoho     char                    *Buffer)
    437           1.1  jruoho {
    438           1.1  jruoho     int                     ReplaceCount = 1;
    439           1.1  jruoho 
    440           1.1  jruoho 
    441           1.1  jruoho     while (ReplaceCount)
    442           1.1  jruoho     {
    443           1.1  jruoho         ReplaceCount = AsReplaceString ("\n\n\n\n", "\n\n\n", REPLACE_SUBSTRINGS, Buffer);
    444           1.1  jruoho     }
    445           1.1  jruoho }
    446           1.1  jruoho 
    447           1.1  jruoho 
    448           1.1  jruoho /******************************************************************************
    449           1.1  jruoho  *
    450           1.1  jruoho  * FUNCTION:    AsReplaceHeader
    451           1.1  jruoho  *
    452           1.1  jruoho  * DESCRIPTION: Replace the default Intel legal header with a new header
    453           1.1  jruoho  *
    454           1.1  jruoho  ******************************************************************************/
    455           1.1  jruoho 
    456           1.1  jruoho void
    457           1.1  jruoho AsReplaceHeader (
    458           1.1  jruoho     char                    *Buffer,
    459           1.1  jruoho     char                    *NewHeader)
    460           1.1  jruoho {
    461           1.1  jruoho     char                    *SubBuffer;
    462           1.1  jruoho     char                    *TokenEnd;
    463           1.1  jruoho 
    464           1.1  jruoho 
    465           1.1  jruoho     /* Find the original header */
    466           1.1  jruoho 
    467           1.1  jruoho     SubBuffer = strstr (Buffer, HeaderBegin);
    468           1.1  jruoho     if (!SubBuffer)
    469           1.1  jruoho     {
    470           1.1  jruoho         return;
    471           1.1  jruoho     }
    472           1.1  jruoho 
    473           1.1  jruoho     /* Find the end of the original header */
    474           1.1  jruoho 
    475           1.1  jruoho     TokenEnd = strstr (SubBuffer, "*/");
    476           1.1  jruoho     TokenEnd = AsSkipPastChar (TokenEnd, '\n');
    477           1.1  jruoho 
    478           1.1  jruoho     /* Delete old header, insert new one */
    479           1.1  jruoho 
    480           1.1  jruoho     AsReplaceData (SubBuffer, TokenEnd - SubBuffer, NewHeader, strlen (NewHeader));
    481           1.1  jruoho }
    482           1.1  jruoho 
    483           1.1  jruoho 
    484           1.1  jruoho /******************************************************************************
    485           1.1  jruoho  *
    486           1.1  jruoho  * FUNCTION:    AsReplaceString
    487           1.1  jruoho  *
    488           1.1  jruoho  * DESCRIPTION: Replace all instances of a target string with a replacement
    489  1.1.1.2.20.1     tls  *              string. Returns count of the strings replaced.
    490           1.1  jruoho  *
    491           1.1  jruoho  ******************************************************************************/
    492           1.1  jruoho 
    493           1.1  jruoho int
    494           1.1  jruoho AsReplaceString (
    495           1.1  jruoho     char                    *Target,
    496           1.1  jruoho     char                    *Replacement,
    497           1.1  jruoho     UINT8                   Type,
    498           1.1  jruoho     char                    *Buffer)
    499           1.1  jruoho {
    500           1.1  jruoho     char                    *SubString1;
    501           1.1  jruoho     char                    *SubString2;
    502           1.1  jruoho     char                    *SubBuffer;
    503           1.1  jruoho     int                     TargetLength;
    504           1.1  jruoho     int                     ReplacementLength;
    505           1.1  jruoho     int                     ReplaceCount = 0;
    506           1.1  jruoho 
    507           1.1  jruoho 
    508           1.1  jruoho     TargetLength = strlen (Target);
    509           1.1  jruoho     ReplacementLength = strlen (Replacement);
    510           1.1  jruoho 
    511           1.1  jruoho     SubBuffer = Buffer;
    512           1.1  jruoho     SubString1 = Buffer;
    513           1.1  jruoho 
    514           1.1  jruoho     while (SubString1)
    515           1.1  jruoho     {
    516           1.1  jruoho         /* Find the target string */
    517           1.1  jruoho 
    518           1.1  jruoho         SubString1 = strstr (SubBuffer, Target);
    519           1.1  jruoho         if (!SubString1)
    520           1.1  jruoho         {
    521  1.1.1.2.20.1     tls             return (ReplaceCount);
    522           1.1  jruoho         }
    523           1.1  jruoho 
    524           1.1  jruoho         /*
    525           1.1  jruoho          * Check for translation escape string -- means to ignore
    526           1.1  jruoho          * blocks of code while replacing
    527           1.1  jruoho          */
    528  1.1.1.2.20.1     tls         if (Gbl_IgnoreTranslationEscapes)
    529  1.1.1.2.20.1     tls         {
    530  1.1.1.2.20.1     tls             SubString2 = NULL;
    531  1.1.1.2.20.1     tls         }
    532  1.1.1.2.20.1     tls         else
    533  1.1.1.2.20.1     tls         {
    534  1.1.1.2.20.1     tls             SubString2 = strstr (SubBuffer, AS_START_IGNORE);
    535  1.1.1.2.20.1     tls         }
    536           1.1  jruoho 
    537           1.1  jruoho         if ((SubString2) &&
    538           1.1  jruoho             (SubString2 < SubString1))
    539           1.1  jruoho         {
    540           1.1  jruoho             /* Find end of the escape block starting at "Substring2" */
    541           1.1  jruoho 
    542           1.1  jruoho             SubString2 = strstr (SubString2, AS_STOP_IGNORE);
    543           1.1  jruoho             if (!SubString2)
    544           1.1  jruoho             {
    545           1.1  jruoho                 /* Didn't find terminator */
    546           1.1  jruoho 
    547  1.1.1.2.20.1     tls                 return (ReplaceCount);
    548           1.1  jruoho             }
    549           1.1  jruoho 
    550           1.1  jruoho             /* Move buffer to end of escape block and continue */
    551           1.1  jruoho 
    552           1.1  jruoho             SubBuffer = SubString2;
    553           1.1  jruoho         }
    554           1.1  jruoho 
    555           1.1  jruoho         /* Do the actual replace if the target was found */
    556           1.1  jruoho 
    557           1.1  jruoho         else
    558           1.1  jruoho         {
    559           1.1  jruoho             if ((Type & REPLACE_MASK) == REPLACE_WHOLE_WORD)
    560           1.1  jruoho             {
    561           1.1  jruoho                 if (!AsMatchExactWord (SubString1, TargetLength))
    562           1.1  jruoho                 {
    563           1.1  jruoho                     SubBuffer = SubString1 + 1;
    564           1.1  jruoho                     continue;
    565           1.1  jruoho                 }
    566           1.1  jruoho             }
    567           1.1  jruoho 
    568           1.1  jruoho             SubBuffer = AsReplaceData (SubString1, TargetLength, Replacement, ReplacementLength);
    569           1.1  jruoho 
    570           1.1  jruoho             if ((Type & EXTRA_INDENT_C) &&
    571           1.1  jruoho                 (!Gbl_StructDefs))
    572           1.1  jruoho             {
    573           1.1  jruoho                 SubBuffer = AsInsertData (SubBuffer, "        ", 8);
    574           1.1  jruoho             }
    575           1.1  jruoho 
    576           1.1  jruoho             ReplaceCount++;
    577           1.1  jruoho         }
    578           1.1  jruoho     }
    579           1.1  jruoho 
    580  1.1.1.2.20.1     tls     return (ReplaceCount);
    581           1.1  jruoho }
    582           1.1  jruoho 
    583           1.1  jruoho 
    584           1.1  jruoho /******************************************************************************
    585           1.1  jruoho  *
    586           1.1  jruoho  * FUNCTION:    AsConvertToLineFeeds
    587           1.1  jruoho  *
    588           1.1  jruoho  * DESCRIPTION:
    589           1.1  jruoho  *
    590           1.1  jruoho  ******************************************************************************/
    591           1.1  jruoho 
    592           1.1  jruoho void
    593           1.1  jruoho AsConvertToLineFeeds (
    594           1.1  jruoho     char                    *Buffer)
    595           1.1  jruoho {
    596           1.1  jruoho     char                    *SubString;
    597           1.1  jruoho     char                    *SubBuffer;
    598           1.1  jruoho 
    599           1.1  jruoho 
    600           1.1  jruoho     SubBuffer = Buffer;
    601           1.1  jruoho     SubString = Buffer;
    602           1.1  jruoho 
    603           1.1  jruoho     while (SubString)
    604           1.1  jruoho     {
    605           1.1  jruoho         /* Find the target string */
    606           1.1  jruoho 
    607           1.1  jruoho         SubString = strstr (SubBuffer, "\r\n");
    608           1.1  jruoho         if (!SubString)
    609           1.1  jruoho         {
    610           1.1  jruoho             return;
    611           1.1  jruoho         }
    612           1.1  jruoho 
    613           1.1  jruoho         SubBuffer = AsReplaceData (SubString, 1, NULL, 0);
    614           1.1  jruoho     }
    615           1.1  jruoho     return;
    616           1.1  jruoho }
    617           1.1  jruoho 
    618           1.1  jruoho 
    619           1.1  jruoho /******************************************************************************
    620           1.1  jruoho  *
    621           1.1  jruoho  * FUNCTION:    AsInsertCarriageReturns
    622           1.1  jruoho  *
    623           1.1  jruoho  * DESCRIPTION:
    624           1.1  jruoho  *
    625           1.1  jruoho  ******************************************************************************/
    626           1.1  jruoho 
    627           1.1  jruoho void
    628           1.1  jruoho AsInsertCarriageReturns (
    629           1.1  jruoho     char                    *Buffer)
    630           1.1  jruoho {
    631           1.1  jruoho     char                    *SubString;
    632           1.1  jruoho     char                    *SubBuffer;
    633           1.1  jruoho 
    634           1.1  jruoho 
    635           1.1  jruoho     SubBuffer = Buffer;
    636           1.1  jruoho     SubString = Buffer;
    637           1.1  jruoho 
    638           1.1  jruoho     while (SubString)
    639           1.1  jruoho     {
    640           1.1  jruoho         /* Find the target string */
    641           1.1  jruoho 
    642           1.1  jruoho         SubString = strstr (SubBuffer, "\n");
    643           1.1  jruoho         if (!SubString)
    644           1.1  jruoho         {
    645           1.1  jruoho             return;
    646           1.1  jruoho         }
    647           1.1  jruoho 
    648           1.1  jruoho         SubBuffer = AsInsertData (SubString, "\r", 1);
    649           1.1  jruoho         SubBuffer += 1;
    650           1.1  jruoho     }
    651           1.1  jruoho     return;
    652           1.1  jruoho }
    653           1.1  jruoho 
    654           1.1  jruoho 
    655           1.1  jruoho /******************************************************************************
    656           1.1  jruoho  *
    657           1.1  jruoho  * FUNCTION:    AsBracesOnSameLine
    658           1.1  jruoho  *
    659           1.1  jruoho  * DESCRIPTION: Move opening braces up to the same line as an if, for, else,
    660           1.1  jruoho  *              or while statement (leave function opening brace on separate
    661           1.1  jruoho  *              line).
    662           1.1  jruoho  *
    663           1.1  jruoho  ******************************************************************************/
    664           1.1  jruoho 
    665           1.1  jruoho void
    666           1.1  jruoho AsBracesOnSameLine (
    667           1.1  jruoho     char                    *Buffer)
    668           1.1  jruoho {
    669           1.1  jruoho     char                    *SubBuffer = Buffer;
    670           1.1  jruoho     char                    *Beginning;
    671           1.1  jruoho     char                    *StartOfThisLine;
    672           1.1  jruoho     char                    *Next;
    673           1.1  jruoho     BOOLEAN                 BlockBegin = TRUE;
    674           1.1  jruoho 
    675           1.1  jruoho 
    676           1.1  jruoho     while (*SubBuffer)
    677           1.1  jruoho     {
    678           1.1  jruoho         /* Ignore comments */
    679           1.1  jruoho 
    680           1.1  jruoho         if ((SubBuffer[0] == '/') &&
    681           1.1  jruoho             (SubBuffer[1] == '*'))
    682           1.1  jruoho         {
    683           1.1  jruoho             SubBuffer = strstr (SubBuffer, "*/");
    684           1.1  jruoho             if (!SubBuffer)
    685           1.1  jruoho             {
    686           1.1  jruoho                 return;
    687           1.1  jruoho             }
    688           1.1  jruoho 
    689           1.1  jruoho             SubBuffer += 2;
    690           1.1  jruoho             continue;
    691           1.1  jruoho         }
    692           1.1  jruoho 
    693           1.1  jruoho         /* Ignore quoted strings */
    694           1.1  jruoho 
    695           1.1  jruoho         if (*SubBuffer == '\"')
    696           1.1  jruoho         {
    697           1.1  jruoho             SubBuffer++;
    698           1.1  jruoho             SubBuffer = AsSkipPastChar (SubBuffer, '\"');
    699           1.1  jruoho             if (!SubBuffer)
    700           1.1  jruoho             {
    701           1.1  jruoho                 return;
    702           1.1  jruoho             }
    703           1.1  jruoho         }
    704           1.1  jruoho 
    705           1.1  jruoho         if (!strncmp ("\n}", SubBuffer, 2))
    706           1.1  jruoho         {
    707           1.1  jruoho             /*
    708           1.1  jruoho              * A newline followed by a closing brace closes a function
    709           1.1  jruoho              * or struct or initializer block
    710           1.1  jruoho              */
    711           1.1  jruoho             BlockBegin = TRUE;
    712           1.1  jruoho         }
    713           1.1  jruoho 
    714           1.1  jruoho         /*
    715           1.1  jruoho          * Move every standalone brace up to the previous line
    716           1.1  jruoho          * Check for digit will ignore initializer lists surrounded by braces.
    717           1.1  jruoho          * This will work until we we need more complex detection.
    718           1.1  jruoho          */
    719           1.1  jruoho         if ((*SubBuffer == '{') && !isdigit ((int) SubBuffer[1]))
    720           1.1  jruoho         {
    721           1.1  jruoho             if (BlockBegin)
    722           1.1  jruoho             {
    723           1.1  jruoho                 BlockBegin = FALSE;
    724           1.1  jruoho             }
    725           1.1  jruoho             else
    726           1.1  jruoho             {
    727           1.1  jruoho                 /*
    728           1.1  jruoho                  * Backup to previous non-whitespace
    729           1.1  jruoho                  */
    730           1.1  jruoho                 Beginning = SubBuffer - 1;
    731           1.1  jruoho                 while ((*Beginning == ' ')   ||
    732           1.1  jruoho                        (*Beginning == '\n'))
    733           1.1  jruoho                 {
    734           1.1  jruoho                     Beginning--;
    735           1.1  jruoho                 }
    736           1.1  jruoho 
    737           1.1  jruoho                 StartOfThisLine = Beginning;
    738           1.1  jruoho                 while (*StartOfThisLine != '\n')
    739           1.1  jruoho                 {
    740           1.1  jruoho                     StartOfThisLine--;
    741           1.1  jruoho                 }
    742           1.1  jruoho 
    743           1.1  jruoho                 /*
    744           1.1  jruoho                  * Move the brace up to the previous line, UNLESS:
    745           1.1  jruoho                  *
    746           1.1  jruoho                  * 1) There is a conditional compile on the line (starts with '#')
    747           1.1  jruoho                  * 2) Previous line ends with an '=' (Start of initializer block)
    748           1.1  jruoho                  * 3) Previous line ends with a comma (part of an init list)
    749           1.1  jruoho                  * 4) Previous line ends with a backslash (part of a macro)
    750           1.1  jruoho                  */
    751           1.1  jruoho                 if ((StartOfThisLine[1] != '#') &&
    752           1.1  jruoho                     (*Beginning != '\\') &&
    753           1.1  jruoho                     (*Beginning != '/') &&
    754           1.1  jruoho                     (*Beginning != '{') &&
    755           1.1  jruoho                     (*Beginning != '=') &&
    756           1.1  jruoho                     (*Beginning != ','))
    757           1.1  jruoho                 {
    758           1.1  jruoho                     Beginning++;
    759           1.1  jruoho                     SubBuffer++;
    760           1.1  jruoho 
    761           1.1  jruoho                     Gbl_MadeChanges = TRUE;
    762           1.1  jruoho 
    763           1.1  jruoho #ifdef ADD_EXTRA_WHITESPACE
    764           1.1  jruoho                     AsReplaceData (Beginning, SubBuffer - Beginning, " {\n", 3);
    765           1.1  jruoho #else
    766           1.1  jruoho                     /* Find non-whitespace start of next line */
    767           1.1  jruoho 
    768           1.1  jruoho                     Next = SubBuffer + 1;
    769           1.1  jruoho                     while ((*Next == ' ')   ||
    770           1.1  jruoho                            (*Next == '\t'))
    771           1.1  jruoho                     {
    772           1.1  jruoho                         Next++;
    773           1.1  jruoho                     }
    774           1.1  jruoho 
    775           1.1  jruoho                     /* Find non-whitespace start of this line */
    776           1.1  jruoho 
    777           1.1  jruoho                     StartOfThisLine++;
    778           1.1  jruoho                     while ((*StartOfThisLine == ' ')   ||
    779           1.1  jruoho                            (*StartOfThisLine == '\t'))
    780           1.1  jruoho                     {
    781           1.1  jruoho                         StartOfThisLine++;
    782           1.1  jruoho                     }
    783           1.1  jruoho 
    784           1.1  jruoho                     /*
    785           1.1  jruoho                      * Must be a single-line comment to need more whitespace
    786           1.1  jruoho                      * Even then, we don't need more if the previous statement
    787           1.1  jruoho                      * is an "else".
    788           1.1  jruoho                      */
    789           1.1  jruoho                     if ((Next[0] == '/')  &&
    790           1.1  jruoho                         (Next[1] == '*')  &&
    791           1.1  jruoho                         (Next[2] != '\n') &&
    792           1.1  jruoho 
    793           1.1  jruoho                         (!strncmp (StartOfThisLine, "else if", 7)     ||
    794           1.1  jruoho                          !strncmp (StartOfThisLine, "else while", 10) ||
    795           1.1  jruoho                           strncmp (StartOfThisLine, "else", 4)))
    796           1.1  jruoho                     {
    797           1.1  jruoho                         AsReplaceData (Beginning, SubBuffer - Beginning, " {\n", 3);
    798           1.1  jruoho                     }
    799           1.1  jruoho                     else
    800           1.1  jruoho                     {
    801           1.1  jruoho                         AsReplaceData (Beginning, SubBuffer - Beginning, " {", 2);
    802           1.1  jruoho                     }
    803           1.1  jruoho #endif
    804           1.1  jruoho                 }
    805           1.1  jruoho             }
    806           1.1  jruoho         }
    807           1.1  jruoho 
    808           1.1  jruoho         SubBuffer++;
    809           1.1  jruoho     }
    810           1.1  jruoho }
    811           1.1  jruoho 
    812           1.1  jruoho 
    813           1.1  jruoho /******************************************************************************
    814           1.1  jruoho  *
    815           1.1  jruoho  * FUNCTION:    AsTabify4
    816           1.1  jruoho  *
    817  1.1.1.2.20.1     tls  * DESCRIPTION: Convert the text to tabbed text. Alignment of text is
    818           1.1  jruoho  *              preserved.
    819           1.1  jruoho  *
    820           1.1  jruoho  ******************************************************************************/
    821           1.1  jruoho 
    822           1.1  jruoho void
    823           1.1  jruoho AsTabify4 (
    824           1.1  jruoho     char                    *Buffer)
    825           1.1  jruoho {
    826           1.1  jruoho     char                    *SubBuffer = Buffer;
    827           1.1  jruoho     char                    *NewSubBuffer;
    828           1.1  jruoho     UINT32                  SpaceCount = 0;
    829           1.1  jruoho     UINT32                  Column = 0;
    830           1.1  jruoho 
    831           1.1  jruoho 
    832           1.1  jruoho     while (*SubBuffer)
    833           1.1  jruoho     {
    834           1.1  jruoho         if (*SubBuffer == '\n')
    835           1.1  jruoho         {
    836           1.1  jruoho             Column = 0;
    837           1.1  jruoho         }
    838           1.1  jruoho         else
    839           1.1  jruoho         {
    840           1.1  jruoho             Column++;
    841           1.1  jruoho         }
    842           1.1  jruoho 
    843           1.1  jruoho         /* Ignore comments */
    844           1.1  jruoho 
    845           1.1  jruoho         if ((SubBuffer[0] == '/') &&
    846           1.1  jruoho             (SubBuffer[1] == '*'))
    847           1.1  jruoho         {
    848           1.1  jruoho             SubBuffer = strstr (SubBuffer, "*/");
    849           1.1  jruoho             if (!SubBuffer)
    850           1.1  jruoho             {
    851           1.1  jruoho                 return;
    852           1.1  jruoho             }
    853           1.1  jruoho 
    854           1.1  jruoho             SubBuffer += 2;
    855           1.1  jruoho             continue;
    856           1.1  jruoho         }
    857           1.1  jruoho 
    858           1.1  jruoho         /* Ignore quoted strings */
    859           1.1  jruoho 
    860           1.1  jruoho         if (*SubBuffer == '\"')
    861           1.1  jruoho         {
    862           1.1  jruoho             SubBuffer++;
    863           1.1  jruoho             SubBuffer = AsSkipPastChar (SubBuffer, '\"');
    864           1.1  jruoho             if (!SubBuffer)
    865           1.1  jruoho             {
    866           1.1  jruoho                 return;
    867           1.1  jruoho             }
    868           1.1  jruoho             SpaceCount = 0;
    869           1.1  jruoho         }
    870           1.1  jruoho 
    871           1.1  jruoho         if (*SubBuffer == ' ')
    872           1.1  jruoho         {
    873           1.1  jruoho             SpaceCount++;
    874           1.1  jruoho 
    875           1.1  jruoho             if (SpaceCount >= 4)
    876           1.1  jruoho             {
    877           1.1  jruoho                 SpaceCount = 0;
    878           1.1  jruoho 
    879           1.1  jruoho                 NewSubBuffer = (SubBuffer + 1) - 4;
    880           1.1  jruoho                 *NewSubBuffer = '\t';
    881           1.1  jruoho                 NewSubBuffer++;
    882           1.1  jruoho 
    883           1.1  jruoho                 /* Remove the spaces */
    884           1.1  jruoho 
    885           1.1  jruoho                 SubBuffer = AsRemoveData (NewSubBuffer, SubBuffer + 1);
    886           1.1  jruoho             }
    887           1.1  jruoho 
    888           1.1  jruoho             if ((Column % 4) == 0)
    889           1.1  jruoho             {
    890           1.1  jruoho                 SpaceCount = 0;
    891           1.1  jruoho             }
    892           1.1  jruoho         }
    893           1.1  jruoho         else
    894           1.1  jruoho         {
    895           1.1  jruoho             SpaceCount = 0;
    896           1.1  jruoho         }
    897           1.1  jruoho 
    898           1.1  jruoho         SubBuffer++;
    899           1.1  jruoho     }
    900           1.1  jruoho }
    901           1.1  jruoho 
    902           1.1  jruoho 
    903           1.1  jruoho /******************************************************************************
    904           1.1  jruoho  *
    905           1.1  jruoho  * FUNCTION:    AsTabify8
    906           1.1  jruoho  *
    907  1.1.1.2.20.1     tls  * DESCRIPTION: Convert the text to tabbed text. Alignment of text is
    908           1.1  jruoho  *              preserved.
    909           1.1  jruoho  *
    910           1.1  jruoho  ******************************************************************************/
    911           1.1  jruoho 
    912           1.1  jruoho void
    913           1.1  jruoho AsTabify8 (
    914           1.1  jruoho     char                    *Buffer)
    915           1.1  jruoho {
    916           1.1  jruoho     char                    *SubBuffer = Buffer;
    917           1.1  jruoho     char                    *NewSubBuffer;
    918           1.1  jruoho     char                    *CommentEnd = NULL;
    919           1.1  jruoho     UINT32                  SpaceCount = 0;
    920           1.1  jruoho     UINT32                  Column = 0;
    921           1.1  jruoho     UINT32                  TabCount = 0;
    922           1.1  jruoho     UINT32                  LastLineTabCount = 0;
    923           1.1  jruoho     UINT32                  LastLineColumnStart = 0;
    924           1.1  jruoho     UINT32                  ThisColumnStart = 0;
    925           1.1  jruoho     UINT32                  ThisTabCount =  0;
    926           1.1  jruoho     char                    *FirstNonBlank = NULL;
    927           1.1  jruoho 
    928           1.1  jruoho 
    929           1.1  jruoho     while (*SubBuffer)
    930           1.1  jruoho     {
    931           1.1  jruoho         if (*SubBuffer == '\n')
    932           1.1  jruoho         {
    933           1.1  jruoho             /* This is a standalone blank line */
    934           1.1  jruoho 
    935           1.1  jruoho             FirstNonBlank = NULL;
    936           1.1  jruoho             Column = 0;
    937           1.1  jruoho             SpaceCount = 0;
    938           1.1  jruoho             TabCount = 0;
    939           1.1  jruoho             SubBuffer++;
    940           1.1  jruoho             continue;
    941           1.1  jruoho         }
    942           1.1  jruoho 
    943           1.1  jruoho         if (!FirstNonBlank)
    944           1.1  jruoho         {
    945           1.1  jruoho             /* Find the first non-blank character on this line */
    946           1.1  jruoho 
    947           1.1  jruoho             FirstNonBlank = SubBuffer;
    948           1.1  jruoho             while (*FirstNonBlank == ' ')
    949           1.1  jruoho             {
    950           1.1  jruoho                 FirstNonBlank++;
    951           1.1  jruoho             }
    952           1.1  jruoho 
    953           1.1  jruoho             /*
    954           1.1  jruoho              * This mechanism limits the difference in tab counts from
    955  1.1.1.2.20.1     tls              * line to line. It helps avoid the situation where a second
    956           1.1  jruoho              * continuation line (which was indented correctly for tabs=4) would
    957           1.1  jruoho              * get indented off the screen if we just blindly converted to tabs.
    958           1.1  jruoho              */
    959           1.1  jruoho             ThisColumnStart = FirstNonBlank - SubBuffer;
    960           1.1  jruoho 
    961           1.1  jruoho             if (LastLineTabCount == 0)
    962           1.1  jruoho             {
    963           1.1  jruoho                 ThisTabCount = 0;
    964           1.1  jruoho             }
    965           1.1  jruoho             else if (ThisColumnStart == LastLineColumnStart)
    966           1.1  jruoho             {
    967           1.1  jruoho                 ThisTabCount = LastLineTabCount -1;
    968           1.1  jruoho             }
    969           1.1  jruoho             else
    970           1.1  jruoho             {
    971           1.1  jruoho                 ThisTabCount = LastLineTabCount + 1;
    972           1.1  jruoho             }
    973           1.1  jruoho         }
    974           1.1  jruoho 
    975           1.1  jruoho         Column++;
    976           1.1  jruoho 
    977           1.1  jruoho         /* Check if we are in a comment */
    978           1.1  jruoho 
    979           1.1  jruoho         if ((SubBuffer[0] == '*') &&
    980           1.1  jruoho             (SubBuffer[1] == '/'))
    981           1.1  jruoho         {
    982           1.1  jruoho             SpaceCount = 0;
    983           1.1  jruoho             SubBuffer += 2;
    984           1.1  jruoho 
    985           1.1  jruoho             if (*SubBuffer == '\n')
    986           1.1  jruoho             {
    987           1.1  jruoho                 if (TabCount > 0)
    988           1.1  jruoho                 {
    989           1.1  jruoho                     LastLineTabCount = TabCount;
    990           1.1  jruoho                     TabCount = 0;
    991           1.1  jruoho                 }
    992           1.1  jruoho                 FirstNonBlank = NULL;
    993           1.1  jruoho                 LastLineColumnStart = ThisColumnStart;
    994           1.1  jruoho                 SubBuffer++;
    995           1.1  jruoho             }
    996           1.1  jruoho 
    997           1.1  jruoho             continue;
    998           1.1  jruoho         }
    999           1.1  jruoho 
   1000           1.1  jruoho         /* Check for comment open */
   1001           1.1  jruoho 
   1002           1.1  jruoho         if ((SubBuffer[0] == '/') &&
   1003           1.1  jruoho             (SubBuffer[1] == '*'))
   1004           1.1  jruoho         {
   1005           1.1  jruoho             /* Find the end of the comment, it must exist */
   1006           1.1  jruoho 
   1007           1.1  jruoho             CommentEnd = strstr (SubBuffer, "*/");
   1008           1.1  jruoho             if (!CommentEnd)
   1009           1.1  jruoho             {
   1010           1.1  jruoho                 return;
   1011           1.1  jruoho             }
   1012           1.1  jruoho 
   1013           1.1  jruoho             /* Toss the rest of this line or single-line comment */
   1014           1.1  jruoho 
   1015           1.1  jruoho             while ((SubBuffer < CommentEnd) &&
   1016           1.1  jruoho                    (*SubBuffer != '\n'))
   1017           1.1  jruoho             {
   1018           1.1  jruoho                 SubBuffer++;
   1019           1.1  jruoho             }
   1020           1.1  jruoho 
   1021           1.1  jruoho             if (*SubBuffer == '\n')
   1022           1.1  jruoho             {
   1023           1.1  jruoho                 if (TabCount > 0)
   1024           1.1  jruoho                 {
   1025           1.1  jruoho                     LastLineTabCount = TabCount;
   1026           1.1  jruoho                     TabCount = 0;
   1027           1.1  jruoho                 }
   1028           1.1  jruoho                 FirstNonBlank = NULL;
   1029           1.1  jruoho                 LastLineColumnStart = ThisColumnStart;
   1030           1.1  jruoho             }
   1031           1.1  jruoho 
   1032           1.1  jruoho             SpaceCount = 0;
   1033           1.1  jruoho             continue;
   1034           1.1  jruoho         }
   1035           1.1  jruoho 
   1036           1.1  jruoho         /* Ignore quoted strings */
   1037           1.1  jruoho 
   1038           1.1  jruoho         if ((!CommentEnd) && (*SubBuffer == '\"'))
   1039           1.1  jruoho         {
   1040           1.1  jruoho             SubBuffer++;
   1041           1.1  jruoho             SubBuffer = AsSkipPastChar (SubBuffer, '\"');
   1042           1.1  jruoho             if (!SubBuffer)
   1043           1.1  jruoho             {
   1044           1.1  jruoho                 return;
   1045           1.1  jruoho             }
   1046           1.1  jruoho             SpaceCount = 0;
   1047           1.1  jruoho         }
   1048           1.1  jruoho 
   1049           1.1  jruoho         if (*SubBuffer != ' ')
   1050           1.1  jruoho         {
   1051           1.1  jruoho             /* Not a space, skip to end of line */
   1052           1.1  jruoho 
   1053           1.1  jruoho             SubBuffer = AsSkipUntilChar (SubBuffer, '\n');
   1054           1.1  jruoho             if (!SubBuffer)
   1055           1.1  jruoho             {
   1056           1.1  jruoho                 return;
   1057           1.1  jruoho             }
   1058           1.1  jruoho             if (TabCount > 0)
   1059           1.1  jruoho             {
   1060           1.1  jruoho                 LastLineTabCount = TabCount;
   1061           1.1  jruoho                 TabCount = 0;
   1062           1.1  jruoho             }
   1063           1.1  jruoho 
   1064           1.1  jruoho             FirstNonBlank = NULL;
   1065           1.1  jruoho             LastLineColumnStart = ThisColumnStart;
   1066           1.1  jruoho             Column = 0;
   1067           1.1  jruoho             SpaceCount = 0;
   1068           1.1  jruoho         }
   1069           1.1  jruoho         else
   1070           1.1  jruoho         {
   1071           1.1  jruoho             /* Another space */
   1072           1.1  jruoho 
   1073           1.1  jruoho             SpaceCount++;
   1074           1.1  jruoho 
   1075           1.1  jruoho             if (SpaceCount >= 4)
   1076           1.1  jruoho             {
   1077           1.1  jruoho                 /* Replace this group of spaces with a tab character */
   1078           1.1  jruoho 
   1079           1.1  jruoho                 SpaceCount = 0;
   1080           1.1  jruoho 
   1081           1.1  jruoho                 NewSubBuffer = SubBuffer - 3;
   1082           1.1  jruoho 
   1083           1.1  jruoho                 if (TabCount <= ThisTabCount ? (ThisTabCount +1) : 0)
   1084           1.1  jruoho                 {
   1085           1.1  jruoho                     *NewSubBuffer = '\t';
   1086           1.1  jruoho                     NewSubBuffer++;
   1087           1.1  jruoho                     SubBuffer++;
   1088           1.1  jruoho                     TabCount++;
   1089           1.1  jruoho                 }
   1090           1.1  jruoho 
   1091           1.1  jruoho                 /* Remove the spaces */
   1092           1.1  jruoho 
   1093           1.1  jruoho                 SubBuffer = AsRemoveData (NewSubBuffer, SubBuffer);
   1094           1.1  jruoho                 continue;
   1095           1.1  jruoho             }
   1096           1.1  jruoho         }
   1097           1.1  jruoho 
   1098           1.1  jruoho         SubBuffer++;
   1099           1.1  jruoho     }
   1100           1.1  jruoho }
   1101           1.1  jruoho 
   1102           1.1  jruoho 
   1103           1.1  jruoho /******************************************************************************
   1104           1.1  jruoho  *
   1105           1.1  jruoho  * FUNCTION:    AsCountLines
   1106           1.1  jruoho  *
   1107  1.1.1.2.20.1     tls  * DESCRIPTION: Count the number of lines in the input buffer. Also count
   1108           1.1  jruoho  *              the number of long lines (lines longer than 80 chars).
   1109           1.1  jruoho  *
   1110           1.1  jruoho  ******************************************************************************/
   1111           1.1  jruoho 
   1112           1.1  jruoho UINT32
   1113           1.1  jruoho AsCountLines (
   1114           1.1  jruoho     char                    *Buffer,
   1115           1.1  jruoho     char                    *Filename)
   1116           1.1  jruoho {
   1117           1.1  jruoho     char                    *SubBuffer = Buffer;
   1118           1.1  jruoho     char                    *EndOfLine;
   1119           1.1  jruoho     UINT32                  LineCount = 0;
   1120           1.1  jruoho     UINT32                  LongLineCount = 0;
   1121           1.1  jruoho 
   1122           1.1  jruoho 
   1123           1.1  jruoho     while (*SubBuffer)
   1124           1.1  jruoho     {
   1125           1.1  jruoho         EndOfLine = AsSkipUntilChar (SubBuffer, '\n');
   1126           1.1  jruoho         if (!EndOfLine)
   1127           1.1  jruoho         {
   1128           1.1  jruoho             Gbl_TotalLines += LineCount;
   1129  1.1.1.2.20.1     tls             return (LineCount);
   1130           1.1  jruoho         }
   1131           1.1  jruoho 
   1132           1.1  jruoho         if ((EndOfLine - SubBuffer) > 80)
   1133           1.1  jruoho         {
   1134           1.1  jruoho             LongLineCount++;
   1135           1.1  jruoho             VERBOSE_PRINT (("long: %.80s\n", SubBuffer));
   1136           1.1  jruoho         }
   1137           1.1  jruoho 
   1138           1.1  jruoho         LineCount++;
   1139           1.1  jruoho         SubBuffer = EndOfLine + 1;
   1140           1.1  jruoho     }
   1141           1.1  jruoho 
   1142           1.1  jruoho     if (LongLineCount)
   1143           1.1  jruoho     {
   1144           1.1  jruoho         VERBOSE_PRINT (("%u Lines longer than 80 found in %s\n", LongLineCount, Filename));
   1145           1.1  jruoho         Gbl_LongLines += LongLineCount;
   1146           1.1  jruoho     }
   1147           1.1  jruoho 
   1148           1.1  jruoho     Gbl_TotalLines += LineCount;
   1149  1.1.1.2.20.1     tls     return (LineCount);
   1150           1.1  jruoho }
   1151           1.1  jruoho 
   1152           1.1  jruoho 
   1153           1.1  jruoho /******************************************************************************
   1154           1.1  jruoho  *
   1155           1.1  jruoho  * FUNCTION:    AsCountTabs
   1156           1.1  jruoho  *
   1157           1.1  jruoho  * DESCRIPTION: Simply count the number of tabs in the input file buffer
   1158           1.1  jruoho  *
   1159           1.1  jruoho  ******************************************************************************/
   1160           1.1  jruoho 
   1161           1.1  jruoho void
   1162           1.1  jruoho AsCountTabs (
   1163           1.1  jruoho     char                    *Buffer,
   1164           1.1  jruoho     char                    *Filename)
   1165           1.1  jruoho {
   1166           1.1  jruoho     UINT32                  i;
   1167           1.1  jruoho     UINT32                  TabCount = 0;
   1168           1.1  jruoho 
   1169           1.1  jruoho 
   1170           1.1  jruoho     for (i = 0; Buffer[i]; i++)
   1171           1.1  jruoho     {
   1172           1.1  jruoho         if (Buffer[i] == '\t')
   1173           1.1  jruoho         {
   1174           1.1  jruoho             TabCount++;
   1175           1.1  jruoho         }
   1176           1.1  jruoho     }
   1177           1.1  jruoho 
   1178           1.1  jruoho     if (TabCount)
   1179           1.1  jruoho     {
   1180           1.1  jruoho         AsPrint ("Tabs found", TabCount, Filename);
   1181           1.1  jruoho         Gbl_Tabs += TabCount;
   1182           1.1  jruoho     }
   1183           1.1  jruoho 
   1184           1.1  jruoho     AsCountLines (Buffer, Filename);
   1185           1.1  jruoho }
   1186           1.1  jruoho 
   1187           1.1  jruoho 
   1188           1.1  jruoho /******************************************************************************
   1189           1.1  jruoho  *
   1190           1.1  jruoho  * FUNCTION:    AsCountNonAnsiComments
   1191           1.1  jruoho  *
   1192  1.1.1.2.20.1     tls  * DESCRIPTION: Count the number of "//" comments. This type of comment is
   1193           1.1  jruoho  *              non-ANSI C.
   1194           1.1  jruoho  *
   1195           1.1  jruoho  ******************************************************************************/
   1196           1.1  jruoho 
   1197           1.1  jruoho void
   1198           1.1  jruoho AsCountNonAnsiComments (
   1199           1.1  jruoho     char                    *Buffer,
   1200           1.1  jruoho     char                    *Filename)
   1201           1.1  jruoho {
   1202           1.1  jruoho     char                    *SubBuffer = Buffer;
   1203           1.1  jruoho     UINT32                  CommentCount = 0;
   1204           1.1  jruoho 
   1205           1.1  jruoho 
   1206           1.1  jruoho     while (SubBuffer)
   1207           1.1  jruoho     {
   1208           1.1  jruoho         SubBuffer = strstr (SubBuffer, "//");
   1209           1.1  jruoho         if (SubBuffer)
   1210           1.1  jruoho         {
   1211           1.1  jruoho             CommentCount++;
   1212           1.1  jruoho             SubBuffer += 2;
   1213           1.1  jruoho         }
   1214           1.1  jruoho     }
   1215           1.1  jruoho 
   1216           1.1  jruoho     if (CommentCount)
   1217           1.1  jruoho     {
   1218           1.1  jruoho         AsPrint ("Non-ANSI Comments found", CommentCount, Filename);
   1219           1.1  jruoho         Gbl_NonAnsiComments += CommentCount;
   1220           1.1  jruoho     }
   1221           1.1  jruoho }
   1222           1.1  jruoho 
   1223           1.1  jruoho 
   1224           1.1  jruoho /******************************************************************************
   1225           1.1  jruoho  *
   1226           1.1  jruoho  * FUNCTION:    AsCountSourceLines
   1227           1.1  jruoho  *
   1228  1.1.1.2.20.1     tls  * DESCRIPTION: Count the number of C source lines. Defined by 1) not a
   1229           1.1  jruoho  *              comment, and 2) not a blank line.
   1230           1.1  jruoho  *
   1231           1.1  jruoho  ******************************************************************************/
   1232           1.1  jruoho 
   1233           1.1  jruoho void
   1234           1.1  jruoho AsCountSourceLines (
   1235           1.1  jruoho     char                    *Buffer,
   1236           1.1  jruoho     char                    *Filename)
   1237           1.1  jruoho {
   1238           1.1  jruoho     char                    *SubBuffer = Buffer;
   1239           1.1  jruoho     UINT32                  LineCount = 0;
   1240           1.1  jruoho     UINT32                  WhiteCount = 0;
   1241           1.1  jruoho     UINT32                  CommentCount = 0;
   1242           1.1  jruoho 
   1243           1.1  jruoho 
   1244           1.1  jruoho     while (*SubBuffer)
   1245           1.1  jruoho     {
   1246           1.1  jruoho         /* Detect comments (// comments are not used, non-ansii) */
   1247           1.1  jruoho 
   1248           1.1  jruoho         if ((SubBuffer[0] == '/') &&
   1249           1.1  jruoho             (SubBuffer[1] == '*'))
   1250           1.1  jruoho         {
   1251           1.1  jruoho             SubBuffer += 2;
   1252           1.1  jruoho 
   1253           1.1  jruoho             /* First line of multi-line comment is often just whitespace */
   1254           1.1  jruoho 
   1255           1.1  jruoho             if (SubBuffer[0] == '\n')
   1256           1.1  jruoho             {
   1257           1.1  jruoho                 WhiteCount++;
   1258           1.1  jruoho                 SubBuffer++;
   1259           1.1  jruoho             }
   1260           1.1  jruoho             else
   1261           1.1  jruoho             {
   1262           1.1  jruoho                 CommentCount++;
   1263           1.1  jruoho             }
   1264           1.1  jruoho 
   1265           1.1  jruoho             /* Find end of comment */
   1266           1.1  jruoho 
   1267           1.1  jruoho             while (SubBuffer[0] && SubBuffer[1] &&
   1268           1.1  jruoho                     !(((SubBuffer[0] == '*') &&
   1269           1.1  jruoho                       (SubBuffer[1] == '/'))))
   1270           1.1  jruoho             {
   1271           1.1  jruoho                 if (SubBuffer[0] == '\n')
   1272           1.1  jruoho                 {
   1273           1.1  jruoho                     CommentCount++;
   1274           1.1  jruoho                 }
   1275           1.1  jruoho 
   1276           1.1  jruoho                 SubBuffer++;
   1277           1.1  jruoho             }
   1278           1.1  jruoho         }
   1279           1.1  jruoho 
   1280           1.1  jruoho         /* A linefeed followed by a non-linefeed is a valid source line */
   1281           1.1  jruoho 
   1282           1.1  jruoho         else if ((SubBuffer[0] == '\n') &&
   1283           1.1  jruoho                  (SubBuffer[1] != '\n'))
   1284           1.1  jruoho         {
   1285           1.1  jruoho             LineCount++;
   1286           1.1  jruoho         }
   1287           1.1  jruoho 
   1288           1.1  jruoho         /* Two back-to-back linefeeds indicate a whitespace line */
   1289           1.1  jruoho 
   1290           1.1  jruoho         else if ((SubBuffer[0] == '\n') &&
   1291           1.1  jruoho                  (SubBuffer[1] == '\n'))
   1292           1.1  jruoho         {
   1293           1.1  jruoho             WhiteCount++;
   1294           1.1  jruoho         }
   1295           1.1  jruoho 
   1296           1.1  jruoho         SubBuffer++;
   1297           1.1  jruoho     }
   1298           1.1  jruoho 
   1299           1.1  jruoho     /* Adjust comment count for legal header */
   1300           1.1  jruoho 
   1301           1.1  jruoho     if (Gbl_HeaderSize < CommentCount)
   1302           1.1  jruoho     {
   1303           1.1  jruoho         CommentCount -= Gbl_HeaderSize;
   1304           1.1  jruoho         Gbl_HeaderLines += Gbl_HeaderSize;
   1305           1.1  jruoho     }
   1306           1.1  jruoho 
   1307           1.1  jruoho     Gbl_SourceLines += LineCount;
   1308           1.1  jruoho     Gbl_WhiteLines += WhiteCount;
   1309           1.1  jruoho     Gbl_CommentLines += CommentCount;
   1310           1.1  jruoho 
   1311           1.1  jruoho     VERBOSE_PRINT (("%u Comment %u White %u Code %u Lines in %s\n",
   1312           1.1  jruoho                 CommentCount, WhiteCount, LineCount, LineCount+WhiteCount+CommentCount, Filename));
   1313           1.1  jruoho }
   1314           1.1  jruoho 
   1315           1.1  jruoho 
   1316           1.1  jruoho /******************************************************************************
   1317           1.1  jruoho  *
   1318           1.1  jruoho  * FUNCTION:    AsInsertPrefix
   1319           1.1  jruoho  *
   1320           1.1  jruoho  * DESCRIPTION: Insert struct or union prefixes
   1321           1.1  jruoho  *
   1322           1.1  jruoho  ******************************************************************************/
   1323           1.1  jruoho 
   1324           1.1  jruoho void
   1325           1.1  jruoho AsInsertPrefix (
   1326           1.1  jruoho     char                    *Buffer,
   1327           1.1  jruoho     char                    *Keyword,
   1328           1.1  jruoho     UINT8                   Type)
   1329           1.1  jruoho {
   1330           1.1  jruoho     char                    *SubString;
   1331           1.1  jruoho     char                    *SubBuffer;
   1332           1.1  jruoho     char                    *EndKeyword;
   1333           1.1  jruoho     int                     InsertLength;
   1334           1.1  jruoho     char                    *InsertString;
   1335           1.1  jruoho     int                     TrailingSpaces;
   1336           1.1  jruoho     char                    LowerKeyword[128];
   1337           1.1  jruoho     int                     KeywordLength;
   1338           1.1  jruoho 
   1339           1.1  jruoho 
   1340           1.1  jruoho     switch (Type)
   1341           1.1  jruoho     {
   1342           1.1  jruoho     case SRC_TYPE_STRUCT:
   1343  1.1.1.2.20.1     tls 
   1344           1.1  jruoho         InsertString = "struct ";
   1345           1.1  jruoho         break;
   1346           1.1  jruoho 
   1347           1.1  jruoho     case SRC_TYPE_UNION:
   1348  1.1.1.2.20.1     tls 
   1349           1.1  jruoho         InsertString = "union ";
   1350           1.1  jruoho         break;
   1351           1.1  jruoho 
   1352           1.1  jruoho     default:
   1353  1.1.1.2.20.1     tls 
   1354           1.1  jruoho         return;
   1355           1.1  jruoho     }
   1356           1.1  jruoho 
   1357           1.1  jruoho     strcpy (LowerKeyword, Keyword);
   1358  1.1.1.2.20.1     tls     AsStrlwr (LowerKeyword);
   1359           1.1  jruoho 
   1360           1.1  jruoho     SubBuffer = Buffer;
   1361           1.1  jruoho     SubString = Buffer;
   1362           1.1  jruoho     InsertLength = strlen (InsertString);
   1363           1.1  jruoho     KeywordLength = strlen (Keyword);
   1364           1.1  jruoho 
   1365           1.1  jruoho 
   1366           1.1  jruoho     while (SubString)
   1367           1.1  jruoho     {
   1368           1.1  jruoho         /* Find an instance of the keyword */
   1369           1.1  jruoho 
   1370           1.1  jruoho         SubString = strstr (SubBuffer, LowerKeyword);
   1371           1.1  jruoho         if (!SubString)
   1372           1.1  jruoho         {
   1373           1.1  jruoho             return;
   1374           1.1  jruoho         }
   1375           1.1  jruoho 
   1376           1.1  jruoho         SubBuffer = SubString;
   1377           1.1  jruoho 
   1378           1.1  jruoho         /* Must be standalone word, not a substring */
   1379           1.1  jruoho 
   1380           1.1  jruoho         if (AsMatchExactWord (SubString, KeywordLength))
   1381           1.1  jruoho         {
   1382           1.1  jruoho             /* Make sure the keyword isn't already prefixed with the insert */
   1383           1.1  jruoho 
   1384           1.1  jruoho             if (!strncmp (SubString - InsertLength, InsertString, InsertLength))
   1385           1.1  jruoho             {
   1386           1.1  jruoho                 /* Add spaces if not already at the end-of-line */
   1387           1.1  jruoho 
   1388           1.1  jruoho                 if (*(SubBuffer + KeywordLength) != '\n')
   1389           1.1  jruoho                 {
   1390           1.1  jruoho                     /* Already present, add spaces after to align structure members */
   1391           1.1  jruoho 
   1392           1.1  jruoho #if 0
   1393           1.1  jruoho /* ONLY FOR C FILES */
   1394           1.1  jruoho                     AsInsertData (SubBuffer + KeywordLength, "        ", 8);
   1395           1.1  jruoho #endif
   1396           1.1  jruoho                 }
   1397           1.1  jruoho                 goto Next;
   1398           1.1  jruoho             }
   1399           1.1  jruoho 
   1400           1.1  jruoho             /* Make sure the keyword isn't at the end of a struct/union */
   1401           1.1  jruoho             /* Note: This code depends on a single space after the brace */
   1402           1.1  jruoho 
   1403           1.1  jruoho             if (*(SubString - 2) == '}')
   1404           1.1  jruoho             {
   1405           1.1  jruoho                 goto Next;
   1406           1.1  jruoho             }
   1407           1.1  jruoho 
   1408           1.1  jruoho             /* Prefix the keyword with the insert string */
   1409           1.1  jruoho 
   1410           1.1  jruoho             Gbl_MadeChanges = TRUE;
   1411           1.1  jruoho 
   1412           1.1  jruoho             /* Is there room for insertion */
   1413           1.1  jruoho 
   1414           1.1  jruoho             EndKeyword = SubString + strlen (LowerKeyword);
   1415           1.1  jruoho 
   1416           1.1  jruoho             TrailingSpaces = 0;
   1417           1.1  jruoho             while (EndKeyword[TrailingSpaces] == ' ')
   1418           1.1  jruoho             {
   1419           1.1  jruoho                 TrailingSpaces++;
   1420           1.1  jruoho             }
   1421           1.1  jruoho 
   1422           1.1  jruoho             /*
   1423           1.1  jruoho              * Use "if (TrailingSpaces > 1)" if we want to ignore casts
   1424           1.1  jruoho              */
   1425           1.1  jruoho             SubBuffer = SubString + InsertLength;
   1426           1.1  jruoho 
   1427           1.1  jruoho             if (TrailingSpaces > InsertLength)
   1428           1.1  jruoho             {
   1429           1.1  jruoho                 /* Insert the keyword */
   1430           1.1  jruoho 
   1431           1.1  jruoho                 memmove (SubBuffer, SubString, KeywordLength);
   1432           1.1  jruoho 
   1433           1.1  jruoho                 /* Insert the keyword */
   1434           1.1  jruoho 
   1435           1.1  jruoho                 memmove (SubString, InsertString, InsertLength);
   1436           1.1  jruoho             }
   1437           1.1  jruoho             else
   1438           1.1  jruoho             {
   1439           1.1  jruoho                 AsInsertData (SubString, InsertString, InsertLength);
   1440           1.1  jruoho             }
   1441           1.1  jruoho         }
   1442           1.1  jruoho 
   1443           1.1  jruoho Next:
   1444           1.1  jruoho         SubBuffer += KeywordLength;
   1445           1.1  jruoho     }
   1446           1.1  jruoho }
   1447           1.1  jruoho 
   1448           1.1  jruoho #ifdef ACPI_FUTURE_IMPLEMENTATION
   1449           1.1  jruoho /******************************************************************************
   1450           1.1  jruoho  *
   1451           1.1  jruoho  * FUNCTION:    AsTrimComments
   1452           1.1  jruoho  *
   1453           1.1  jruoho  * DESCRIPTION: Finds 3-line comments with only a single line of text
   1454           1.1  jruoho  *
   1455           1.1  jruoho  ******************************************************************************/
   1456           1.1  jruoho 
   1457           1.1  jruoho void
   1458           1.1  jruoho AsTrimComments (
   1459           1.1  jruoho     char                    *Buffer,
   1460           1.1  jruoho     char                    *Filename)
   1461           1.1  jruoho {
   1462           1.1  jruoho     char                    *SubBuffer = Buffer;
   1463           1.1  jruoho     char                    *Ptr1;
   1464           1.1  jruoho     char                    *Ptr2;
   1465           1.1  jruoho     UINT32                  LineCount;
   1466           1.1  jruoho     UINT32                  ShortCommentCount = 0;
   1467           1.1  jruoho 
   1468           1.1  jruoho 
   1469           1.1  jruoho     while (1)
   1470           1.1  jruoho     {
   1471           1.1  jruoho         /* Find comment open, within procedure level */
   1472           1.1  jruoho 
   1473           1.1  jruoho         SubBuffer = strstr (SubBuffer, "    /*");
   1474           1.1  jruoho         if (!SubBuffer)
   1475           1.1  jruoho         {
   1476           1.1  jruoho             goto Exit;
   1477           1.1  jruoho         }
   1478           1.1  jruoho 
   1479           1.1  jruoho         /* Find comment terminator */
   1480           1.1  jruoho 
   1481           1.1  jruoho         Ptr1 = strstr (SubBuffer, "*/");
   1482           1.1  jruoho         if (!Ptr1)
   1483           1.1  jruoho         {
   1484           1.1  jruoho             goto Exit;
   1485           1.1  jruoho         }
   1486           1.1  jruoho 
   1487           1.1  jruoho         /* Find next EOL (from original buffer) */
   1488           1.1  jruoho 
   1489           1.1  jruoho         Ptr2 = strstr (SubBuffer, "\n");
   1490           1.1  jruoho         if (!Ptr2)
   1491           1.1  jruoho         {
   1492           1.1  jruoho             goto Exit;
   1493           1.1  jruoho         }
   1494           1.1  jruoho 
   1495           1.1  jruoho         /* Ignore one-line comments */
   1496           1.1  jruoho 
   1497           1.1  jruoho         if (Ptr1 < Ptr2)
   1498           1.1  jruoho         {
   1499           1.1  jruoho             /* Normal comment, ignore and continue; */
   1500           1.1  jruoho 
   1501           1.1  jruoho             SubBuffer = Ptr2;
   1502           1.1  jruoho             continue;
   1503           1.1  jruoho         }
   1504           1.1  jruoho 
   1505           1.1  jruoho         /* Examine multi-line comment */
   1506           1.1  jruoho 
   1507           1.1  jruoho         LineCount = 1;
   1508           1.1  jruoho         while (Ptr1 > Ptr2)
   1509           1.1  jruoho         {
   1510           1.1  jruoho             /* Find next EOL */
   1511           1.1  jruoho 
   1512           1.1  jruoho             Ptr2++;
   1513           1.1  jruoho             Ptr2 = strstr (Ptr2, "\n");
   1514           1.1  jruoho             if (!Ptr2)
   1515           1.1  jruoho             {
   1516           1.1  jruoho                 goto Exit;
   1517           1.1  jruoho             }
   1518           1.1  jruoho 
   1519           1.1  jruoho             LineCount++;
   1520           1.1  jruoho         }
   1521           1.1  jruoho 
   1522           1.1  jruoho         SubBuffer = Ptr1;
   1523           1.1  jruoho 
   1524           1.1  jruoho         if (LineCount <= 3)
   1525           1.1  jruoho         {
   1526           1.1  jruoho             ShortCommentCount++;
   1527           1.1  jruoho         }
   1528           1.1  jruoho     }
   1529           1.1  jruoho 
   1530           1.1  jruoho 
   1531           1.1  jruoho Exit:
   1532           1.1  jruoho 
   1533           1.1  jruoho     if (ShortCommentCount)
   1534           1.1  jruoho     {
   1535           1.1  jruoho         AsPrint ("Short Comments found", ShortCommentCount, Filename);
   1536           1.1  jruoho     }
   1537           1.1  jruoho }
   1538           1.1  jruoho #endif
   1539