The Meta-Environment API
00001 #ifndef __ASF_LISTENERS__ 00002 #define __ASF_LISTENERS__ 00003 00004 #include <asf-namespace.h> 00005 #include <asf-utils.tb> 00006 00007 process ASFModuleRegistrar is 00008 let 00009 Event: attribute-changed-event, 00010 ModuleId: module-id, 00011 NewPath: term, 00012 Idle: term 00013 in 00014 Idle := no 00015 . MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,identified) 00016 . 00017 ( 00018 rec-note(mm-attribute-changed(Event?)) 00019 . ACE-GetModuleId(Event, ModuleId?) 00020 . RegisterASFModule(ModuleId) 00021 ) 00022 * 00023 delta 00024 endlet 00025 00026 toolbus(ASFModuleRegistrar) 00027 00028 process ASFModuleOpener is 00029 let 00030 Event: attribute-changed-event, 00031 ModuleId: module-id, 00032 NewPath: term, 00033 Idle: term 00034 in 00035 Idle := no 00036 . MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,complete) 00037 . 00038 ( 00039 rec-note(mm-attribute-changed(Event?)) 00040 . ACE-GetModuleId(Event, ModuleId?) 00041 . OpenASFModule(ModuleId) 00042 ) 00043 * 00044 delta 00045 endlet 00046 00047 toolbus(ASFModuleOpener) 00048 00049 process ASFSDFSyntaxChecker is 00050 let 00051 Event: attribute-changed-event, 00052 ModuleId: module-id, 00053 Tree: term, 00054 Result: term, 00055 Parents: list 00056 in 00057 MM-Subscribe-Attribute-Changed(<module-id>,SDF_NAMESPACE,"status",<term>,complete) 00058 . 00059 ( 00060 rec-note(mm-attribute-changed(Event?)) 00061 . ACE-GetModuleId(Event, ModuleId?) 00062 . MM-GetModuleParents(ModuleId, Parents?) 00063 . /* we only check top modules */ 00064 if equal(Parents, []) then 00065 CheckASFSDFSyntax(ModuleId) 00066 else 00067 tau 00068 fi 00069 ) 00070 * 00071 delta 00072 endlet 00073 00074 toolbus(ASFSDFSyntaxChecker) 00075 00076 process ASFModuleChecker is 00077 let 00078 Event: attribute-changed-event, 00079 ModuleId: module-id, 00080 NewPath: term, 00081 Tree: term 00082 in 00083 MM-Subscribe-Attribute-Changed(<module-id>,ASF_NAMESPACE,"status",available,parsed) 00084 . 00085 ( 00086 rec-note(mm-attribute-changed(Event?)) 00087 . ACE-GetModuleId(Event, ModuleId?) 00088 . CheckASFModule(ModuleId) 00089 ) 00090 * 00091 delta 00092 endlet 00093 00094 toolbus(ASFModuleChecker) 00095 00096 process ASFModuleShapeChanger is 00097 let 00098 Event: attribute-changed-event, 00099 ModuleId: module-id, 00100 NewPath: term, 00101 Tree: term 00102 in 00103 MM-Subscribe-Attribute-Changed(<module-id>,ASF_NAMESPACE,"status",<term>,available) 00104 . 00105 ( 00106 rec-note(mm-attribute-changed(Event?)) 00107 . ACE-GetModuleId(Event, ModuleId?) 00108 . MM-SetModuleGraphAttribute(ModuleId, "shape", shape(ellipse)) 00109 ) 00110 * 00111 delta 00112 endlet 00113 00114 toolbus(ASFModuleShapeChanger) 00115 00116 process ASFModuleParser is 00117 let 00118 Event: attribute-changed-event, 00119 ModuleId: module-id, 00120 Tree: term 00121 in 00122 MM-Subscribe-Attribute-Changed(<module-id>,ASF_NAMESPACE,"status",<term>,available) 00123 . 00124 ( 00125 rec-note(mm-attribute-changed(Event?)) 00126 . ACE-GetModuleId(Event, ModuleId?) 00127 . GetASFParseTree(ModuleId, Tree?) 00128 . 00129 if not-equal(Tree, UNDEFINED) then 00130 MM-SetAttribute(ModuleId, ASF_NAMESPACE, "status", parsed) 00131 else 00132 MM-SetAttribute(ModuleId, ASF_NAMESPACE, "status", error) 00133 fi 00134 . Tree := UNDEFINED 00135 ) 00136 * 00137 delta 00138 endlet 00139 00140 /* TODO: add syntax checker */ 00141 00142 toolbus(ASFModuleParser) 00143 00144 #endif /* __ASF_LISTENERS__ */