Печать имен импортируемых макро-файлов
Скачать (rar-файл; Размер - 2017)Обсудить в форуме
Описание
Печать всех имен импортируемых макрофайлов (через import). Просмотр идет в импортируемых файлах то-же. Для работы требуется findPath, и соответственно RSL >=886
Текст примера
var FlagPrint=FALSE; macro ReplaceString(str,ToFind,ToReplace) var s="",i=0; while(str!="") i=Index(str,ToFind); if(i>0) s=s+SubStr(str,1,i-1)+ToReplace; str=SubStr(str,i+strlen(ToFind)); else s=s+str; str=""; end; end; SetParm(0,s); end; CLASS S_Macro var CurPos=-1; var ShortName,PathName,AutoKey,Key,Child; var A_ShortName=Tarray,A_PathName=Tarray,A_Autokey=Tarray,A_Key=Tarray,A_Child=Tarray; macro Add(S_Name,Key) var i=A_ShortName.Size; if(Index(S_Name,"\\\\")>0) ReplaceString(S_Name,"\\\\","\\"); end; while(i>0) i=i-1; if(A_ShortName[i]==S_Name) if(FlagPrint) println("Пропущена циклическая ссылка на ",S_Name); end; return FALSE; end; end; i=A_ShortName.Size; A_ShortName[i]=S_Name; A_PathName[i]=FindPath(S_Name); A_Key[i]=Key; A_Child[i]=0; if(i==0) A_AutoKey[i]=1; else A_AutoKey[i]=A_AutoKey[i-1]+1; A_Child[Key-1]=A_Child[Key-1]+1; end; return TRUE; end; macro Rewind CurPos=-1; end; macro print var i=PathName; if(i=="") i="не найден (Может это системный модуль или DLM)"; end; [### ### ## Имя=###################################### Путь=#](AutoKey,Key,Child,ShortName,i); end; macro next var i=A_ShortName.Size; if((i>0) and (CurPos+1<i)) CurPos=CurPos+1; ShortName=A_ShortName[CurPos]; PathName=A_PathName[CurPos]; AutoKey=A_AutoKey[CurPos]; Key=A_Key[CurPos]; Child=A_Child[CurPos]; return TRUE; end; return FALSE; end; END; macro SplitArray(arr,str) array a; var i=0,rc,s; while(i<asize(arr)) rc=Index(arr(i),str); if(rc==0) a(asize(a))=arr(i); else if(rc>1) a(asize(a))=SubStr(arr(i),1,rc-1); end; a(asize(a))=str; if((strlen(arr(i))-strlen(str)-rc)>=0) a(asize(a))=SubStr(arr(i),rc+strlen(str)); end; end; i=i+1; end; asize(arr,0); arr=a; setparm(0,arr); end; macro FindMacro(OB) const Delim="\", "+StrFor(9); var i,FlagInImport,rc,str,FlagInComment,Flag=0; array CurStr; file ff() txt; while(OB.Next) /* MsgBox(string(OB.Autokey)+"|"+string(OB.Key)+"|"+string(OB.ShortName)+"|"+OB.PathName);*/ Flag=Ob.Autokey; /* OB.Print;*/ close(ff); if((OB.PathName=="") or not(open(ff,OB.PathName))) if(OB.PathName=="") MsgBox("Не найден файл "+OB.ShortName); else MsgBox("Не могу открыть файл "+OB.PathName); end; else SetDelim(Delim); FlagInComment=0; FlagInImport=FALSE; while(next(ff)) message(Ob.ShortName," ",ff.str); asize(CurStr,0); /* ff(x) глючит - поэтому переписал */ str=ff.str; while(str!="") i=StrBrk(str,Delim); if(i>0) if(i>1) CurStr(asize(CurStr))=SubStr(str,1,i-1); end; str=SubStr(str,i+1); else if(str!="") CurStr(asize(CurStr))=str; end; str=""; end; end; /* while(ff(i)!="") MsgBox(str); str=strlwr(ff(i)); if(trim(str)!="") CurStr(asize(CurStr))=str; end; i=i+1; end;*/ if(asize(CurStr)>0) SplitArray(CurStr,"/*"); SplitArray(CurStr,"*/"); SplitArray(CurStr,";"); /* if(menu(CurStr,ff.str)>=0) return; end;*/ i=0; while(i<asize(CurStr)) if(CurStr(i)=="/*") FlagInComment=FlagInComment+1; elif(CurStr(i)=="*/") FlagInComment=FlagInComment-1; else if(FlagInComment==0) if(CurStr(i)=="import") if(FlagPrint) println("Найдено начало импорта в ",OB.ShortName); end; FlagInImport=TRUE; else if(FlagInImport) if(CurStr(i)==";") if(FlagPrint) println("Найден конец импорта"); end; FlagInImport=FALSE; else if(FlagPrint) println("Найден:",CurStr(i)); end; OB.Add(CurStr(i),Flag); end; end; end; end; end; i=i+1; end; end; end; end; end; end; macro ShowAll(OB) var m=tarray,i=0; while(i<OB.A_ShortName.Size) m[i]=string(OB.A_Autokey[i]:3)+"│"+string(OB.A_ShortName[i]:32)+"│"+string(OB.A_PathName[i]:40); i=i+1; end; menu(m); end; macro ShowTree(OB) var m=tarray,i,Key=Tarray,CurPos=Tarray,Cur=0; Key[Cur]=0; CurPos[Cur]=0; while(Cur>=0) m.Size=0; i=0; while(i<OB.A_ShortName.Size) if(OB.A_Key[i]==Key[Cur]) m[m.Size]=string(OB.A_Autokey[i]:3)+"│"+string(OB.A_ShortName[i]:32)+"│"+string(OB.A_PathName[i]:40)+string(OB.A_Child[i]:2); end; i=i+1; end; if(m.Size==0) Cur=Cur-1; else if(Cur>0) i=OB.A_ShortName[Key[Cur]-1]; else i=""; end; i=menu(m,"Cur="+string(Cur)+" Key="+string(Key[Cur]),i,NULL,NULL,CurPos[Cur]); if(i<0) Cur=Cur-1; else CurPos[Cur]=i; Cur=Cur+1; CurPos.Size=Cur; Key[Cur]=int(m[i]); end; end; end; end; array m; var OB=S_Macro,MacroName="KREDDOC.MAC",i; m(0)="Все сразу"; m(1)="В виде каталога"; i=SelectFile(MacroName,"*.mac"); if(not(i)) return; end; /*GetTrue(FlagPrint,"Печатать подробности ?");*/ OB.Add(MacroName,0); FindMacro(OB); OB.Rewind; while(OB.Next) OB.Print; end; i=0; while(i>=0) i=menu(m,"","Показать"); if(i==0) ShowAll(OB); elif(i==1) ShowTree(OB); end; end;