diff --git a/gtk.h b/gtk.h
new file mode 100644
index 0000000..3cbd13f
--- /dev/null
+++ b/gtk.h
@@ -0,0 +1,283 @@
+/* GTK - The GIMP Toolkit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see .
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
+ * file for a list of people on the GTK+ Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#ifndef __GTK_H__
+#define __GTK_H__
+
+#define __GTK_H_INSIDE__
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifndef GTK_DISABLE_DEPRECATED
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#endif /* GTK_DISABLE_DEPRECATED */
+
+#include
+
+#undef __GTK_H_INSIDE__
+
+#endif /* __GTK_H__ */
diff --git a/gtk.inc b/gtk.inc
new file mode 100644
index 0000000..9e5c684
--- /dev/null
+++ b/gtk.inc
@@ -0,0 +1,275 @@
+; GTK - The GIMP Toolkit
+; Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library. If not, see .
+
+;
+; Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
+; file for a list of people on the GTK+ Team. See the ChangeLog
+; files for a list of changes. These files are distributed with
+; GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+
+%ifndef __GTK_H__
+%define __GTK_H__
+%define __GTK_H_INSIDE__
+%include "gdk/gdk.inc"
+%include "gtk/gtkaboutdialog.inc"
+%include "gtk/gtkaccelgroup.inc"
+%include "gtk/gtkaccellabel.inc"
+%include "gtk/gtkaccelmap.inc"
+%include "gtk/gtkaccessible.inc"
+%include "gtk/gtkactionable.inc"
+%include "gtk/gtkactionbar.inc"
+%include "gtk/gtkadjustment.inc"
+%include "gtk/gtkappchooser.inc"
+%include "gtk/gtkappchooserdialog.inc"
+%include "gtk/gtkappchooserwidget.inc"
+%include "gtk/gtkappchooserbutton.inc"
+%include "gtk/gtkapplication.inc"
+%include "gtk/gtkapplicationwindow.inc"
+%include "gtk/gtkaspectframe.inc"
+%include "gtk/gtkassistant.inc"
+%include "gtk/gtkbbox.inc"
+%include "gtk/gtkbin.inc"
+%include "gtk/gtkbindings.inc"
+%include "gtk/gtkborder.inc"
+%include "gtk/gtkbox.inc"
+%include "gtk/gtkbuildable.inc"
+%include "gtk/gtkbuilder.inc"
+%include "gtk/gtkbutton.inc"
+%include "gtk/gtkcalendar.inc"
+%include "gtk/gtkcellarea.inc"
+%include "gtk/gtkcellareabox.inc"
+%include "gtk/gtkcellareacontext.inc"
+%include "gtk/gtkcelleditable.inc"
+%include "gtk/gtkcelllayout.inc"
+%include "gtk/gtkcellrenderer.inc"
+%include "gtk/gtkcellrendereraccel.inc"
+%include "gtk/gtkcellrenderercombo.inc"
+%include "gtk/gtkcellrendererpixbuf.inc"
+%include "gtk/gtkcellrendererprogress.inc"
+%include "gtk/gtkcellrendererspin.inc"
+%include "gtk/gtkcellrendererspinner.inc"
+%include "gtk/gtkcellrenderertext.inc"
+%include "gtk/gtkcellrenderertoggle.inc"
+%include "gtk/gtkcellview.inc"
+%include "gtk/gtkcheckbutton.inc"
+%include "gtk/gtkcheckmenuitem.inc"
+%include "gtk/gtkclipboard.inc"
+%include "gtk/gtkcolorbutton.inc"
+%include "gtk/gtkcolorchooser.inc"
+%include "gtk/gtkcolorchooserdialog.inc"
+%include "gtk/gtkcolorchooserwidget.inc"
+%include "gtk/gtkcolorutils.inc"
+%include "gtk/gtkcombobox.inc"
+%include "gtk/gtkcomboboxtext.inc"
+%include "gtk/gtkcontainer.inc"
+%include "gtk/gtkcssprovider.inc"
+%include "gtk/gtkcsssection.inc"
+%include "gtk/gtkdebug.inc"
+%include "gtk/gtkdialog.inc"
+%include "gtk/gtkdnd.inc"
+%include "gtk/gtkdrawingarea.inc"
+%include "gtk/gtkeditable.inc"
+%include "gtk/gtkentry.inc"
+%include "gtk/gtkentrybuffer.inc"
+%include "gtk/gtkentrycompletion.inc"
+%include "gtk/gtkenums.inc"
+%include "gtk/gtkeventbox.inc"
+%include "gtk/gtkeventcontroller.inc"
+%include "gtk/gtkexpander.inc"
+%include "gtk/gtkfixed.inc"
+%include "gtk/gtkfilechooser.inc"
+%include "gtk/gtkfilechooserbutton.inc"
+%include "gtk/gtkfilechooserdialog.inc"
+%include "gtk/gtkfilechooserwidget.inc"
+%include "gtk/gtkfilefilter.inc"
+%include "gtk/gtkflowbox.inc"
+%include "gtk/gtkfontbutton.inc"
+%include "gtk/gtkfontchooser.inc"
+%include "gtk/gtkfontchooserdialog.inc"
+%include "gtk/gtkfontchooserwidget.inc"
+%include "gtk/gtkframe.inc"
+%include "gtk/gtkgesture.inc"
+%include "gtk/gtkgesturedrag.inc"
+%include "gtk/gtkgesturelongpress.inc"
+%include "gtk/gtkgesturemultipress.inc"
+%include "gtk/gtkgesturepan.inc"
+%include "gtk/gtkgesturerotate.inc"
+%include "gtk/gtkgesturesingle.inc"
+%include "gtk/gtkgestureswipe.inc"
+%include "gtk/gtkgesturezoom.inc"
+%include "gtk/gtkglarea.inc"
+%include "gtk/gtkgrid.inc"
+%include "gtk/gtkheaderbar.inc"
+%include "gtk/gtkicontheme.inc"
+%include "gtk/gtkiconview.inc"
+%include "gtk/gtkimage.inc"
+%include "gtk/gtkimcontext.inc"
+%include "gtk/gtkimcontextinfo.inc"
+%include "gtk/gtkimcontextsimple.inc"
+%include "gtk/gtkimmulticontext.inc"
+%include "gtk/gtkinfobar.inc"
+%include "gtk/gtkinvisible.inc"
+%include "gtk/gtklabel.inc"
+%include "gtk/gtklayout.inc"
+%include "gtk/gtklevelbar.inc"
+%include "gtk/gtklinkbutton.inc"
+%include "gtk/gtklistbox.inc"
+%include "gtk/gtkliststore.inc"
+%include "gtk/gtklockbutton.inc"
+%include "gtk/gtkmain.inc"
+%include "gtk/gtkmenu.inc"
+%include "gtk/gtkmenubar.inc"
+%include "gtk/gtkmenubutton.inc"
+%include "gtk/gtkmenuitem.inc"
+%include "gtk/gtkmenushell.inc"
+%include "gtk/gtkmenutoolbutton.inc"
+%include "gtk/gtkmessagedialog.inc"
+%include "gtk/gtkmodelbutton.inc"
+%include "gtk/gtkmodules.inc"
+%include "gtk/gtkmountoperation.inc"
+%include "gtk/gtknotebook.inc"
+%include "gtk/gtkoffscreenwindow.inc"
+%include "gtk/gtkorientable.inc"
+%include "gtk/gtkoverlay.inc"
+%include "gtk/gtkpagesetup.inc"
+%include "gtk/gtkpapersize.inc"
+%include "gtk/gtkpaned.inc"
+%include "gtk/gtkplacessidebar.inc"
+%include "gtk/gtkpopover.inc"
+%include "gtk/gtkpopovermenu.inc"
+%include "gtk/gtkprintcontext.inc"
+%include "gtk/gtkprintoperation.inc"
+%include "gtk/gtkprintoperationpreview.inc"
+%include "gtk/gtkprintsettings.inc"
+%include "gtk/gtkprogressbar.inc"
+%include "gtk/gtkradiobutton.inc"
+%include "gtk/gtkradiomenuitem.inc"
+%include "gtk/gtkradiotoolbutton.inc"
+%include "gtk/gtkrange.inc"
+%include "gtk/gtkrecentchooser.inc"
+%include "gtk/gtkrecentchooserdialog.inc"
+%include "gtk/gtkrecentchoosermenu.inc"
+%include "gtk/gtkrecentchooserwidget.inc"
+%include "gtk/gtkrecentfilter.inc"
+%include "gtk/gtkrecentmanager.inc"
+%include "gtk/gtkrender.inc"
+%include "gtk/gtkrevealer.inc"
+%include "gtk/gtkscale.inc"
+%include "gtk/gtkscalebutton.inc"
+%include "gtk/gtkscrollable.inc"
+%include "gtk/gtkscrollbar.inc"
+%include "gtk/gtkscrolledwindow.inc"
+%include "gtk/gtksearchbar.inc"
+%include "gtk/gtksearchentry.inc"
+%include "gtk/gtkselection.inc"
+%include "gtk/gtkseparator.inc"
+%include "gtk/gtkseparatormenuitem.inc"
+%include "gtk/gtkseparatortoolitem.inc"
+%include "gtk/gtksettings.inc"
+%include "gtk/gtkshow.inc"
+%include "gtk/gtkstacksidebar.inc"
+%include "gtk/gtksizegroup.inc"
+%include "gtk/gtksizerequest.inc"
+%include "gtk/gtkspinbutton.inc"
+%include "gtk/gtkspinner.inc"
+%include "gtk/gtkstack.inc"
+%include "gtk/gtkstackswitcher.inc"
+%include "gtk/gtkstatusbar.inc"
+%include "gtk/gtkstylecontext.inc"
+%include "gtk/gtkstyleprovider.inc"
+%include "gtk/gtkswitch.inc"
+%include "gtk/gtktextattributes.inc"
+%include "gtk/gtktextbuffer.inc"
+%include "gtk/gtktextbufferrichtext.inc"
+%include "gtk/gtktextchild.inc"
+%include "gtk/gtktextiter.inc"
+%include "gtk/gtktextmark.inc"
+%include "gtk/gtktexttag.inc"
+%include "gtk/gtktexttagtable.inc"
+%include "gtk/gtktextview.inc"
+%include "gtk/gtktogglebutton.inc"
+%include "gtk/gtktoggletoolbutton.inc"
+%include "gtk/gtktoolbar.inc"
+%include "gtk/gtktoolbutton.inc"
+%include "gtk/gtktoolitem.inc"
+%include "gtk/gtktoolitemgroup.inc"
+%include "gtk/gtktoolpalette.inc"
+%include "gtk/gtktoolshell.inc"
+%include "gtk/gtktooltip.inc"
+%include "gtk/gtktestutils.inc"
+%include "gtk/gtktreednd.inc"
+%include "gtk/gtktreemodel.inc"
+%include "gtk/gtktreemodelfilter.inc"
+%include "gtk/gtktreemodelsort.inc"
+%include "gtk/gtktreeselection.inc"
+%include "gtk/gtktreesortable.inc"
+%include "gtk/gtktreestore.inc"
+%include "gtk/gtktreeview.inc"
+%include "gtk/gtktreeviewcolumn.inc"
+%include "gtk/gtktypebuiltins.inc"
+%include "gtk/gtktypes.inc"
+%include "gtk/gtkversion.inc"
+%include "gtk/gtkviewport.inc"
+%include "gtk/gtkvolumebutton.inc"
+%include "gtk/gtkwidget.inc"
+%include "gtk/gtkwidgetpath.inc"
+%include "gtk/gtkwindow.inc"
+%include "gtk/gtkwindowgroup.inc"
+%ifndef GTK_DISABLE_DEPRECATED
+%include "gtk/deprecated/gtkarrow.inc"
+%include "gtk/deprecated/gtkactivatable.inc"
+%include "gtk/deprecated/gtkaction.inc"
+%include "gtk/deprecated/gtkactiongroup.inc"
+%include "gtk/deprecated/gtkalignment.inc"
+%include "gtk/deprecated/gtkcolorsel.inc"
+%include "gtk/deprecated/gtkcolorseldialog.inc"
+%include "gtk/deprecated/gtkfontsel.inc"
+%include "gtk/deprecated/gtkgradient.inc"
+%include "gtk/deprecated/gtkhandlebox.inc"
+%include "gtk/deprecated/gtkhbbox.inc"
+%include "gtk/deprecated/gtkhbox.inc"
+%include "gtk/deprecated/gtkhpaned.inc"
+%include "gtk/deprecated/gtkhsv.inc"
+%include "gtk/deprecated/gtkhscale.inc"
+%include "gtk/deprecated/gtkhscrollbar.inc"
+%include "gtk/deprecated/gtkhseparator.inc"
+%include "gtk/deprecated/gtkiconfactory.inc"
+%include "gtk/deprecated/gtkimagemenuitem.inc"
+%include "gtk/deprecated/gtkmisc.inc"
+%include "gtk/deprecated/gtknumerableicon.inc"
+%include "gtk/deprecated/gtkradioaction.inc"
+%include "gtk/deprecated/gtkrc.inc"
+%include "gtk/deprecated/gtkrecentaction.inc"
+%include "gtk/deprecated/gtkstatusicon.inc"
+%include "gtk/deprecated/gtkstock.inc"
+%include "gtk/deprecated/gtkstyle.inc"
+%include "gtk/deprecated/gtkstyleproperties.inc"
+%include "gtk/deprecated/gtksymboliccolor.inc"
+%include "gtk/deprecated/gtktable.inc"
+%include "gtk/deprecated/gtktearoffmenuitem.inc"
+%include "gtk/deprecated/gtkthemingengine.inc"
+%include "gtk/deprecated/gtktoggleaction.inc"
+%include "gtk/deprecated/gtkuimanager.inc"
+%include "gtk/deprecated/gtkvbbox.inc"
+%include "gtk/deprecated/gtkvbox.inc"
+%include "gtk/deprecated/gtkvpaned.inc"
+%include "gtk/deprecated/gtkvscale.inc"
+%include "gtk/deprecated/gtkvscrollbar.inc"
+%include "gtk/deprecated/gtkvseparator.inc"
+%endif ; GTK_DISABLE_DEPRECATED
+%include "gtk/gtk-autocleanups.inc"
+%undef __GTK_H_INSIDE__
+%endif ; __GTK_H__
diff --git a/h2inc.py b/h2inc.py
index 352ff89..bf7d7c0 100644
--- a/h2inc.py
+++ b/h2inc.py
@@ -1,15 +1,18 @@
+"""Script for translating C-header files into nasm syntax include files"""
import os
+import errno
+from parser import PARSER
class H2INC:
def __init__(self):
self.filelist = []
self.folderlist = []
- self.sourcedir = "/usr/src"
- self.destdir = "~/include"
+ self.sourcedir = "/usr/include"
+ self.destdir = "/data/include"
self.filecnt = 0
self.foldercnt = 0
- def srcfilecnt(self.sourcedir):
+ def srcfilecnt(self, sourcedir):
### Return the number of files, ending with '.h', in sourcedir - including subdirectories ###
for folderName, subfolders, files in os.walk(self.sourcedir):
for file in files:
@@ -21,12 +24,12 @@ class H2INC:
else:
return False
- def srcfoldercnt(self.sourcedir):
+ def srcfoldercnt(self, src):
### Return the number of folders, if it contains '*.h' files, in sourcedir - including subdirectories ###
- for folderName, subfolders, files in os.walk(self.sourcedir):
+ for folderName, subfolders, files in os.walk(src):
if subfolders:
for subfolder in subfolders:
- sourcedir_foldercnt(subfolder)
+ self.srcfoldercnt(subfolder)
tempf = [file for file in files if file.lower().endswith('.h')]
if tempf:
self.foldercnt = self.foldercnt+1
@@ -36,9 +39,13 @@ class H2INC:
else:
return False
- def read_file(fn):
+ def read_file(self, fn):
+ parse = PARSER()
outfile = ''
inputfile = fn
+ passes = 0
+ tempfile = []
+ templine = []
encodings = ['utf-8', 'latin-1', 'windows-1250', 'windows-1252', 'ascii',
'big5', 'big5hkscs', 'cp037', 'cp273', 'cp424', 'cp437', 'cp500',
'cp720', 'cp737', 'cp775', 'cp850', 'cp852', 'cp855', 'cp856',
@@ -57,23 +64,30 @@ class H2INC:
'utf-32-le', 'utf-16', 'utf-16-be', 'utf-16-le', 'utf-7', 'utf-8-sig']
for e in encodings:
try:
- fh = io.open(fn, 'r', encoding=e)
+ fh = open(fn, 'r', encoding=e)
fh.readlines()
fh.seek(0)
except UnicodeDecodeError:
print('got unicode error with %s , trying different encoding' % e)
else:
- #print('opening the file with encoding: %s ' % e)
break
- #print(os.path.basename(data))
+ self.tupfile = []
for lines in fh:
- outfile = outfile+lines
+ self.tupfile.append(lines)
fh.close()
+ resultfile = parse.parseheader(self.tupfile)
+ print(resultfile)
+ for l in resultfile:
+ for w in l:
+ outfile += w+" "
+ outfile += "\n"
outputfile = os.path.splitext(inputfile)[0]+'.inc'
- outputfile = str(outputfile).replace(sourcedir, destdir)
- write_file(outputfile,outfile)
+ outputfile = str(outputfile).replace(self.sourcedir, self.destdir)
+ print(outputfile)
+ print(os.path.dirname(outputfile))
+ self.write_file(outputfile,outfile)
- def write_file(fn, data):
+ def write_file(self, fn, data):
if not os.path.exists(os.path.dirname(fn)):
try:
os.makedirs(os.path.dirname(fn))
@@ -83,4 +97,16 @@ class H2INC:
newfile = open(fn, "w")
newfile.write(data)
newfile.close()
-
+
+
+if __name__ == "__main__":
+ app = H2INC()
+ if app.srcfilecnt(app.sourcedir) == True:
+ print(app.filecnt)
+ #print(app.filelist)
+ if app.srcfoldercnt(app.sourcedir) == True:
+ print(app.foldercnt)
+ #print(app.folderlist)
+ #for f in app.filelist:
+ #app.read_file(f)
+ app.read_file("./gtk.h") #testfile for comments and header includes
\ No newline at end of file
diff --git a/parser.py b/parser.py
new file mode 100644
index 0000000..b258936
--- /dev/null
+++ b/parser.py
@@ -0,0 +1,159 @@
+"""Contains class PARSER"""
+from itertools import count
+
+#Element type definitions. Used in the parse process.
+ELEMENT_TYPE_PREPROCESS = 1
+ELEMENT_TYPE_REGULAR = 2
+
+TOKENS = ['TOKEN_CSTART','TOKEN_CMID','TOKEN_CEND','TOKEN_RPAREN',
+ 'TOKEN_LPAREN','TOKEN_ENDLINE','TOKEN_RETVAL','TOKEN_PREPROCESS',
+ 'TOKEN_ID','TOKEN_PLUS','TOKEN_MINUS','TOKEN_DIV','TOKEN_MULT',
+ 'TOKEN_ASSIGN','TOKEN_EQUAL','TOKEN_LBRACE','TOKEN_RBRACE',
+ 'TOKEN_COMMA','TOKEN_SEMICOLON','TOKEN_LANGLE','TOKEN_RANGLE','TOKEN_POINTER']
+
+RESERVED = {'auto' : 'AUTO','break' : 'BREAK','case' : 'CASE','char' : 'CHAR',
+ 'const' : 'CONST','continue' : 'CONTINUE','default' : 'DEFAULT','do' : 'DO',
+ 'int' : 'INT','long' : 'LONG','register' : 'REGISTER','return' : 'RETURN',
+ 'short' : 'SHORT','signed' : 'SIGNED','sizeof' : 'SIZEOF','static' : 'STATIC',
+ 'struct' : 'STRUCT','switch' : 'SWITCH','typedef' : 'TYPEDEF','union' : 'UNION',
+ 'unsigned' : 'UNSIGNED','void' : 'VOID','volatile' : 'VOLATILE','while' : 'WHILE',
+ 'double' : 'DOUBLE','else' : 'ELSE','enum' : 'ENUM','extern' : 'EXTERN',
+ 'float' : 'FLOAT','for' : 'FOR','goto' : 'GOTO','if' : 'IF'}
+
+PREPROCESSOR_DIRECTIVES = {'#include' : 'TOKEN_PREPROCESS','#define' : 'TOKEN_PREPROCESS','#undef' : 'TOKEN_PREPROCESS',
+ '#if' : 'TOKEN_PREPROCESS','#ifdef' : 'TOKEN_PREPROCESS','#ifndef' : 'TOKEN_PREPROCESS','#error' : 'TOKEN_PREPROCESS',
+ '__FILE__' : 'TOKEN_PREPROCESS','__LINE__' : 'TOKEN_PREPROCESS','__DATE__' : 'TOKEN_PREPROCESS',
+ '__TIME__' : 'TOKEN_PREPROCESS','__TIMESTAMP__' : 'TOKEN_PREPROCESS','pragma' : 'TOKEN_PREPROCESS',
+ '#' : 'TOKEN_PREPROCESS','##' : 'TOKEN_PREPROCESS','#endif' : 'TOKEN_PREPROCESS'}
+
+REGULAR = {'/*' : 'TOKEN_CSTART','*/' : 'TOKEN_CEND', '*' : 'TOKEN_CMID', '=' : 'TOKEN_ASSIGN','==' : 'TOKEN_EQUAL',
+ '{' : 'TOKEN_LBRACE','}' : 'TOKEN_RBRACE','\+' : 'TOKEN_PLUS','-' : 'TOKEN_MINUS',
+ '\*' : 'TOKEN_MULT','/' : 'TOKEN_DIV','\(' : 'TOKEN_LPAREN','\)' : 'TOKEN_RPAREN',
+ ',' : 'TOKEN_COMMA',';' : 'TOKEN_SEMICOLON','\<' : 'TOKEN_LANGLE','\>' : 'TOKEN_RANGLE'}
+
+NASM_PREPROCESS_DIRECTIVES = {'#include' : '%include','#define' : '%define','#undef' : '%undef',
+ '#if' : '%if','#ifdef' : '%ifdef','#ifndef' : '%ifndef','#endif' : '%endif',
+ '#error' : '%error','__FILE__' : '__FILE__','__LINE__' : '__LINE__',
+ '__DATE__' : '__DATE__','__TIME__' : '__TIME__','__TIMESTAMP__' : '__TIMESTAMP__',
+ 'pragma' : 'pragma','#' : '#','##' : '##'}
+
+NASM_REGULAR = {'/*' : ';', '*' : ';', '*/' : ''}
+
+TOKENS += RESERVED.values()
+
+COMMENT_SINGLE_LINE = 0
+COMMENT_MULTI_LINE = 1
+
+class PARSEOBJECT:
+ _passes = count(0)
+
+ def __init__(self):
+ self.parseline = []
+ self.parsefile = []
+ self.passes = 0
+
+ def parse_reset(self):
+ self.parseline = []
+ self.parsefile = []
+ self._passes = count(0)
+ self.inside_comment = False
+
+ def inc_passes(self):
+ self.passes = next(self._passes)
+
+ def parseheader(self, fl):
+ tempfile = []
+ self.parse_reset()
+ for l in fl:
+ analyzed_line = self.analyzer(l)
+ tempfile.append(analyzed_line)
+ self.inc_passes()
+ self.parsefile = self.parsetokens(tempfile)
+ return self.parsefile
+
+ def parseinclude(self, data):
+ tempstr = str(data)
+ if tempstr.startswith('<'):
+ tempstr = tempstr.replace('<', '"')
+ tempstr = tempstr.replace('.h>', '.inc"')
+ if tempstr.endswith('.h'):
+ tempstr = '"'+tempstr
+ tempstr = tempstr.replace('.h', '.inc"')
+ return tempstr
+
+ def tokenizer(self, w):
+ token = ""
+ if w in PREPROCESSOR_DIRECTIVES:
+ token = PREPROCESSOR_DIRECTIVES.get(w)
+ return token
+ if w in REGULAR:
+ token = REGULAR.get(w)
+ return token
+ return False
+
+ def analyzer(self, ln):
+ analysed = []
+ word = [w for w in ln.split()]
+ for w in word:
+ t = self.tokenizer(w)
+ if t == False:
+ analysed.append(w)
+ continue
+ else:
+ analysed.append(t)
+ analysed.append(w)
+ return analysed
+
+ def parsetokens(self, fl):
+ templine = []
+ tempfile = []
+ for l in fl:
+ if len(l) == 0:
+ templine.append("\n")
+ continue
+ if l[0] == "TOKEN_CSTART" or l[0] == "TOKEN_CMID" or l[0] == "TOKEN_CEND":
+ self.inside_comment = True
+ tempfile.append(self.parse_comment(l))
+ continue
+ if l[0] == "TOKEN_PREPROCESS":
+ tempfile.append(self.parse_preprocess(l))
+ return tempfile
+
+ def parse_comment(self, l):
+ templine = []
+ for w in l:
+ if w in TOKENS:
+ continue
+ if w in NASM_REGULAR:
+ templine.append(NASM_REGULAR.get(w))
+ continue
+ templine.append(w)
+ return templine
+
+ def parse_preprocess(self, l):
+ newline = []
+ for w in l:
+ if w in TOKENS:
+ continue
+ if w in PREPROCESSOR_DIRECTIVES:
+ newline.append(NASM_PREPROCESS_DIRECTIVES.get(w))
+ continue
+ if w.startswith("<"):
+ newline.append(self.parseinclude(w))
+ continue
+ if w in NASM_REGULAR:
+ newline.append(NASM_REGULAR.get(w))
+ continue
+ newline.append(w)
+ return newline
+
+
+class PARSER(PARSEOBJECT):
+ _ids = count(0)
+ _passes = count(0)
+
+ def __init__(self):
+ self.id = next(self._ids)
+ self.tupline = []
+ self.tupfile = []
+ self.passes = next(self._passes)
\ No newline at end of file