author | Laurent Bessard |
Wed, 08 May 2013 21:37:31 +0200 | |
changeset 1096 | c9ace6a881c9 |
parent 1061 | 02f371f3e063 |
child 1097 | 233681f2a00e |
permissions | -rw-r--r-- |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
1 |
import os |
401
8106a853a7c7
Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents:
361
diff
changeset
|
2 |
|
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
3 |
from CFileEditor import CFileEditor |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
4 |
from CodeFileTreeNode import CodeFile |
630
91b2ae63ea3d
Including external tools for editing plugin informations into Beremiz window
laurent
parents:
610
diff
changeset
|
5 |
|
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
6 |
class CFile(CodeFile): |
31 | 7 |
XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
8 |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
|
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
9 |
<xsd:element name="CExtension"> |
31 | 10 |
<xsd:complexType> |
45 | 11 |
<xsd:attribute name="CFLAGS" type="xsd:string" use="required"/> |
12 |
<xsd:attribute name="LDFLAGS" type="xsd:string" use="required"/> |
|
31 | 13 |
</xsd:complexType> |
14 |
</xsd:element> |
|
15 |
</xsd:schema> |
|
16 |
""" |
|
656
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
651
diff
changeset
|
17 |
EditorType = CFileEditor |
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
651
diff
changeset
|
18 |
|
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
742
diff
changeset
|
19 |
def GetIconName(self): |
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
742
diff
changeset
|
20 |
return "Cfile" |
738 | 21 |
|
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
22 |
def CodeFileName(self): |
718 | 23 |
return os.path.join(self.CTNPath(), "cfile.xml") |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
24 |
|
718 | 25 |
def CTNGenerate_C(self, buildpath, locations): |
31 | 26 |
""" |
27 |
Generate C code |
|
717 | 28 |
@param current_location: Tupple containing confnode IEC location : %I0.0.4.5 => (0,0,4,5) |
31 | 29 |
@param locations: List of complete variables locations \ |
30 |
[{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...) |
|
31 |
"NAME" : name of the variable (generally "__IW0_1_2" style) |
|
32 |
"DIR" : direction "Q","I" or "M" |
|
33 |
"SIZE" : size "X", "B", "W", "D", "L" |
|
34 |
"LOC" : tuple of interger for IEC location (0,1,2,...) |
|
35 |
}, ...] |
|
36 |
@return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND |
|
37 |
""" |
|
38 |
current_location = self.GetCurrentLocation() |
|
39 |
# define a unique name for the generated C file |
|
401
8106a853a7c7
Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents:
361
diff
changeset
|
40 |
location_str = "_".join(map(str, current_location)) |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
41 |
|
717 | 42 |
text = "/* Code generated by Beremiz c_ext confnode */\n\n" |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
43 |
text += "#include <stdio.h>" |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
44 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
45 |
# Adding includes |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
46 |
text += "/* User includes */\n" |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
47 |
text += self.CodeFile.includes.gettext() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
48 |
text += "\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
49 |
|
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
50 |
text += '#include "iec_types_all.h"' |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
51 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
52 |
# Adding variables |
718 | 53 |
base_types = self.GetCTRoot().GetBaseTypes() |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
54 |
config = self.GetCTRoot().GetProjectConfigNames()[0] |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
55 |
text += "/* User variables reference */\n" |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
56 |
for variable in self.CodeFile.variables.variable: |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
57 |
var_infos = { |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
58 |
"name": variable.getname(), |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
59 |
"global": "%s__%s" % (config.upper(), |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
60 |
variable.getname().upper()), |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
61 |
"type": "__IEC_%s_t" % variable.gettype()} |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
62 |
text += "extern %(type)s %(global)s;\n" % var_infos |
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
63 |
text += "#define %(name)s %(global)s.value\n" % var_infos |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
64 |
text += "\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
65 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
66 |
# Adding user global variables and routines |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
67 |
text += "/* User internal user variables and routines */\n" |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
68 |
text += self.CodeFile.globals.gettext() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
69 |
|
717 | 70 |
# Adding Beremiz confnode functions |
71 |
text += "/* Beremiz confnode functions */\n" |
|
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
72 |
text += "int __init_%s(int argc,char **argv)\n{\n"%location_str |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
73 |
text += self.CodeFile.initFunction.gettext() |
180
f7dc9acda79e
Various fixes in c_ext, now, located vars are pointed.
etisserant
parents:
146
diff
changeset
|
74 |
text += " return 0;\n" |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
75 |
text += "\n}\n\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
76 |
|
419 | 77 |
text += "void __cleanup_%s(void)\n{\n"%location_str |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
78 |
text += self.CodeFile.cleanUpFunction.gettext() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
79 |
text += "\n}\n\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
80 |
|
419 | 81 |
text += "void __retrieve_%s(void)\n{\n"%location_str |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
82 |
text += self.CodeFile.retrieveFunction.gettext() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
83 |
text += "\n}\n\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
84 |
|
419 | 85 |
text += "void __publish_%s(void)\n{\n"%location_str |
1096
c9ace6a881c9
Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents:
1061
diff
changeset
|
86 |
text += self.CodeFile.publishFunction.gettext() |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
87 |
text += "\n}\n\n" |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
88 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
89 |
Gen_Cfile_path = os.path.join(buildpath, "CFile_%s.c"%location_str) |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
90 |
cfile = open(Gen_Cfile_path,'w') |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
91 |
cfile.write(text) |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
92 |
cfile.close() |
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
93 |
|
718 | 94 |
matiec_flags = '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()) |
145
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
95 |
|
94855f7b08a9
Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents:
137
diff
changeset
|
96 |
return [(Gen_Cfile_path, str(self.CExtension.getCFLAGS() + matiec_flags))],str(self.CExtension.getLDFLAGS()),True |
656
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
651
diff
changeset
|
97 |