4898794edd81be5285ea6e544acbedeaeb31bf78
max
  Tue Nov 23 08:10:57 2021 -0800
Fixing pointers to README file for license in all source code files. refs #27614

diff --git src/utils/raMerge/raMerge.c src/utils/raMerge/raMerge.c
index 1433b7a..ab9d29a 100644
--- src/utils/raMerge/raMerge.c
+++ src/utils/raMerge/raMerge.c
@@ -1,108 +1,108 @@
 /* raMerge - Merge together info in two ra files, doing a record-by-record concatenation for the most part.. */
 
 /* Copyright (C) 2011 The Regents of the University of California 
- * See README in this or parent directory for licensing information. */
+ * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
 #include "localmem.h"
 #include "ra.h"
 
 
 boolean dupeOk = FALSE, firstOnly = FALSE;
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "raMerge - Merge together info in two ra files, producing records that are a\n"
   "concatenation of all the input records\n"
   "usage:\n"
   "   raMerge keyField file1.ra file2.ra ... fileN.ra\n"
   "options:\n"
   "   -dupeOk - will pass through multiple instances of fields with same name.\n"
   "   -firstOnly - only keep records that are started in the first file\n"
   );
 }
 
 static struct optionSpec options[] = {
    {"dupeOk", OPTION_BOOLEAN},
    {"firstOnly", OPTION_BOOLEAN},
    {NULL, 0},
 };
 
 void raMerge(char *keyField, int raCount, char *raFiles[])
 /* raMerge - Merge together info in two ra files, doing a record-by-record 
  * concatenation for the most part.. */
 {
 struct hash *outerHash = hashNew(20);
 int i;
 boolean isFirstFile = TRUE;
 for (i=0; i<raCount; ++i)
     {
     struct lineFile *lf = lineFileOpen(raFiles[i], TRUE);
     struct hash *newRa;
     while ((newRa = raNextRecord(lf)) != NULL)
 	{
 	char *id = hashFindVal(newRa, keyField);
 	if (id == NULL)
 	    errAbort("Missing %s field in record ending line %d of %s", keyField,
 		    lf->lineIx, lf->fileName);
 	struct hash *oldRa = hashFindVal(outerHash, id);
 	if (oldRa == NULL)
 	    {
 	    if (isFirstFile || !firstOnly)
 		hashAdd(outerHash, id, newRa);
 	    }
 	else
 	    {
 	    struct hashCookie cookie = hashFirst(newRa);
 	    struct hashEl *hel;
 	    while ((hel = hashNext(&cookie)) != NULL)
 		{
 		if (!sameString(hel->name, keyField))
 		    {
 		    if (!dupeOk && hashLookup(oldRa, hel->name))
 			errAbort("Field %s duplicated in %s", hel->name, id);
 		    hashAdd(oldRa, hel->name, lmCloneString(oldRa->lm, hel->val));
 		    }
 		}
 	    hashFree(&newRa);
 	    }
 	}
     lineFileClose(&lf);
     isFirstFile = FALSE;
     }
 
 struct hashEl *outerHel, *outerList = hashElListHash(outerHash);
 slSort(&outerList, hashElCmp);
 FILE *f = stdout;
 for (outerHel = outerList; outerHel != NULL; outerHel = outerHel->next)
     {
     struct hash *ra = outerHel->val;
     char *id = hashMustFindVal(ra, keyField);
     fprintf(f, "%s %s\n", keyField, id);
     struct hashEl *raHel, *raList = hashElListHash(ra);
     slSort(&raList, hashElCmp);
     for (raHel = raList; raHel != NULL; raHel = raHel->next)
         {
 	if (!sameString(raHel->name, keyField))
 	    fprintf(f, "%s %s\n", raHel->name, (char *)raHel->val);
 	}
     fprintf(f, "\n");
     slFreeList(&raList);
     }
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc < 3)
     usage();
 dupeOk = optionExists("dupeOk");
 firstOnly = optionExists("firstOnly");
 raMerge(argv[1], argc-2, argv+2);
 return 0;
 }