Index: /ccr/trunk/p/C0CDIC.m
===================================================================
--- /ccr/trunk/p/C0CDIC.m	(revision 298)
+++ /ccr/trunk/p/C0CDIC.m	(revision 299)
@@ -123,8 +123,9 @@
  ; BY NAME
  ;
- ;N C0CTMP,C0CI,C0CJ,C0CREF,C0CNAME
+ N C0CTMP,C0CI,C0CJ,C0CREF,C0CNAME
  I $D(GNN) I GNN="ALL" S C0CNN=0 ; NOT NON-NULL (ALL FIELDS TO BE RETURNED)
  E  S C0CNN=1 ; NON-NULL IS TRUE (ONLY POPULATED FIELDS RETURNED)
  S C0CREF=GIEN_"," ; OPEN ROOT REFERENCE INTO FILE
+ D CLEAN^DILF ; MAKE SURE WE ARE CLEANED UP
  D GETS^DIQ(GFILE,C0CREF,"**","","C0CTMP")
  D FIELDS(GRTN,GFILE) ;GET ALL THE FIELD NAMES FOR THE FILE
@@ -144,4 +145,28 @@
  Q
  ;
+GETALL(GARFLD,GARVAL,GAFILE,GACNT,GASTRT,GANN) ; RETURN FIELD MAP AND VALUES
+ ; GARFLD, PASSED BY NAME, RETURNS FIELD MAP @GARFLD@("FIELDNAME")
+ ; .. ANY FIELD USED BY ANY RECORD PROCESSED IS IN THE FIELD MAP
+ ; .. GARFLD IS NOT INITIALIZED, SO MULTIPLE CALLS ARE CUMULATIVE
+ ; .. IF GANN="ALL" THEN ALL FIELDS FOR THE FILE ARE IN THE FIELD MAP
+ ; GARVAL, PASSED BY NAME, RETURNS VALUES AS @GARVAL@(IEN,"FIELDNAME")=VALUE
+ ; .. FOR EVERY RECORD PROCESSED. IT IS NOT INITIALEZED SO IT IS CUMMULATIVE
+ ; .. EVEN IF GANN="ALL" ONLY POPULATED FIELDS ARE RETURNED IN GARVAL
+ ; .. NUL FIELDS CAN BE DETERMINED BY CHECKING GARFLD - THIS SAVES SPACE
+ ; GARFILE IS THE FILE NUMBER TO BE PROCESSED. IT IS PASSED BY VALUE
+ ; GARCNT IS THE NUMBER OF RECORDS TO PROCESS. IT IS PASSED BY VALUE
+ ; .. IF GARCNT IS NULL, ALL RECORDS ARE PROCESSED
+ ; GARSTRT IS THE IEN OF THE FIRST RECORD TO PROCESS. IT IS PASSED BY VALUE
+ ; .. IF GARSTART IS NULL, PROCESSING STARTS AT THE FIRST RECORD
+ ; GANN= NOT NULL - IF GANN IS "ALL" THEN EVEN NULL FIELDS WILL BE RETURNED
+ ; OTHERWISE, ONLY POPULATED FIELDS ARE RETURNED IN GARFLD AND GARVAL
+ N GATMP,GAI,GAF
+ S GAF=^DIC(GAFILE,0,"GL") ;OPEN ROOT TO FILE
+ S GAF=$P(GAF,",",1)_")" ; CLOSE THE ROOT
+ W $O(@GAF@(0)) ;
+ S GAI=0 ;ITERATOR
+ ; F  S GAI=$O(@GAF@
+ Q
+ ;
 INIT ; INITIALIZE CCR DICTIONARY BASED ON VARIABLE NAMES
  ;
@@ -166,18 +191,21 @@
  F  S C0CZX=$O(^C0CDIC(170,C0CZX)) Q:+C0CZX=0  D  ; FOR EACH DICT ENTRY
  . ;W C0CZX,!
- . K C0CA ; CLEAR OUT THE LAST ONE
- . D GET("C0CA",170,C0CZX) ; GET VARIABLE HASH
+ . K C0CA,C0CN ; CLEAR OUT THE LAST ONE
+ . D GET("C0CA",170,C0CZX,"ALL") ; GET VARIABLE HASH
+ . ;ZWR C0CA B ;
  . S C0CN=$$ZVALUE("VARIABLE") ;NAME OF THE VARIABLE
+ . W "VARIABLE: ",C0CN,!
  . I $E(C0CN,1,5)="ACTOR" D SETFDA("SECTION","ACTORS") ;
  . I $E(C0CN,1,6)="SOCIAL" D  ;
- . . D SETFDA("SECTION","SOCIAL HISTORY") ;
+ . . D SETFDA("SECTION","SOC") ;
  . . D SETFDA("STATUS","X") ;SOCIAL HISTORY NOT IMPLEMENTED
  . . S C0CSTAT=1
  . I $E(C0CN,1,6)="FAMILY" D  ;
- . . D SETFDA("SECTION","FAMILY HISTORY") ;
+ . . D SETFDA("SECTION","FAM") ;
  . . D SETFDA("STATUS","X") ;FAMILY HISTORY NOT IMPLEMENTED
  . . S C0CSTAT=1
+ . ;D SETFDA("TYPE","") ;CORRECT FOR TYPE ERRORS
  . I $E(C0CN,1,5)="ALERT" D SETFDA("SECTION","ALERTS")
- . I $E(C0CN,1,5)="VITAL" D SETFDA("SECTION","VIT")
+ . I $E(C0CN,1,5)="VITAL" D SETFDA("SECTION","VITALS")
  . I $E(C0CN,1,7)="PROBLEM" D SETFDA("SECTION","PROBLEMS")
  . I $E(C0CN,1,10)="RESULTTEST" D SETFDA("SECTION","TEST")
@@ -188,5 +216,5 @@
  . I $$ZVALUE("STATUS")=""!'C0CSTAT D SETFDA("STATUS","N") ;BLANK STATUS TO N
  . I $$ZVALUE("XPATH")["/Medication/Directions/" D  ; MEDS DIRECTIONS VAR
- . . D SETFDA("SECTION","DIRECTIONS") ; SPECIAL SECTION FOR DIRECTIONS
+ . . D SETFDA("SECTION","DIR") ; SPECIAL SECTION FOR DIRECTIONS
  . E  I $$ZVALUE("XPATH")["/Medications/Medication/" D  ; ALL OTHER MEDS
  . . D SETFDA("SECTION","MEDS") ; A MEDS VAR
@@ -196,8 +224,9 @@
  . ;ZWR C0CFDA
  . I $D(C0CFDA) D  ; WE HAVE CHANGES ON THIS VARIABLE
- . . ZWR C0CFDA
+ . . ;ZWR C0CFDA
  . . D UPDATE^DIE("","C0CFDA(C0CZX)")
  . . I $D(^TMP("DIERR",$J)) U $P BREAK
- ; ZWR C0CFDA
+ . . D CLEAN^DILF ; CLEAN UP
+ . ;ZWR C0CFDA
  Q
  ;
