diff options
Diffstat (limited to 'source/tools/acpisrc')
-rw-r--r-- | source/tools/acpisrc/acpisrc.h | 9 | ||||
-rw-r--r-- | source/tools/acpisrc/ascase.c | 9 | ||||
-rw-r--r-- | source/tools/acpisrc/asconvrt.c | 9 | ||||
-rw-r--r-- | source/tools/acpisrc/asfile.c | 11 | ||||
-rw-r--r-- | source/tools/acpisrc/asmain.c | 14 | ||||
-rw-r--r-- | source/tools/acpisrc/asremove.c | 78 | ||||
-rw-r--r-- | source/tools/acpisrc/astable.c | 89 |
7 files changed, 211 insertions, 8 deletions
diff --git a/source/tools/acpisrc/acpisrc.h b/source/tools/acpisrc/acpisrc.h index c1bd992..101083d 100644 --- a/source/tools/acpisrc/acpisrc.h +++ b/source/tools/acpisrc/acpisrc.h @@ -123,6 +123,7 @@ extern BOOLEAN Gbl_WidenDeclarations; extern BOOLEAN Gbl_IgnoreLoneLineFeeds; extern BOOLEAN Gbl_HasLoneLineFeeds; extern BOOLEAN Gbl_Cleanup; +extern BOOLEAN Gbl_IgnoreTranslationEscapes; extern void *Gbl_StructDefs; #define PARAM_LIST(pl) pl @@ -177,6 +178,7 @@ typedef struct acpi_conversion_table ACPI_IDENTIFIER_TABLE *SourceConditionalTable; ACPI_IDENTIFIER_TABLE *SourceMacroTable; ACPI_TYPED_IDENTIFIER_TABLE *SourceStructTable; + ACPI_IDENTIFIER_TABLE *SourceSpecialMacroTable; UINT32 SourceFunctions; ACPI_STRING_TABLE *HeaderStringTable; @@ -184,6 +186,7 @@ typedef struct acpi_conversion_table ACPI_IDENTIFIER_TABLE *HeaderConditionalTable; ACPI_IDENTIFIER_TABLE *HeaderMacroTable; ACPI_TYPED_IDENTIFIER_TABLE *HeaderStructTable; + ACPI_IDENTIFIER_TABLE *HeaderSpecialMacroTable; UINT32 HeaderFunctions; } ACPI_CONVERSION_TABLE; @@ -196,6 +199,7 @@ extern ACPI_CONVERSION_TABLE CleanupConversionTable; extern ACPI_CONVERSION_TABLE StatsConversionTable; extern ACPI_CONVERSION_TABLE CustomConversionTable; extern ACPI_CONVERSION_TABLE LicenseConversionTable; +extern ACPI_CONVERSION_TABLE IndentConversionTable; /* Prototypes */ @@ -282,6 +286,11 @@ AsRemoveEmptyBlocks ( char *Filename); void +AsCleanupSpecialMacro ( + char *Buffer, + char *Keyword); + +void AsCountSourceLines ( char *Buffer, char *Filename); diff --git a/source/tools/acpisrc/ascase.c b/source/tools/acpisrc/ascase.c index ea669a8..919029a 100644 --- a/source/tools/acpisrc/ascase.c +++ b/source/tools/acpisrc/ascase.c @@ -92,7 +92,14 @@ AsLowerCaseString ( * Check for translation escape string -- means to ignore * blocks of code while replacing */ - SubString2 = strstr (SubBuffer, AS_START_IGNORE); + if (Gbl_IgnoreTranslationEscapes) + { + SubString2 = NULL; + } + else + { + SubString2 = strstr (SubBuffer, AS_START_IGNORE); + } if ((SubString2) && (SubString2 < SubString1)) diff --git a/source/tools/acpisrc/asconvrt.c b/source/tools/acpisrc/asconvrt.c index 0f2da2b..76db871 100644 --- a/source/tools/acpisrc/asconvrt.c +++ b/source/tools/acpisrc/asconvrt.c @@ -525,7 +525,14 @@ AsReplaceString ( * Check for translation escape string -- means to ignore * blocks of code while replacing */ - SubString2 = strstr (SubBuffer, AS_START_IGNORE); + if (Gbl_IgnoreTranslationEscapes) + { + SubString2 = NULL; + } + else + { + SubString2 = strstr (SubBuffer, AS_START_IGNORE); + } if ((SubString2) && (SubString2 < SubString1)) diff --git a/source/tools/acpisrc/asfile.c b/source/tools/acpisrc/asfile.c index d691582..e28a4cf 100644 --- a/source/tools/acpisrc/asfile.c +++ b/source/tools/acpisrc/asfile.c @@ -307,6 +307,7 @@ AsConvertFile ( ACPI_IDENTIFIER_TABLE *LineTable; ACPI_IDENTIFIER_TABLE *MacroTable; ACPI_TYPED_IDENTIFIER_TABLE *StructTable; + ACPI_IDENTIFIER_TABLE *SpecialMacroTable; switch (FileType) @@ -319,6 +320,7 @@ AsConvertFile ( ConditionalTable = ConversionTable->SourceConditionalTable; MacroTable = ConversionTable->SourceMacroTable; StructTable = ConversionTable->SourceStructTable; + SpecialMacroTable = ConversionTable->SourceSpecialMacroTable; break; case FILE_TYPE_HEADER: @@ -329,6 +331,7 @@ AsConvertFile ( ConditionalTable = ConversionTable->HeaderConditionalTable; MacroTable = ConversionTable->HeaderMacroTable; StructTable = ConversionTable->HeaderStructTable; + SpecialMacroTable = ConversionTable->HeaderSpecialMacroTable; break; default: @@ -401,6 +404,14 @@ AsConvertFile ( } } + if (SpecialMacroTable) + { + for (i = 0; SpecialMacroTable[i].Identifier; i++) + { + AsCleanupSpecialMacro (FileBuffer, SpecialMacroTable[i].Identifier); + } + } + /* Process the function table */ for (i = 0; i < 32; i++) diff --git a/source/tools/acpisrc/asmain.c b/source/tools/acpisrc/asmain.c index e34eff0..9ce25a5 100644 --- a/source/tools/acpisrc/asmain.c +++ b/source/tools/acpisrc/asmain.c @@ -97,9 +97,10 @@ BOOLEAN Gbl_WidenDeclarations = FALSE; BOOLEAN Gbl_IgnoreLoneLineFeeds = FALSE; BOOLEAN Gbl_HasLoneLineFeeds = FALSE; BOOLEAN Gbl_Cleanup = FALSE; +BOOLEAN Gbl_IgnoreTranslationEscapes = FALSE; #define AS_UTILITY_NAME "ACPI Source Code Conversion Utility" -#define AS_SUPPORTED_OPTIONS "cdhlqsuv^y" +#define AS_SUPPORTED_OPTIONS "cdhilqsuv^y" /****************************************************************************** @@ -292,6 +293,7 @@ AsDisplayUsage ( ACPI_OPTION ("-c", "Generate cleaned version of the source"); ACPI_OPTION ("-h", "Insert dual-license header into all modules"); + ACPI_OPTION ("-i", "Cleanup macro indentation"); ACPI_OPTION ("-l", "Generate Linux version of the source"); ACPI_OPTION ("-u", "Generate Custom source translation"); @@ -364,6 +366,16 @@ main ( ConversionTable = &LicenseConversionTable; break; + case 'i': + + /* Cleanup wrong indent result */ + + printf ("Cleaning up macro indentation\n"); + ConversionTable = &IndentConversionTable; + Gbl_IgnoreLoneLineFeeds = TRUE; + Gbl_IgnoreTranslationEscapes = TRUE; + break; + case 's': /* Statistics only */ diff --git a/source/tools/acpisrc/asremove.c b/source/tools/acpisrc/asremove.c index fded3fd..37b167b 100644 --- a/source/tools/acpisrc/asremove.c +++ b/source/tools/acpisrc/asremove.c @@ -173,7 +173,14 @@ AsRemoveConditionalCompile ( * Check for translation escape string -- means to ignore * blocks of code while replacing */ - Comment = strstr (SubString, AS_START_IGNORE); + if (Gbl_IgnoreTranslationEscapes) + { + Comment = NULL; + } + else + { + Comment = strstr (SubString, AS_START_IGNORE); + } if ((Comment) && (Comment < SubBuffer)) @@ -611,3 +618,72 @@ AsRemoveDebugMacros ( AsReplaceString ("return_acpi_status", "return", REPLACE_WHOLE_WORD, Buffer); AsReplaceString ("return_VALUE", "return", REPLACE_WHOLE_WORD, Buffer); } + + +/****************************************************************************** + * + * FUNCTION: AsCleanupSpecialMacro + * + * DESCRIPTION: For special macro invocations (invoked without ";" at the end + * of the lines), do the following: + * 1. Remove spaces appended by indent at the beginning of lines. + * 2. Add an empty line between two special macro invocations. + * + ******************************************************************************/ + +void +AsCleanupSpecialMacro ( + char *Buffer, + char *Keyword) +{ + char *SubString; + char *SubBuffer; + char *LastNonSpace; + + + SubBuffer = Buffer; + SubString = Buffer; + + while (SubString) + { + SubString = strstr (SubBuffer, Keyword); + + if (SubString) + { + /* Find start of the line */ + + SubBuffer = SubString; + while (*(SubBuffer - 1) == ' ') + { + SubBuffer--; + } + + if (*(SubBuffer - 1) == '\n') + { + /* Find last non-space character */ + + LastNonSpace = SubBuffer - 1; + while (isspace ((int) *LastNonSpace)) + { + LastNonSpace--; + } + + if (*LastNonSpace != '\\') + { + /* Remove the extra spaces */ + + SubString = AsRemoveData (SubBuffer, SubString); + + /* Enforce an empty line between the invocations */ + + if (*(SubBuffer - 2) == ')') + { + AsInsertData (SubBuffer, "\n", 1); + } + } + } + + SubBuffer = SubString + strlen (Keyword); + } + } +} diff --git a/source/tools/acpisrc/astable.c b/source/tools/acpisrc/astable.c index d382523..081767b 100644 --- a/source/tools/acpisrc/astable.c +++ b/source/tools/acpisrc/astable.c @@ -168,10 +168,6 @@ ACPI_STRING_TABLE LinuxDataTypes[] = { {"INT16", "s16", REPLACE_WHOLE_WORD}, {"INT8", "s8", REPLACE_WHOLE_WORD}, - /* Include file paths */ - - {"\"acpi.h\"", "<acpi/acpi.h>", REPLACE_WHOLE_WORD}, - {NULL, NULL, 0} }; @@ -694,6 +690,44 @@ ACPI_IDENTIFIER_TABLE LinuxConditionalIdentifiers[] = { {NULL} }; + +ACPI_STRING_TABLE LinuxSpecialStrings[] = { + + /* Include file paths */ + + {"\"acpi.h\"", "<acpi/acpi.h>", REPLACE_WHOLE_WORD}, + {"\"acpiosxf.h\"", "<acpi/acpiosxf.h>", REPLACE_WHOLE_WORD}, + {"\"acpixf.h\"", "<acpi/acpixf.h>", REPLACE_WHOLE_WORD}, + {"\"acbuffer.h\"", "<acpi/acbuffer.h>", REPLACE_WHOLE_WORD}, + {"\"acconfig.h\"", "<acpi/acconfig.h>", REPLACE_WHOLE_WORD}, + {"\"acexcep.h\"", "<acpi/acexcep.h>", REPLACE_WHOLE_WORD}, + {"\"acnames.h\"", "<acpi/acnames.h>", REPLACE_WHOLE_WORD}, + {"\"acoutput.h\"", "<acpi/acoutput.h>", REPLACE_WHOLE_WORD}, + {"\"acrestyp.h\"", "<acpi/acrestyp.h>", REPLACE_WHOLE_WORD}, + {"\"actbl.h\"", "<acpi/actbl.h>", REPLACE_WHOLE_WORD}, + {"\"actbl1.h\"", "<acpi/actbl1.h>", REPLACE_WHOLE_WORD}, + {"\"actbl2.h\"", "<acpi/actbl2.h>", REPLACE_WHOLE_WORD}, + {"\"actbl3.h\"", "<acpi/actbl3.h>", REPLACE_WHOLE_WORD}, + {"\"actypes.h\"", "<acpi/actypes.h>", REPLACE_WHOLE_WORD}, + {"\"platform/acenv.h\"", "<acpi/platform/acenv.h>", REPLACE_WHOLE_WORD}, + {"\"acgcc.h\"", "<acpi/platform/acgcc.h>", REPLACE_WHOLE_WORD}, + {"\"aclinux.h\"", "<acpi/platform/aclinux.h>", REPLACE_WHOLE_WORD}, + + {NULL, NULL, 0} +}; + + +ACPI_IDENTIFIER_TABLE LinuxSpecialMacros[] = { + + {"ACPI_EXPORT_SYMBOL"}, + {"ACPI_EXPORT_SYMBOL_INIT"}, + {"ACPI_HW_DEPENDENT_RETURN_OK"}, + {"ACPI_HW_DEPENDENT_RETURN_STATUS"}, + {"ACPI_HW_DEPENDENT_RETURN_VOID"}, + {NULL} +}; + + ACPI_CONVERSION_TABLE LinuxConversionTable = { DualLicenseHeader, @@ -708,6 +742,7 @@ ACPI_CONVERSION_TABLE LinuxConversionTable = { NULL, LinuxEliminateMacros, AcpiIdentifiers, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_CHECK_BRACES | CVT_TRIM_LINES | CVT_BRACES_ON_SAME_LINE | CVT_MIXED_CASE_TO_UNDERSCORES | CVT_LOWER_CASE_IDENTIFIERS | @@ -721,6 +756,7 @@ ACPI_CONVERSION_TABLE LinuxConversionTable = { LinuxConditionalIdentifiers, NULL, AcpiIdentifiers, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_TRIM_LINES | CVT_MIXED_CASE_TO_UNDERSCORES | CVT_LOWER_CASE_IDENTIFIERS | CVT_TRIM_WHITESPACE | @@ -746,6 +782,7 @@ ACPI_CONVERSION_TABLE CleanupConversionTable = { NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_CHECK_BRACES | CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), @@ -756,6 +793,7 @@ ACPI_CONVERSION_TABLE CleanupConversionTable = { NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), }; @@ -774,6 +812,7 @@ ACPI_CONVERSION_TABLE StatsConversionTable = { NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), @@ -784,6 +823,7 @@ ACPI_CONVERSION_TABLE StatsConversionTable = { NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), }; @@ -808,6 +848,7 @@ ACPI_CONVERSION_TABLE LicenseConversionTable = { NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), @@ -818,6 +859,7 @@ ACPI_CONVERSION_TABLE LicenseConversionTable = { NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_COUNT_SHORTMULTILINE_COMMENTS), }; @@ -897,6 +939,7 @@ ACPI_CONVERSION_TABLE CustomConversionTable = { NULL, NULL, NULL, + NULL, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), @@ -907,6 +950,44 @@ ACPI_CONVERSION_TABLE CustomConversionTable = { NULL, NULL, NULL, + NULL, + (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | + CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), +}; + + +/****************************************************************************** + * + * Indentation result fixup table + * + ******************************************************************************/ + +ACPI_CONVERSION_TABLE IndentConversionTable = { + + NULL, + FLG_NO_CARRIAGE_RETURNS, + + NULL, + + /* C source files */ + + LinuxSpecialStrings, + NULL, + NULL, + NULL, + NULL, + LinuxSpecialMacros, + (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | + CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), + + /* C header files */ + + LinuxSpecialStrings, + NULL, + NULL, + NULL, + NULL, + LinuxSpecialMacros, (CVT_COUNT_TABS | CVT_COUNT_NON_ANSI_COMMENTS | CVT_COUNT_LINES | CVT_TRIM_LINES | CVT_TRIM_WHITESPACE), }; |