cQLOCK ; Get LOCKTAB in var LOCK ;cQLOCK; ; N COMMAND,INDEX N context,LockTime,FreeSpace,StartOwner,LockData S $ZT="" D GATHER,DISPLAY ; YZ Q ; GATHER ; S LockTime=$H,context="",StartOwner=0,INDEX=99999 i $$GATHER^%LM(0,1) i $$LIST^%LM(.FreeSpace,.LockData,.context,.INDEX,0,1) s context="" Q DISPLAY ; Display contents of holder using necessary translation arrays etc. ; and being mindful of screen length n BYTAVAIL,HEADER,rc,count,%T,%TIM,prev S %T=$p(LockTime,",",2) D INT^%T S LOCK(0,"HEADER")="LOCK table entries at "_%TIM_" "_$ZDATE(LockTime,1,,4) S LOCK(0,"BYTAVAIL")=$P(FreeSpace,",",2)_" bytes usable, "_$P(FreeSpace,",",1)_" bytes available." S prev=context again S rc=$s(StartOwner:1,1:$$LIST^%LM(.BYTAVAIL,.LockData,.context,1,0,1)) ; one entry with waiters I +rc=0&(prev="") W !,"**** EMPTY ****" QUIT I +rc=0 s context="" G again F D i +$$LIST^%LM(.BYTAVAIL,.LockData,.context,1,0,1)=0 s context="" q . s StartOwner=$$Show($LIST(LockData,1),StartOwner,0,1,1) Q Show(data,StartOwner,pid,WaiterFlag,updateINDEX) s updateINDEX=$g(updateINDEX,0) N entry,info,ref,Owners,Waiters,Flags,LineIN,nline,nOwner,nWaiter,PrintWaiter,i S PrintWaiter=0 S StartOwner=$g(StartOwner,1) I StartOwner=0 S StartOwner=1 S entry=$LIST(data,1),info=$LIST(data,2) S ref=$LIST(info,1),Owners=$LIST(info,2),Waiters=$s($LISTLENGTH(info)>3:$LIST(info,4),1:"") S Flags=$LIST(info,3) S nOwner=$LISTLENGTH(Owners),nWaiter=$LISTLENGTH(Waiters) DO:nOwner . N i . I pid'=0 DO Q:nOwner . . F i=1:1:nOwner I $s(($zversion(1)=1):$ZH(""_$LIST($LIST(Owners,i),1)),1:$LIST($LIST(Owners,i),1))=pid S StartOwner=i,nOwner=0 Q . S LOCK(entry,"Owner")=$LIST($LIST(Owners,StartOwner),1) . S LOCK(entry,"Owner","ExclusiveLocks")=$LIST($LIST(Owners,StartOwner),2) . S LOCK(entry,"Owner","SharedLocks")=$LIST($LIST(Owners,StartOwner),3) . S LOCK(entry,"Flags")=Flags . I WaiterFlag S LOCK(entry,"Waiterflag")=$s(nWaiter:nWaiter,1:"") . S LOCK(entry,"ref")=ref . F i=1:1:nOwner-1 DO . . S LOCK(entry,"Owner"_i)=$LIST($LIST(Owners,StartOwner+i),1) . . S LOCK(entry,"Owner"_i,"ExclusiveLocks")=$LIST($LIST(Owners,StartOwner+i),2) . . S LOCK(entry,"Owner"_i,"SharedLocks")=$LIST($LIST(Owners,StartOwner+i),3) . DO:PrintWaiter . . N tot,wpid S tot=8 . . F i=1:1:nWaiter S LOCK(entry,"Waiters",i)=$LIST($LIST(Waiters,i),1)_"("_$LIST($LIST(Waiters,i),2)_$LIST($LIST(Waiters,i),3)_")" Q $s((StartOwner+nOwner)>$LISTLENGTH(Owners):0,1:StartOwner+nOwner) ; ZZ ; 17.01.2012 - 15:58 * Cache-r6.4.9