OCXOCMPI ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Build LIST Function Code) ;10/29/98 12:37
;;3.0;ORDER ENTRY/RESULTS REPORTING;**32**;Dec 17,1997
;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
;
Q
;
GETCODE(OCXD0,OCXLIST) ;
;
Q:$G(OCXWARN) 1
;
N OCXNDX
;
S OCXNDX=0 F S OCXNDX=$O(OCXLIST(OCXNDX)) Q:'OCXNDX D Q:OCXWARN
.I OCXLIST(OCXNDX) D Q:OCXWARN
..N OCXPAR,OCXELE,OCXPC,OCXCODE,OCXVAR
..S OCXPAR=$P(OCXLIST(OCXNDX)," ",3,999),OCXELE=+OCXLIST(OCXNDX)
..;
..F OCXPC=2:2:$L(OCXPAR,"|") D Q:OCXWARN
...N OCXDF S OCXDF=+$$DATAFLD($P($P(OCXPAR,"|",OCXPC),"|",1),OCXELE)
...I 'OCXDF D WARN^OCXOCMPV("1 Data Field '"_$P($P(OCXPAR,"|",OCXPC),"|",1)_"' not defined for '("_OCXCON_") "_$P($G(^OCXS(860.6,OCXCON,0)),U,1)_"' data context.",2,OCXD0,$P($T(+1)," ",1)) Q
...S $P(OCXPAR,"|",OCXPC)=OCXDF
..;
..S OCXVAR="OCXLX"_(+OCXNDX)
..S OCXLIST(OCXNDX,"CODE",1)="I $$MCE"_(+OCXELE)_" D @@@@"
.;
.I 'OCXLIST(OCXNDX) D
..;
..N OCXEXP,OCXDTYP,OCXCD
..S OCXEXP=OCXLIST(OCXNDX),OCXDTYP=""
..;
..F OCXPC=2:2:$L(OCXEXP,"|") D Q:OCXWARN
...N OCXELE,OCXDF,OCXDFN,OCXSTR,OCXENDX,OCXNVAL,OCXCON
...S OCXSTR=$P($P(OCXEXP,"|",OCXPC),"|",1),OCXELE=$P(OCXSTR,".",1)
...S OCXDF=$P(OCXSTR,".",2),OCXENDX=+$G(OCXLIST("B",OCXELE))
...S:$L(OCXELE) OCXELE=+$G(OCXLIST(OCXENDX))
...S OCXCON=+$P($G(^OCXS(860.3,+OCXELE,0)),U,2)
...I 'OCXELE D WARN^OCXOCMPV("Label '"_$P(OCXSTR,".",1)_"' not defined.",2,OCXD0,$P($T(+1)," ",1)) Q
...S OCXDFN=+$$DATAFLD(OCXDF,OCXELE)
...I 'OCXDFN D WARN^OCXOCMPV("2 Data Field '"_OCXSTR_"' not defined for '"_$P($G(^OCXS(860.6,+OCXCON,0)),U,1)_"' data context.",2,OCXD0,$P($T(+1)," ",1)) Q
...S OCXNVAL="$G(^TMP(""""OCXCHK"""",$J,DFN,"_(+OCXELE)_","_(+OCXDFN)_"))"
...S $P(OCXEXP,"|",OCXPC)=OCXNVAL
...I $L(OCXDTYP),'(OCXDTYP=$$GETDTYP(+OCXDFN,+OCXCON)) D Q
....D WARN^OCXOCMPV("Invalid Expression, Cannot compare '"_OCXDTYP_"' data with '"_$$GETDTYP(+OCXDFN,+OCXCON)_"' data. ",2,OCXD0,$P($T(+1)," ",1)) Q
...I '$L(OCXDTYP) S OCXDTYP=$$GETDTYP(+OCXDFN,OCXCON)
..I '$L(OCXDTYP) D WARN^OCXOCMPV("Data Type for '"_OCXLIST(OCXNDX,"LABEL")_"' not defined. ",2,OCXD0,$P($T(+1)," ",1)) Q
..;
..; GET EXPRESSION CONDITIONAL EVALUATION CODE
..;
..S OCXCD="",OCXWARN=$$GETC^OCXOCMPL(OCXD0,OCXEXP,OCXDTYP,.OCXCD)
..S OCXLIST(OCXNDX,"CODE",1)=OCXCD
.;
.S OCXWARN='$D(OCXLIST(OCXNDX,"CODE"))
;
Q OCXWARN
;
DATAFLD(OCXFNAM,OCXEL) ;
;
N OCXDFN,OCXCON,OCXLINK
S OCXCON=+$P($G(^OCXS(860.3,+OCXEL,0)),U,2),OCXDFN=$O(^OCXS(860.4,"B",OCXFNAM,0))
Q:'$L($G(OCXFNAM)) 0 Q:'OCXCON 0
S OCXLINK=0 F S OCXLINK=$O(^OCXS(860.4,OCXDFN,"LINK",OCXLINK)) Q:'OCXLINK Q:(OCXLINK=OCXCON)
Q:OCXLINK +OCXDFN Q 0
;
GETDTYP(OCXDF,OCXCON) ;
;
N OCXLINK,OCXATT
S OCXDF=+$G(OCXDF),OCXCON=+$G(OCXCON)
Q:'OCXDF "" Q:'OCXCON ""
S OCXLINK=$G(^OCXS(860.4,+OCXDF,"LINK",OCXCON,"DATAPATH"))
Q:'$L(OCXLINK) ""
S OCXLINK=$O(^OCXS(863.3,"B",OCXLINK,0)) Q:'OCXLINK ""
S OCXATT=$P($G(^OCXS(863.3,OCXLINK,0)),U,5) Q:'OCXATT ""
Q $$GETPARM(34,OCXATT,"DATA TYPE")
;
GETPARM(FILE,INST,PARM) ;
Q:'$L(FILE) "" Q:'$L(INST) "" Q:'$L(PARM) ""
N OCXP,OCXP1,OCXI,OCXGL
S OCXGL="^OCXS" S:(FILE=1) OCXGL="^OCXD" S:(FILE=7) OCXGL="^OCXD" S:(FILE=10) OCXGL="^OCXD" S FILE=FILE/10+860
Q:'$D(@OCXGL@(+FILE,0)) ""
I (PARM=+PARM),$D(^OCXS(863.8,PARM,0)) S OCXP=PARM
E S OCXP=$O(^OCXS(863.8,"B",PARM,0))
Q:'OCXP ""
I (INST=+INST),$D(@OCXGL@(FILE,INST,0)) S OCXI=INST
E S OCXI=$O(@OCXGL@(FILE,"B",INST,0))
Q:'OCXI "" S OCXP1=$O(@OCXGL@(FILE,OCXI,"PAR","B",OCXP,0)) Q:'OCXP1 ""
Q $G(@OCXGL@(FILE,OCXI,"PAR",OCXP1,"VAL"))
;
LAST(ROOT,ELEM,INDEX,PARAM,CD) Q $$LAST^OCXOCMPJ(ROOT,ELEM,INDEX,PARAM,.CD)
FIRST(ROOT,ELEM,INDEX,PARAM,CD) Q $$FIRST^OCXOCMPJ(ROOT,ELEM,INDEX,PARAM,.CD)
RANGE(ROOT,ELEM,INDEX,PARAM,CD) Q $$RANGE^OCXOCMPK(ROOT,ELEM,INDEX,PARAM,.CD)
ANY(ROOT,ELEM,INDEX,PARAM,CD) Q $$ANY^OCXOCMPK(ROOT,ELEM,INDEX,PARAM,.CD)
;
OCXOCMPI ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Build LIST Function Code) ;10/29/98 12:37
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32**;Dec 17,1997
+2 ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
+3 ;
+4 QUIT
+5 ;
GETCODE(OCXD0,OCXLIST) ;
+1 ;
+2 IF $GET(OCXWARN)
QUIT 1
+3 ;
+4 NEW OCXNDX
+5 ;
+6 SET OCXNDX=0
FOR
SET OCXNDX=$ORDER(OCXLIST(OCXNDX))
IF 'OCXNDX
QUIT
Begin DoDot:1
+7 IF OCXLIST(OCXNDX)
Begin DoDot:2
+8 NEW OCXPAR,OCXELE,OCXPC,OCXCODE,OCXVAR
+9 SET OCXPAR=$PIECE(OCXLIST(OCXNDX)," ",3,999)
SET OCXELE=+OCXLIST(OCXNDX)
+10 ;
+11 FOR OCXPC=2:2:$LENGTH(OCXPAR,"|")
Begin DoDot:3
+12 NEW OCXDF
SET OCXDF=+$$DATAFLD($PIECE($PIECE(OCXPAR,"|",OCXPC),"|",1),OCXELE)
+13 IF 'OCXDF
DO WARN^OCXOCMPV("1 Data Field '"_$PIECE($PIECE(OCXPAR,"|",OCXPC),"|",1)_"' not defined for '("_OCXCON_") "_$PIECE($GET(^OCXS(860.6,OCXCON,0)),U,1)_"' data context.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT
+14 SET $PIECE(OCXPAR,"|",OCXPC)=OCXDF
End DoDot:3
IF OCXWARN
QUIT
+15 ;
+16 SET OCXVAR="OCXLX"_(+OCXNDX)
+17 SET OCXLIST(OCXNDX,"CODE",1)="I $$MCE"_(+OCXELE)_" D @@@@"
End DoDot:2
IF OCXWARN
QUIT
+18 ;
+19 IF 'OCXLIST(OCXNDX)
Begin DoDot:2
+20 ;
+21 NEW OCXEXP,OCXDTYP,OCXCD
+22 SET OCXEXP=OCXLIST(OCXNDX)
SET OCXDTYP=""
+23 ;
+24 FOR OCXPC=2:2:$LENGTH(OCXEXP,"|")
Begin DoDot:3
+25 NEW OCXELE,OCXDF,OCXDFN,OCXSTR,OCXENDX,OCXNVAL,OCXCON
+26 SET OCXSTR=$PIECE($PIECE(OCXEXP,"|",OCXPC),"|",1)
SET OCXELE=$PIECE(OCXSTR,".",1)
+27 SET OCXDF=$PIECE(OCXSTR,".",2)
SET OCXENDX=+$GET(OCXLIST("B",OCXELE))
+28 IF $LENGTH(OCXELE)
SET OCXELE=+$GET(OCXLIST(OCXENDX))
+29 SET OCXCON=+$PIECE($GET(^OCXS(860.3,+OCXELE,0)),U,2)
+30 IF 'OCXELE
DO WARN^OCXOCMPV("Label '"_$PIECE(OCXSTR,".",1)_"' not defined.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT
+31 SET OCXDFN=+$$DATAFLD(OCXDF,OCXELE)
+32 IF 'OCXDFN
DO WARN^OCXOCMPV("2 Data Field '"_OCXSTR_"' not defined for '"_$PIECE($GET(^OCXS(860.6,+OCXCON,0)),U,1)_"' data context.",2,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT
+33 SET OCXNVAL="$G(^TMP(""""OCXCHK"""",$J,DFN,"_(+OCXELE)_","_(+OCXDFN)_"))"
+34 SET $PIECE(OCXEXP,"|",OCXPC)=OCXNVAL
+35 IF $LENGTH(OCXDTYP)
IF '(OCXDTYP=$$GETDTYP(+OCXDFN,+OCXCON))
Begin DoDot:4
+36 DO WARN^OCXOCMPV("Invalid Expression, Cannot compare '"_OCXDTYP_"' data with '"_$$GETDTYP(+OCXDFN,+OCXCON)_"' data. ",2,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT
End DoDot:4
QUIT
+37 IF '$LENGTH(OCXDTYP)
SET OCXDTYP=$$GETDTYP(+OCXDFN,OCXCON)
End DoDot:3
IF OCXWARN
QUIT
+38 IF '$LENGTH(OCXDTYP)
DO WARN^OCXOCMPV("Data Type for '"_OCXLIST(OCXNDX,"LABEL")_"' not defined. ",2,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT
+39 ;
+40 ; GET EXPRESSION CONDITIONAL EVALUATION CODE
+41 ;
+42 SET OCXCD=""
SET OCXWARN=$$GETC^OCXOCMPL(OCXD0,OCXEXP,OCXDTYP,.OCXCD)
+43 SET OCXLIST(OCXNDX,"CODE",1)=OCXCD
End DoDot:2
+44 ;
+45 SET OCXWARN='$DATA(OCXLIST(OCXNDX,"CODE"))
End DoDot:1
IF OCXWARN
QUIT
+46 ;
+47 QUIT OCXWARN
+48 ;
DATAFLD(OCXFNAM,OCXEL) ;
+1 ;
+2 NEW OCXDFN,OCXCON,OCXLINK
+3 SET OCXCON=+$PIECE($GET(^OCXS(860.3,+OCXEL,0)),U,2)
SET OCXDFN=$ORDER(^OCXS(860.4,"B",OCXFNAM,0))
+4 IF '$LENGTH($GET(OCXFNAM))
QUIT 0
IF 'OCXCON
QUIT 0
+5 SET OCXLINK=0
FOR
SET OCXLINK=$ORDER(^OCXS(860.4,OCXDFN,"LINK",OCXLINK))
IF 'OCXLINK
QUIT
IF (OCXLINK=OCXCON)
QUIT
+6 IF OCXLINK
QUIT +OCXDFN
QUIT 0
+7 ;
GETDTYP(OCXDF,OCXCON) ;
+1 ;
+2 NEW OCXLINK,OCXATT
+3 SET OCXDF=+$GET(OCXDF)
SET OCXCON=+$GET(OCXCON)
+4 IF 'OCXDF
QUIT ""
IF 'OCXCON
QUIT ""
+5 SET OCXLINK=$GET(^OCXS(860.4,+OCXDF,"LINK",OCXCON,"DATAPATH"))
+6 IF '$LENGTH(OCXLINK)
QUIT ""
+7 SET OCXLINK=$ORDER(^OCXS(863.3,"B",OCXLINK,0))
IF 'OCXLINK
QUIT ""
+8 SET OCXATT=$PIECE($GET(^OCXS(863.3,OCXLINK,0)),U,5)
IF 'OCXATT
QUIT ""
+9 QUIT $$GETPARM(34,OCXATT,"DATA TYPE")
+10 ;
GETPARM(FILE,INST,PARM) ;
+1 IF '$LENGTH(FILE)
QUIT ""
IF '$LENGTH(INST)
QUIT ""
IF '$LENGTH(PARM)
QUIT ""
+2 NEW OCXP,OCXP1,OCXI,OCXGL
+3 SET OCXGL="^OCXS"
IF (FILE=1)
SET OCXGL="^OCXD"
IF (FILE=7)
SET OCXGL="^OCXD"
IF (FILE=10)
SET OCXGL="^OCXD"
SET FILE=FILE/10+860
+4 IF '$DATA(@OCXGL@(+FILE,0))
QUIT ""
+5 IF (PARM=+PARM)
IF $DATA(^OCXS(863.8,PARM,0))
SET OCXP=PARM
+6 IF '$TEST
SET OCXP=$ORDER(^OCXS(863.8,"B",PARM,0))
+7 IF 'OCXP
QUIT ""
+8 IF (INST=+INST)
IF $DATA(@OCXGL@(FILE,INST,0))
SET OCXI=INST
+9 IF '$TEST
SET OCXI=$ORDER(@OCXGL@(FILE,"B",INST,0))
+10 IF 'OCXI
QUIT ""
SET OCXP1=$ORDER(@OCXGL@(FILE,OCXI,"PAR","B",OCXP,0))
IF 'OCXP1
QUIT ""
+11 QUIT $GET(@OCXGL@(FILE,OCXI,"PAR",OCXP1,"VAL"))
+12 ;
LAST(ROOT,ELEM,INDEX,PARAM,CD) QUIT $$LAST^OCXOCMPJ(ROOT,ELEM,INDEX,PARAM,.CD)
FIRST(ROOT,ELEM,INDEX,PARAM,CD) QUIT $$FIRST^OCXOCMPJ(ROOT,ELEM,INDEX,PARAM,.CD)
RANGE(ROOT,ELEM,INDEX,PARAM,CD) QUIT $$RANGE^OCXOCMPK(ROOT,ELEM,INDEX,PARAM,.CD)
ANY(ROOT,ELEM,INDEX,PARAM,CD) QUIT $$ANY^OCXOCMPK(ROOT,ELEM,INDEX,PARAM,.CD)
+1 ;