var index=0;; var incr=1024;; typeof lstp=[[S I I] r1];; var lastp="";; var state=0;; var typ=0;; var indp=0;; var incrp=1024;; defcom need = need S I I;; defcom down = down S;; defcom enddown = enddown;; defcom endoflist = endlist;; defcom packlst=packlst S;; defcom addscript = addscript S;; defcom endscript = endscript;; fun _connected()= set lstp=packsusers;; fun buildpack(l)= if l==nil then nil else let l->[[s sz sign] n] in (s::(itoa sz)::(itoa sign)::nil)::buildpack n;; fun __getpack()= _on _channel packlst [strbuild buildpack packsusers];; fun __nextpack()= if lstp==nil then (_on _channel endoflist []; set lstp=packsusers;0) else let lstp -> [[s sz sign] nxt] in (set lstp=nxt; set lastp=s; set typ=sign; _on _channel need [s sz sign]);; fun __next()= let substr scriptuser index incr -> s in if (strlen s)==0 then (_on _channel endscript []; _setenv _channel _removepkg _envchannel _channel; _script scriptserver) else (set index=index+incr; _on _channel addscript [s]);; fun __skip()= _setenv _channel _removepkg _envchannel _channel; _script scriptserver;; fun __downl()= if state==0 then (set lastp=_getpack _checkpack strcat lastp if typ then ".mz" else nil; set state=1; set indp=0) else 0; let substr lastp indp incrp -> s in if s==nil then nil else if (strlen s)==0 then (_on _channel enddown []; set lastp=nil; set state=0) else (set indp=indp+incrp; _on _channel down [s]);;