| 1 | OCXOCMPF ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Parse a Rule Relation Expression continued...) ;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 |  Q
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | SYNTXER(EXP,PTR,FLD1,FLD2) ;
 | 
|---|
| 8 |  N OCXWTXT,OCXDASH
 | 
|---|
| 9 |  S OCXDASH="",$P(OCXDASH,"_",250)="_"
 | 
|---|
| 10 |  S OCXWTXT(1)=" "_EXP
 | 
|---|
| 11 |  S OCXWTXT(2)="_"_$E(OCXDASH,1,$L($P(EXP," ",1,PTR-1)))_"/"
 | 
|---|
| 12 |  S OCXWTXT(3)=" "
 | 
|---|
| 13 |  I 'FLD1,FLD2 S OCXWTXT(4)=" Syntax Error: A Boolean expression cannot start with a  '"_$$TKTXT(FLD2)_"'."
 | 
|---|
| 14 |  I 'FLD1,'FLD2 S OCXWTXT(4)=" Unknown Symbol:  '"_$P(EXP," ",PTR)_"'."
 | 
|---|
| 15 |  I FLD1,FLD2 S OCXWTXT(4)=" Syntax Error: A '"_$$TKTXT(FLD2)_"' cannot follow a '"_$$TKTXT(FLD1)_"'."
 | 
|---|
| 16 |  I '$D(OCXWTXT(4)) S OCXWTXT(4)="Unknown error with:  '"_$P(EXP," ",PTR)_"'."
 | 
|---|
| 17 |  D WARN^OCXOCMPV(.OCXWTXT,2,OCXD0,$P($T(+1)," ",1)) Q
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | OPCODE(TXT) ;
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  N OPNUM,SUB,OPFUNC,OPCNT,OCXX,OCXPFN
 | 
|---|
| 23 |  S OPNUM=0 F  S OPNUM=$O(^OCXS(863.9,"B",TXT,OPNUM)) Q:'OPNUM  Q:($P($G(^OCXS(863.9,OPNUM,0)),U,2)=OCXBOOL)
 | 
|---|
| 24 |  I 'OPNUM F  S OPNUM=$O(^OCXS(863.9,"SYN",TXT,OPNUM)) Q:'OPNUM  Q:($P($G(^OCXS(863.9,OPNUM,0)),U,2)=OCXBOOL)
 | 
|---|
| 25 |  Q:'OPNUM ""
 | 
|---|
| 26 |  S OPFUNC=$$GETPARM(39,OPNUM,"OCXO GENERATE CODE FUNCTION")
 | 
|---|
| 27 |  I OPFUNC S OCXPFN=+OPFUNC
 | 
|---|
| 28 |  E  S OCXPFN=0 F  S OCXPFN=$O(^OCXS(863.7,"B",$E(OPFUNC,1,30),OCXPFN)) Q:'OCXPFN  Q:($P($G(^OCXS(863.7,+OCXPFN,0)),U,1)=OPFUNC)
 | 
|---|
| 29 |  S OCXX=0 F OPCNT=0:1 S OCXX=$O(^OCXS(863.7,+OCXPFN,"PAR",OCXX)) Q:'OCXX
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  Q:(OPCNT=1) 0
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  Q OPCNT_U_OPFUNC
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | GETPARM(FILE,INST,PARM) ;
 | 
|---|
| 36 |  Q:'$L(FILE) "" Q:'$L(INST) "" Q:'$L(PARM) ""
 | 
|---|
| 37 |  N OCXP,OCXP1,OCXI,OCXGL
 | 
|---|
| 38 |  S OCXGL="^OCXS" S:(FILE=1) OCXGL="^OCXD" S:(FILE=7) OCXGL="^OCXD" S:(FILE=10) OCXGL="^OCXD" S FILE=FILE/10+860
 | 
|---|
| 39 |  Q:'$D(@OCXGL@(+FILE,0)) ""
 | 
|---|
| 40 |  I (PARM=+PARM),$D(^OCXS(863.8,PARM,0)) S OCXP=PARM
 | 
|---|
| 41 |  E  S OCXP=$O(^OCXS(863.8,"B",PARM,0))
 | 
|---|
| 42 |  Q:'OCXP ""
 | 
|---|
| 43 |  I (INST=+INST),$D(@OCXGL@(FILE,INST,0)) S OCXI=INST
 | 
|---|
| 44 |  E  S OCXI=$O(@OCXGL@(FILE,"B",INST,0))
 | 
|---|
| 45 |  Q:'OCXI ""
 | 
|---|
| 46 |  S OCXP1=$O(@OCXGL@(FILE,OCXI,"PAR","B",OCXP,0)) S:'OCXP1 OCXP1=$O(@OCXGL@(FILE,OCXI,"PAR","B",PARM,0))
 | 
|---|
| 47 |  Q:'OCXP1 ""
 | 
|---|
| 48 |  Q $G(@OCXGL@(FILE,OCXI,"PAR",OCXP1,"VAL"))
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | PARCNT(EXP) ;
 | 
|---|
| 51 |  N CNT,PTR
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  S CNT=$L(EXP,"(")-$L(EXP,")") I CNT D  Q ""
 | 
|---|
| 54 |  .N MSG
 | 
|---|
| 55 |  .S MSG(1)=" "_EXP,MSG(2)=" "
 | 
|---|
| 56 |  .S MSG(3)=" "_$S((CNT<0):(-CNT),1:CNT)_" Unmatched "_$S((CNT>0):"LEFT '('",1:"RIGHT ')'")_" parenthesis in expression"
 | 
|---|
| 57 |  .S MSG(4)="   PARCNT^OCXOCMPF "
 | 
|---|
| 58 |  .D WARN^OCXOCMPV(.MSG,2,OCXD0,$P($T(+1)," ",1)) Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  F  Q:'(EXP["(")  S EXP=$P(EXP,"(",1)_" @ "_$P(EXP,"(",2,999)
 | 
|---|
| 61 |  S EXP=$TR(EXP,"@","(")
 | 
|---|
| 62 |  F  Q:'(EXP[")")  S EXP=$P(EXP,")",1)_" @ "_$P(EXP,")",2,999)
 | 
|---|
| 63 |  S EXP=$TR(EXP,"@",")")
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 |  F  Q:'(EXP["  ")  S EXP=$P(EXP,"  ",1)_" "_$P(EXP,"  ",2,999)
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 |  F PTR=1:1:$L(EXP) Q:'($E(EXP,PTR)=" ")
 | 
|---|
| 68 |  S EXP=$E(EXP,PTR,$L(EXP))
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  F PTR=$L(EXP):-1:1 Q:'($E(EXP,PTR)=" ")
 | 
|---|
| 71 |  S EXP=$E(EXP,1,PTR)
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  Q EXP
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | TKTXT(T) Q $S(T=1:"Data Field 1",T=2:"Data Field 2",T=3:"AND Operator",T=4:"OR Operator",T=5:"Left Parenthesis",T=6:"Right Parenthesis",1:"Token not found")
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | EXPAND(OPFUNC,OCXP) ;
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  N OCXCOD1,OCXCODE,OCXD1
 | 
|---|
| 80 |  S OCXCODE="",OCXP=$G(^OCXS(863.7,+OPFUNC,"EX")),OCXCOD1="S OCXCODE=$$"_OCXP
 | 
|---|
| 81 |  S OCXD1=0 F  S OCXD1=$O(^OCXS(863.7,+OPFUNC,"PAR",OCXD1)) Q:'OCXD1  D
 | 
|---|
| 82 |  .N OCXPOS,OCXVNAM
 | 
|---|
| 83 |  .S OCXPOS=+$G(^OCXS(863.7,+OPFUNC,"PAR",OCXD1,"IN")) Q:'OCXPOS  Q:$D(OCXP(OCXPOS))
 | 
|---|
| 84 |  .S OCXVNAM=+$G(^OCXS(863.7,+OPFUNC,"PAR",OCXD1,0)) Q:'OCXVNAM
 | 
|---|
| 85 |  .S OCXVNAM=$P($G(^OCXS(863.8,+OCXVNAM,0)),U,2) Q:'$L(OCXVNAM)
 | 
|---|
| 86 |  .S OCXP(+OCXPOS)=OCXVNAM
 | 
|---|
| 87 |  I $O(OCXP(0)) D
 | 
|---|
| 88 |  .S OCXCOD1=OCXCOD1_"(",OCXD1=0 F  S OCXD1=$O(OCXP(OCXD1)) Q:'OCXD1  D
 | 
|---|
| 89 |  ..I ($E(OCXP(OCXP(OCXD1)),1)="""") S OCXCOD1=OCXCOD1_""""""_OCXP(OCXP(OCXD1))_""""""
 | 
|---|
| 90 |  ..E  S OCXCOD1=OCXCOD1_""""_OCXP(OCXP(OCXD1))_""""
 | 
|---|
| 91 |  ..I $O(OCXP(OCXD1)) S OCXCOD1=OCXCOD1_","
 | 
|---|
| 92 |  ..E  S OCXCOD1=OCXCOD1_")"
 | 
|---|
| 93 |  .X OCXCOD1
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  Q OCXCODE
 | 
|---|
| 96 |  ;
 | 
|---|