import win.ui; /*DSG{{*/ mainForm = win.form(text="cmdSpecial";right=1135;bottom=702) mainForm.add() /*}}*/ //如果运行或发布遇到问题,请先卸载 WebView2 再运行示例以更新该组件。 import web.view; var wb = web.view(mainForm); import process.popen; import fsys; import fsys.ini import console; configFile = io.splitpath(io._exefile).name + ".ini" if not io.exist(configFile){ ini = fsys.ini(configFile); if(_STUDIO_INVOKED){ ini.write("Makefile","路径","./makefile"); } else { ini.write("Makefile","路径","./"); } ini.write("Makefile","文件名","project_*.mk"); string.save(configFile, '\r\n', true); ini.write("编译模块配置","new","new"); ini.write("编译模块配置","app","app"); ini.write("编译模块配置","simulator","simulator"); ini.write("编译模块配置","resource","resource"); string.save(configFile, '\r\n', true); ini.write("编译配置","job","job=8"); ini.write("编译配置","j","-j4"); ini.write("编译配置","job","job=8"); string.save(configFile, '\r\n', true); ini.write("市场名","OP","开放"); ini.write("市场名","IN","印度"); ini.write("市场名","RU","俄罗斯"); }else { ini = fsys.ini(configFile) } var getAllProjectFiles = function(path, fileName){ var data = {}; fsys.enum( path, fileName, function(dirname,filename,fullpath,findData){ if(filename){ table.insert(data, filename); } } ,false/*如果此参数为false则忽略子目录*/ ); return data; } var listToDict = function(p_list){ class DictStruct { project_name; makefile_name; } var all_project_files_list_dict = {}; for(i=1;#p_list;1){ var temp = DictStruct(); temp.project_name = string.split(p_list[i],"_")[3]; temp.makefile_name = p_list[i]; table.push(all_project_files_list_dict,temp) } return all_project_files_list_dict; } var tableUnique = function(arr,key){ var rAr = {}; var temp = {}; for(k,v in arr){ var a = v[key]; if(!rAr[a]){ rAr[a]= v; table.insert(temp, a); } } return temp; } //获取所有文件名 var allMakefileName = getAllProjectFiles(ini.read("Makefile","路径"), ini.read("Makefile","文件名")); //设置文件名、项目名的键值对 var allPrjFileDict = listToDict(allMakefileName); //提取唯一项目名 var allPrjName = tableUnique(allPrjFileDict,"project_name") table.sort(allPrjName); var dicData = table.array(); for(sub, prjName in allPrjName){ var temp = table.array(); for(k,prjFile in allPrjFileDict){ if(prjFile.project_name == prjName){ table.insert(temp, prjFile.makefile_name) } } dicData[prjName] = temp; } // wb.export 导出的函数被JS调用返回的值使用JSON自动转换为JS对象 wb.export( getAllPrjName = function(){ return allPrjName; } getAllMakefile = function(prjName){ return dicData[prjName]; } //console.dump(ini.getSection("市场名").OP) getMarketName = function(makefile){ var marketStr = string.split(makefile,"_"); var allMarketName = {}; marketStr = string.split(marketStr[#marketStr],".")[1]; allMarketName = ini.read("市场名",marketStr) return allMarketName ? allMarketName : string.find(marketStr,"^En") ? "OP" : marketStr;; } getMakefilePath = function(makefile){ return io._exedir + makefile; } cmdSpecial = function(command){ if(string.find(command,"make")){ var configFile = io.splitpath(io._exefile).name + ".ini"; var ini = fsys.ini(configFile); var makefilePath = string.replace(ini.getSection("Makefile").路径, "\\", "/"); if(!string.endWith(makefilePath,"/")){ makefilePath = makefilePath + "/"; } command = string.replace(command, "make", makefilePath+"make.bat"); mainForm.msgbox(command); return; } //同步有同步的优势,扬长避短是智慧,倒行逆施最累人。 prcs = process.popen(command); for( all,out,err in prcs.each() ){ wb.invoke("insertAtTheEndOfEditor", all); } wb.invoke("insertAtTheEndOfEditor", "---->>>End<<<----"); return; } isT117 = function(){ return true } ) import wsock.tcp.simpleHttpServer; wb.go(wsock.tcp.simpleHttpServer.startSpaUrl("\web\index.html")) mainForm.show(); win.loopMessage();