The Meta-Environment API
00001 #ifndef __SDF_MODULE_UTILS__ 00002 #define __SDF_MODULE_UTILS__ 00003 00004 #include <undefined.h> 00005 process ModulenameBase(Modulename: str, Name: str?) is 00006 snd-msg(io-get-path-filename(Modulename)) 00007 . rec-msg(io-filename(Modulename, Name?)) 00008 00009 process ComputeCanonicalLanguagename(Modulename : str, Languagename : str?) is 00010 let 00011 Directory: str, 00012 Prefix: str, 00013 Name: str 00014 in 00015 LanguageNameFromModuleName(Modulename, Prefix?) 00016 . ModulenameBase(Modulename, Name?) 00017 . 00018 if not-equal(Prefix, UNDEFINED) then 00019 Prefix := concat(Prefix, "/") 00020 else 00021 tau 00022 fi 00023 . Languagename := concat(Prefix, Name) 00024 endlet 00025 00026 process LanguageNameFromModuleName(Modulename: str, Languagename: str?) is 00027 let 00028 Directory: str, 00029 Prefix: str, 00030 Name: str 00031 in 00032 snd-msg(io-get-path-directory(Modulename)) 00033 . rec-msg(io-directory(Modulename, Directory?)) 00034 . 00035 if not-equal(Directory, "") then 00036 snd-msg(io-get-path-directory(Directory)) 00037 . rec-msg(io-directory(Directory, Languagename?)) 00038 else 00039 Languagename := "" 00040 fi 00041 endlet 00042 00043 process ComputeFeatureModulename(Modulename : str, Feature : str, FeatureModulename : str?) is 00044 let 00045 Directory: str, 00046 Prefix: str, 00047 Name: str 00048 in 00049 LanguageNameFromModuleName(Modulename, Prefix?) 00050 . ModulenameBase(Modulename, Name?) 00051 . 00052 if not-equal(Prefix, "") then 00053 Prefix := concat(Prefix, "/") 00054 else 00055 tau 00056 fi 00057 . FeatureModulename := concat(concat(Prefix,concat(Feature, "/")), Name) 00058 endlet 00059 00060 /** 00061 * This process connects two modules, by taking the dirname of a 00062 * module name twice, then add the feature string, and then adding the 00063 * basename again to construct a new file name. 00064 */ 00065 process LookupFeatureModuleId(ModuleId: module-id, Feature : str, NewModuleId : module-id?) is 00066 let 00067 Modulename: str, 00068 Directory: str, 00069 Prefix: str, 00070 Name: str, 00071 FeatureModulename: str 00072 in 00073 NewModuleId := UNDEFINED 00074 . MM-GetAttribute(ModuleId, SDF_NAMESPACE, "name", Modulename?) 00075 . ComputeFeatureModulename(Modulename, Feature, FeatureModulename?) 00076 . MM-GetModuleIdByAttribute(SDF_NAMESPACE, "name", FeatureModulename, NewModuleId?) 00077 endlet 00078 00079 #endif