Index: ccr/trunk/p/GPLXPAT0.m
===================================================================
--- ccr/trunk/p/GPLXPAT0.m	(revision 155)
+++ ccr/trunk/p/GPLXPAT0.m	(revision 156)
@@ -205,3 +205,8 @@
  ;;>>?GTMP2(0)=1
  ;;>>?GTMP2(1)="TEST1^1"
+ ;;><XVARS>
+ ;;>>>K GTMP,GTMP2
+ ;;>>>D PUSH^GPLXPATH("GTMP","<VALUE>@@VAR1@@</VALUE>")
+ ;;>>>D XVARS^GPLXPATH("GTMP2","GTMP")
+ ;;>>?GTMP2(1)="VAR1^"
  ;;></TEST>
Index: ccr/trunk/p/GPLXPATH.m
===================================================================
--- ccr/trunk/p/GPLXPATH.m	(revision 155)
+++ ccr/trunk/p/GPLXPATH.m	(revision 156)
@@ -437,4 +437,15 @@
  Q
  ;
+XVARS(XVRTN,XVIXML) ; RETURNS AN ARRAY XVRTN OF ALL UNIQUE VARIABLES
+ ; DEFINED IN INPUT XML XVIXML BY @@VAR@@
+ ; XVRTN AND XVIXML ARE PASSED BY NAME
+ ;
+ N XVI,XVTMP,XVT
+ F XVI=1:1:@XVIXML@(0) D  ; FOR ALL LINES OF THE XML
+ . S XVT=@XVIXML@(XVI)
+ . I XVT["@@" S XVTMP($P(XVT,"@@",2))=""
+ D H2ARY(XVRTN,"XVTMP")
+ Q
+ ;
 TEST     ; Run all the test cases
  D TESTALL^GPLUNIT("GPLXPAT0")
