summaryrefslogtreecommitdiff
path: root/libopie2/tools
Side-by-side diff
Diffstat (limited to 'libopie2/tools') (more/less context) (show whitespace changes)
-rwxr-xr-xlibopie2/tools/regen.py198
1 files changed, 187 insertions, 11 deletions
diff --git a/libopie2/tools/regen.py b/libopie2/tools/regen.py
index 3779896..89385e1 100755
--- a/libopie2/tools/regen.py
+++ b/libopie2/tools/regen.py
@@ -1,31 +1,36 @@
#!/usr/bin/env python
-#
-# regenerate ioctl_table.h
-#
+"""Regenerate C++ mapping classes"""
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+def regenDebugMapper( basename ):
+ """
+ Debug Mapper - maps ioctl numbers to names, e.g. 0x4x5a -> SIOCGIWNAME
+ """
-import sys
-import os
result = os.popen( 'find /usr/include -name "*.h" |xargs grep -h SIOC|grep 0x' ).readlines()
try:
- tablehfile = file( sys.argv[1]+".h", "w" )
+ tablehfile = file( basename+".h", "w" )
except:
tablehfile = sys.stdout
try:
- tablecfile = file( sys.argv[1]+".cpp", "w" )
+ tablecfile = file( basename+".cpp", "w" )
except:
tablecfile = sys.stdout
print >>tablehfile,"""
/*
- * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
+ * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
*/
#ifndef DEBUGMAPPER_H
#define DEBUGMAPPER_H
#include <qstring.h>
#include <qintdict.h>
@@ -38,32 +43,32 @@ class DebugMapper
~DebugMapper();
const QString& map( int value ) const;
private:
IntStringMap _map;
};
#endif
-"""
+""" % sys.argv[0]
print >>tablecfile,"""
/*
- * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
+ * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
*/
#include <opie2/odebug.h>
#include "%s"
DebugMapper::DebugMapper()
{
odebug << "DebugMapper::DebugMapper()" << oendl;
-""" % (tablehfile.name)
+""" % ( sys.argv[0], tablehfile.name )
for line in result:
l = line.split()
if not l[0].startswith( "#define" ) or not l[2].startswith( "0x" ):
print >>sys.stderr, "can't parse line: %s" % l
continue
print >>tablecfile, " _map.insert( %s, new QString(\"%s\") );" % ( l[2], l[1] )
@@ -89,8 +94,179 @@ const QString& DebugMapper::map( int value ) const
}
else
{
return *result;
}
}
"""
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+def regenManufacturerDB( basename ):
+
+ try:
+ h = file( basename+".h", "w" )
+ except:
+ h = sys.stdout
+
+ try:
+ cpp = file( basename+".cpp", "w" )
+ except:
+ cpp = sys.stdout
+
+ print >>h,"""
+#ifndef OMANUFACTURERDB_H
+#define OMANUFACTURERDB_H
+
+#include <qmap.h>
+
+/**
+ * @brief A Ethernet card vendor database.
+ *
+ * This class encapsulates the lookup of Ethernet vendor given a
+ * certain Mac Address. Only the first three bytes define the vendor.
+ */
+class OManufacturerDB
+{
+ public:
+ /**
+ * @returns the one-and-only @ref OManufacturerDB instance.
+ */
+ static OManufacturerDB* instance();
+ /**
+ * @returns the short manufacturer string given a @a macaddr.
+ */
+ const QString& lookup( const QString& macaddr ) const;
+ /**
+ * @returns the enhanced manufacturer string given a @a macaddr.
+ */
+ const QString& lookupExt( const QString& macaddr ) const;
+
+ protected:
+ OManufacturerDB();
+ virtual ~OManufacturerDB();
+
+ private:
+ QMap<QString, QString> manufacturers;
+ QMap<QString, QString> manufacturersExt;
+ static OManufacturerDB* _instance;
+};
+
+#endif
+"""
+
+ print >>cpp,"""
+#include "%s.h"
+
+/* OPIE CORE */
+#include <opie2/odebug.h>
+
+/* QT */
+#include <qapplication.h>
+#include <qstring.h>
+
+#define OPIE_IMPROVE_GUI_LATENCY 1
+
+OManufacturerDB* OManufacturerDB::_instance = 0;
+
+OManufacturerDB* OManufacturerDB::instance()
+{
+ if ( !OManufacturerDB::_instance )
+ {
+ odebug << "OManufacturerDB::instance(): creating OManufacturerDB..." << oendl;
+ _instance = new OManufacturerDB();
+ }
+ return _instance;
+}
+
+
+OManufacturerDB::OManufacturerDB()
+{
+""" % basename
+
+ count = 0
+ for line in sys.stdin:
+ if line[0] == "#": # skip comments
+ continue
+ #print line.strip()
+ entries = line.strip().split()
+ #print "number of entries =", len( entries )
+ #print entries
+ if len( entries ) < 2:
+ continue
+ elif len( entries ) == 2:
+ count += 1
+ print "2-line detected."
+ print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] )
+ print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], entries[1] )
+ elif len( entries ) > 2:
+ count += 1
+ print "3-line detected."
+ print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] )
+ print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], "_".join( entries[3:] ) )
+ else:
+ assert( false )
+ if not (count % 1000):
+ print >>cpp,"""
+#ifdef OPIE_IMPROVE_GUI_LATENCY
+ if (qApp) qApp->processEvents();
+#endif
+"""
+ print "successfully parsed", count, "manufacturer lines"
+ print >>cpp,"""
+}
+
+
+OManufacturerDB::~OManufacturerDB()
+{
+}
+
+
+const QString& OManufacturerDB::lookup( const QString& macaddr ) const
+{
+ return manufacturers[macaddr.upper().left(8)];
+}
+
+
+const QString& OManufacturerDB::lookupExt( const QString& macaddr ) const
+{
+ QMap<QString,QString>::ConstIterator it = manufacturersExt.find( macaddr.upper().left(8) );
+ return it == manufacturersExt.end() ? lookup( macaddr ) : *it;
+}
+"""
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+import sys
+import os
+import copy
+
+if __name__ == "__main__":
+ if len( sys.argv ) != 3:
+ print """
+Usage: %s <table> <basename>
+
+Available tables: %s
+""" % ( sys.argv[0], [ str(k)[5:] for k in copy.copy( locals() ) if k.startswith( "regen" ) ] )
+ sys.exit( -1 )
+
+ try:
+ func = locals()["regen%s" % sys.argv[1]]
+ except KeyError:
+ print "Table '%s' unknown." % sys.argv[1]
+ sys.exit( -1 )
+ else:
+ func( sys.argv[2] )
+ sys.exit( 0 ) \ No newline at end of file