| 1 | OCXOCMPL ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Compile Complex Rule Element Expressions) ;10/29/98  12:37
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32**;Dec 17,1997
 | 
|---|
| 3 |  ;;  ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | EN ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  Q
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 | GETC(OCXD0,OCXEXP,OCXDTYP,OCXCD) ;
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  N OCXCHR,OCXCOD1,OCXCODE,OCXD2,OCXNULL,OCXOPC,OCXOPER,OCXOPN,OCXP,OCXPOS,OCXPTR1,OCXPTR2,OCXVNAM,OCXITEM
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  F OCXPTR1=1:1:$L(OCXEXP) S OCXCHR=$E(OCXEXP,OCXPTR1) D
 | 
|---|
| 14 |  .;
 | 
|---|
| 15 |  .I (OCXCHR="|") D  Q
 | 
|---|
| 16 |  ..F OCXPTR2=(OCXPTR1+1):1:$L(OCXEXP) Q:($E(OCXEXP,OCXPTR2)="|")
 | 
|---|
| 17 |  ..S OCXITEM($O(OCXITEM(""),-1)+1)=$$STSPAC($E(OCXEXP,OCXPTR1+1,OCXPTR2-1)),OCXPTR1=OCXPTR2
 | 
|---|
| 18 |  .;
 | 
|---|
| 19 |  .I (OCXCHR="""") D  Q
 | 
|---|
| 20 |  ..F OCXPTR2=(OCXPTR1+1):1:$L(OCXEXP) Q:($E(OCXEXP,OCXPTR2)="""")
 | 
|---|
| 21 |  ..S OCXITEM($O(OCXITEM(""),-1)+1)=$$STSPAC($E(OCXEXP,OCXPTR1+1,OCXPTR2-1)),OCXPTR1=OCXPTR2
 | 
|---|
| 22 |  .;
 | 
|---|
| 23 |  .I (OCXCHR?1A) D  Q
 | 
|---|
| 24 |  ..F OCXPTR2=(OCXPTR1+1):1:$L(OCXEXP) Q:($E(OCXEXP,OCXPTR2)="""")  Q:($E(OCXEXP,OCXPTR2)="|")
 | 
|---|
| 25 |  ..S OCXITEM($O(OCXITEM(""),-1)+1)=$$STSPAC($E(OCXEXP,OCXPTR1,OCXPTR2-1)),OCXPTR1=OCXPTR2-1
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  S OCXOPER=$$OPER(OCXITEM(2),OCXDTYP)
 | 
|---|
| 28 |  I '(OCXOPER) D WARN^OCXOCMPV("Operator/Function ("_OCXDTYP_") '"_OCXITEM(2)_"' not defined...",3,OCXEL,$P($T(+1)," ",1)) Q ""
 | 
|---|
| 29 |  S OCXOPN=$P($G(^OCXS(863.9,OCXOPER,0)),U,1)
 | 
|---|
| 30 |  S OCXOPC=$$GETPARM^OCXOCMPE(39,OCXOPER,"OCXO GENERATE CODE FUNCTION")
 | 
|---|
| 31 |  I '$L(OCXOPC) D WARN^OCXOCMPV("'"_OCXOPN_"' Operator 'OCXO GENERATE CODE FUNCTION' parameter not defined",3,OCXEL,$P($T(+1)," ",1)) Q ""
 | 
|---|
| 32 |  S:'(OCXOPC=+OCXOPC) OCXOPC=$$GETIEN("^OCXS(863.7)",OCXOPC)
 | 
|---|
| 33 |  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 ""
 | 
|---|
| 34 |  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 ""
 | 
|---|
| 35 |  S OCXD2=0 F  S OCXD2=$O(^OCXS(863.7,+OCXOPC,"PAR",OCXD2)) Q:'OCXD2  D
 | 
|---|
| 36 |  .N OCXPOS,OCXVNAM
 | 
|---|
| 37 |  .S OCXPOS=+$G(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,"IN")) Q:'OCXPOS  Q:$D(OCXP(OCXPOS))
 | 
|---|
| 38 |  .S OCXVNAM=+$G(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,0)) Q:'OCXVNAM
 | 
|---|
| 39 |  .S OCXVNAM=$P($G(^OCXS(863.8,+OCXVNAM,0)),U,2) Q:'$L(OCXVNAM)
 | 
|---|
| 40 |  .S OCXP(+OCXPOS)=OCXVNAM,OCXP(OCXVNAM)=""
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  S OCXNULL=$$GETPARM(39,OCXOPER,"OCXO NULL VALUE ALLOWED")
 | 
|---|
| 43 |  I '$D(OCXP("PDFLD")) D WARN^OCXOCMPV("CMPE1 Primary Data field not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
 | 
|---|
| 44 |  I $D(OCXP("PDFLD")) S OCXP("PDFLD")=OCXITEM(1)
 | 
|---|
| 45 |  I '$L(OCXP("PDFLD")) D WARN^OCXOCMPV("CMPE2 Primary Data field not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  I $D(OCXP("CVAL")) D  I '$L(OCXP("CVAL")) D WARN^OCXOCMPV("Comparison Value/Field not defined",3,OCXD0,$P($T(+1)," ",1)) Q ""
 | 
|---|
| 48 |  .S OCXP("CVAL")=OCXITEM(3)
 | 
|---|
| 49 |  .I '$L(OCXP("CVAL")) S OCXP("CVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD2",OCXOPDT,OCXNULL)
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  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 ""
 | 
|---|
| 52 |  .S OCXP("CLVAL")=OCXITEM(3)
 | 
|---|
| 53 |  .I '$L(OCXP("CLVAL")) S OCXP("CLVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD2",OCXOPDT,OCXNULL)
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  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 ""
 | 
|---|
| 56 |  .S OCXP("CHVAL")=OCXITEM(5)
 | 
|---|
| 57 |  .I '$L(OCXP("CHVAL")) S OCXP("CHVAL")=$$GV^OCXOCMPE(OCXD0,OCXD1,"DFLD3",OCXOPDT,OCXNULL)
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  S OCXCOD1="S OCXCODE=$$"_OCXP
 | 
|---|
| 60 |  I $O(OCXP(0)) S OCXCOD1=OCXCOD1_"(",OCXD2=0 F  S OCXD2=$O(OCXP(OCXD2)) Q:'OCXD2  D
 | 
|---|
| 61 |  .I ($E(OCXP(OCXP(OCXD2)),1)="""") S OCXCOD1=OCXCOD1_""""""_OCXP(OCXP(OCXD2))_""""""
 | 
|---|
| 62 |  .E  S OCXCOD1=OCXCOD1_""""_OCXP(OCXP(OCXD2))_""""
 | 
|---|
| 63 |  .I $O(OCXP(OCXD2)) S OCXCOD1=OCXCOD1_","
 | 
|---|
| 64 |  .E  S OCXCOD1=OCXCOD1_")"
 | 
|---|
| 65 |  X OCXCOD1
 | 
|---|
| 66 |  I '$L(OCXCODE) D WARN^OCXOCMPV("Execute code missing for '"_OCXCOD1_"'",2,OCXD0,$P($T(+1)," ",1)) Q ""
 | 
|---|
| 67 |  S OCXCD="I "_OCXCODE_" D @@@@" Q OCXWARN
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | GETIEN(FILE,KEY) ;
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  N IEN1,IEN2,LEN,SHORT
 | 
|---|
| 72 |  F LEN=$L(KEY):-1:0 I LEN Q:$D(@FILE@("B",$E(KEY,1,LEN)))
 | 
|---|
| 73 |  Q:'LEN 0 S SHORT=$E(KEY,1,LEN)
 | 
|---|
| 74 |  S IEN1=0 F  S IEN1=$O(@FILE@("B",SHORT,IEN1)) Q:'IEN1  Q:($P($G(@FILE@(IEN1,0)),U,1)=KEY)
 | 
|---|
| 75 |  S IEN2=IEN1 F  S IEN2=$O(@FILE@("B",SHORT,IEN2)) Q:'IEN2  Q:($P($G(@FILE@(IEN2,0)),U,1)=KEY)
 | 
|---|
| 76 |  I IEN1,IEN2 Q -1
 | 
|---|
| 77 |  Q IEN1
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | OPER(OPER,DTYP) ;
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  N DTYPN,OPERN
 | 
|---|
| 82 |  S DTYPN=$O(^OCXS(864.1,"B",DTYP,0)) Q:'DTYPN 0
 | 
|---|
| 83 |  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)
 | 
|---|
| 84 |  Q:OPERN OPERN
 | 
|---|
| 85 |  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)
 | 
|---|
| 86 |  Q OPERN
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | GETPARM(FILE,INST,PARM) ;
 | 
|---|
| 89 |  Q:'$L(FILE) "" Q:'$L(INST) "" Q:'$L(PARM) ""
 | 
|---|
| 90 |  N OCXP,OCXP1,OCXI,OCXGL
 | 
|---|
| 91 |  S OCXGL="^OCXS" S:(FILE=1) OCXGL="^OCXD" S:(FILE=7) OCXGL="^OCXD" S:(FILE=10) OCXGL="^OCXD" S FILE=FILE/10+860
 | 
|---|
| 92 |  Q:'$D(@OCXGL@(+FILE,0)) ""
 | 
|---|
| 93 |  I (PARM=+PARM),$D(^OCXS(863.8,PARM,0)) S OCXP=PARM
 | 
|---|
| 94 |  E  S OCXP=$O(^OCXS(863.8,"B",PARM,0))
 | 
|---|
| 95 |  Q:'OCXP ""
 | 
|---|
| 96 |  I (INST=+INST),$D(@OCXGL@(FILE,INST,0)) S OCXI=INST
 | 
|---|
| 97 |  E  S OCXI=$O(@OCXGL@(FILE,"B",INST,0))
 | 
|---|
| 98 |  Q:'OCXI ""
 | 
|---|
| 99 |  S OCXP1=$O(@OCXGL@(FILE,OCXI,"PAR","B",OCXP,0)) S:'OCXP1 OCXP1=$O(@OCXGL@(FILE,OCXI,"PAR","B",PARM,0))
 | 
|---|
| 100 |  Q:'$L(OCXP1) ""
 | 
|---|
| 101 |  Q $G(@OCXGL@(FILE,OCXI,"PAR",OCXP1,"VAL"))
 | 
|---|
| 102 | STSPAC(S) ;
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  N X
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  F X=1:1:$L(S) Q:'($E(S,X)=" ")
 | 
|---|
| 107 |  S S=$E(S,X,$L(S))
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  F X=$L(S):-1:1 Q:'($E(S,X)=" ")
 | 
|---|
| 110 |  S S=$E(S,1,X)
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  Q S
 | 
|---|
| 113 |  ;
 | 
|---|