Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BGUCND

BGUCND.m

Go to the documentation of this file.
  1. BGUCND ; IHS/OIT/MJL - CONDITION HANDLER ; [ 12/01/2005 3:27 PM ]
  1. ;;1.5;BGU;**2**;MAY 26, 2005
  1. ;
  1. ; BLDCND BUILDS THE CONDITION ARRAY THAT IS USED BY CND TO SET A TRUTH
  1. ; VALUE. CALL BLDCND DURING THE CALLING APPLICATIONS INIT OR WHENEVER
  1. ; A NEW CONDITON IS NEEDED.
  1. ;
  1. ; DO INIT FIRST IF TESTING SEPARATELY
  1. ;
  1. ; USE FOR TESTING -- D INIT,BLDCND,CND
  1. D INIT,BLDCND,CND,KILL
  1. Q
  1. ;
  1. KILL ;EP Called by BGULIST
  1. K BGUCARY,BGUCC,BGUCEXP,BGUCEXP1,BGUCF,BGUCFID,BGUCLCNJ,BGUCLSEG,BGUCLV,BGUCMXL,BGUCN,BGUCN1,BGUCN2,BGUCN3,BGUCN4,BGUCND,BGUCNDS1,BGUCNJN,BGUCNJP,BGUCNOT,BGUCONJ,BGUCQ,BGUCSBJ,BGUCSBS,BGUCSEG,BGUCSUB,BGUCTV,BGUCVAL,BGUCWRDS
  1. K BGUCX,BGUTV(1)
  1. Q
  1. ;
  1. INIT ;
  1. S U="^",BGUFILE=2
  1. ;S BGUCNDS="SEX=""M"" OR (AGE .GT. 64 AND (S>139 OR D >89) AND W<300) AND SEX .PM. 1""M"""
  1. S BGUCNDS=".02=""M"" AND .033 .GT. 64"
  1. ;S BGUV(BGUFILE,"SEX")="M",BGUV(BGUFILE,"AGE")=65,BGUV(BGUFILE,"S")=140,BGUV(BGUFILE,"D")=89,BGUV(BGUFILE,"W")=300
  1. ;S BGUV(5,".02")="M",BGUV(BGUFILE,"AGE")=65,BGUV(BGUFILE,"S")=140,BGUV(BGUFILE,"D")=89,BGUV(BGUFILE,"W")=300
  1. Q
  1. ;
  1. ; Input : BGUCNDS
  1. ; Output : BGUCND
  1. BLDCND ;EP Called by BGULIST2
  1. K BGUCND
  1. S BGUCLV=0,BGUCMXL=0,BGUCARY="BGUCND"
  1. S BGUCOND="LT:<,LE:<=,GT:>,GE:>=,EQ:=,NE:<>,CT:[,NC:'[,PM:?,NP:'?"
  1. F BGUCN=1:1:$L(BGUCOND,",") S BGUCOND1=$P(BGUCOND,",",BGUCN),BGUCOND($P(BGUCOND1,":",1))=$P(BGUCOND1,":",2)
  1. S BGUCOND="" K BGUCOND1
  1. F BGUCN=1:1:$L(BGUCNDS,"(") S BGUCNDS1=$P(BGUCNDS,"(",BGUCN) D:BGUCNDS1'?." "
  1. .S BGUCLV=BGUCLV+1 S:BGUCLV=1 BGUCARY=$P(BGUCARY,"(") I BGUCLV>1 S:BGUCLV=2 BGUCARY=BGUCARY_"(" S BGUCARY=$P(BGUCARY,")") S:BGUCLV>2 BGUCARY=BGUCARY_"," S BGUCARY=BGUCARY_BGUCSUB(BGUCLV-1)_")"
  1. .S BGUCEXP=$P(BGUCNDS1,")") D BLDEXP
  1. .I BGUCNDS1[")" F BGUCN2=2:1:$L(BGUCNDS1,")") S BGUCLV=BGUCLV-1,BGUCEXP=$P(BGUCNDS1,")",BGUCN2) I BGUCEXP'?." " S BGUCARY=$S(BGUCLV>1:$P(BGUCARY,",",1,BGUCLV-1)_")",1:$P(BGUCARY,"(")) D BLDEXP
  1. S BGUCMXL=BGUCMXL*2
  1. K BGUCARY,BGUCC,BGUCEXP,BGUCEXP1,BGUCLCNJ,BGUCLSEG,BGUCLV,BGUCN,BGUCN1,BGUCN2,BGUCN3,BGUCN4,BGUCNDS1,BGUCNJN,BGUCNJP,BGUCOND,BGUCSBJ,BGUCSBJL,BGUCSEG,BGUCSUB,BGUCVAL,BGUCWRDS
  1. Q
  1. ;
  1. BLDEXP ;
  1. S (BGUCSEG,BGUCNJP,BGUCNJN,BGUCLCNJ)="",BGUCWRDS=$L(BGUCEXP," ")
  1. F BGUCN3=1:1:BGUCWRDS S BGUCEXP1=$P(BGUCEXP," ",BGUCN3) D
  1. .I " AND OR NOT "[(" "_BGUCEXP1_" ") D Q
  1. ..I BGUCSEG="" S BGUCNJP=$S(BGUCEXP1="NOT":"N"_BGUCNJP,1:BGUCEXP1) Q
  1. ..S BGUCNJN=$S(BGUCEXP1="NOT":"N"_BGUCNJN,1:BGUCEXP1)
  1. .I BGUCNJN'="" D BLDEXP1 S (BGUCSEG,BGUCNJP,BGUCNJN)=""
  1. .;S:BGUCN3>1 BGUCSEG=BGUCSEG_" " S BGUCSEG=BGUCSEG_BGUCEXP1
  1. .S BGUCSEG=BGUCSEG_BGUCEXP1 S:$L(BGUCSEG,"""")#2=0 BGUCSEG=BGUCSEG_" "
  1. D:BGUCSEG'="" BLDEXP1
  1. Q
  1. ;
  1. BLDEXP1 ;
  1. S:BGUCNJP="" BGUCNJP=BGUCLCNJ
  1. S BGUCLSEG=$L(BGUCSEG),(BGUCSBJ,BGUCND,BGUCVAL)=""
  1. S BGUCQ=0 F BGUCN4=1:1:BGUCLSEG S BGUCC=$E(BGUCSEG,BGUCN4) D Q:BGUCQ S BGUCSBJ=BGUCSBJ_BGUCC
  1. .Q:BGUCC?1AN Q:"!;"[BGUCC
  1. .I BGUCC=".",$E(BGUCSEG,BGUCN4+1)?1N Q
  1. .I BGUCC="-",$E(BGUCSEG,BGUCN4+1)="P" Q
  1. .S BGUCQ=1
  1. F BGUCN4=BGUCN4:1:BGUCLSEG S BGUCC=$E(BGUCSEG,BGUCN4) Q:"<>=[?"'[BGUCC S BGUCND=BGUCND_BGUCC
  1. S:BGUCC="." BGUCND=$P($E(BGUCSEG,BGUCN4,BGUCLSEG),".",2),BGUCND=$G(BGUCOND(BGUCND)),BGUCN4=$F(BGUCSEG,".",BGUCN4+1)
  1. S BGUCSBJL=$L(BGUCSBJ,"!") S:BGUCSBJ[";" BGUCSBJL=BGUGLEV($P(BGUCSBJ,";"),$P(BGUCSBJ,";",2))/2 S:BGUCSBJL>BGUCMXL BGUCMXL=BGUCSBJL
  1. S BGUCVAL=$E(BGUCSEG,BGUCN4,BGUCLSEG),BGUCSEG=BGUCSBJ_"~"_BGUCND_"~"_BGUCVAL
  1. S BGUCSUB(BGUCLV)=$O(@BGUCARY@(""),-1)+1,@BGUCARY@(BGUCSUB(BGUCLV))=BGUCNJP_U_BGUCSEG_U_BGUCNJN
  1. S BGUCLCNJ=BGUCNJN
  1. Q
  1. ;
  1. ; Input : BGUCND,BGUV
  1. ; Output : BGUTV
  1. CND ;EP Called by BGULIST1
  1. ;W !,BGUCNDS,!
  1. S BGUCARY="BGUCND",(BGUCLV,BGUCF)=1,(BGUCSUB,BGUCSBS,BGUCSKP)=""
  1. F S BGUCSUB(BGUCLV)=$O(@BGUCARY@($G(BGUCSUB(BGUCLV)))),BGUCSUB=BGUCSUB(BGUCLV) Q:BGUCSUB=""!'BGUCF&(BGUCLV=1) D
  1. .I BGUCSUB=""!'BGUCF S BGUCLV=BGUCLV-1,BGUCF=1 D D:$D(BGUTV(BGUCLV+1)) CKUPTV Q
  1. ..I BGUCLV=1 S BGUCARY=$P(BGUCARY,"("),BGUCSBS="" Q
  1. ..S BGUCSBS=$P(BGUCSBS,",",1,BGUCLV-1),BGUCARY=$P(BGUCARY,"(")_"("_BGUCSBS_")"
  1. .D EVAL Q:'BGUCF
  1. .I BGUCSKP S BGUCSKP=0 Q
  1. .S BGUCLV=BGUCLV+1 S:BGUCLV>2 BGUCSBS=BGUCSBS_"," S BGUCSBS=BGUCSBS_BGUCSUB
  1. .S BGUCARY=$P(BGUCARY,"(")_"("_BGUCSBS_")"
  1. .;W !,BGUCARY,?10+(BGUCLV*5),@BGUCARY
  1. S BGUTV=BGUTV(1)
  1. K BGUCARY,BGUCEXP,BGUCF,BGUCLV,BGUCNJN,BGUCNJP,BGUCNOT,BGUCSBJ,BGUCSBS,BGUCSKP,BGUCSUB,BGUCTV,BGUCVAL,BGUCX,BGUTV(1)
  1. ;W ! ZW BGUV,BGUTV
  1. Q
  1. ;
  1. CKUPTV ;
  1. S BGUCNJN=$P(@BGUCARY@(BGUCSUB(BGUCLV)),U,3),BGUCTV=$$CONJ(BGUCNJN,BGUTV(BGUCLV+1))
  1. D
  1. .I BGUCTV D Q
  1. ..I BGUCNJN'["AND" S BGUTV(BGUCLV)=1 Q
  1. ..I $G(BGUTV(BGUCLV))=0 S BGUTV(BGUCLV)=0 Q
  1. ..S BGUTV(BGUCLV)=1
  1. .S BGUTV(BGUCLV)=0
  1. K BGUTV(BGUCLV+1)
  1. Q
  1. ;
  1. EVAL ;
  1. S BGUCX=@BGUCARY@(BGUCSUB(BGUCLV)),BGUCNJP=$P(BGUCX,U),BGUCEXP=$P(BGUCX,U,2),BGUCNJN=$P(BGUCX,U,3),BGUCSBJ=$P(BGUCEXP,"~"),BGUCND=$P(BGUCEXP,"~",2),BGUCVAL=$P(BGUCEXP,"~",3)
  1. S BGUCFID=BGUFILE S:BGUCSBJ[";" BGUCFID=$P(BGUCSBJ,";"),BGUCSBJ=$P(BGUCSBJ,";",2) S BGUCSBJ=$G(BGUV(BGUCFID,BGUCSBJ))
  1. D:BGUCND'["?"
  1. .I BGUCVAL?1N.E S BGUCFID=BGUFILE S:BGUCVAL[";" BGUCFID=$P(BGUCVAL,";"),BGUCVAL=$P(BGUCVAL,";",2) S BGUCVAL=$G(BGUV(BGUCFID,BGUCVAL)) Q
  1. .S:$E(BGUCVAL)="""" BGUCVAL=$P(BGUCVAL,"""",2)
  1. ;W !,"Subject: ",BGUCSBJ," Conditon: ",BGUCND," Value: ",BGUCVAL
  1. D
  1. .I BGUCND["=" D Q
  1. ..I BGUCND="=" S BGUTV=BGUCSBJ=BGUCVAL Q
  1. ..I BGUCND["<" S BGUTV=BGUCSBJ'>BGUCVAL Q
  1. ..I BGUCND[">" S BGUTV=BGUCSBJ'<BGUCVAL Q
  1. .I BGUCND["<" D Q
  1. ..I BGUCND="<" S BGUTV=BGUCSBJ<BGUCVAL Q
  1. ..I BGUCND[">" S BGUTV=BGUCSBJ'=BGUCVAL Q
  1. .I BGUCND=">" S BGUTV=BGUCSBJ>BGUCVAL Q
  1. .I BGUCND["[" D Q
  1. ..I BGUCND="[" S BGUTV=BGUCSBJ[BGUCVAL Q
  1. ..S BGUTV=BGUCSBJ'[BGUCVAL Q
  1. .I BGUCND["?" D Q
  1. ..I BGUCND="?" S BGUTV=BGUCSBJ?@BGUCVAL Q
  1. ..S BGUTV=BGUCSBJ'?@BGUCVAL Q
  1. S BGUCTV=$S(BGUCNJP'="":$$CONJ(BGUCNJP,BGUTV),1:BGUTV)
  1. I BGUCTV D Q
  1. .I BGUCNJP["AND",$G(BGUTV(BGUCLV))=0 Q
  1. .S BGUTV(BGUCLV)=1
  1. .S:BGUCNJN["OR" BGUCSKP=1
  1. I BGUCNJP["OR",$G(BGUTV(BGUCLV)) Q
  1. S BGUTV(BGUCLV)=0
  1. I BGUCNJP["AND",BGUCNJN="" S BGUCF=0
  1. S:BGUCNJN["AND" BGUCSKP=1
  1. Q
  1. ;
  1. CONJ(BGUCONJ,BGUTVX) ;
  1. S BGUCNOT=0 S:$E(BGUCONJ)="N" BGUCONJ=$E(BGUCONJ,2,4),BGUCNOT=1
  1. Q:BGUCNOT 'BGUTVX
  1. Q BGUTVX