Index: ccr/trunk/p/GPLXPATH.m
===================================================================
--- ccr/trunk/p/GPLXPATH.m	(revision 39)
+++ ccr/trunk/p/GPLXPATH.m	(revision 43)
@@ -1,4 +1,4 @@
 GPLXPATH   ; CCDCCR/GPL - XPATH XML manipulation utilities; 6/1/08
-;;0.2;CCDCCR;nopatch;noreleasedate
+ ;;0.2;CCDCCR;nopatch;noreleasedate
           W "This is an XML XPATH utility library",!
           W !
@@ -24,6 +24,8 @@
           ; VAL AND STK ARE PASSED BY REFERENCE
           ;
-          I @STK@(0)<1 S VAL="",@STK@(0)=0 Q ; IF ARRAY IS EMPTY
-          I @STK@(0)>0  D
+          I @STK@(0)<1 D  ; IF ARRAY IS EMPTY
+          . S VAL=""
+          . S @STK@(0)=0
+          I @STK@(0)>0  D  ;
           . S VAL=@STK@(@STK@(0))
           . K @STK@(@STK@(0))
@@ -243,10 +245,10 @@
          I DEBUG W "DOING INSERT ",INSXML,INSNEW,INSXPATH,!
          I DEBUG F G1=1:1:@INSXML@(0) W @INSXML@(G1),!
-         I '$D(@INSXML@(0)) D  Q ; INSERT INTO AN EMPTY ARRAY
+         I '$D(@INSXML@(0)) D  ; INSERT INTO AN EMPTY ARRAY
          . D CP^GPLXPATH(INSNEW,INSXML) ; JUST COPY INTO THE OUTPUT
          I $D(@INSXML@(0)) D  ; IF ORIGINAL ARRAY IS NOT EMPTY
          . I $D(INSXPATH) D  ; XPATH PROVIDED
          . . D QOPEN("INSBLD",INSXML,INSXPATH) ; COPY THE BEFORE
-         . . I DEBUG ZWR INSBLD
+         . . I DEBUG D PARY^GPLXPATH("INSBLD")
          . I '$D(INSXPATH) D  ; NO XPATH PROVIDED, OPEN AT ROOT
          . . D QOPEN("INSBLD",INSXML,"//") ; OPEN WITH ROOT XPATH
@@ -295,5 +297,5 @@
          D QUEUE("REBLD",REXML,XLAST,@REXML@(0)) ; THE REST
          I DEBUG W "REPALCE PREBUILD",!
-         I DEBUG ZWR REBLD
+         I DEBUG D PARY("REBLD")
          D BUILD("REBLD","RTMP")
          K @REXML ; KILL WHAT WAS THERE
@@ -362,161 +364,161 @@
         Q
         ;
-;;><TEST>
-;;><INIT>
-;;>>>K GPL S GPL=""
-;;>>>D PUSH^GPLXPATH("GPL","FIRST")
-;;>>>D PUSH^GPLXPATH("GPL","SECOND")
-;;>>>D PUSH^GPLXPATH("GPL","THIRD")
-;;>>>D PUSH^GPLXPATH("GPL","FOURTH")
-;;>>?GPL(0)=4
-;;><INITXML>
-;;>>>K GXML S GXML=""
-;;>>>D PUSH^GPLXPATH("GXML","<FIRST>")
-;;>>>D PUSH^GPLXPATH("GXML","<SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","<THIRD>")
-;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>@@DATA1@@</FOURTH>")
-;;>>>D PUSH^GPLXPATH("GXML","<FIFTH>")
-;;>>>D PUSH^GPLXPATH("GXML","@@DATA2@@")
-;;>>>D PUSH^GPLXPATH("GXML","</FIFTH>")
-;;>>>D PUSH^GPLXPATH("GXML","<SIXTH ID=""SELF"" />")
-;;>>>D PUSH^GPLXPATH("GXML","</THIRD>")
-;;>>>D PUSH^GPLXPATH("GXML","<SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","</SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","</SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","</FIRST>")
-;;><INITXML2>
-;;>>>K GXML S GXML=""
-;;>>>D PUSH^GPLXPATH("GXML","<FIRST>")
-;;>>>D PUSH^GPLXPATH("GXML","<SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","<THIRD>")
-;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>DATA1</FOURTH>")
-;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>")
-;;>>>D PUSH^GPLXPATH("GXML","DATA2")
-;;>>>D PUSH^GPLXPATH("GXML","</FOURTH>")
-;;>>>D PUSH^GPLXPATH("GXML","</THIRD>")
-;;>>>D PUSH^GPLXPATH("GXML","<_SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>DATA3</FOURTH>")
-;;>>>D PUSH^GPLXPATH("GXML","</_SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","</SECOND>")
-;;>>>D PUSH^GPLXPATH("GXML","</FIRST>")
-;;><PUSHPOP>
-;;>>>D ZLOAD^GPLUNIT("ZTMP","GPLXPATH")
-;;>>>D ZTEST^GPLUNIT(.ZTMP,"INIT")
-;;>>?GPL(GPL(0))="FOURTH"
-;;>>>D POP^GPLXPATH("GPL",.GX)
-;;>>?GX="FOURTH"
-;;>>?GPL(GPL(0))="THIRD"
-;;>>>D POP^GPLXPATH("GPL",.GX)
-;;>>?GX="THIRD"
-;;>>?GPL(GPL(0))="SECOND"
-;;><MKMDX>
-;;>>>D ZLOAD^GPLUNIT("ZTMP","GPLXPATH")
-;;>>>D ZTEST^GPLUNIT(.ZTMP,"INIT")
-;;>>>S GX=""
-;;>>>D MKMDX^GPLXPATH("GPL",.GX)
-;;>>?GX="//FIRST/SECOND/THIRD/FOURTH"
-;;><XNAME>
-;;>>?$$XNAME^GPLXPATH("<FOURTH>DATA1</FOURTH>")="FOURTH"
-;;>>?$$XNAME^GPLXPATH("<SIXTH  ID=""SELF"" />")="SIXTH"
-;;>>?$$XNAME^GPLXPATH("</THIRD>")="THIRD"
-;;><INDEX>
-;;>>>D ZLOAD^GPLUNIT("ZTMP","GPLXPATH")
-;;>>>D ZTEST^GPLUNIT(.ZTMP,"INITXML")
-;;>>>D INDEX^GPLXPATH("GXML")
-;;>>?GXML("//FIRST/SECOND")="2^12"
-;;>>?GXML("//FIRST/SECOND/THIRD")="3^9"
-;;>>?GXML("//FIRST/SECOND/THIRD/FIFTH")="5^7"
-;;>>?GXML("//FIRST/SECOND/THIRD/FOURTH")="4^4"
-;;>>?GXML("//FIRST/SECOND/THIRD/SIXTH")="8^8"
-;;>>?GXML("//FIRST/SECOND")="2^12"
-;;>>?GXML("//FIRST")="1^13"
-;;><INDEX2>
-;;>>>D ZTEST^GPLXPATH("INITXML2")
-;;>>>D INDEX^GPLXPATH("GXML")
-;;>>?GXML("//FIRST/SECOND")="2^12"
-;;>>?GXML("//FIRST/SECOND/_SECOND")="9^11"
-;;>>?GXML("//FIRST/SECOND/_SECOND/FOURTH")="10^10"
-;;>>?GXML("//FIRST/SECOND/THIRD")="3^8"
-;;>>?GXML("//FIRST/SECOND/THIRD/FOURTH")="4^7"
-;;>>?GXML("//FIRST")="1^13"
-;;><MISSING>
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>S OUTARY="^TMP($J,""MISSINGTEST"")"
-;;>>>D MISSING^GPLXPATH("GXML",OUTARY)
-;;>>?@OUTARY@(1)="DATA1"
-;;>>?@OUTARY@(2)="DATA2"
-;;><MAP>
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>S MAPARY="^TMP($J,""MAPVALUES"")"
-;;>>>S OUTARY="^TMP($J,""MAPTEST"")"
-;;>>>S @MAPARY@("DATA2")="VALUE2"
-;;>>>D MAP^GPLXPATH("GXML",MAPARY,OUTARY)
-;;>>?@OUTARY@(6)="VALUE2"
-;;><QUEUE>
-;;>>>D QUEUE^GPLXPATH("BTLIST","GXML",2,3)
-;;>>>D QUEUE^GPLXPATH("BTLIST","GXML",4,5)
-;;>>?$P(BTLIST(2),";",2)=4
-;;><BUILD>
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD/FOURTH","G2")
-;;>>>D ZTEST^GPLXPATH("QUEUE")
-;;>>>D BUILD^GPLXPATH("BTLIST","G3")
-;;><CP>
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D CP^GPLXPATH("GXML","G2")
-;;>>?G2(0)=13
-;;><QOPEN>
-;;>>>K G2,GBL
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QOPEN^GPLXPATH("GBL","GXML")
-;;>>?$P(GBL(1),";",3)=12
-;;>>>D BUILD^GPLXPATH("GBL","G2")
-;;>>?G2(G2(0))="</SECOND>"
-;;><QOPEN2>
-;;>>>K G2,GBL
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QOPEN^GPLXPATH("GBL","GXML","//FIRST/SECOND")
-;;>>?$P(GBL(1),";",3)=11
-;;>>>D BUILD^GPLXPATH("GBL","G2")
-;;>>?G2(G2(0))="</SECOND>"
-;;><QCLOSE>
-;;>>>K G2,GBL
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QCLOSE^GPLXPATH("GBL","GXML")
-;;>>?$P(GBL(1),";",3)=13
-;;>>>D BUILD^GPLXPATH("GBL","G2")
-;;>>?G2(G2(0))="</FIRST>"
-;;><QCLOSE2>
-;;>>>K G2,GBL
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QCLOSE^GPLXPATH("GBL","GXML","//FIRST/SECOND/THIRD")
-;;>>?$P(GBL(1),";",3)=13
-;;>>>D BUILD^GPLXPATH("GBL","G2")
-;;>>?G2(G2(0))="</FIRST>"
-;;>>?G2(1)="</THIRD>"
-;;><INSERT>
-;;>>>K G2,GBL,G3,G4
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD/FIFTH","G2")
-;;>>>D INSERT^GPLXPATH("GXML","G2","//FIRST/SECOND/THIRD")
-;;>>>D INSERT^GPLXPATH("G3","G2","//")
-;;>>?G2(1)=GXML(9)
-;;><REPLACE>
-;;>>>K G2,GBL,G3
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD/FIFTH","G2")
-;;>>>D REPLACE^GPLXPATH("GXML","G2","//FIRST/SECOND")
-;;>>?GXML(3)="<FIFTH>"
-;;><INSINNER>
-;;>>>K GXML,G2,GBL,G3
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD","G2")
-;;>>>D INSINNER^GPLXPATH("GXML","G2","//FIRST/SECOND/THIRD")
-;;>>?GXML(10)="<FIFTH>"
-;;><INSINNER2>
-;;>>>K GXML,G2,GBL,G3
-;;>>>D ZTEST^GPLXPATH("INITXML")
-;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD","G2")
-;;>>>D INSINNER^GPLXPATH("G2","G2")
-;;>>?G2(8)="<FIFTH>"
-;;></TEST>
+ ;;><TEST>
+ ;;><INIT>
+ ;;>>>K GPL S GPL=""
+ ;;>>>D PUSH^GPLXPATH("GPL","FIRST")
+ ;;>>>D PUSH^GPLXPATH("GPL","SECOND")
+ ;;>>>D PUSH^GPLXPATH("GPL","THIRD")
+ ;;>>>D PUSH^GPLXPATH("GPL","FOURTH")
+ ;;>>?GPL(0)=4
+ ;;><INITXML>
+ ;;>>>K GXML S GXML=""
+ ;;>>>D PUSH^GPLXPATH("GXML","<FIRST>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<THIRD>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>@@DATA1@@</FOURTH>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<FIFTH>")
+ ;;>>>D PUSH^GPLXPATH("GXML","@@DATA2@@")
+ ;;>>>D PUSH^GPLXPATH("GXML","</FIFTH>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<SIXTH ID=""SELF"" />")
+ ;;>>>D PUSH^GPLXPATH("GXML","</THIRD>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","</SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","</SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","</FIRST>")
+ ;;><INITXML2>
+ ;;>>>K GXML S GXML=""
+ ;;>>>D PUSH^GPLXPATH("GXML","<FIRST>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<THIRD>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>DATA1</FOURTH>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>")
+ ;;>>>D PUSH^GPLXPATH("GXML","DATA2")
+ ;;>>>D PUSH^GPLXPATH("GXML","</FOURTH>")
+ ;;>>>D PUSH^GPLXPATH("GXML","</THIRD>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<_SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","<FOURTH>DATA3</FOURTH>")
+ ;;>>>D PUSH^GPLXPATH("GXML","</_SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","</SECOND>")
+ ;;>>>D PUSH^GPLXPATH("GXML","</FIRST>")
+ ;;><PUSHPOP>
+ ;;>>>D ZLOAD^GPLUNIT("ZTMP","GPLXPATH")
+ ;;>>>D ZTEST^GPLUNIT(.ZTMP,"INIT")
+ ;;>>?GPL(GPL(0))="FOURTH"
+ ;;>>>D POP^GPLXPATH("GPL",.GX)
+ ;;>>?GX="FOURTH"
+ ;;>>?GPL(GPL(0))="THIRD"
+ ;;>>>D POP^GPLXPATH("GPL",.GX)
+ ;;>>?GX="THIRD"
+ ;;>>?GPL(GPL(0))="SECOND"
+ ;;><MKMDX>
+ ;;>>>D ZLOAD^GPLUNIT("ZTMP","GPLXPATH")
+ ;;>>>D ZTEST^GPLUNIT(.ZTMP,"INIT")
+ ;;>>>S GX=""
+ ;;>>>D MKMDX^GPLXPATH("GPL",.GX)
+ ;;>>?GX="//FIRST/SECOND/THIRD/FOURTH"
+ ;;><XNAME>
+ ;;>>?$$XNAME^GPLXPATH("<FOURTH>DATA1</FOURTH>")="FOURTH"
+ ;;>>?$$XNAME^GPLXPATH("<SIXTH  ID=""SELF"" />")="SIXTH"
+ ;;>>?$$XNAME^GPLXPATH("</THIRD>")="THIRD"
+ ;;><INDEX>
+ ;;>>>D ZLOAD^GPLUNIT("ZTMP","GPLXPATH")
+ ;;>>>D ZTEST^GPLUNIT(.ZTMP,"INITXML")
+ ;;>>>D INDEX^GPLXPATH("GXML")
+ ;;>>?GXML("//FIRST/SECOND")="2^12"
+ ;;>>?GXML("//FIRST/SECOND/THIRD")="3^9"
+ ;;>>?GXML("//FIRST/SECOND/THIRD/FIFTH")="5^7"
+ ;;>>?GXML("//FIRST/SECOND/THIRD/FOURTH")="4^4"
+ ;;>>?GXML("//FIRST/SECOND/THIRD/SIXTH")="8^8"
+ ;;>>?GXML("//FIRST/SECOND")="2^12"
+ ;;>>?GXML("//FIRST")="1^13"
+ ;;><INDEX2>
+ ;;>>>D ZTEST^GPLXPATH("INITXML2")
+ ;;>>>D INDEX^GPLXPATH("GXML")
+ ;;>>?GXML("//FIRST/SECOND")="2^12"
+ ;;>>?GXML("//FIRST/SECOND/_SECOND")="9^11"
+ ;;>>?GXML("//FIRST/SECOND/_SECOND/FOURTH")="10^10"
+ ;;>>?GXML("//FIRST/SECOND/THIRD")="3^8"
+ ;;>>?GXML("//FIRST/SECOND/THIRD/FOURTH")="4^7"
+ ;;>>?GXML("//FIRST")="1^13"
+ ;;><MISSING>
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>S OUTARY="^TMP($J,""MISSINGTEST"")"
+ ;;>>>D MISSING^GPLXPATH("GXML",OUTARY)
+ ;;>>?@OUTARY@(1)="DATA1"
+ ;;>>?@OUTARY@(2)="DATA2"
+ ;;><MAP>
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>S MAPARY="^TMP($J,""MAPVALUES"")"
+ ;;>>>S OUTARY="^TMP($J,""MAPTEST"")"
+ ;;>>>S @MAPARY@("DATA2")="VALUE2"
+ ;;>>>D MAP^GPLXPATH("GXML",MAPARY,OUTARY)
+ ;;>>?@OUTARY@(6)="VALUE2"
+ ;;><QUEUE>
+ ;;>>>D QUEUE^GPLXPATH("BTLIST","GXML",2,3)
+ ;;>>>D QUEUE^GPLXPATH("BTLIST","GXML",4,5)
+ ;;>>?$P(BTLIST(2),";",2)=4
+ ;;><BUILD>
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD/FOURTH","G2")
+ ;;>>>D ZTEST^GPLXPATH("QUEUE")
+ ;;>>>D BUILD^GPLXPATH("BTLIST","G3")
+ ;;><CP>
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D CP^GPLXPATH("GXML","G2")
+ ;;>>?G2(0)=13
+ ;;><QOPEN>
+ ;;>>>K G2,GBL
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QOPEN^GPLXPATH("GBL","GXML")
+ ;;>>?$P(GBL(1),";",3)=12
+ ;;>>>D BUILD^GPLXPATH("GBL","G2")
+ ;;>>?G2(G2(0))="</SECOND>"
+ ;;><QOPEN2>
+ ;;>>>K G2,GBL
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QOPEN^GPLXPATH("GBL","GXML","//FIRST/SECOND")
+ ;;>>?$P(GBL(1),";",3)=11
+ ;;>>>D BUILD^GPLXPATH("GBL","G2")
+ ;;>>?G2(G2(0))="</SECOND>"
+ ;;><QCLOSE>
+ ;;>>>K G2,GBL
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QCLOSE^GPLXPATH("GBL","GXML")
+ ;;>>?$P(GBL(1),";",3)=13
+ ;;>>>D BUILD^GPLXPATH("GBL","G2")
+ ;;>>?G2(G2(0))="</FIRST>"
+ ;;><QCLOSE2>
+ ;;>>>K G2,GBL
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QCLOSE^GPLXPATH("GBL","GXML","//FIRST/SECOND/THIRD")
+ ;;>>?$P(GBL(1),";",3)=13
+ ;;>>>D BUILD^GPLXPATH("GBL","G2")
+ ;;>>?G2(G2(0))="</FIRST>"
+ ;;>>?G2(1)="</THIRD>"
+ ;;><INSERT>
+ ;;>>>K G2,GBL,G3,G4
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD/FIFTH","G2")
+ ;;>>>D INSERT^GPLXPATH("GXML","G2","//FIRST/SECOND/THIRD")
+ ;;>>>D INSERT^GPLXPATH("G3","G2","//")
+ ;;>>?G2(1)=GXML(9)
+ ;;><REPLACE>
+ ;;>>>K G2,GBL,G3
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD/FIFTH","G2")
+ ;;>>>D REPLACE^GPLXPATH("GXML","G2","//FIRST/SECOND")
+ ;;>>?GXML(3)="<FIFTH>"
+ ;;><INSINNER>
+ ;;>>>K GXML,G2,GBL,G3
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD","G2")
+ ;;>>>D INSINNER^GPLXPATH("GXML","G2","//FIRST/SECOND/THIRD")
+ ;;>>?GXML(10)="<FIFTH>"
+ ;;><INSINNER2>
+ ;;>>>K GXML,G2,GBL,G3
+ ;;>>>D ZTEST^GPLXPATH("INITXML")
+ ;;>>>D QUERY^GPLXPATH("GXML","//FIRST/SECOND/THIRD","G2")
+ ;;>>>D INSINNER^GPLXPATH("G2","G2")
+ ;;>>?G2(8)="<FIFTH>"
+ ;;></TEST>
