MCARDCN1 ;WISC/TJK-MODIFIED DICN1 ROUTINE FOR MEDICINE SCREENS ;7/22/96 08:12
;;2.3;Medicine;;09/13/1996
K DICRS,Y,MCARDRCR
F Y="I","J","X","DO","DC","DA","DE","DG","DIE","DR","DIC","D","D0","D1","D2","D3","D4","D5","D6","DI","DH","DIA","DICR","DK","DIK","DL","DLAYGO","DM","DP","DQ","DU","DW","DIEL","DOV","DIOV","DIEC","DB","DV","DIFLD" S MCARDRCR(Y)=""
S DZ="W !?3,$S("""_$P(DO,U,1)_"""'=$P(DQ(DQ),U,1):"""_$P(DO,U,1)_""",1:"""")_"" ""_$P(DQ(DQ),U,1)_"": """
I $D(DIC("DR")) S DD=DIC("DR")
E S DD="",MCPCT=0 F Y=0:0 S Y=$O(^DD(+DO(2),0,"ID",Y)) S:Y="" Y=-1 Q:Y'>0 D CKID I '$D(MCPCT) D G BAD
. ; Naked Reference in DENTCN1+8 ref to DENTDCN1+6
. W !,"SORRY! A VALUE FOR '"_$P(^(0),U,1)_"' MUST BE ENTERED,"
. W !?6,"BUT YOU DON'T HAVE 'WRITE ACCESS' FOR THIS FIELD"
. S MCARDRCR="D^MCARDCN1"
. D STORLIST
. Q
;END IF
;
S MCARDRCR="RCR^MCARDCN1" D STORLIST G D^MCARDCN:$D(Y)<9
BAD S:$D(D)#2 DA=D K Y I '$D(DO(1)) S Y=-1 G Q^MCARDC
K DO G A^MCARDC
;
CKID I $D(DUZ(0)),DUZ(0)'="@",$D(^DD(+DO(2),Y,9)),^(9)]"" F MCPCT=1:1 I DUZ(0)[$E(^(9),MCPCT) Q:$L(^(9))'<MCPCT K:$P(^(0),U,2)["R" MCPCT G Q
S DD=DD_Y_";"
Q Q
;
RCR ;
K DR,DQ,DG,DE,DO S DIE=DIC,DR=DD,DIE("W")=DZ K DIC I $D(DIE("NO^")) S MCARDRCR("DIE(""NO^"")")=DIE("NO^")
S DIE("NO^")="OUTOK" D ^DIE K DIE("W"),DIE("NO^") I '$D(DA) S Y(0)=0 Q
Q:$D(Y)<9
ZAP S DIK=DIE W !?6,"<'",*7,$P(@(DIK_"DA,0)"),U,1),"' DELETED>" D ^DIK S Y(0)=0 K DIK Q
D S DIE=DIC G ZAP
;
RIX ;
K MCARDRCR F MCPCT="D0","Y","DIC","DIU","DIV","DO","D","DD","DICR","X" S MCARDRCR(MCPCT)=""
S MCARDRCR="RR^MCARDCN1",DZ=^DD(+DO(2),.01,1,1) D STORLIST G IX^MCARDCN
;
RR X DZ Q
;
NUM ;
I '$D(DD),DIC="^DIC(",$D(^DD("SITE",1)),X\1000'=^(1) S X=^(1)*1000 G F2^MCARDCN
S MCPCT=$P(^DD(+Y,.001,0),U,2),X=$S(MCPCT'["N"!(MCPCT["O"):0,1:X),MCPCTY=X I X F MCPCT=1:1 D N Q:$D(X) S X=0 Q:MCPCT>50 S X=MCPCTY+DIY,MCPCTY=X
W !?3,$P(DO,U,1)_" "_$P(^DD(+Y,.001,0),U,1),": " W:X X,"// " R Y:DTIME E S DTOUT=1,Y=U W *7
I Y="?" W:$D(^DD(+$P(D0,U,2),.001,3)) !,^(3) X:$D(^(4)) ^(4) G F1^MCARDCN
G BAD^MCARDC1:Y[U S:Y]"" X=Y D N I '$D(X) W *7,"??" W:$D(^DD(+DO(2),.001,3)) !,^(3) X:$D(^(4)) ^(4) G F1^MCARDCN
G LOCK^MCARDCN
;
N X:$D(^DD(+$P(DO,U,2),.001,0)) $P(^(0),U,5,99) I $D(X),$L(X)<15,+X=X,X>0,X>1!(DIC'="^DIC(") Q
K X
STORLIST ;
D INIT
O S MCARDJD=$O(MCARDRCR(MCARDJD)) S:MCARDJD="" MCARDJD=-1 G CALL:MCARDJD<0
I $D(@MCARDJD)#2 S @(MCARDJE_")="_MCARDJD) G O:$D(@MCARDJD)=1
S MCARDJX=MCARDJD_"(" D MCARDJXY G O
;
CALL S MCARDJE=MCARDRCR K MCARDRCR,MCARDJX,MCARDJY D @MCARDJE
S MCARDJE="^TMP(""MCARDRCR"",$J,"_^TMP("MCARDRCR",$J)_",MCARDJD",^($J)=^($J)-1,MCARDJD=0,MCARDJX=MCARDJE_","
G S MCARDJD=$O(@(MCARDJE_")")) S:MCARDJD="" MCARDJD=-1
; Naked reference in next line is to ^TMP("MCARDRCR",$J,
I MCARDJD<0 K MCARDJD,MCARDJE,MCARDJX,MCARDJY,^($J,^TMP("MCARDRCR",$J)+1) Q
K:$D(MCARDJD) @MCARDJD
; Naked reference in next line is to ^TMP("MCARDRCR",$J,
I $D(^(MCARDJD))#2 S @MCARDJD=^(MCARDJD) G G:$D(^(MCARDJD))=1
S MCARDJY=MCARDJD_"(" D MCARDJXY G G
;
MCARDJXY ;
S MCARDJZ=1,MCARDJA="",MCARDJC(0)=0
S S MCARDJB=-1
N1 S MCARDJB=$O(@(MCARDJX_MCARDJA_"MCARDJB)")) S:MCARDJB="" MCARDJB=-1 S MCARDJC(MCARDJZ)=MCARDJC(MCARDJZ-1)
I MCARDJB["," F MCARDJC=0:0 S MCARDJC=$F(MCARDJB,",",MCARDJC) Q:'MCARDJC S MCARDJC(MCARDJZ)=MCARDJC(MCARDJZ)+1
I MCARDJB=-1 G Q1:MCARDJZ=1 S MCARDJZ=MCARDJZ-1,@("MCARDJB="_$P(MCARDJA,",",MCARDJZ+MCARDJC(MCARDJZ-1),MCARDJZ+MCARDJC(MCARDJZ))),MCARDJA=$P(MCARDJA,",",1,MCARDJZ-1+MCARDJC(MCARDJZ-1))_$E(",",MCARDJZ>1) G N1
I $D(@(MCARDJX_MCARDJA_"MCARDJB)"))#10=1 S @(MCARDJY_MCARDJA_"MCARDJB)="_MCARDJX_MCARDJA_"MCARDJB)")
I $D(@(MCARDJX_MCARDJA_"MCARDJB)"))<9 G N1
G DOWN:+MCARDJB=MCARDJB F MCARDJC=0:0 S MCARDJC=$F(MCARDJB,"""",MCARDJC) Q:'MCARDJC S MCARDJB=$E(MCARDJB,1,MCARDJC-1)_""""_$E(MCARDJB,MCARDJC,999),MCARDJC=MCARDJC+1
S MCARDJB=""""_MCARDJB_""""
DOWN S MCARDJA=MCARDJA_MCARDJB_",",MCARDJZ=MCARDJZ+1 G S
;
Q1 K MCARDJA,MCARDJB,MCARDJC,MCARDJZ Q
;
INIT I $D(^TMP("MCARDRCR",$J))[0 S ^TMP("MCARDRCR",$J)=0
S ^TMP("MCARDRCR",$J)=^($J)+1,MCARDJD="MCPCTZ",MCARDJE="^TMP(""MCARDRCR"",$J,"_^($J)_",MCARDJD",MCARDJY=MCARDJE_"," K ^($J,^($J))
Q
MCARDCN1 ;WISC/TJK-MODIFIED DICN1 ROUTINE FOR MEDICINE SCREENS ;7/22/96 08:12
+1 ;;2.3;Medicine;;09/13/1996
+2 KILL DICRS,Y,MCARDRCR
+3 FOR Y="I","J","X","DO","DC","DA","DE","DG","DIE","DR","DIC","D","D0","D1","D2","D3","D4","D5","D6","DI","DH","DIA","DICR","DK","DIK","DL","DLAYGO","DM","DP","DQ","DU","DW","DIEL","DOV","DIOV","DIEC","DB","DV","DIFLD"
SET MCARDRCR(Y)=""
+4 SET DZ="W !?3,$S("""_$PIECE(DO,U,1)_"""'=$P(DQ(DQ),U,1):"""_$PIECE(DO,U,1)_""",1:"""")_"" ""_$P(DQ(DQ),U,1)_"": """
+5 IF $DATA(DIC("DR"))
SET DD=DIC("DR")
+6 IF '$TEST
SET DD=""
SET MCPCT=0
FOR Y=0:0
SET Y=$ORDER(^DD(+DO(2),0,"ID",Y))
IF Y=""
SET Y=-1
IF Y'>0
QUIT
DO CKID
IF '$DATA(MCPCT)
Begin DoDot:1
+7 ; Naked Reference in DENTCN1+8 ref to DENTDCN1+6
+8 WRITE !,"SORRY! A VALUE FOR '"_$PIECE(^(0),U,1)_"' MUST BE ENTERED,"
+9 WRITE !?6,"BUT YOU DON'T HAVE 'WRITE ACCESS' FOR THIS FIELD"
+10 SET MCARDRCR="D^MCARDCN1"
+11 DO STORLIST
+12 QUIT
End DoDot:1
GOTO BAD
+13 ;END IF
+14 ;
+15 SET MCARDRCR="RCR^MCARDCN1"
DO STORLIST
IF $DATA(Y)<9
GOTO D^MCARDCN
BAD IF $DATA(D)#2
SET DA=D
KILL Y
IF '$DATA(DO(1))
SET Y=-1
GOTO Q^MCARDC
+1 KILL DO
GOTO A^MCARDC
+2 ;
CKID IF $DATA(DUZ(0))
IF DUZ(0)'="@"
IF $DATA(^DD(+DO(2),Y,9))
IF ^(9)]""
FOR MCPCT=1:1
IF DUZ(0)[$EXTRACT(^(9),MCPCT)
IF $LENGTH(^(9))'<MCPCT
QUIT
IF $PIECE(^(0),U,2)["R"
KILL MCPCT
GOTO Q
+1 SET DD=DD_Y_";"
Q QUIT
+1 ;
RCR ;
+1 KILL DR,DQ,DG,DE,DO
SET DIE=DIC
SET DR=DD
SET DIE("W")=DZ
KILL DIC
IF $DATA(DIE("NO^"))
SET MCARDRCR("DIE(""NO^"")")=DIE("NO^")
+2 SET DIE("NO^")="OUTOK"
DO ^DIE
KILL DIE("W"),DIE("NO^")
IF '$DATA(DA)
SET Y(0)=0
QUIT
+3 IF $DATA(Y)<9
QUIT
ZAP SET DIK=DIE
WRITE !?6,"<'",*7,$PIECE(@(DIK_"DA,0)"),U,1),"' DELETED>"
DO ^DIK
SET Y(0)=0
KILL DIK
QUIT
D SET DIE=DIC
GOTO ZAP
+1 ;
RIX ;
+1 KILL MCARDRCR
FOR MCPCT="D0","Y","DIC","DIU","DIV","DO","D","DD","DICR","X"
SET MCARDRCR(MCPCT)=""
+2 SET MCARDRCR="RR^MCARDCN1"
SET DZ=^DD(+DO(2),.01,1,1)
DO STORLIST
GOTO IX^MCARDCN
+3 ;
RR XECUTE DZ
QUIT
+1 ;
NUM ;
+1 IF '$DATA(DD)
IF DIC="^DIC("
IF $DATA(^DD("SITE",1))
IF X\1000'=^(1)
SET X=^(1)*1000
GOTO F2^MCARDCN
+2 SET MCPCT=$PIECE(^DD(+Y,.001,0),U,2)
SET X=$SELECT(MCPCT'["N"!(MCPCT["O"):0,1:X)
SET MCPCTY=X
IF X
FOR MCPCT=1:1
DO N
IF $DATA(X)
QUIT
SET X=0
IF MCPCT>50
QUIT
SET X=MCPCTY+DIY
SET MCPCTY=X
+3 WRITE !?3,$PIECE(DO,U,1)_" "_$PIECE(^DD(+Y,.001,0),U,1),": "
IF X
WRITE X,"// "
READ Y:DTIME
IF '$TEST
SET DTOUT=1
SET Y=U
WRITE *7
+4 IF Y="?"
IF $DATA(^DD(+$PIECE(D0,U,2),.001,3))
WRITE !,^(3)
IF $DATA(^(4))
XECUTE ^(4)
GOTO F1^MCARDCN
+5 IF Y[U
GOTO BAD^MCARDC1
IF Y]""
SET X=Y
DO N
IF '$DATA(X)
WRITE *7,"??"
IF $DATA(^DD(+DO(2),.001,3))
WRITE !,^(3)
IF $DATA(^(4))
XECUTE ^(4)
GOTO F1^MCARDCN
+6 GOTO LOCK^MCARDCN
+7 ;
N IF $DATA(^DD(+$PIECE(DO,U,2),.001,0))
XECUTE $PIECE(^(0),U,5,99)
IF $DATA(X)
IF $LENGTH(X)<15
IF +X=X
IF X>0
IF X>1!(DIC'="^DIC(")
QUIT
+1 KILL X
STORLIST ;
+1 DO INIT
O SET MCARDJD=$ORDER(MCARDRCR(MCARDJD))
IF MCARDJD=""
SET MCARDJD=-1
IF MCARDJD<0
GOTO CALL
+1 IF $DATA(@MCARDJD)#2
SET @(MCARDJE_")="_MCARDJD)
IF $DATA(@MCARDJD)=1
GOTO O
+2 SET MCARDJX=MCARDJD_"("
DO MCARDJXY
GOTO O
+3 ;
CALL SET MCARDJE=MCARDRCR
KILL MCARDRCR,MCARDJX,MCARDJY
DO @MCARDJE
+1 SET MCARDJE="^TMP(""MCARDRCR"",$J,"_^TMP("MCARDRCR",$JOB)_",MCARDJD"
SET ^($JOB)=^($JOB)-1
SET MCARDJD=0
SET MCARDJX=MCARDJE_","
G SET MCARDJD=$ORDER(@(MCARDJE_")"))
IF MCARDJD=""
SET MCARDJD=-1
+1 ; Naked reference in next line is to ^TMP("MCARDRCR",$J,
+2 IF MCARDJD<0
KILL MCARDJD,MCARDJE,MCARDJX,MCARDJY,^($JOB,^TMP("MCARDRCR",$JOB)+1)
QUIT
+3 IF $DATA(MCARDJD)
KILL @MCARDJD
+4 ; Naked reference in next line is to ^TMP("MCARDRCR",$J,
+5 IF $DATA(^(MCARDJD))#2
SET @MCARDJD=^(MCARDJD)
IF $DATA(^(MCARDJD))=1
GOTO G
+6 SET MCARDJY=MCARDJD_"("
DO MCARDJXY
GOTO G
+7 ;
MCARDJXY ;
+1 SET MCARDJZ=1
SET MCARDJA=""
SET MCARDJC(0)=0
S SET MCARDJB=-1
N1 SET MCARDJB=$ORDER(@(MCARDJX_MCARDJA_"MCARDJB)"))
IF MCARDJB=""
SET MCARDJB=-1
SET MCARDJC(MCARDJZ)=MCARDJC(MCARDJZ-1)
+1 IF MCARDJB[","
FOR MCARDJC=0:0
SET MCARDJC=$FIND(MCARDJB,",",MCARDJC)
IF 'MCARDJC
QUIT
SET MCARDJC(MCARDJZ)=MCARDJC(MCARDJZ)+1
+2 IF MCARDJB=-1
IF MCARDJZ=1
GOTO Q1
SET MCARDJZ=MCARDJZ-1
SET @("MCARDJB="_$PIECE(MCARDJA,",",MCARDJZ+MCARDJC(MCARDJZ-1),MCARDJZ+MCARDJC(MCARDJZ)))
SET MCARDJA=$PIECE(MCARDJA,",",1,MCARDJZ-1+MCARDJC(MCARDJZ-1))_$EXTRACT(",",MCARDJZ>1)
GOTO N1
+3 IF $DATA(@(MCARDJX_MCARDJA_"MCARDJB)"))#10=1
SET @(MCARDJY_MCARDJA_"MCARDJB)="_MCARDJX_MCARDJA_"MCARDJB)")
+4 IF $DATA(@(MCARDJX_MCARDJA_"MCARDJB)"))<9
GOTO N1
+5 IF +MCARDJB=MCARDJB
GOTO DOWN
FOR MCARDJC=0:0
SET MCARDJC=$FIND(MCARDJB,"""",MCARDJC)
IF 'MCARDJC
QUIT
SET MCARDJB=$EXTRACT(MCARDJB,1,MCARDJC-1)_""""_$EXTRACT(MCARDJB,MCARDJC,999)
SET MCARDJC=MCARDJC+1
+6 SET MCARDJB=""""_MCARDJB_""""
DOWN SET MCARDJA=MCARDJA_MCARDJB_","
SET MCARDJZ=MCARDJZ+1
GOTO S
+1 ;
Q1 KILL MCARDJA,MCARDJB,MCARDJC,MCARDJZ
QUIT
+1 ;
INIT IF $DATA(^TMP("MCARDRCR",$JOB))[0
SET ^TMP("MCARDRCR",$JOB)=0
+1 SET ^TMP("MCARDRCR",$JOB)=^($JOB)+1
SET MCARDJD="MCPCTZ"
SET MCARDJE="^TMP(""MCARDRCR"",$J,"_^($JOB)_",MCARDJD"
SET MCARDJY=MCARDJE_","
KILL ^($JOB,^($JOB))
+2 QUIT