BMXSQL91 ; IHS/OIT/HMW - BMX REMOTE PROCEDURE CALLS ; ;;2.3;BMX;;Jan 25, 2011 ; ;Below is dead code, but keep for later SETX2 ;Don't need this unless porting to machine with ;local variable size limitations N F,LVL,ROOT,START S LVL=1,START=1 S ROOT="BMXY" F F=1:1:BMXFF D Q:$D(BMXERR) . S BMX=BMXFF(F) . I BMX="(" D Q ;Increment level . . S LVL=LVL+1 . . ;S ROOT=$S(ROOT["(":$P(ROOT,")")_","_0_")",1:ROOT_"("_0_")") . . ;Get operator following close paren corresponding to this open . . ;If op = OR then set up FOR loop in zeroeth node . . ;if op = AND then set up . I BMX=")" D Q ;Decrement level . . S LVL=LVL-1 . . I LVL=1,$D(BMXFF(F+1)),BMXFF(F+1)="&" D Q . . . S BMXX=BMXX+1 . . . S BMXX(BMXX)="" . . . F J=START:1:F S BMXX(BMXX)=BMXX(BMXX)_BMXFF(J) . . . S START=F+2 . . . ;S BMXX(BMXX)="I "_BMXX(BMXX)_" X BMXX("_BMXX+1_")" . I BMX="AND" D Q ;Chain to previous expression at current level . I BMX="OR" D Q ;Create FOR-loop to execute screens ; Q ; ; ;S F=0 F S F=$O(BMXMFL(F)) Q:'+F S:'$D(BMXMFL(F,"SUBFILE")) BMXMFL("NOSUBFILE",F)="" ;I $D(BMXMFL("NOSUBFILE")) S F=0 F S F=$O(BMXMFL("NOSUBFILE",F)) Q:'+F D MAKEC1 ;I $D(BMXMFL("SUBFILE")) S F=0 F S F=$O(BMXMFL("SUBFILE",F)) Q:'+F D MAKEC1 ;S BMXROOTZ=BMXZ+100 ; Q MAKEC1 ; I '$D(BMXMFL(F,"SUBFILE")),'$D(BMXMFL(F,"MULT")) S BMXZ=BMXZ+100,BMXCFN(BMXCID,BMXZ,F)="" Q Q:'$D(BMXMFL(F,"SUBFILE")) Q:$D(BMXMFL(F,"MULT")) S BMXROOT=F S BMXROOTZ=BMXZ+100 S BMXROOTC=BMXCID D MCNT(F) Q ; MCNT(F) ; N S ;B ;MCNT I '$D(BMXMFL(F,"SUBFILE")) D MCNT2 Q S S=0 F S S=$O(BMXMFL(F,"SUBFILE",S)) Q:'+S S:'$D(BMXCFN(BMXCID,BMXZ,F)) BMXZ=BMXZ+100,BMXCFN(BMXCID,BMXZ,F)="" S BMXZ=BMXZ+100,BMXCFN(BMXCID,BMXZ,S)="",BMXCFNX(S,F)="" D MCNT(S) Q ; MCNT2 ; ;B ;Back-chain ;TODO: RESTART HERE -- $O(BMXCFN(BMXCID,0)) NEEDS TO BE CHANGED TO SOMETHING BESIDES 0 N BMXFTOP,BMXFBACK F S BMXFTOP=$O(BMXCFN(BMXROOTC,BMXROOTZ,0)) Q:BMXFTOP=BMXROOT S BMXFBACK=$O(BMXCFNX(BMXFTOP,0)) S BMXROOTZ=BMXROOTZ-1,BMXCFN(BMXCID,BMXROOTZ,BMXFBACK)="" S BMXCID=BMXCID+1,BMXROOTC=BMXCID ;Get the root files I $D(BMXMFL("NOSUBFILE")) D . N F . S F=0 F S F=$O(BMXMFL("NOSUBFILE",F)) Q:'+F D . . Q:$D(BMXMFL(F,"MULT")) . . Q:F=BMXROOT . . S BMXZ=BMXZ+100 . . S BMXCFN(BMXCID,BMXZ,F)="" S BMXROOTZ=BMXZ+100 Q ; ; ITER ;Iterate through result array A S BMXCNT=BMXFLDO ;Field count S F=0 S:BMXNUM ^BMXTEMP($J,I)=IEN0_"^" S BMXCNTB=0 S BMXORD=BMXNUM N BMXONOD N BMXINT ;B ;WRITE Before REORG N M,N S N=0 D REORG ;B ;WRITE After REORG F S N=$O(M(N)) Q:'+N D . S O=0 . F O=1:1:$L(M(N),U) S BMXFLDO(O-1,"IEN0")=$P(M(N),U,O) . S BMXORD=BMXNUM . D OA Q ; REORG N R,IEN,J,CONT,TEST F R=0:1:BMXFLDO-1 S IEN(R)=0 F J=1:1 D Q:'CONT . S CONT=0 . F R=1:1:BMXFLDO D . . S TEST=$O(A(+BMXFLDO(R-1),IEN(R-1))) . . I +TEST S IEN(R-1)=TEST,CONT=1 . . S $P(M(J),U,R)=IEN(R-1) . Q I M(J)=M(J-1) K M(J) Q ; ; OA ; I $D(A) F R=0:1:(BMXFLDO-1) S F=$P(BMXFLDO(R),U,2),BMXFN=$P(BMXFLDO(R),U),BMXINT=$P(BMXFLDO(R),U,3) D S:(R+1)BMXLEN(BMXORD) BMXLEN(BMXORD)=BMXLTMP . . . Q . . D ;It's a multiple. Implement in next phase . . . ;S BMXMCT=BMXMCT+1 . . . ;S BMXMCT(BMXMCT)=BMXFN_U_F . . . Q ;Process A( for multiple field . . Q . E D ;Not a multiple . . S I=I+1 . . I $G(BMXTK("DISTINCT"))="TRUE" D Q . . . Q:A(BMXFN,IEN0,F,BMXINT)="" . . . I $D(^BMXTMPD($J,A(BMXFN,IEN0,F,BMXINT))) Q . . . S ^BMXTMPD($J,A(BMXFN,IEN0,F,BMXINT))="" . . . S ^BMXTEMP($J,I)=A(BMXFN,IEN0,F,BMXINT) . . . S:$L(A(BMXFN,IEN0,F,BMXINT))>BMXLEN(BMXORD) BMXLEN(BMXORD)=$L(A(BMXFN,IEN0,F,BMXINT)) . . . Q . . S ^BMXTEMP($J,I)=A(BMXFN,IEN0,F,BMXINT) . . S:$L(A(BMXFN,IEN0,F,BMXINT))>BMXLEN(BMXORD) BMXLEN(BMXORD)=$L(A(BMXFN,IEN0,F,BMXINT)) . Q ;---> Set data in result global. I $D(^BMXTEMP($J,I)) S ^BMXTEMP($J,I)=^BMXTEMP($J,I)_$C(30) ZZZ Q