OCXOCMPL ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Compile Complex Rule Element Expressions) ;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
;
EN ;
;
Q
;
GETC(OCXD0,OCXEXP,OCXDTYP,OCXCD) ;
;
N OCXCHR,OCXCOD1,OCXCODE,OCXD2,OCXNULL,OCXOPC,OCXOPER,OCXOPN,OCXP,OCXPOS,OCXPTR1,OCXPTR2,OCXVNAM,OCXITEM
;
F OCXPTR1=1:1:$L(OCXEXP) S OCXCHR=$E(OCXEXP,OCXPTR1) D
.;
.I (OCXCHR="|") D Q
..F OCXPTR2=(OCXPTR1+1):1:$L(OCXEXP) Q:($E(OCXEXP,OCXPTR2)="|")
..S OCXITEM($O(OCXITEM(""),-1)+1)=$$STSPAC($E(OCXEXP,OCXPTR1+1,OCXPTR2-1)),OCXPTR1=OCXPTR2
.;
.I (OCXCHR="""") D Q
..F OCXPTR2=(OCXPTR1+1):1:$L(OCXEXP) Q:($E(OCXEXP,OCXPTR2)="""")
..S OCXITEM($O(OCXITEM(""),-1)+1)=$$STSPAC($E(OCXEXP,OCXPTR1+1,OCXPTR2-1)),OCXPTR1=OCXPTR2
.;
.I (OCXCHR?1A) D Q
..F OCXPTR2=(OCXPTR1+1):1:$L(OCXEXP) Q:($E(OCXEXP,OCXPTR2)="""") Q:($E(OCXEXP,OCXPTR2)="|")
..S OCXITEM($O(OCXITEM(""),-1)+1)=$$STSPAC($E(OCXEXP,OCXPTR1,OCXPTR2-1)),OCXPTR1=OCXPTR2-1
;
S OCXOPER=$$OPER(OCXITEM(2),OCXDTYP)
I '(OCXOPER) D WARN^OCXOCMPV("Operator/Function ("_OCXDTYP_") '"_OCXITEM(2)_"' not defined...",3,OCXEL,$P($T(+1)," ",1)) Q ""
S OCXOPN=$P($G(^OCXS(863.9,OCXOPER,0)),U,1)
S OCXOPC=$$GETPARM^OCXOCMPE(39,OCXOPER,"OCXO GENERATE CODE FUNCTION")
I '$L(OCXOPC) D WARN^OCXOCMPV("'"_OCXOPN_"' Operator 'OCXO GENERATE CODE FUNCTION' parameter not defined",3,OCXEL,$P($T(+1)," ",1)) Q ""
S:'(OCXOPC=+OCXOPC) OCXOPC=$$GETIEN("^OCXS(863.7)",OCXOPC)
I '$D(^OCXS(863.7,+OCXOPC,0)) D WARN^OCXOCMPV("'"_OCXOPN_"' Operator 'OCXO GENERATE CODE FUNCTION' Public Function not defined",3,OCXEL,$P($T(+1)," ",1)) Q ""
S OCXP=$G(^OCXS(863.7,+OCXOPC,"EX")) I '$L(OCXP) D WARN^OCXOCMPV("Operator ("_(+OCXOPC)_") '"_$P($G(^OCXS(863.9,+OCXOPC,0)),U,1)_"' executable not defined",3,OCXEL,$P($T(+1)," ",1)) Q ""
S OCXD2=0 F S OCXD2=$O(^OCXS(863.7,+OCXOPC,"PAR",OCXD2)) Q:'OCXD2 D
.N OCXPOS,OCXVNAM
.S OCXPOS=+$G(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,"IN")) Q:'OCXPOS Q:$D(OCXP(OCXPOS))
.S OCXVNAM=+$G(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,0)) Q:'OCXVNAM
.S OCXVNAM=$P($G(^OCXS(863.8,+OCXVNAM,0)),U,2) Q:'$L(OCXVNAM)
.S OCXP(+OCXPOS)=OCXVNAM,OCXP(OCXVNAM)=""
;
S OCXNULL=$$GETPARM(39,OCXOPER,"OCXO NULL VALUE ALLOWED")
I '$D(OCXP("PDFLD")) D WARN^OCXOCMPV("CMPE1 Primary Data field not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
I $D(OCXP("PDFLD")) S OCXP("PDFLD")=OCXITEM(1)
I '$L(OCXP("PDFLD")) D WARN^OCXOCMPV("CMPE2 Primary Data field not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
;
I $D(OCXP("CVAL")) D I '$L(OCXP("CVAL")) D WARN^OCXOCMPV("Comparison Value/Field not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
.S OCXP("CVAL")=OCXITEM(3)
.I '$L(OCXP("CVAL")) S OCXP("CVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD2",OCXOPDT,OCXNULL)
;
I $D(OCXP("CLVAL")) D I '$L(OCXP("CLVAL")) D WARN^OCXOCMPV("Comparison Value/Field minimum value not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
.S OCXP("CLVAL")=OCXITEM(3)
.I '$L(OCXP("CLVAL")) S OCXP("CLVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD2",OCXOPDT,OCXNULL)
;
I $D(OCXP("CHVAL")) D I '$L(OCXP("CHVAL")) D WARN^OCXOCMPV("Comparison Value/Field maximum value not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
.S OCXP("CHVAL")=OCXITEM(5)
.I '$L(OCXP("CHVAL")) S OCXP("CHVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD3",OCXOPDT,OCXNULL)
;
S OCXCOD1="S OCXCODE=$$"_OCXP
I $O(OCXP(0)) S OCXCOD1=OCXCOD1_"(",OCXD2=0 F S OCXD2=$O(OCXP(OCXD2)) Q:'OCXD2 D
.I ($E(OCXP(OCXP(OCXD2)),1)="""") S OCXCOD1=OCXCOD1_""""""_OCXP(OCXP(OCXD2))_""""""
.E S OCXCOD1=OCXCOD1_""""_OCXP(OCXP(OCXD2))_""""
.I $O(OCXP(OCXD2)) S OCXCOD1=OCXCOD1_","
.E S OCXCOD1=OCXCOD1_")"
X OCXCOD1
I '$L(OCXCODE) D WARN^OCXOCMPV("Execute code missing for '"_OCXCOD1_"'",2,OCXD0,$P($T(+1)," ",1)) Q ""
S OCXCD="I "_OCXCODE_" D @@@@" Q OCXWARN
;
GETIEN(FILE,KEY) ;
;
N IEN1,IEN2,LEN,SHORT
F LEN=$L(KEY):-1:0 I LEN Q:$D(@FILE@("B",$E(KEY,1,LEN)))
Q:'LEN 0 S SHORT=$E(KEY,1,LEN)
S IEN1=0 F S IEN1=$O(@FILE@("B",SHORT,IEN1)) Q:'IEN1 Q:($P($G(@FILE@(IEN1,0)),U,1)=KEY)
S IEN2=IEN1 F S IEN2=$O(@FILE@("B",SHORT,IEN2)) Q:'IEN2 Q:($P($G(@FILE@(IEN2,0)),U,1)=KEY)
I IEN1,IEN2 Q -1
Q IEN1
;
OPER(OPER,DTYP) ;
;
N DTYPN,OPERN
S DTYPN=$O(^OCXS(864.1,"B",DTYP,0)) Q:'DTYPN 0
S OPERN=0 F S OPERN=$O(^OCXS(863.9,"B",OPER,OPERN)) Q:'OPERN Q:($P($G(^OCXS(863.9,+OPERN,0)),U,2)=DTYPN)
Q:OPERN OPERN
S OPERN=0 F S OPERN=$O(^OCXS(863.9,"SYN",OPER,OPERN)) Q:'OPERN Q:($P($G(^OCXS(863.9,+OPERN,0)),U,2)=DTYPN)
Q OPERN
;
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)) S:'OCXP1 OCXP1=$O(@OCXGL@(FILE,OCXI,"PAR","B",PARM,0))
Q:'$L(OCXP1) ""
Q $G(@OCXGL@(FILE,OCXI,"PAR",OCXP1,"VAL"))
STSPAC(S) ;
;
N X
;
F X=1:1:$L(S) Q:'($E(S,X)=" ")
S S=$E(S,X,$L(S))
;
F X=$L(S):-1:1 Q:'($E(S,X)=" ")
S S=$E(S,1,X)
;
Q S
;
OCXOCMPL ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Compile Complex Rule Element Expressions) ;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 ;
EN ;
+1 ;
+2 QUIT
+3 ;
GETC(OCXD0,OCXEXP,OCXDTYP,OCXCD) ;
+1 ;
+2 NEW OCXCHR,OCXCOD1,OCXCODE,OCXD2,OCXNULL,OCXOPC,OCXOPER,OCXOPN,OCXP,OCXPOS,OCXPTR1,OCXPTR2,OCXVNAM,OCXITEM
+3 ;
+4 FOR OCXPTR1=1:1:$LENGTH(OCXEXP)
SET OCXCHR=$EXTRACT(OCXEXP,OCXPTR1)
Begin DoDot:1
+5 ;
+6 IF (OCXCHR="|")
Begin DoDot:2
+7 FOR OCXPTR2=(OCXPTR1+1):1:$LENGTH(OCXEXP)
IF ($EXTRACT(OCXEXP,OCXPTR2)="|")
QUIT
+8 SET OCXITEM($ORDER(OCXITEM(""),-1)+1)=$$STSPAC($EXTRACT(OCXEXP,OCXPTR1+1,OCXPTR2-1))
SET OCXPTR1=OCXPTR2
End DoDot:2
QUIT
+9 ;
+10 IF (OCXCHR="""")
Begin DoDot:2
+11 FOR OCXPTR2=(OCXPTR1+1):1:$LENGTH(OCXEXP)
IF ($EXTRACT(OCXEXP,OCXPTR2)="""")
QUIT
+12 SET OCXITEM($ORDER(OCXITEM(""),-1)+1)=$$STSPAC($EXTRACT(OCXEXP,OCXPTR1+1,OCXPTR2-1))
SET OCXPTR1=OCXPTR2
End DoDot:2
QUIT
+13 ;
+14 IF (OCXCHR?1A)
Begin DoDot:2
+15 FOR OCXPTR2=(OCXPTR1+1):1:$LENGTH(OCXEXP)
IF ($EXTRACT(OCXEXP,OCXPTR2)="""")
QUIT
IF ($EXTRACT(OCXEXP,OCXPTR2)="|")
QUIT
+16 SET OCXITEM($ORDER(OCXITEM(""),-1)+1)=$$STSPAC($EXTRACT(OCXEXP,OCXPTR1,OCXPTR2-1))
SET OCXPTR1=OCXPTR2-1
End DoDot:2
QUIT
End DoDot:1
+17 ;
+18 SET OCXOPER=$$OPER(OCXITEM(2),OCXDTYP)
+19 IF '(OCXOPER)
DO WARN^OCXOCMPV("Operator/Function ("_OCXDTYP_") '"_OCXITEM(2)_"' not defined...",3,OCXEL,$PIECE($TEXT(+1)," ",1))
QUIT ""
+20 SET OCXOPN=$PIECE($GET(^OCXS(863.9,OCXOPER,0)),U,1)
+21 SET OCXOPC=$$GETPARM^OCXOCMPE(39,OCXOPER,"OCXO GENERATE CODE FUNCTION")
+22 IF '$LENGTH(OCXOPC)
DO WARN^OCXOCMPV("'"_OCXOPN_"' Operator 'OCXO GENERATE CODE FUNCTION' parameter not defined",3,OCXEL,$PIECE($TEXT(+1)," ",1))
QUIT ""
+23 IF '(OCXOPC=+OCXOPC)
SET OCXOPC=$$GETIEN("^OCXS(863.7)",OCXOPC)
+24 IF '$DATA(^OCXS(863.7,+OCXOPC,0))
DO WARN^OCXOCMPV("'"_OCXOPN_"' Operator 'OCXO GENERATE CODE FUNCTION' Public Function not defined",3,OCXEL,$PIECE($TEXT(+1)," ",1))
QUIT ""
+25 SET OCXP=$GET(^OCXS(863.7,+OCXOPC,"EX"))
IF '$LENGTH(OCXP)
DO WARN^OCXOCMPV("Operator ("_(+OCXOPC)_") '"_$PIECE($GET(^OCXS(863.9,+OCXOPC,0)),U,1)_"' executable not defined",3,OCXEL,$PIECE($TEXT(+1)," ",1))
QUIT ""
+26 SET OCXD2=0
FOR
SET OCXD2=$ORDER(^OCXS(863.7,+OCXOPC,"PAR",OCXD2))
IF 'OCXD2
QUIT
Begin DoDot:1
+27 NEW OCXPOS,OCXVNAM
+28 SET OCXPOS=+$GET(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,"IN"))
IF 'OCXPOS
QUIT
IF $DATA(OCXP(OCXPOS))
QUIT
+29 SET OCXVNAM=+$GET(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,0))
IF 'OCXVNAM
QUIT
+30 SET OCXVNAM=$PIECE($GET(^OCXS(863.8,+OCXVNAM,0)),U,2)
IF '$LENGTH(OCXVNAM)
QUIT
+31 SET OCXP(+OCXPOS)=OCXVNAM
SET OCXP(OCXVNAM)=""
End DoDot:1
+32 ;
+33 SET OCXNULL=$$GETPARM(39,OCXOPER,"OCXO NULL VALUE ALLOWED")
+34 IF '$DATA(OCXP("PDFLD"))
DO WARN^OCXOCMPV("CMPE1 Primary Data field not defined",3,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT ""
+35 IF $DATA(OCXP("PDFLD"))
SET OCXP("PDFLD")=OCXITEM(1)
+36 IF '$LENGTH(OCXP("PDFLD"))
DO WARN^OCXOCMPV("CMPE2 Primary Data field not defined",3,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT ""
+37 ;
+38 IF $DATA(OCXP("CVAL"))
Begin DoDot:1
+39 SET OCXP("CVAL")=OCXITEM(3)
+40 IF '$LENGTH(OCXP("CVAL"))
SET OCXP("CVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD2",OCXOPDT,OCXNULL)
End DoDot:1
IF '$LENGTH(OCXP("CVAL"))
DO WARN^OCXOCMPV("Comparison Value/Field not defined",3,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT ""
+41 ;
+42 IF $DATA(OCXP("CLVAL"))
Begin DoDot:1
+43 SET OCXP("CLVAL")=OCXITEM(3)
+44 IF '$LENGTH(OCXP("CLVAL"))
SET OCXP("CLVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD2",OCXOPDT,OCXNULL)
End DoDot:1
IF '$LENGTH(OCXP("CLVAL"))
DO WARN^OCXOCMPV("Comparison Value/Field minimum value not defined",3,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT ""
+45 ;
+46 IF $DATA(OCXP("CHVAL"))
Begin DoDot:1
+47 SET OCXP("CHVAL")=OCXITEM(5)
+48 IF '$LENGTH(OCXP("CHVAL"))
SET OCXP("CHVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD3",OCXOPDT,OCXNULL)
End DoDot:1
IF '$LENGTH(OCXP("CHVAL"))
DO WARN^OCXOCMPV("Comparison Value/Field maximum value not defined",3,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT ""
+49 ;
+50 SET OCXCOD1="S OCXCODE=$$"_OCXP
+51 IF $ORDER(OCXP(0))
SET OCXCOD1=OCXCOD1_"("
SET OCXD2=0
FOR
SET OCXD2=$ORDER(OCXP(OCXD2))
IF 'OCXD2
QUIT
Begin DoDot:1
+52 IF ($EXTRACT(OCXP(OCXP(OCXD2)),1)="""")
SET OCXCOD1=OCXCOD1_""""""_OCXP(OCXP(OCXD2))_""""""
+53 IF '$TEST
SET OCXCOD1=OCXCOD1_""""_OCXP(OCXP(OCXD2))_""""
+54 IF $ORDER(OCXP(OCXD2))
SET OCXCOD1=OCXCOD1_","
+55 IF '$TEST
SET OCXCOD1=OCXCOD1_")"
End DoDot:1
+56 XECUTE OCXCOD1
+57 IF '$LENGTH(OCXCODE)
DO WARN^OCXOCMPV("Execute code missing for '"_OCXCOD1_"'",2,OCXD0,$PIECE($TEXT(+1)," ",1))
QUIT ""
+58 SET OCXCD="I "_OCXCODE_" D @@@@"
QUIT OCXWARN
+59 ;
GETIEN(FILE,KEY) ;
+1 ;
+2 NEW IEN1,IEN2,LEN,SHORT
+3 FOR LEN=$LENGTH(KEY):-1:0
IF LEN
IF $DATA(@FILE@("B",$EXTRACT(KEY,1,LEN)))
QUIT
+4 IF 'LEN
QUIT 0
SET SHORT=$EXTRACT(KEY,1,LEN)
+5 SET IEN1=0
FOR
SET IEN1=$ORDER(@FILE@("B",SHORT,IEN1))
IF 'IEN1
QUIT
IF ($PIECE($GET(@FILE@(IEN1,0)),U,1)=KEY)
QUIT
+6 SET IEN2=IEN1
FOR
SET IEN2=$ORDER(@FILE@("B",SHORT,IEN2))
IF 'IEN2
QUIT
IF ($PIECE($GET(@FILE@(IEN2,0)),U,1)=KEY)
QUIT
+7 IF IEN1
IF IEN2
QUIT -1
+8 QUIT IEN1
+9 ;
OPER(OPER,DTYP) ;
+1 ;
+2 NEW DTYPN,OPERN
+3 SET DTYPN=$ORDER(^OCXS(864.1,"B",DTYP,0))
IF 'DTYPN
QUIT 0
+4 SET OPERN=0
FOR
SET OPERN=$ORDER(^OCXS(863.9,"B",OPER,OPERN))
IF 'OPERN
QUIT
IF ($PIECE($GET(^OCXS(863.9,+OPERN,0)),U,2)=DTYPN)
QUIT
+5 IF OPERN
QUIT OPERN
+6 SET OPERN=0
FOR
SET OPERN=$ORDER(^OCXS(863.9,"SYN",OPER,OPERN))
IF 'OPERN
QUIT
IF ($PIECE($GET(^OCXS(863.9,+OPERN,0)),U,2)=DTYPN)
QUIT
+7 QUIT OPERN
+8 ;
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 ""
+11 SET OCXP1=$ORDER(@OCXGL@(FILE,OCXI,"PAR","B",OCXP,0))
IF 'OCXP1
SET OCXP1=$ORDER(@OCXGL@(FILE,OCXI,"PAR","B",PARM,0))
+12 IF '$LENGTH(OCXP1)
QUIT ""
+13 QUIT $GET(@OCXGL@(FILE,OCXI,"PAR",OCXP1,"VAL"))
STSPAC(S) ;
+1 ;
+2 NEW X
+3 ;
+4 FOR X=1:1:$LENGTH(S)
IF '($EXTRACT(S,X)=" ")
QUIT
+5 SET S=$EXTRACT(S,X,$LENGTH(S))
+6 ;
+7 FOR X=$LENGTH(S):-1:1
IF '($EXTRACT(S,X)=" ")
QUIT
+8 SET S=$EXTRACT(S,1,X)
+9 ;
+10 QUIT S
+11 ;