Index: ccr/trunk/p/CCRUTIL.m
===================================================================
--- ccr/trunk/p/CCRUTIL.m	(revision 120)
+++ ccr/trunk/p/CCRUTIL.m	(revision 121)
@@ -18,6 +18,7 @@
  ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     ;
-          W "No Entry at Top!" Q
-
+          W "No Entry at Top!"
+          Q
+          ;
 FMDTOUTC(DATE,FORMAT) ; Convert Fileman Date to UTC Date Format; PUBLIC; Extrinsic
           ; FORMAT is Format of Date. Can be either D (Day) or DT (Date and Time)
@@ -47,2 +48,45 @@
           E  Q $P(UTC,"T")
           ;
+SORTDT(V1,V2,ORDR) ; DATE SORT ARRAY AND RETURN INDEX IN V1 AND COUNT
+               ; AS EXTRINSIC ORDR IS 1 OR -1 FOR FORWARD OR REVERSE
+               ; DATE AND TIME ORDER. DEFAULT IS FORWARD
+               ; V2 IS AN ARRAY OF DATES IN FILEMAN FORMAT
+               ; V1 IS RETURNS INDIRECT INDEXES OF V2 IN REVERSE DATE ORDER
+               ; SO V2(V1(X)) WILL RETURN THE DATES IN DATE/TIME ORDER
+               ; THE COUNT OF THE DATES IS RETURNED AS AN EXTRINSIC
+               ; BOTH V1 AND V2 ARE PASSED BY REFERENCE
+          N VSRT ; TEMP FOR HASHING DATES
+          N ZI,ZJ,ZTMP,ZCNT,ZP1,ZP2
+          S ZCNT=0 ; COUNTING NUMBER OF DATES
+          S ZTMP="" ;
+          F ZI=0:0 D  Q:$O(V2(ZTMP))=""  ; FOR EACH DATE IN THE ARRAY
+          . S ZCNT=ZCNT+1 ; INCREMENT THE COUNT
+          . S ZTMP=$O(V2(ZTMP)) ; NEXT DATE
+          . I $D(V2(ZTMP)) D  ; IF THE DATE EXISTS
+          . . S ZP1=$P(V2(ZTMP),".",1) ; THE DATE PIECE
+          . . S ZP2=$P(V2(ZTMP),".",2) ; THE TIME PIECE
+          . . S VSRT(ZP1,ZP2_"00000"_ZCNT)=ZCNT ; HASH ON DATE AND TIME
+          . . ; S VSRT($P(V2(ZTMP),U,4)_"000000"_ZCNT)=ZCNT ; PULL DATE
+          . I DEBUG W "ZTMP=",ZTMP," "
+          S V1(0)=ZCNT ; ARRAYS ARE THE SAME SIZE
+          I DEBUG ZWR V2
+          I DEBUG ZWR VSRT
+          N ZD,ZT ; DATA AND TIME ITERATORS
+          N ZDONE ; DONE FLAG
+          S (ZD,ZT)=""
+          S ZDONE=0
+          N UORDR ; ORDER TO USE 1=FORWARD -1=REVERSE
+          S UORDR=ORDR ; DIRECTION TO SORT
+          I ORDR="" S UORDR=1
+          N ZZCNT S ZZCNT=0 ; ANOTHER COUNTER
+          F ZI=0:0 D  Q:ZDONE  ; VISIT THE ARRAY IN DATE ORDER
+          . S ZD=$O(VSRT(ZD),UORDR) ; NEXT DATE
+          . I ZD="" S ZDONE=1
+          . I 'ZDONE D  ; MORE DATES
+          . . S ZT="" ; WANT FIRST TIME FOR THIS DATE
+          . . F ZJ=0:0 D  Q:$O(VSRT(ZD,ZT),UORDR)=""  ; LOOP THROUGH ALL TIMES
+          . . . S ZT=$O(VSRT(ZD,ZT),UORDR) ; NEXT TIME
+          . . . S ZZCNT=ZZCNT+1 ; INCREMENT COUNTER
+          . . . S V1(ZZCNT)=VSRT(ZD,ZT) ; PULL OUT THE INDEX
+          Q ZCNT
+          ;
Index: ccr/trunk/p/GPLCCD.m
===================================================================
--- ccr/trunk/p/GPLCCD.m	(revision 120)
+++ ccr/trunk/p/GPLCCD.m	(revision 121)
@@ -205,5 +205,5 @@
     . . ;  TO GET RID OF DUPLICATES
     S I="" ; GOING TO $O THROUGH THE HASH
-    F J=0:0 D  Q:$O(K(I))=""
+    F J=0:0 D  Q:$O(K(I))=""  ;
     . S I=$O(K(I)) ; WALK THROUGH THE HASH OF ACTORS
     . S $P(L,U,1)=I ; FIRST PIECE IS THE OBJECT ID
Index: ccr/trunk/p/GPLPROBS.m
===================================================================
--- ccr/trunk/p/GPLPROBS.m	(revision 120)
+++ ccr/trunk/p/GPLPROBS.m	(revision 121)
@@ -34,5 +34,5 @@
           K @TVMAP,@TARYTMP ; KILL OLD ARRAY VALUES
           D LIST^ORQQPL3(.RPCRSLT,DFN,"") ; CALL THE PROBLEM LIST RPC
-          I '$D(RPCRSLT(1)) D  Q ; RPC RETURNS NULL
+          I '$D(RPCRSLT(1)) D  Q  ; RPC RETURNS NULL
           . W "NULL RESULT FROM LIST^ORQQPL3 ",!
           . S @OUTXML@(0)=0
Index: ccr/trunk/p/GPLUNIT.m
===================================================================
--- ccr/trunk/p/GPLUNIT.m	(revision 120)
+++ ccr/trunk/p/GPLUNIT.m	(revision 121)
@@ -81,5 +81,5 @@
           I '$D(ZARY(WHICH))  D  ; TEST SECTION DOESN'T EXIST
           . W "ERROR -- TEST SECTION DOESN'T EXIST -> ",WHICH,!
-          . Q ; EXIT
+          . Q  ; EXIT
           N FIRST,LAST
           S FIRST=$P(ZARY(WHICH),"^",1)
@@ -113,5 +113,5 @@
           W !
           W "THE TESTS!",!
-          ZWR ZTMP
+          I DEBUG ZWR ZTMP
           Q
           ;
Index: ccr/trunk/p/GPLVITAL.m
===================================================================
--- ccr/trunk/p/GPLVITAL.m	(revision 120)
+++ ccr/trunk/p/GPLVITAL.m	(revision 121)
@@ -37,7 +37,9 @@
           S VITTARYTMP=$NA(^TMP("GPLCCR",$J,"VITALARYTMP"))
           K @VITTVMAP,@VITTARYTMP ; KILL OLD ARRAY VALUES
-          N VSORT,VCNT ; ARRAY FOR DATE SORTED VITALS INDEX
-          S VCNT=$$VITSORT(.VSORT,.VITRSLT) ; PUT VITALS IN DATE ORDER
-          ; AND COUNT THEM VSORT CONTAINS INDEXES ONLY
+          N VSORT,VDATES,VCNT ; ARRAY FOR DATE SORTED VITALS INDEX
+          D VITDATES(.VDATES) ; PULL OUT THE DATES INTO AN ARRAY
+          I DEBUG ZWR VDATES ;DEBUG
+          S VCNT=$$SORTDT^CCRUTIL(.VSORT,.VDATES,-1) ; PUT VITALS IN REVERSE
+          ; DATE ORDER AND COUNT THEM. VSORT CONTAINS INDIRECT INDEXES ONLY
           F J=1:1:VCNT  D  ; FOR EACH VITAL IN THE LIST
           . I $D(VITRSLT(VSORT(J))) D
@@ -182,5 +184,6 @@
           Q
           ;
-VITSORT(V1,V2) ; DATE SORT VITALS ARRAY AND RETURN INDEX IN V1 AND COUNT
+VITSORT(V1,V2) ; DEPRECATED USE $$RSORTDT^CCRUTIL
+               ; DATE SORT VITALS ARRAY AND RETURN INDEX IN V1 AND COUNT
                ; AS EXTRINSIC
                ; BOTH V1 AND V2 ARE PASSED BY REFERENCE
@@ -189,5 +192,5 @@
           S ZCNT=0 ; COUNTING NUMBER OF VITALS
           S ZTMP="" ;
-          F ZI=0:0 D  Q:$O(V2(ZTMP))="" ; FOR EACH VITAL IN THE ARRAY
+          F ZI=0:0 D  Q:$O(V2(ZTMP))=""  ; FOR EACH VITAL IN THE ARRAY
           . S ZCNT=ZCNT+1 ; INCREMENT THE COUNT
           . S ZTMP=$O(V2(ZTMP)) ; NEXT VITAL
@@ -206,5 +209,5 @@
           S ZDONE=0
           N ZZCNT S ZZCNT=0 ; ANOTHER COUNTER
-          F ZI=0:0 D  Q:ZDONE ; VISIT THE ARRAY IN DATE ORDER
+          F ZI=0:0 D  Q:ZDONE  ; VISIT THE ARRAY IN DATE ORDER
           . S ZD=$O(VSRT(ZD),-1) ; NEXT DATE
           . I ZD="" S ZDONE=1
@@ -219,2 +222,13 @@
           Q ZCNT
           ;
+VITDATES(VDT) ; VDT IS PASSED BY REFERENCE AND WILL CONTAIN THE ARRAY
+         ; OF DATES IN THE VITALS RESULTS
+         N VDTI,VDTJ,VTDCNT
+         S VTDCNT=0 ; COUNT TO BUILD ARRAY
+         S VDTJ="" ; USED TO VISIT THE RESULTS
+         F VDTI=0:0 D  Q:$O(VITRSLT(VDTJ))=""  ; VISIT ALL RESULTS
+         . S VDTJ=$O(VITRSLT(VDTJ)) ; NEXT RESULT
+         . S VTDCNT=VTDCNT+1 ; INCREMENT COUNTER
+         . S VDT(VTDCNT)=$P(VITRSLT(VDTJ),U,4) ; PULL OUT THE DATE
+         Q
+         ;
