Skip to content

Instantly share code, notes, and snippets.

@macmade
Created August 1, 2013 02:32
Show Gist options
  • Select an option

  • Save macmade/6127979 to your computer and use it in GitHub Desktop.

Select an option

Save macmade/6127979 to your computer and use it in GitHub Desktop.
AWK - Generate types header file
BEGIN {
RS = ""
FS = "@XEOS"
TYPE = ""
NAME = ""
DEF = ""
CONTENT = ""
GUARD = ""
}
{
if( match( $0, "@XEOS_" ) )
{
split( $0, LINES, "\n" )
TYPE = substr( LINES[ 1 ], 0, index( LINES[ 1 ], " " ) - 1 )
NAME = substr( LINES[ 1 ], index( LINES[ 1 ], " " ) + 1 )
CONTENT = substr( $0, length( LINES[ 1 ] ) + 2 )
if( substr( CONTENT, length( CONTENT ) - 2 ) == "\n" )
{
CONTENT = substr( CONTENT, length( CONTENT ) - 2 )
}
if( TYPE == "@XEOS_DEFINE" )
{
GUARD = toupper( NAME )
DEF = "#define " NAME " " CONTENT "\n"
}
else if( TYPE == "@XEOS_TYPEDEF" )
{
GUARD = toupper( NAME )
if( index( CONTENT, "\n" ) )
{
DEF = "typedef " CONTENT "\n" NAME ";\n"
}
else
{
DEF = "typedef " CONTENT " " NAME ";\n"
}
}
else if( TYPE == "@XEOS_UNION" )
{
GUARD = "UNION_" toupper( NAME )
DEF = "union " NAME "\n" CONTENT ";\n"
}
else if( TYPE == "@XEOS_STRUCT" )
{
GUARD = "STRUCT_" toupper( NAME )
DEF = "struct " NAME "\n" CONTENT ";\n"
}
printf( "#if defined( __XEOS_NEED_%s ) && !defined( __XEOS_HAS_%s )\n", GUARD, GUARD )
printf( "%s", DEF );
printf( "#define __XEOS_HAS_%s\n", GUARD );
printf( "#endif\n\n" );
}
else
{
printf( "%s\n\n", $0 )
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment