|
From: <got...@us...> - 2009-03-27 22:14:35
|
Revision: 208
http://scstudio.svn.sourceforge.net/scstudio/?rev=208&view=rev
Author: gotthardp
Date: 2009-03-27 22:14:22 +0000 (Fri, 27 Mar 2009)
Log Message:
-----------
Implemented HMSC ConditionNode into "msc.h".
Modified Paths:
--------------
trunk/CMakeLists.txt
trunk/src/check/pseudocode/msc_duplicators.cpp
trunk/src/check/pseudocode/msc_duplicators.h
trunk/src/data/Z120/Context.cpp
trunk/src/data/Z120/z120_save.cpp
trunk/src/data/dfs_bmsc_graph_traverser.cpp
trunk/src/data/msc.h
trunk/src/data/refnode_finder.cpp
trunk/src/view/visio/addon/extract.cpp
trunk/src/view/visio/addon/visualize.cpp
trunk/src/view/visio/addon/visualize.h
trunk/src/view/visio/scstudio.nsi
Added Paths:
-----------
trunk/FindPCAP.cmake
Property Changed:
----------------
trunk/src/data/Z120/
Modified: trunk/CMakeLists.txt
===================================================================
--- trunk/CMakeLists.txt 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/CMakeLists.txt 2009-03-27 22:14:22 UTC (rev 208)
@@ -17,7 +17,7 @@
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
FIND_PACKAGE(Java)
-# do not make antlr a mandatory prerequisite
+# keep antlr an optional prerequisite
FIND_PACKAGE(ANTLR)
INCLUDE_DIRECTORIES(src)
Added: trunk/FindPCAP.cmake
===================================================================
--- trunk/FindPCAP.cmake (rev 0)
+++ trunk/FindPCAP.cmake 2009-03-27 22:14:22 UTC (rev 208)
@@ -0,0 +1,25 @@
+# set the default PCAP_ROOT value
+IF(NOT PCAP_ROOT)
+ SET(PCAP_ROOT $ENV{PCAP_ROOT} CACHE PATH "The PCAP directory root.")
+ENDIF(NOT PCAP_ROOT)
+
+FIND_LIBRARY(PCAP_LIBRARY
+ NAMES wpcap
+ PATHS
+ ${PCAP_ROOT}/Lib
+ DOC "The PCAP Library")
+
+FIND_PATH(PCAP_INCLUDE_DIR
+ NAMES pcap.h
+ PATHS
+ ${PCAP_ROOT}/Include
+ DOC "The PCAP Include Files")
+
+IF (PCAP_LIBRARY AND PCAP_INCLUDE_DIR)
+ SET(PCAP_FOUND TRUE)
+ELSE (PCAP_LIBRARY AND PCAP_INCLUDE_DIR)
+ SET(PCAP_FOUND FALSE)
+ IF (PCAP_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "PCAP not found! Set PCAP_ROOT to the PCAP-3.1.1 directory.")
+ ENDIF (PCAP_FIND_REQUIRED)
+ENDIF (PCAP_LIBRARY AND PCAP_INCLUDE_DIR)
Property changes on: trunk/FindPCAP.cmake
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Modified: trunk/src/check/pseudocode/msc_duplicators.cpp
===================================================================
--- trunk/src/check/pseudocode/msc_duplicators.cpp 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/check/pseudocode/msc_duplicators.cpp 2009-03-27 22:14:22 UTC (rev 208)
@@ -238,36 +238,27 @@
void GraphCreatorListener::on_white_node_found(HMscNode *n)
{
- HMscNodePtr node;
- ReferenceNode* reference = dynamic_cast<ReferenceNode*>(n);
- if(reference)
- {
- on_white_node_found(reference);
- }
- else
- {
- ConnectionNode* connection = dynamic_cast<ConnectionNode*>(n);
- if(connection)
- {
- on_white_node_found(connection);
- }
- else
- {
- EndNode* end = dynamic_cast<EndNode*>(n);
- if(end)
- {
- on_white_node_found(end);
- }
- else
- {
- StartNode* start = dynamic_cast<StartNode*>(n);
- on_white_node_found(start);
- }
- }
- }
+ ReferenceNode* reference_node = dynamic_cast<ReferenceNode*>(n);
+ if(reference_node)
+ return on_white_node_found(reference_node);
+
+ StartNode* start_node = dynamic_cast<StartNode*>(n);
+ if(start_node)
+ return on_white_node_found(start_node);
+
+ EndNode* end_node = dynamic_cast<EndNode*>(n);
+ if(end_node)
+ return on_white_node_found(end_node);
+
+ ConditionNode* condition_node = dynamic_cast<ConditionNode*>(n);
+ if(condition_node)
+ return on_white_node_found(condition_node);
+
+ ConnectionNode* connection_node = dynamic_cast<ConnectionNode*>(n);
+ if(connection_node)
+ return on_white_node_found(connection_node);
}
-
void GraphCreatorListener::on_white_node_found(ReferenceNode* n)
{
BMscPtr bmsc = n->get_bmsc();
@@ -332,6 +323,13 @@
end_list.push_back(new_end);
}
+void GraphCreatorListener::on_white_node_found(ConditionNode* n)
+{
+ PredecessorNode* predecessor = get_predecessor();
+ HMscNodePtr new_node = new ConditionNode(n);
+ process_new_node(n,new_node);
+}
+
void GraphCreatorListener::on_white_node_found(ConnectionNode* n)
{
PredecessorNode* predecessor = get_predecessor();
@@ -380,33 +378,25 @@
void GraphCreatorListener::on_node_finished(HMscNode* n)
{
- HMscNodePtr node;
- ReferenceNode* reference = dynamic_cast<ReferenceNode*>(n);
- if(reference)
- {
- on_node_finished(reference);
- }
- else
- {
- ConnectionNode* connection = dynamic_cast<ConnectionNode*>(n);
- if(connection)
- {
- on_node_finished(connection);
- }
- else
- {
- EndNode* end = dynamic_cast<EndNode*>(n);
- if(end)
- {
- on_node_finished(end);
- }
- else
- {
- StartNode* start = dynamic_cast<StartNode*>(n);
- on_node_finished(start);
- }
- }
- }
+ StartNode* start_node = dynamic_cast<StartNode*>(n);
+ if(start_node)
+ return on_node_finished(start_node);
+
+ EndNode* end_node = dynamic_cast<EndNode*>(n);
+ if(end_node)
+ return on_node_finished(end_node);
+
+ ReferenceNode* reference_node = dynamic_cast<ReferenceNode*>(n);
+ if(reference_node)
+ return on_node_finished(reference_node);
+
+ ConditionNode* condition_node = dynamic_cast<ConditionNode*>(n);
+ if(condition_node)
+ return on_node_finished(condition_node);
+
+ ConnectionNode* connection_node = dynamic_cast<ConnectionNode*>(n);
+ if(connection_node)
+ return on_node_finished(connection_node);
}
void GraphCreatorListener::on_node_finished(ReferenceNode* n)
@@ -428,6 +418,11 @@
m_new_nodes.pop_back();
}
+void GraphCreatorListener::on_node_finished(ConditionNode* n)
+{
+ m_new_nodes.pop_back();
+}
+
void GraphCreatorListener::on_node_finished(ConnectionNode* n)
{
m_new_nodes.pop_back();
@@ -557,9 +552,14 @@
}
else
{
- ReferenceNode* ref_node = dynamic_cast<ReferenceNode*>(*e);
+ ReferenceNode* ref_node;
+ ConditionNode* cond_node;
+ ConnectionNode* conn_node;
+ EndNode* end_node;
+
NodeRelationPtr new_rel;
- if(ref_node)
+
+ if(ref_node = dynamic_cast<ReferenceNode*>(*e))
{
ReferenceNode* new_ref = new ReferenceNode(ref_node);
new_ref->set_msc(ref_node->get_msc());
@@ -568,26 +568,32 @@
new_pred = new_ref;
set_copy(ref_node,new_ref);
}
- else
+ else if(cond_node = dynamic_cast<ConditionNode*>(*e))
{
- ConnectionNode* con_node = dynamic_cast<ConnectionNode*>(*e);
- if(con_node)
- {
- ConnectionNode* new_con = new ConnectionNode(con_node);
- new_hmsc->add_node(new_con);
- new_rel = new_con->add_predecessor(new_pred);
- new_pred = new_con;
- set_copy(con_node,new_con);
- }
- else
- {
- EndNode* end_node = dynamic_cast<EndNode*>(*e);
- EndNode* new_end = new EndNode(end_node);
- new_rel = new_end->add_predecessor(new_pred);
- new_hmsc->add_node(new_end);
- set_copy(end_node,new_end);
- }
+ ConditionNode* new_cond = new ConditionNode(cond_node);
+ new_hmsc->add_node(new_cond);
+ new_rel = new_cond->add_predecessor(new_pred);
+ new_pred = new_cond;
+ set_copy(cond_node,new_cond);
}
+ else if(conn_node = dynamic_cast<ConnectionNode*>(*e))
+ {
+ ConnectionNode* new_conn = new ConnectionNode(conn_node);
+ new_hmsc->add_node(new_conn);
+ new_rel = new_conn->add_predecessor(new_pred);
+ new_pred = new_conn;
+ set_copy(conn_node,new_conn);
+ }
+ else if(end_node = dynamic_cast<EndNode*>(*e))
+ {
+ EndNode* new_end = new EndNode(end_node);
+ new_rel = new_end->add_predecessor(new_pred);
+ new_hmsc->add_node(new_end);
+ set_copy(end_node,new_end);
+ }
+ else
+ throw std::runtime_error("Unknown node type");
+
new_rel->set_original(old_rel);
new_rel->set_line(old_rel->get_line());
set_copy(old_rel,new_rel.get());
@@ -641,9 +647,14 @@
}
else
{
- ReferenceNode* ref_node = dynamic_cast<ReferenceNode*>(*e);
+ ReferenceNode* ref_node;
+ ConditionNode* cond_node;
+ ConnectionNode* conn_node;
+ EndNode* end_node;
+
NodeRelationPtr new_rel;
- if(ref_node)
+
+ if(ref_node = dynamic_cast<ReferenceNode*>(*e))
{
ReferenceNode* new_ref = new ReferenceNode(ref_node);
new_ref->set_msc(ref_node->get_msc());
@@ -652,26 +663,32 @@
new_pred = new_ref;
set_copy(ref_node,new_ref,persist_original);
}
- else
+ else if(cond_node = dynamic_cast<ConditionNode*>(*e))
{
- ConnectionNode* con_node = dynamic_cast<ConnectionNode*>(*e);
- if(con_node)
- {
- ConnectionNode* new_con = new ConnectionNode(con_node);
- root->add_node(new_con);
- new_rel = new_con->add_predecessor(new_pred);
- new_pred = new_con;
- set_copy(con_node,new_con,persist_original);
- }
- else
- {
- EndNode* end_node = dynamic_cast<EndNode*>(*e);
- EndNode* new_end = new EndNode(end_node);
- new_rel = new_end->add_predecessor(new_pred);
- root->add_node(new_end);
- set_copy(end_node,new_end,persist_original);
- }
+ ConditionNode* new_cond = new ConditionNode(cond_node);
+ root->add_node(new_cond);
+ new_rel = new_cond->add_predecessor(new_pred);
+ new_pred = new_cond;
+ set_copy(cond_node,new_cond,persist_original);
}
+ else if(conn_node = dynamic_cast<ConnectionNode*>(*e))
+ {
+ ConnectionNode* new_conn = new ConnectionNode(conn_node);
+ root->add_node(new_conn);
+ new_rel = new_conn->add_predecessor(new_pred);
+ new_pred = new_conn;
+ set_copy(conn_node,new_conn,persist_original);
+ }
+ else if(end_node = dynamic_cast<EndNode*>(*e))
+ {
+ EndNode* new_end = new EndNode(end_node);
+ new_rel = new_end->add_predecessor(new_pred);
+ root->add_node(new_end);
+ set_copy(end_node,new_end,persist_original);
+ }
+ else
+ throw std::runtime_error("Unknown node type");
+
new_rel->set_original(old_rel);
new_rel->set_line(old_rel->get_line());
set_copy(old_rel,new_rel.get(),persist_original);
@@ -687,7 +704,7 @@
FLAT_PATH_INITIAL_Y+current_index*FLAT_PATH_VERTICAL_STEP
)
);
- if(e!=path.begin() && (dynamic_cast<StartNode*>(*e) ||
+ if(e!=path.begin() && (dynamic_cast<StartNode*>(*e) ||
(dynamic_cast<ConnectionNode*>(*e) && dynamic_cast<ReferenceNode*>((*e)->get_general_original()))))
{
current_depth++;
@@ -702,7 +719,7 @@
)
);
}
- current_index++;
+ current_index++;
}
}
}
Modified: trunk/src/check/pseudocode/msc_duplicators.h
===================================================================
--- trunk/src/check/pseudocode/msc_duplicators.h 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/check/pseudocode/msc_duplicators.h 2009-03-27 22:14:22 UTC (rev 208)
@@ -182,6 +182,7 @@
void on_white_node_found(ReferenceNode* n);
void on_white_node_found(StartNode* n);
void on_white_node_found(EndNode* n);
+ void on_white_node_found(ConditionNode* n);
void on_white_node_found(ConnectionNode* n);
void on_gray_node_found(HMscNode* n);
@@ -192,6 +193,7 @@
void on_node_finished(ReferenceNode* n);
void on_node_finished(StartNode* n);
void on_node_finished(EndNode* n);
+ void on_node_finished(ConditionNode* n);
void on_node_finished(ConnectionNode* n);
};
Property changes on: trunk/src/data/Z120
___________________________________________________________________
Modified: svn:ignore
- CMakeFiles
cmake_install.cmake
CTestTestfile.cmake
*.dir
Makefile
*.vcproj
.Z120.g.swo
.Z120Parser.c.swp
.Z120.g.swp
.ParserStruct.cpp.swp
+ CMakeFiles
cmake_install.cmake
CTestTestfile.cmake
*.dir
Makefile
*.vcproj
*.swo
*.swp
Modified: trunk/src/data/Z120/Context.cpp
===================================================================
--- trunk/src/data/Z120/Context.cpp 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/data/Z120/Context.cpp 2009-03-27 22:14:22 UTC (rev 208)
@@ -238,7 +238,7 @@
while (context->connect_name.empty())
{
StartNodePtr node = new StartNode();
- node->set_label(context->connect_name.front());
+// node->set_label(context->connect_name.front());
context->connect_name.pop_front();
context->myHmsc->set_start(node);
}
Modified: trunk/src/data/Z120/z120_save.cpp
===================================================================
--- trunk/src/data/Z120/z120_save.cpp 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/data/Z120/z120_save.cpp 2009-03-27 22:14:22 UTC (rev 208)
@@ -218,6 +218,13 @@
stream << "initial";
}
+ ConditionNodePtr condition_node = boost::dynamic_pointer_cast<ConditionNode>(*npos);
+ if(condition_node != NULL)
+ {
+ stream << "L" << node_id_map.get_id(*npos)
+ << ": condition " << condition_node->get_label();
+ }
+
ConnectionNodePtr connection_node = boost::dynamic_pointer_cast<ConnectionNode>(*npos);
if(connection_node != NULL)
{
Modified: trunk/src/data/dfs_bmsc_graph_traverser.cpp
===================================================================
--- trunk/src/data/dfs_bmsc_graph_traverser.cpp 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/data/dfs_bmsc_graph_traverser.cpp 2009-03-27 22:14:22 UTC (rev 208)
@@ -88,23 +88,15 @@
}
else
{
- ConnectionNode* conn_node = dynamic_cast<ConnectionNode*>(node);
- if(conn_node)
+ PredecessorNode* pred_node = dynamic_cast<PredecessorNode*>(node);
+ if(pred_node)
{
- ending_successors = traverse_successors(conn_node);
+ ending_successors = traverse_successors(pred_node);
}
else
{
- StartNode* start_node = dynamic_cast<StartNode*>(node);
- if(start_node)
- {
- ending_successors = traverse_successors(start_node);
- }
- else
- {
- //node is supposed to be EndNode
- ending_successors = true;
- }
+ //node is supposed to be EndNode
+ ending_successors = true;
}
}
node_finished(node);
Modified: trunk/src/data/msc.h
===================================================================
--- trunk/src/data/msc.h 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/data/msc.h 2009-03-27 22:14:22 UTC (rev 208)
@@ -38,6 +38,7 @@
class HMscNode;
class InnerNode;
class ReferenceNode;
+class ConditionNode;
class ConnectionNode;
class EndNode;
class StartNode;
@@ -73,6 +74,8 @@
typedef std::set<ReferenceNode*> ReferenceNodePSet;
typedef std::queue<InnerNode*> InnerNodePQueue;
+typedef boost::intrusive_ptr<ConditionNode> ConditionNodePtr;
+
typedef boost::intrusive_ptr<ConnectionNode> ConnectionNodePtr;
typedef boost::intrusive_ptr<StartNode> StartNodePtr;
@@ -507,9 +510,6 @@
*/
class SCMSC_EXPORT HMscNode:public MscElementTmpl<HMscNode>
{
-
- std::string m_label;
-
Point m_position;
protected:
@@ -520,22 +520,6 @@
public:
- /**
- * Setter of m_label
- */
- void set_label(const std::string label)
- {
- m_label = label;
- }
-
- /**
- * Getter of m_label
- */
- const std::string& get_label() const
- {
- return m_label;
- }
-
HMsc* get_owner() const
{
return m_owner;
@@ -903,6 +887,58 @@
};
/**
+ * \brief HMSC condition node.
+ *
+ * Represents an HMSC condition.
+ */
+class SCMSC_EXPORT ConditionNode:public PredecessorNode, public SuccessorNode, public HMscNode
+{
+ std::string m_label;
+
+public:
+
+ /**
+ * Initializes m_label
+ */
+ ConditionNode(const std::string& label=""):HMscNode(),PredecessorNode(),SuccessorNode(),
+ m_label(label)
+ {
+ }
+
+ /**
+ * ConditionNode is allowed to reference via m_original different types of
+ * HMscNode.
+ */
+ ConditionNode(ConditionNode* original):HMscNode(original),PredecessorNode(),SuccessorNode()
+ {
+ if(original)
+ {
+ m_label = original->m_label;
+ }
+ }
+
+ virtual ~ConditionNode()
+ {
+ }
+
+ /**
+ * Setter of m_label
+ */
+ void set_label(const std::string label)
+ {
+ m_label = label;
+ }
+
+ /**
+ * Getter of m_label
+ */
+ const std::string& get_label() const
+ {
+ return m_label;
+ }
+};
+
+/**
* \brief Represents connection node, empty visual node)
*
* Corresponds to ITU-T's connection node.
@@ -917,12 +953,10 @@
*/
ConnectionNode(HMscNode* original=NULL):HMscNode(original),PredecessorNode(),SuccessorNode()
{
-
}
virtual ~ConnectionNode()
{
-
}
};
Modified: trunk/src/data/refnode_finder.cpp
===================================================================
--- trunk/src/data/refnode_finder.cpp 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/data/refnode_finder.cpp 2009-03-27 22:14:22 UTC (rev 208)
@@ -36,10 +36,10 @@
//traverse successors only if node is not ReferenceNode
if(!dynamic_cast<ReferenceNode*>(node))
{
- if(dynamic_cast<ConnectionNode*>(node)||
- dynamic_cast<StartNode*>(node))
+ PredecessorNode* pred_node = dynamic_cast<PredecessorNode*>(node);
+ if(pred_node)
{
- traverse_successors(dynamic_cast<PredecessorNode*>(node));
+ traverse_successors(pred_node);
}
//else node is supposed to be EndNode
}
Modified: trunk/src/view/visio/addon/extract.cpp
===================================================================
--- trunk/src/view/visio/addon/extract.cpp 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/view/visio/addon/extract.cpp 2009-03-27 22:14:22 UTC (rev 208)
@@ -909,6 +909,7 @@
case ST_HMSC_CONNECTION:
case ST_HMSC_START:
case ST_HMSC_REFERENCE:
+ case ST_HMSC_CONDITION:
{
PredecessorNode *pred = dynamic_cast<PredecessorNode*>(node.get());
if(pred != NULL)
@@ -937,6 +938,7 @@
case ST_HMSC_CONNECTION:
case ST_HMSC_END:
case ST_HMSC_REFERENCE:
+ case ST_HMSC_CONDITION:
{
SuccessorNode *succ = dynamic_cast<SuccessorNode*>(node.get());
if(succ != NULL)
@@ -1044,7 +1046,16 @@
new_node->set_msc(msc);
break;
}
+ case ST_HMSC_CONDITION:
+ {
+ ConditionNode *new_condition = new ConditionNode((const char*)shape->Text);
+ new_condition->set_position(GetPinPos(shape));
+ hmsc->add_node(new_condition);
+ nodes[shape->ID] = new_condition;
+ break;
+ }
+
case ST_HMSC_LINE:
case ST_HMSC_ARROW:
relations[shape->ID] = new NodeRelation();
Modified: trunk/src/view/visio/addon/visualize.cpp
===================================================================
--- trunk/src/view/visio/addon/visualize.cpp 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/view/visio/addon/visualize.cpp 2009-03-27 22:14:22 UTC (rev 208)
@@ -44,6 +44,7 @@
m_start_symbol_master = hmsc_stencil->Masters->Item["Start Symbol"];
m_end_symbol_master = hmsc_stencil->Masters->Item["End Symbol"];
m_msc_reference_master = hmsc_stencil->Masters->Item["MSC Reference"];
+ m_condition_master = hmsc_stencil->Masters->Item["Condition"];
m_connection_point_master = hmsc_stencil->Masters->Item["Connection Point"];
m_connection_arrow_master = hmsc_stencil->Masters->Item["Connection Arrow"];
}
@@ -351,6 +352,13 @@
shape = DropMaster(vsoPage, m_start_symbol_master, start_node->get_position());
}
+ ConditionNodePtr condition_node = boost::dynamic_pointer_cast<ConditionNode>(node);
+ if(condition_node != NULL)
+ {
+ shape = DropMaster(vsoPage, m_condition_master, condition_node->get_position());
+ shape->Text = condition_node->get_label().c_str();
+ }
+
ConnectionNodePtr connection_node = boost::dynamic_pointer_cast<ConnectionNode>(node);
if(connection_node != NULL)
{
Modified: trunk/src/view/visio/addon/visualize.h
===================================================================
--- trunk/src/view/visio/addon/visualize.h 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/view/visio/addon/visualize.h 2009-03-27 22:14:22 UTC (rev 208)
@@ -41,6 +41,7 @@
Visio::IVMasterPtr m_start_symbol_master;
Visio::IVMasterPtr m_end_symbol_master;
Visio::IVMasterPtr m_msc_reference_master;
+ Visio::IVMasterPtr m_condition_master;
Visio::IVMasterPtr m_connection_point_master;
Visio::IVMasterPtr m_connection_arrow_master;
Modified: trunk/src/view/visio/scstudio.nsi
===================================================================
--- trunk/src/view/visio/scstudio.nsi 2009-03-25 17:11:02 UTC (rev 207)
+++ trunk/src/view/visio/scstudio.nsi 2009-03-27 22:14:22 UTC (rev 208)
@@ -21,7 +21,7 @@
; -- General ---------------------------
-!define VERSION "0.2.4"
+!define VERSION "0.2.5"
Name "Sequence Chart Studio"
OutFile "scstudio-setup-${VERSION}.exe"
@@ -129,6 +129,7 @@
DeleteRegKey HKCU "${RegMainPath}"
; register modules
WriteRegStr HKCU '${RegMainPath}' 'ModulesPath' '$INSTDIR\bin'
+ WriteRegStr HKCU '${RegModulesPath}' 'sc_boundedness' 'scboundedness.dll'
WriteRegStr HKCU '${RegModulesPath}' 'sc_liveness' 'scliveness.dll'
WriteRegStr HKCU '${RegModulesPath}' 'sc_order' 'scorder.dll'
WriteRegStr HKCU '${RegModulesPath}' 'sc_race' 'scrace.dll'
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|