Memo
Дата: 28.03.2005 12:19:40
Декомпилятор COS (Cache Object Script): позволяет восстанавливать исходные тексты программ (.int), представленных в объектных кодах (.obj) в Cache 5.x. Пока что, только приблизительно... . Ниже, для примера, приводится "слегка приглаженная вручную" небольшая часть текста системной утилиты %R, занимающейся "обслуживанием" программ, могу дать и полный текст.
.............
ROUTINE(rou,array,err,options,langmode,filedate,nsp)
n (rou,array,err,options,langmode,filedate,nsp)
s $zt="rouErr^%R"
s (err,status,nspOrig,glonspOrig,rtnnspOrig)="",result=1
s options=$zcvt($g(options,"CS"),"u")
i $e(rou)="%" d q:result=0 0
. q:options["I"
. s ns=$zu(5),char=$a($e(rou,2))
. i char>64,char<91,ns="%SYS" q
. i char=122,ns="%SYS" q
. i char>96,char<122,ns="%CACHELIB" q
. s ns1=$zcvt($p($$getdest^%GXLINF1(ns,"ROUTINE"),"^",2),"u")
. s ns=$p($$getdest^%GXLINF1(ns,"ROUTINE","("""_$$ParseRoutineName(rou)_""")"),"^",2,99)
. i $zcvt(ns,"u")=ns1 q
. q:$tr(options,"SC")=options
. s result=0,err=$lb($lb(0,0,0,0,rou_" : Error : <PROTECT> : "_ns_" must be your default DB"))
i $g(nsp)]"" d q:result=0 0
. s nsp=$zcvt(nsp,"u")
. i $e(nsp)="""" s nsp=$p(nsp,"""",2)
. s nspOrig=$zu(5)
. s rtnnspOrig=$zu(20)
. s glonspOrig=$zu(39)
. i options["I" d $zu(5,nsp) q
. i nsp="%SYS",'(nspOrig="%SYS") d q
. . s result=0,err=$lb($lb(0,0,0,0,rou_" : Error : <PROTECT>"))
. i nsp="%CACHELIB",'(nspOrig="%CACHELIB") d q
. . s result=0,err=$lb($lb(0,0,0,0,rou_" : Error : <PROTECT>"))
. d $zu(5,nsp)
s rtn=$$ParseRoutineName(rou)
s type=$$rtype(rou,options)
s ver=$$VERSION(rou,$g(nsp))
s glo=$$rglobal(type,ver)
i options["S",'$$LOCK(rou) q "0^,LOCKED,"
s ccEnabled=$zj\4#2
b 0
s zs=$zu(163,16*1024)
d rouProc
i options["S" s x=$$UNLOCK(rou)
s zs=$zu(163,zs)
b $g(ccEnabled,1)
i nspOrig]"" d $zu(5,nspOrig)
i rtnnspOrig]"" d $zu(20,rtnnspOrig)
i glonspOrig]"" d $zu(39,glonspOrig)
q result_"^"_status_","
.............
Интересует? :-)