PXKMAIN1 ;ISL/JVS,ISA/Zoltan - Main Routine for Data Capture ;5/6/1999
;;1.0;PCE PATIENT CARE ENCOUNTER;**22,73**;Aug 12, 1996
;+This routine is responsible for:
;+ - creating new entries in PCE files,
;+ - processing modifications to existing entries,
;+ - deleting entries,
;+ - ensuring all required variables are present,
;+ - setting both Audit fields (EDITED FLAG and AUDIT TRAIL),
;+ - checking for duplicate entries,
;+ - some error reporting.
;+
;+LOCAL VARIABLE LIST
;+ MOST VARIABLES ARE DEFINED AT THE TOP OF PXKMAIN
;+ PXKSEQ = Sequence number in PXK tmp global
;+ PXKCAT = Category of entry (CPT,MSR,VST...)
;+ PXKREF = Root of temp global
;+ PXKPIEN = IEN of v file
;+ PXKAUDIT = data located in the audit field of the v file
;+ PXKER = field data use to build the dr string (eg .04///^S X=$G()
;+ PXKFLD = field number gleened from the file routines
;+ PXKNOD = same as the subscript in a global node
;+ PXKPCE = the piece where the data is found on that node
;
;
W !,"This is not an entry point" Q
LOOP ;+Copy delimited strings into sub-arrays.
F PXKI=1:1:$L(PXKAFT(PXKSUB),"^") I $P(PXKAFT(PXKSUB),"^",PXKI)'="" S PXKAV(PXKSUB,PXKI)=$P(PXKAFT(PXKSUB),"^",PXKI)
F PXKI=1:1:$L(PXKBEF(PXKSUB),"^") I $P(PXKBEF(PXKSUB),"^",PXKI)'="" S PXKBV(PXKSUB,PXKI)=$P(PXKBEF(PXKSUB),"^",PXKI)
K PXKI,PXKJ ; Not sure if NEW would be OK.
I PXKCAT="CPT",PXKSUB=1 D LOOP^PXKMOD
Q
;
ERROR ;+Check for missing required fields
Q:$G(PXKAV(0,1))["@"!('$D(PXKAV(0,1)))
S PXKNOD=0,PXKPCE=0
D EN1^@PXKRTN
S PXKER=$P(PXKER," * ",1)
I PXKER="" Q
F PXJ=1:1:$L(PXKER,",") D
. S PXJJ=$P(PXKER,",",PXJ)
. I '$D(PXKAV(PXKNOD,PXJJ)) D
. . S PXKPCE=PXJJ
. . D EN2^@PXKRTN
. . S PXKFLD=$P(PXKFD,"/",1)
. . S:PXKFLD["*" PXKFLD=$P(PXKFLD," * ",2)
. . S PXKERROR(PXKCAT,PXKSEQ,0,PXKFLD)="Missing Required Fields"
K PXK,PXJJ,PXKFLD,PXKFD ; Not sure about use of NEW here.
Q
;
CLEAN ;--Clean out the PXKAV array
S PXKJ=""
F S PXKJ=$O(PXKBV(PXKJ)) Q:PXKJ="" D
. S PXKI=""
. F S PXKI=$O(PXKBV(PXKJ,PXKI)) Q:PXKI="" D
. . I $G(PXKBV(PXKJ,PXKI))=$G(PXKAV(PXKJ,PXKI)) K PXKAV(PXKJ,PXKI)
K PXKI,PXKJ ; Not sure about NEW here.
Q
;
FILE ;+Create a new entry in file and get IEN
;+This is the code that adds new entries to V-files
;+and to the Visit file.
K DD,DO
S DIC=$P($T(GLOBAL^@PXKRTN),";;",2)_"("
S DIC(0)=""
S X=$G(PXKAV(0,1))
D FILE^DICN
S (PXKPIEN,DA)=+Y
S DR=""
K DIC,Y,X
Q
;
AUD12 ;--Set both audit fields
S DR=""
S PXKAUDIT=$P($T(GLOBAL^@PXKRTN),";;",2)_"(DA,801)"
S PXKAUDIT=$P($G(@PXKAUDIT),"^",2)_PXKSORR_";"
I $L(PXKAUDIT,";")>8 S $P(PXKAUDIT,";",2,$L(PXKAUDIT,";"))="+;"_$P(PXKAUDIT,";",4,$L(PXKAUDIT,";"))
S PXKNOD=801
S DR=""
F PXKPCE=1,2 D EN1^@PXKRTN S DR=DR_PXKER
S PXKFVDLM=""
Q
;
AUD2 ;--Set second audit fields
S DR=""
S PXKAUDIT=$P($T(GLOBAL^@PXKRTN),";;",2)_"(DA,801)"
S PXKAUDIT=$P($G(@PXKAUDIT),"^",2)_PXKSORR_";"
I $L(PXKAUDIT,";")>8 S $P(PXKAUDIT,";",2,$L(PXKAUDIT,";"))="+;"_$P(PXKAUDIT,";",4,$L(PXKAUDIT,";"))
S PXKNOD=801
S DR=""
S PXKPCE=2
D EN1^@PXKRTN
S DR=DR_PXKER
S PXKFVDLM=""
Q
;
DRDIE ;--Set the DR string and DO DIE
I PXKCAT="VST" D UPD^PXKFVST Q
S DIE=$P($T(GLOBAL^@PXKRTN),";;",2)_"(" K PXKPTR
S PXKLR=$P($T(GLOBAL^@PXKRTN),";;",2)_"(DA)"
S PXKNOD=""
F S PXKNOD=$O(PXKAV(PXKNOD)) Q:PXKNOD="" D
. I PXKFGAD=1,PXKNOD=0 S PXKPCE=1 D
.. Q:PXKCAT'="CPT"
.. I $G(^TMP("PXK",$J,PXKCAT,PXKSEQ,"IEN"))=PXKPIEN S PXKPCE=3
. I PXKFGAD=1,PXKNOD'=0 S PXKPCE=0
. I PXKFGED=1 S PXKPCE=0
. I PXKCAT="CPT",PXKNOD=1 D Q
.. D DIE
.. I $G(^TMP("PXK",$J,PXKCAT,PXKSEQ,"IEN"))]"" Q
.. D UPD^PXKMOD
. F S PXKPCE=$O(PXKAV(PXKNOD,PXKPCE)) Q:PXKPCE="" D
..D EN1^@PXKRTN
..I $G(PXKER)'="" D
...I PXKER["~" D
....I $P(PXKER,"~",2)["A",PXKFGAD=1 S PXKER=$P(PXKER,"~") Q
....I $P(PXKER,"~",2)'["A",PXKFGAD=1 S PXKER="" Q
....I $P(PXKER,"~",2)["E",PXKFGED=1 S PXKER=$P(PXKER,"~") Q
....I $P(PXKER,"~",2)'["E",PXKFGED=1 S PXKER="" Q
...I +PXKER=0 D
....I PXKAV(PXKNOD,PXKPCE)=+PXKAV(PXKNOD,PXKPCE) S PXKER=$P(PXKER," * ",2)
....I PXKAV(PXKNOD,PXKPCE)'=+PXKAV(PXKNOD,PXKPCE) S PXKER=$P(PXKER," * ",3),PXKPTR(PXKPIEN,PXKNOD,PXKPCE)=""
..I $G(PXKER)'="" S DR=DR_PXKER_"PXKAV("_PXKNOD_","_PXKPCE_"));"
..I $L(DR)>200 D DIE
D DIE
K DIE,PXKLR,DIC(0)
D ER
Q
DIE ;+Lock global and invoke FM ^DIE call.
L +@PXKLR:10
D ^DIE
L -@PXKLR
K DR
S DR=""
Q
;
DELETE ;+Use FM ^DIK call to delete entry identified by PXKPIEN.
S DA=PXKPIEN
S DIK=$P($T(GLOBAL^@PXKRTN),";;",2)_"("
D ^DIK
K DIK
Q
;
DUP ;+Code to check for duplicates
I PXKCAT="VST" Q
I PXKCAT="CPT" Q
N PXKRTN
I '$D(PXKPIEN) N PXKPIEN S PXKPIEN=""
S PXKNOD=0
S PXKPCE=0
S PXKRTN="PXKF"_PXKVCAT
S PXKVRTN=$P($T(GLOBAL^@PXKRTN),";;",2)
S PXJJJ=0
D EN1^@PXKRTN
I $P(PXKER," * ",3)'=0 D
.S PXKER=$P(PXKER," * ",2)
.I PXKER="" Q
.S (PX,PXFG)=0
.F S PX=$O(@PXKVRTN@("AD",PXKVST,PX)) Q:PX="" D Q:PXFG=1
..S PXJJJ=0
..F PXJ=1:1:$L(PXKER,",") S PXJJ=$P(PXKER,",",PXJ) D
...I $P($G(@PXKVRTN@(PX,$P(PXJJ,"+",1))),"^",$P(PXJJ,"+",2))=$G(PXKAV($P(PXJJ,"+",1),$P(PXJJ,"+",2))),PX'=PXKPIEN S PXJJJ=PXJJJ+1
..I $L(PXKER,",")=PXJJJ S PXFG=1
;PXKHLR Is not killed because it is a flag comming from another routine
Q
;
ER ;--PXKERROR MAKING IF NOT POPULATED CORRECTLY
N PXKRT,PXKMOD,PXKSTR
S PXKMOD=PXKSEQ#1 I $G(PXKMOD) Q
S PXKN=""
F S PXKN=$O(PXKAV(PXKN)) Q:PXKN="" D
. S PXKP=""
. F S PXKP=$O(PXKAV(PXKN,PXKP)) Q:PXKP="" D
.. S PXKRRT=$P($T(GLOBAL^@PXKRTN),";;",2)_"("_DA_","
.. I PXKN=1,PXKCAT="CPT" S PXKRRT=PXKRRT_PXKN_","_PXKP_","_0_")"
.. E S PXKRRT=PXKRRT_PXKN_")"
.. I PXKAV(PXKN,PXKP)'=$P($G(@PXKRRT),"^",$S(PXKN=1:1,1:PXKP)) D
... Q:PXKAV(PXKN,PXKP)["@"
... S PXKNOD=PXKN,PXKPCE=PXKP
... I PXKNOD=1,PXKCAT="CPT" S PXKPCE=1
... D EN2^@PXKRTN
... S PXKFLD=$P(PXKFD,"/",1)
... S:PXKFLD["*" PXKFLD=$P(PXKFLD," * ",2)
... Q:PXKFLD=1101
... S PXKSTR="Not Stored = "_PXKAV(PXKN,PXKP)
... I $G(PXKERROR(PXKCAT,PXKSEQ,DA,PXKFLD))]"" D
.... S PXKSTR=PXKERROR(PXKCAT,PXKSEQ,DA,PXKFLD)_","_PXKAV(PXKN,PXKP)
... S PXKERROR(PXKCAT,PXKSEQ,DA,PXKFLD)=PXKSTR
Q
PXKMAIN1 ;ISL/JVS,ISA/Zoltan - Main Routine for Data Capture ;5/6/1999
+1 ;;1.0;PCE PATIENT CARE ENCOUNTER;**22,73**;Aug 12, 1996
+2 ;+This routine is responsible for:
+3 ;+ - creating new entries in PCE files,
+4 ;+ - processing modifications to existing entries,
+5 ;+ - deleting entries,
+6 ;+ - ensuring all required variables are present,
+7 ;+ - setting both Audit fields (EDITED FLAG and AUDIT TRAIL),
+8 ;+ - checking for duplicate entries,
+9 ;+ - some error reporting.
+10 ;+
+11 ;+LOCAL VARIABLE LIST
+12 ;+ MOST VARIABLES ARE DEFINED AT THE TOP OF PXKMAIN
+13 ;+ PXKSEQ = Sequence number in PXK tmp global
+14 ;+ PXKCAT = Category of entry (CPT,MSR,VST...)
+15 ;+ PXKREF = Root of temp global
+16 ;+ PXKPIEN = IEN of v file
+17 ;+ PXKAUDIT = data located in the audit field of the v file
+18 ;+ PXKER = field data use to build the dr string (eg .04///^S X=$G()
+19 ;+ PXKFLD = field number gleened from the file routines
+20 ;+ PXKNOD = same as the subscript in a global node
+21 ;+ PXKPCE = the piece where the data is found on that node
+22 ;
+23 ;
+24 WRITE !,"This is not an entry point"
QUIT
LOOP ;+Copy delimited strings into sub-arrays.
+1 FOR PXKI=1:1:$LENGTH(PXKAFT(PXKSUB),"^")
IF $PIECE(PXKAFT(PXKSUB),"^",PXKI)'=""
SET PXKAV(PXKSUB,PXKI)=$PIECE(PXKAFT(PXKSUB),"^",PXKI)
+2 FOR PXKI=1:1:$LENGTH(PXKBEF(PXKSUB),"^")
IF $PIECE(PXKBEF(PXKSUB),"^",PXKI)'=""
SET PXKBV(PXKSUB,PXKI)=$PIECE(PXKBEF(PXKSUB),"^",PXKI)
+3 ; Not sure if NEW would be OK.
KILL PXKI,PXKJ
+4 IF PXKCAT="CPT"
IF PXKSUB=1
DO LOOP^PXKMOD
+5 QUIT
+6 ;
ERROR ;+Check for missing required fields
+1 IF $GET(PXKAV(0,1))["@"!('$DATA(PXKAV(0,1)))
QUIT
+2 SET PXKNOD=0
SET PXKPCE=0
+3 DO EN1^@PXKRTN
+4 SET PXKER=$PIECE(PXKER," * ",1)
+5 IF PXKER=""
QUIT
+6 FOR PXJ=1:1:$LENGTH(PXKER,",")
Begin DoDot:1
+7 SET PXJJ=$PIECE(PXKER,",",PXJ)
+8 IF '$DATA(PXKAV(PXKNOD,PXJJ))
Begin DoDot:2
+9 SET PXKPCE=PXJJ
+10 DO EN2^@PXKRTN
+11 SET PXKFLD=$PIECE(PXKFD,"/",1)
+12 IF PXKFLD["*"
SET PXKFLD=$PIECE(PXKFLD," * ",2)
+13 SET PXKERROR(PXKCAT,PXKSEQ,0,PXKFLD)="Missing Required Fields"
End DoDot:2
End DoDot:1
+14 ; Not sure about use of NEW here.
KILL PXK,PXJJ,PXKFLD,PXKFD
+15 QUIT
+16 ;
CLEAN ;--Clean out the PXKAV array
+1 SET PXKJ=""
+2 FOR
SET PXKJ=$ORDER(PXKBV(PXKJ))
IF PXKJ=""
QUIT
Begin DoDot:1
+3 SET PXKI=""
+4 FOR
SET PXKI=$ORDER(PXKBV(PXKJ,PXKI))
IF PXKI=""
QUIT
Begin DoDot:2
+5 IF $GET(PXKBV(PXKJ,PXKI))=$GET(PXKAV(PXKJ,PXKI))
KILL PXKAV(PXKJ,PXKI)
End DoDot:2
End DoDot:1
+6 ; Not sure about NEW here.
KILL PXKI,PXKJ
+7 QUIT
+8 ;
FILE ;+Create a new entry in file and get IEN
+1 ;+This is the code that adds new entries to V-files
+2 ;+and to the Visit file.
+3 KILL DD,DO
+4 SET DIC=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)_"("
+5 SET DIC(0)=""
+6 SET X=$GET(PXKAV(0,1))
+7 DO FILE^DICN
+8 SET (PXKPIEN,DA)=+Y
+9 SET DR=""
+10 KILL DIC,Y,X
+11 QUIT
+12 ;
AUD12 ;--Set both audit fields
+1 SET DR=""
+2 SET PXKAUDIT=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)_"(DA,801)"
+3 SET PXKAUDIT=$PIECE($GET(@PXKAUDIT),"^",2)_PXKSORR_";"
+4 IF $LENGTH(PXKAUDIT,";")>8
SET $PIECE(PXKAUDIT,";",2,$LENGTH(PXKAUDIT,";"))="+;"_$PIECE(PXKAUDIT,";",4,$LENGTH(PXKAUDIT,";"))
+5 SET PXKNOD=801
+6 SET DR=""
+7 FOR PXKPCE=1,2
DO EN1^@PXKRTN
SET DR=DR_PXKER
+8 SET PXKFVDLM=""
+9 QUIT
+10 ;
AUD2 ;--Set second audit fields
+1 SET DR=""
+2 SET PXKAUDIT=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)_"(DA,801)"
+3 SET PXKAUDIT=$PIECE($GET(@PXKAUDIT),"^",2)_PXKSORR_";"
+4 IF $LENGTH(PXKAUDIT,";")>8
SET $PIECE(PXKAUDIT,";",2,$LENGTH(PXKAUDIT,";"))="+;"_$PIECE(PXKAUDIT,";",4,$LENGTH(PXKAUDIT,";"))
+5 SET PXKNOD=801
+6 SET DR=""
+7 SET PXKPCE=2
+8 DO EN1^@PXKRTN
+9 SET DR=DR_PXKER
+10 SET PXKFVDLM=""
+11 QUIT
+12 ;
DRDIE ;--Set the DR string and DO DIE
+1 IF PXKCAT="VST"
DO UPD^PXKFVST
QUIT
+2 SET DIE=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)_"("
KILL PXKPTR
+3 SET PXKLR=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)_"(DA)"
+4 SET PXKNOD=""
+5 FOR
SET PXKNOD=$ORDER(PXKAV(PXKNOD))
IF PXKNOD=""
QUIT
Begin DoDot:1
+6 IF PXKFGAD=1
IF PXKNOD=0
SET PXKPCE=1
Begin DoDot:2
+7 IF PXKCAT'="CPT"
QUIT
+8 IF $GET(^TMP("PXK",$JOB,PXKCAT,PXKSEQ,"IEN"))=PXKPIEN
SET PXKPCE=3
End DoDot:2
+9 IF PXKFGAD=1
IF PXKNOD'=0
SET PXKPCE=0
+10 IF PXKFGED=1
SET PXKPCE=0
+11 IF PXKCAT="CPT"
IF PXKNOD=1
Begin DoDot:2
+12 DO DIE
+13 IF $GET(^TMP("PXK",$JOB,PXKCAT,PXKSEQ,"IEN"))]""
QUIT
+14 DO UPD^PXKMOD
End DoDot:2
QUIT
+15 FOR
SET PXKPCE=$ORDER(PXKAV(PXKNOD,PXKPCE))
IF PXKPCE=""
QUIT
Begin DoDot:2
+16 DO EN1^@PXKRTN
+17 IF $GET(PXKER)'=""
Begin DoDot:3
+18 IF PXKER["~"
Begin DoDot:4
+19 IF $PIECE(PXKER,"~",2)["A"
IF PXKFGAD=1
SET PXKER=$PIECE(PXKER,"~")
QUIT
+20 IF $PIECE(PXKER,"~",2)'["A"
IF PXKFGAD=1
SET PXKER=""
QUIT
+21 IF $PIECE(PXKER,"~",2)["E"
IF PXKFGED=1
SET PXKER=$PIECE(PXKER,"~")
QUIT
+22 IF $PIECE(PXKER,"~",2)'["E"
IF PXKFGED=1
SET PXKER=""
QUIT
End DoDot:4
+23 IF +PXKER=0
Begin DoDot:4
+24 IF PXKAV(PXKNOD,PXKPCE)=+PXKAV(PXKNOD,PXKPCE)
SET PXKER=$PIECE(PXKER," * ",2)
+25 IF PXKAV(PXKNOD,PXKPCE)'=+PXKAV(PXKNOD,PXKPCE)
SET PXKER=$PIECE(PXKER," * ",3)
SET PXKPTR(PXKPIEN,PXKNOD,PXKPCE)=""
End DoDot:4
End DoDot:3
+26 IF $GET(PXKER)'=""
SET DR=DR_PXKER_"PXKAV("_PXKNOD_","_PXKPCE_"));"
+27 IF $LENGTH(DR)>200
DO DIE
End DoDot:2
End DoDot:1
+28 DO DIE
+29 KILL DIE,PXKLR,DIC(0)
+30 DO ER
+31 QUIT
DIE ;+Lock global and invoke FM ^DIE call.
+1 LOCK +@PXKLR:10
+2 DO ^DIE
+3 LOCK -@PXKLR
+4 KILL DR
+5 SET DR=""
+6 QUIT
+7 ;
DELETE ;+Use FM ^DIK call to delete entry identified by PXKPIEN.
+1 SET DA=PXKPIEN
+2 SET DIK=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)_"("
+3 DO ^DIK
+4 KILL DIK
+5 QUIT
+6 ;
DUP ;+Code to check for duplicates
+1 IF PXKCAT="VST"
QUIT
+2 IF PXKCAT="CPT"
QUIT
+3 NEW PXKRTN
+4 IF '$DATA(PXKPIEN)
NEW PXKPIEN
SET PXKPIEN=""
+5 SET PXKNOD=0
+6 SET PXKPCE=0
+7 SET PXKRTN="PXKF"_PXKVCAT
+8 SET PXKVRTN=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)
+9 SET PXJJJ=0
+10 DO EN1^@PXKRTN
+11 IF $PIECE(PXKER," * ",3)'=0
Begin DoDot:1
+12 SET PXKER=$PIECE(PXKER," * ",2)
+13 IF PXKER=""
QUIT
+14 SET (PX,PXFG)=0
+15 FOR
SET PX=$ORDER(@PXKVRTN@("AD",PXKVST,PX))
IF PX=""
QUIT
Begin DoDot:2
+16 SET PXJJJ=0
+17 FOR PXJ=1:1:$LENGTH(PXKER,",")
SET PXJJ=$PIECE(PXKER,",",PXJ)
Begin DoDot:3
+18 IF $PIECE($GET(@PXKVRTN@(PX,$PIECE(PXJJ,"+",1))),"^",$PIECE(PXJJ,"+",2))=$GET(PXKAV($PIECE(PXJJ,"+",1),$PIECE(PXJJ,"+",2)))
IF PX'=PXKPIEN
SET PXJJJ=PXJJJ+1
End DoDot:3
+19 IF $LENGTH(PXKER,",")=PXJJJ
SET PXFG=1
End DoDot:2
IF PXFG=1
QUIT
End DoDot:1
+20 ;PXKHLR Is not killed because it is a flag comming from another routine
+21 QUIT
+22 ;
ER ;--PXKERROR MAKING IF NOT POPULATED CORRECTLY
+1 NEW PXKRT,PXKMOD,PXKSTR
+2 SET PXKMOD=PXKSEQ#1
IF $GET(PXKMOD)
QUIT
+3 SET PXKN=""
+4 FOR
SET PXKN=$ORDER(PXKAV(PXKN))
IF PXKN=""
QUIT
Begin DoDot:1
+5 SET PXKP=""
+6 FOR
SET PXKP=$ORDER(PXKAV(PXKN,PXKP))
IF PXKP=""
QUIT
Begin DoDot:2
+7 SET PXKRRT=$PIECE($TEXT(GLOBAL^@PXKRTN),";;",2)_"("_DA_","
+8 IF PXKN=1
IF PXKCAT="CPT"
SET PXKRRT=PXKRRT_PXKN_","_PXKP_","_0_")"
+9 IF '$TEST
SET PXKRRT=PXKRRT_PXKN_")"
+10 IF PXKAV(PXKN,PXKP)'=$PIECE($GET(@PXKRRT),"^",$SELECT(PXKN=1:1,1:PXKP))
Begin DoDot:3
+11 IF PXKAV(PXKN,PXKP)["@"
QUIT
+12 SET PXKNOD=PXKN
SET PXKPCE=PXKP
+13 IF PXKNOD=1
IF PXKCAT="CPT"
SET PXKPCE=1
+14 DO EN2^@PXKRTN
+15 SET PXKFLD=$PIECE(PXKFD,"/",1)
+16 IF PXKFLD["*"
SET PXKFLD=$PIECE(PXKFLD," * ",2)
+17 IF PXKFLD=1101
QUIT
+18 SET PXKSTR="Not Stored = "_PXKAV(PXKN,PXKP)
+19 IF $GET(PXKERROR(PXKCAT,PXKSEQ,DA,PXKFLD))]""
Begin DoDot:4
+20 SET PXKSTR=PXKERROR(PXKCAT,PXKSEQ,DA,PXKFLD)_","_PXKAV(PXKN,PXKP)
End DoDot:4
+21 SET PXKERROR(PXKCAT,PXKSEQ,DA,PXKFLD)=PXKSTR
End DoDot:3
End DoDot:2
End DoDot:1
+22 QUIT