Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mbe-tools
TTool
Commits
25321e5f
Commit
25321e5f
authored
Jul 31, 2017
by
Dominique Blouin
Browse files
Issue
#4
: Various issues in HTML trace generation.
parent
12aebd8d
Changes
8
Hide whitespace changes
Inline
Side-by-side
simulators/c++2/.cproject
View file @
25321e5f
...
...
@@ -30,6 +30,7 @@
</option>
<option
id=
"gnu.cpp.compiler.option.optimization.level.465894187"
name=
"Optimization Level"
superClass=
"gnu.cpp.compiler.option.optimization.level"
value=
"gnu.cpp.compiler.optimization.level.none"
valueType=
"enumerated"
/>
<option
id=
"gnu.cpp.compiler.option.debugging.level.1015870594"
name=
"Debug Level"
superClass=
"gnu.cpp.compiler.option.debugging.level"
value=
"gnu.cpp.compiler.debugging.level.max"
valueType=
"enumerated"
/>
<option
id=
"gnu.cpp.compiler.option.dialect.std.261412162"
name=
"Language standard"
superClass=
"gnu.cpp.compiler.option.dialect.std"
value=
"gnu.cpp.compiler.dialect.default"
valueType=
"enumerated"
/>
<inputType
id=
"cdt.managedbuild.tool.gnu.cpp.compiler.input.466144189"
superClass=
"cdt.managedbuild.tool.gnu.cpp.compiler.input"
/>
</tool>
<tool
id=
"cdt.managedbuild.tool.gnu.c.compiler.base.1668138132"
name=
"GCC C Compiler"
superClass=
"cdt.managedbuild.tool.gnu.c.compiler.base"
>
...
...
simulators/c++2/launch_configurations/c++2 Debug.launch
View file @
25321e5f
...
...
@@ -18,12 +18,12 @@
<stringAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_START_MODE"
value=
"run"
/>
<booleanAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN"
value=
"false"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL"
value=
"main"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROGRAM_ARGUMENTS"
value=
"-ohtml
/home/dblouin/temp/vcddump
.html"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROGRAM_ARGUMENTS"
value=
"-ohtml
../simulators/c++2/issue_4_after
.html"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROGRAM_NAME"
value=
"Debug/c++2"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROJECT_ATTR"
value=
"c++2"
/>
<booleanAttribute
key=
"org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR"
value=
"false"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR"
value=
"cdt.managedbuild.config.gnu.cygwin.exe.debug.999163173"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.WORKING_DIRECTORY"
value=
"${workspace_loc:
bin
}"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.WORKING_DIRECTORY"
value=
"${workspace_loc:
libs
}"
/>
<listAttribute
key=
"org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"
>
<listEntry
value=
"/c++2"
/>
</listAttribute>
...
...
simulators/c++2/launch_configurations/c++2 TTool.launch
View file @
25321e5f
...
...
@@ -14,9 +14,11 @@
<intAttribute
key=
"org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR"
value=
"2"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.COREFILE_PATH"
value=
""
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_ID"
value=
"gdb"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS"
value=
""
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_START_MODE"
value=
"run"
/>
<booleanAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN"
value=
"true"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL"
value=
"main"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROGRAM_ARGUMENTS"
value=
"-ohtml /home/dblouin/temp/vcddump"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROGRAM_NAME"
value=
"run.x"
/>
<stringAttribute
key=
"org.eclipse.cdt.launch.PROJECT_ATTR"
value=
"c++2"
/>
<booleanAttribute
key=
"org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR"
value=
"false"
/>
...
...
@@ -27,5 +29,6 @@
<listAttribute
key=
"org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"
>
<listEntry
value=
"4"
/>
</listAttribute>
<stringAttribute
key=
"org.eclipse.dsf.launch.MEMORY_BLOCKS"
value=
"<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList context="reserved-for-future-use"/> "
/>
<stringAttribute
key=
"process_factory_id"
value=
"org.eclipse.cdt.dsf.gdb.GdbProcessFactory"
/>
</launchConfiguration>
simulators/c++2/src_simulator/arch/Bus.cpp
View file @
25321e5f
...
...
@@ -146,34 +146,62 @@ std::string Bus::toShortString() const{
//Writes a HTML representation of the schedule to an output file
void
Bus
::
schedule2HTML
(
std
::
ofstream
&
myfile
)
const
{
TMLTime
aCurrTime
=
0
;
TMLTime
aCurrTime
=
0
;
TMLTransaction
*
aCurrTrans
;
unsigned
int
aBlanks
,
aLength
,
aColor
;
if
(
_transactList
.
empty
())
return
;
if
(
_transactList
.
empty
(
))
{
return
;
}
myfile
<<
"<h2><span>Scheduling for device: "
<<
_name
<<
"</span></h2>
\n
<table>
\n
<tr>"
;
for
(
TransactionList
::
const_iterator
i
=
_transactList
.
begin
();
i
!=
_transactList
.
end
();
++
i
){
aCurrTrans
=
*
i
;
aCurrTrans
=
*
i
;
//if (aCurrTrans->getVirtualLength()==0) continue;
aBlanks
=
aCurrTrans
->
getStartTimeOperation
()
-
aCurrTime
;
if
(
aBlanks
>
0
){
if
(
aBlanks
==
1
)
myfile
<<
"<td title=
\"
idle time
\"
class=
\"
not
\"
></td>
\n
"
;
else
myfile
<<
"<td colspan=
\"
"
<<
aBlanks
<<
"
\"
title=
\"
idle time
\"
class=
\"
not
\"
></td>
\n
"
;
aBlanks
=
aCurrTrans
->
getStartTimeOperation
()
-
aCurrTime
;
if
(
aBlanks
>
0
)
{
writeColums
(
myfile
,
aBlanks
,
"not"
,
"idle time"
);
// if (aBlanks==1)
// myfile << "<td title=\"idle time\" class=\"not\"></td>\n";
// else
// myfile << "<td colspan=\""<< aBlanks <<"\" title=\"idle time\" class=\"not\"></td>\n";
}
aLength
=
aCurrTrans
->
getOperationLength
();
//aColor=(((unsigned int)(aCurrTrans->getCommand()->getTask())) & 15)+1;
aColor
=
aCurrTrans
->
getCommand
()
->
getTask
()
->
getInstanceNo
()
&
15
;
if
(
aLength
==
1
)
myfile
<<
"<td title=
\"
"
<<
aCurrTrans
->
toShortString
()
<<
"
\"
class=
\"
t"
<<
aColor
<<
"
\"
></td>
\n
"
;
else
myfile
<<
"<td colspan=
\"
"
<<
aLength
<<
"
\"
title=
\"
"
<<
aCurrTrans
->
toShortString
()
<<
"
\"
class=
\"
t"
<<
aColor
<<
"
\"
></td>
\n
"
;
aCurrTime
=
aCurrTrans
->
getEndTime
();
aLength
=
aCurrTrans
->
getOperationLength
();
unsigned
int
instNumber
=
aCurrTrans
->
getCommand
()
->
getTask
()
->
getInstanceNo
()
-
1
;
aColor
=
instNumber
%
NB_HTML_COLORS
;
std
::
ostringstream
cellClass
;
cellClass
<<
"t"
<<
aColor
;
writeColums
(
myfile
,
aLength
,
cellClass
.
str
(),
aCurrTrans
->
toShortString
()
);
//
// if ( aLength==1 ) {
// myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n";
// }
// else {
// myfile << "<td colspan=\"" << aLength << "\" title=\"" << aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n";
// }
aCurrTime
=
aCurrTrans
->
getEndTime
();
}
myfile
<<
"</tr>
\n
<tr>"
;
for
(
aLength
=
0
;
aLength
<
aCurrTime
;
aLength
++
)
myfile
<<
"<th></th>"
;
for
(
aLength
=
0
;
aLength
<
aCurrTime
;
aLength
++
)
{
myfile
<<
"<th></th>"
;
}
myfile
<<
"</tr>
\n
<tr>"
;
for
(
aLength
=
0
;
aLength
<
aCurrTime
;
aLength
+=
5
)
myfile
<<
"<td colspan=
\"
5
\"
class=
\"
sc
\"
>"
<<
aLength
<<
"</td>"
;
for
(
aLength
=
0
;
aLength
<=
aCurrTime
;
aLength
+=
5
)
{
std
::
ostringstream
spanVal
;
spanVal
<<
aLength
;
writeColums
(
myfile
,
5
,
"sc"
,
""
,
spanVal
.
str
(),
false
);
// myfile << "<td colspan=\"5\" class=\"sc\">" << aLength << "</td>";
}
myfile
<<
"</tr>
\n
</table>
\n
"
;
}
...
...
simulators/c++2/src_simulator/arch/SchedulableDevice.h
View file @
25321e5f
...
...
@@ -205,6 +205,83 @@ protected:
unsigned
int
_dynamic_consumPerCycle
;
static
TMLTime
_overallTransNo
;
static
TMLTime
_overallTransSize
;
// Issue #4: Some browsers (like Firefox) do not support column spans of more than 1000 columns
void
writeColums
(
std
::
ofstream
&
myfile
,
const
unsigned
int
colSpan
,
const
std
::
string
cellClass
)
const
{
writeColums
(
myfile
,
colSpan
,
cellClass
,
""
);
}
void
writeColums
(
std
::
ofstream
&
myfile
,
const
unsigned
int
colSpan
,
const
std
::
string
cellClass
,
const
std
::
string
title
)
const
{
writeColums
(
myfile
,
colSpan
,
cellClass
,
title
,
""
,
true
);
}
void
writeColums
(
std
::
ofstream
&
myfile
,
const
unsigned
int
colSpan
,
const
std
::
string
cellClass
,
const
std
::
string
title
,
const
std
::
string
content
,
const
bool
endline
)
const
{
std
::
string
begLine
(
START_TD
);
if
(
!
title
.
empty
()
)
{
begLine
.
append
(
" title=
\"
"
);
begLine
.
append
(
title
);
begLine
.
append
(
"
\"
"
);
}
begLine
.
append
(
" class=
\"
"
);
if
(
colSpan
==
1
)
{
begLine
.
append
(
cellClass
);
begLine
.
append
(
"
\"
"
);
myfile
<<
begLine
<<
">"
<<
END_TD
;
if
(
endline
)
{
myfile
<<
std
::
endl
;
}
}
else
{
int
actualLength
=
colSpan
;
bool
first
=
true
;
bool
last
=
false
;
do
{
last
=
actualLength
<=
MAX_COL_SPAN
;
std
::
string
clasVal
(
cellClass
);
if
(
first
&&
!
last
)
{
clasVal
.
append
(
"first"
);
first
=
false
;
}
else
if
(
last
&&
!
first
)
{
clasVal
.
append
(
"last"
);
}
else
if
(
!
last
&&
!
first
)
{
clasVal
.
append
(
"mid"
);
}
clasVal
.
append
(
"
\"
"
);
std
::
string
colSpan
(
" colspan=
\"
"
);
std
::
ostringstream
spanVal
;
spanVal
<<
std
::
min
(
MAX_COL_SPAN
,
actualLength
)
<<
"
\"
"
;
colSpan
.
append
(
spanVal
.
str
()
);
myfile
<<
begLine
<<
clasVal
<<
colSpan
<<
">"
<<
content
<<
END_TD
;
if
(
last
&&
endline
)
{
myfile
<<
std
::
endl
;
}
actualLength
-=
MAX_COL_SPAN
;
}
while
(
!
last
);
}
}
};
#endif
simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp
View file @
25321e5f
...
...
@@ -335,48 +335,79 @@ void SingleCoreCPU::schedule2HTML(std::ofstream& myfile) const{
//if (_transactList.empty()) return;
//std::cout << "0. size: " << _transactList.size() << '\n';
myfile
<<
"<h2><span>Scheduling for device: "
<<
_name
<<
"</span></h2>
\n
<table>
\n
<tr>"
;
for
(
TransactionList
::
const_iterator
i
=
_transactList
.
begin
();
i
!=
_transactList
.
end
();
++
i
){
aCurrTrans
=*
i
;
//if (aCurrTrans->getVirtualLength()==0) continue;
aBlanks
=
aCurrTrans
->
getStartTime
()
-
aCurrTime
;
if
(
aBlanks
>
0
){
if
(
aBlanks
==
1
)
myfile
<<
"<td title=
\"
idle time
\"
class=
\"
not
\"
></td>
\n
"
;
else
myfile
<<
"<td colspan=
\"
"
<<
aBlanks
<<
"
\"
title=
\"
idle time
\"
class=
\"
not
\"
></td>
\n
"
;
// Issue #4
writeColums
(
myfile
,
aBlanks
,
"not"
,
"idle time"
);
// if (aBlanks==1)
// myfile << "<td title=\"idle time\" class=\"not\"></td>\n";
// else
// myfile << "<td colspan=\""<< aBlanks <<"\" title=\"idle time\" class=\"not\"></td>\n";
}
aLength
=
aCurrTrans
->
getPenalties
();
if
(
aLength
!=
0
){
if
(
aLength
==
1
){
//myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t15\"></td>\n";
//myfile << "<td title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n";
myfile
<<
"<td title=
\"
idle:"
<<
aCurrTrans
->
getIdlePenalty
()
<<
" switch:"
<<
aCurrTrans
->
getTaskSwitchingPenalty
()
<<
"
\"
class=
\"
t15
\"
></td>
\n
"
;
}
else
{
//myfile << "<td colspan=\"" << aLength << "\" title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n";
myfile
<<
"<td colspan=
\"
"
<<
aLength
<<
"
\"
title=
\"
idle:"
<<
aCurrTrans
->
getIdlePenalty
()
<<
" switch:"
<<
aCurrTrans
->
getTaskSwitchingPenalty
()
<<
"
\"
class=
\"
t15
\"
></td>
\n
"
;
}
aLength
=
aCurrTrans
->
getPenalties
();
if
(
aLength
!=
0
)
{
// Issue #4
std
::
ostringstream
title
;
title
<<
"idle:"
<<
aCurrTrans
->
getIdlePenalty
()
<<
" switch:"
<<
aCurrTrans
->
getTaskSwitchingPenalty
();
writeColums
(
myfile
,
aLength
,
"not"
,
title
.
str
()
);
// if (aLength==1){
// //myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t15\"></td>\n";
// //myfile << "<td title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n";
// myfile << "<td title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << "\" class=\"t15\"></td>\n";
// }else{
// //myfile << "<td colspan=\"" << aLength << "\" title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n";
// myfile << "<td colspan=\"" << aLength << "\" title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << "\" class=\"t15\"></td>\n";
// }
}
aLength
=
aCurrTrans
->
getOperationLength
();
aColor
=
aCurrTrans
->
getCommand
()
->
getTask
()
->
getInstanceNo
()
&
15
;
if
(
aLength
==
1
)
myfile
<<
"<td title=
\"
"
<<
aCurrTrans
->
toShortString
()
<<
"
\"
class=
\"
t"
<<
aColor
<<
"
\"
></td>
\n
"
;
else
myfile
<<
"<td colspan=
\"
"
<<
aLength
<<
"
\"
title=
\"
"
<<
aCurrTrans
->
toShortString
()
<<
"
\"
class=
\"
t"
<<
aColor
<<
"
\"
></td>
\n
"
;
aLength
=
aCurrTrans
->
getOperationLength
();
aColor
=
aCurrTrans
->
getCommand
()
->
getTask
()
->
getInstanceNo
()
&
NB_HTML_COLORS
;
std
::
ostringstream
cellClass
;
cellClass
<<
"t"
<<
aColor
;
aCurrTime
=
aCurrTrans
->
getEndTime
();
writeColums
(
myfile
,
aLength
,
cellClass
.
str
(),
aCurrTrans
->
toShortString
()
);
//
// if ( aLength == 1 )
// myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n";
// else
// myfile << "<td colspan=\"" << aLength << "\" title=\"" << aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n";
aCurrTime
=
aCurrTrans
->
getEndTime
();
//std::cout << "end time: " << aCurrTrans->getEndTime() << std::endl;
}
//std::cout << "acurrTime: " << aCurrTime << std::endl;
myfile
<<
"</tr>
\n
<tr>"
;
for
(
aLength
=
0
;
aLength
<
aCurrTime
;
aLength
++
)
myfile
<<
"<th></th>"
;
for
(
aLength
=
0
;
aLength
<
aCurrTime
;
aLength
++
)
{
myfile
<<
"<th></th>"
;
}
myfile
<<
"</tr>
\n
<tr>"
;
for
(
aLength
=
0
;
aLength
<
aCurrTime
;
aLength
+=
5
)
myfile
<<
"<td colspan=
\"
5
\"
class=
\"
sc
\"
>"
<<
aLength
<<
"</td>"
;
for
(
aLength
=
0
;
aLength
<=
aCurrTime
;
aLength
+=
5
)
{
std
::
ostringstream
spanVal
;
spanVal
<<
aLength
;
writeColums
(
myfile
,
5
,
"sc"
,
""
,
spanVal
.
str
(),
false
);
//myfile << "<td colspan=\"5\" class=\"sc\">" << aLength << "</td>";
}
myfile
<<
"</tr>
\n
</table>
\n
<table>
\n
<tr>"
;
for
(
TaskList
::
const_iterator
j
=
_taskList
.
begin
();
j
!=
_taskList
.
end
();
++
j
){
aColor
=
(
*
j
)
->
getInstanceNo
()
&
15
;
myfile
<<
"<td class=
\"
t"
<<
aColor
<<
"
\"
></td><td>"
<<
(
*
j
)
->
toString
()
<<
"</td><td class=
\"
space
\"
></td>
\n
"
;
for
(
TaskList
::
const_iterator
j
=
_taskList
.
begin
();
j
!=
_taskList
.
end
();
++
j
)
{
unsigned
int
instNumber
=
(
*
j
)
->
getInstanceNo
()
-
1
;
aColor
=
instNumber
%
NB_HTML_COLORS
;
// Unset the default td max-width of 5px. For some reason setting the max-with on a specific t style does not work
myfile
<<
"<td class=
\"
t"
<<
aColor
<<
"
\"
></td><td style=
\"
max-width: unset;
\"
>"
<<
(
*
j
)
->
toString
()
<<
"</td><td class=
\"
space
\"
></td>
\n
"
;
}
myfile
<<
"</tr>"
;
#ifdef ADD_COMMENTS
bool
aMoreComments
=
true
,
aInit
=
true
;
...
...
@@ -429,15 +460,15 @@ int SingleCoreCPU::allTrans2XML(std::ostringstream& glob, int maxNbOfTrans) cons
}
void
SingleCoreCPU
::
latencies2XML
(
std
::
ostringstream
&
glob
,
int
id1
,
int
id2
)
{
for
(
TransactionList
::
const_iterator
i
=
_transactList
.
begin
();
i
!=
_transactList
.
end
();
++
i
){
if
((
*
i
)
->
getCommand
()
!=
NULL
){
if
(
(
*
i
)
->
getCommand
()
->
getID
()
==
id1
||
(
*
i
)
->
getCommand
()
->
getID
()
==
id2
){
(
*
i
)
->
toXML
(
glob
,
1
,
_name
);
}
for
(
TransactionList
::
const_iterator
i
=
_transactList
.
begin
();
i
!=
_transactList
.
end
();
++
i
){
if
((
*
i
)
->
getCommand
()
!=
NULL
){
if
((
*
i
)
->
getCommand
()
->
getID
()
==
id1
||
(
*
i
)
->
getCommand
()
->
getID
()
==
id2
){
(
*
i
)
->
toXML
(
glob
,
1
,
_name
);
}
}
}
}
return
;
return
;
}
...
...
simulators/c++2/src_simulator/definitions.h
View file @
25321e5f
...
...
@@ -225,9 +225,17 @@ using std::max;
#define TAG_ENERGYo "<energy>"
#define TAG_ENERGYc "</energy>"
// Issue #4 HTML Trace Constants
#define EXT_SEP "."
#define CSS "css"
#define EXT_VCD ".vcd"
#define EXT_TXT ".txt"
#define EXT_HTML ".html"
#define EXT_CSS ".css"
// Issue #4 HTML Trace Constants
#define MAX_COL_SPAN 1000
#define START_TD "<td"
#define END_TD "</td>"
#define SCHED_CSS_FILE_NAME "schedstyle.css"
#define SCHED_HTML_DOC "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
#define SCHED_HTML_BEG_HTML "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"
...
...
@@ -243,7 +251,7 @@ using std::max;
#define SCHED_HTML_END_STYLE "</style>\n"
#define SCHED_HTML_CSS_BEG_LINK "<link rel=\"stylesheet\" type=\"text/css\" href=\""
#define SCHED_HTML_CSS_END_LINK "\" />\n"
#define NB_HTML_COLORS 15
#define SCHED_HTML_CSS_CONTENT "table{\n \
border-collapse: collapse;\n \
empty-cells: show;\n \
...
...
@@ -252,6 +260,7 @@ using std::max;
td{\n \
padding: 10px 5px;\n \
border: 1px solid black;\n \
max-width: 5px;\n \
}\n \
th{\n \
padding: 5px;\n \
...
...
@@ -277,22 +286,213 @@ h2 span {\n \
}\n \
.space{border-style: none;}\n \
.not{background-color: white;}\n \
.t1{background-color: yellow;}\n \
.t2{background-color: purple;}\n \
.t3{background-color: red;}\n \
.t4{background-color: silver;}\n \
.t5{background-color: teal;}\n \
.t6{background-color: aqua;}\n \
.t7{background-color: olive;}\n \
.t8{background-color: navy;}\n \
.t9{background-color: maroon;}\n \
.t10{background-color: lime;}\n \
.t11{background-color: green;}\n \
.t12{background-color: gray;}\n \
.t13{background-color: fuchsia;}\n \
.t14{background-color: blue;}\n \
.t15{background-color: black;}\n \
.t16{background-color: white;}"
.notfirst {\n \
background-color: white;\n \
border-style: solid none solid solid;\n \
}\n \
.notmid {\n \
background-color: white;\n \
border-style: solid none solid none;\n \
}\n \
.notlast {\n \
background-color: white;\n \
border-style: solid solid solid none;\n \
}\n \
.t0{background-color: yellow;}\n \
.t0first {\n \
background-color: yellow;\n \
border-style: solid none solid solid;\n \
}\n \
.t0mid {\n \
background-color: yellow;\n \
border-style: solid none solid none;\n \
}\n \
.t0last {\n \
background-color: yellow;\n \
border-style: solid solid solid none;\n \
}\n \
.t1{background-color: purple;}\n \
.t1first {\n \
background-color: purple;\n \
border-style: solid none solid solid;\n \
}\n \
.t1mid {\n \
background-color: purple;\n \
border-style: solid none solid none;\n \
}\n \
.t1last {\n \
background-color: purple;\n \
border-style: solid solid solid none;\n \
}\n \
.t2{background-color: red;}\n \
.t2first {\n \
background-color: red;\n \
border-style: solid none solid solid;\n \
}\n \
.t2mid {\n \
background-color: red;\n \
border-style: solid none solid none;\n \
}\n \
.t2last {\n \
background-color: red;\n \
border-style: solid solid solid none;\n \
}\n \
.t3{background-color: silver;}\n \
.t3first {\n \
background-color: silver;\n \
border-style: solid none solid solid;\n \
}\n \
.t3mid {\n \
background-color: silver;\n \
border-style: solid none solid none;\n \
}\n \
.t3last {\n \
background-color: silver;\n \
border-style: solid solid solid none;\n \
}\n \
.t4{background-color: teal;}\n \
.t4first {\n \
background-color: teal;\n \
border-style: solid none solid solid;\n \
}\n \
.t4mid {\n \
background-color: teal;\n \
border-style: solid none solid none;\n \
}\n \
.t4last {\n \
background-color: teal;\n \
border-style: solid solid solid none;\n \
}\n \
.t5{background-color: aqua;}\n \
.t5first {\n \
background-color: aqua;\n \
border-style: solid none solid solid;\n \
}\n \
.t5mid {\n \
background-color: aqua;\n \
border-style: solid none solid none;\n \
}\n \
.t5last {\n \
background-color: aqua;\n \
border-style: solid solid solid none;\n \
}\n \
.t6{background-color: olive;}\n \
.t6first {\n \
background-color: olive;\n \
border-style: solid none solid solid;\n \
}\n \
.t6mid {\n \
background-color: olive;\n \
border-style: solid none solid none;\n \
}\n \
.t6last {\n \
background-color: olive;\n \
border-style: solid solid solid none;\n \
}\n \
.t7{background-color: navy;}\n \
.t7first {\n \
background-color: navy;\n \
border-style: solid none solid solid;\n \
}\n \
.t7mid {\n \
background-color: navy;\n \
border-style: solid none solid none;\n \
}\n \
.t7last {\n \
background-color: navy;\n \
border-style: solid solid solid none;\n \
}\n \
.t8{background-color: maroon;}\n \
.t8first {\n \
background-color: maroon;\n \
border-style: solid none solid solid;\n \
}\n \
.t8mid {\n \
background-color: maroon;\n \
border-style: solid none solid none;\n \
}\n \
.t8last {\n \
background-color: maroon;\n \
border-style: solid solid solid none;\n \
}\n \
.t9{background-color: lime;}\n \
.t9first {\n \
background-color: lime;\n \
border-style: solid none solid solid;\n \
}\n \
.t9mid {\n \
background-color: lime;\n \
border-style: solid none solid none;\n \
}\n \
.t9last {\n \
background-color: lime;\n \
border-style: solid solid solid none;\n \
}\n \
.t10{background-color: green;}\n \
.t10first {\n \
background-color: green;\n \
border-style: solid none solid solid;\n \
}\n \
.t10mid {\n \
background-color: green;\n \
border-style: solid none solid none;\n \
}\n \
.t10last {\n \
background-color: green;\n \
border-style: solid solid solid none;\n \
}\n \
.t11{background-color: gray;}\n \
.t11first {\n \
background-color: gray;\n \
border-style: solid none solid solid;\n \
}\n \
.t11mid {\n \
background-color: gray;\n \
border-style: solid none solid none;\n \
}\n \
.t11last {\n \
background-color: gray;\n \
border-style: solid solid solid none;\n \
}\n \
.t12{background-color: fuchsia;}\n \
.t12first {\n \
background-color: fuchsia;\n \
border-style: solid none solid solid;\n \
}\n \
.t12mid {\n \
background-color: fuchsia;\n \
border-style: solid none solid none;\n \
}\n \
.t12last {\n \
background-color: fuchsia;\n \
border-style: solid solid solid none;\n \
}\n \
.t13{background-color: blue;}\n \
.t13first {\n \
background-color: blue;\n \
border-style: solid none solid solid;\n \
}\n \
.t13mid {\n \
background-color: blue;\n \
border-style: solid none solid none;\n \
}\n \
.t13last {\n \
background-color: blue;\n \
border-style: solid solid solid none;\n \
}\n \
.t14{background-color: black;}\n \
.t14first {\n \
background-color: black;\n \
border-style: solid none solid solid;\n \
}\n \
.t14mid {\n \