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/hg/pslSelect/pslSelect.c src/hg/pslSelect/pslSelect.c
index ee7308a..56053b8 100644
--- src/hg/pslSelect/pslSelect.c
+++ src/hg/pslSelect/pslSelect.c
@@ -1,228 +1,228 @@
 /* pslSelect - select records from a PSL file  */
 
 /* 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 "options.h"
 #include "linefile.h"
 #include "dystring.h"
 #include "hash.h"
 #include "localmem.h"
 #include "psl.h"
 
 
 /* command line option specifications */
 static struct optionSpec optionSpecs[] = {
     {"qtPairs", OPTION_STRING},
     {"queries", OPTION_STRING},
     {"qtStart", OPTION_STRING},
     {"queryPairs", OPTION_STRING},
     {"qDelim", OPTION_STRING},
     {"qPass", OPTION_BOOLEAN},
     {NULL, 0}
 };
 
 #define QT_PAIRS_MODE   1
 #define QUERY_MODE      2
 #define QUERY_PAIRS_MODE 3
 #define QT_START        4
 
 static int mode = 0;
 static int isPairs = TRUE;
 
 static char qDelim = '\0';
 
 static boolean isQPass = FALSE;
 
 /* global data from command line */
 static char *selectFile;
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "pslSelect - select records from a PSL file.\n"
   "\n"
   "usage:\n"
   "   pslSelect [options] inPsl outPsl\n"
   "\n"
   "Must specify a selection option\n"
   "\n"
   "Options:\n"
   "   -qtPairs=file - file is tab-separated qName and tName pairs to select\n"
   "   -qPass        - pass all PSLs with queries that do not appear in qtPairs file at all\n"
   "                   (default is to remove all PSLs for queries that are not in file)\n"
   "   -queries=file - file has qNames to select\n"
   "   -queryPairs=file - file is tab-separated pairs of qNames to select\n"
   "    with new qName to substitute in output file\n"
   "   -qtStart=file - file is tab-separate rows of qName,tName,tStart\n"
   "   -qDelim=char  - use only the part of the query name before this character\n"
   );
 }
 
 struct hash *loadSelect(char *selectFile)
 /* load select file. */
 {
 struct hash *hash = hashNew(20);
 char *row[2];
 struct lineFile *lf = lineFileOpen(selectFile, TRUE);
 int wordCount = isPairs ? 2 : 1;
 while (lineFileNextRowTab(lf, row, wordCount))
     {
     char *value = isPairs ? row[1] : "";
     hashAdd(hash, row[0], lmCloneString(hash->lm, value));
     }
 lineFileClose(&lf);
 return hash;
 }
 
 struct hash *loadSelect3(char *selectFile)
 /* load select file. */
 {
 struct hash *hash = hashNew(20);
 char *row[3];
 char buff[128];
 struct lineFile *lf = lineFileOpen(selectFile, TRUE);
 while (lineFileNextRowTab(lf, row, ArraySize(row)))
     {
     sprintf(buff, "%s%s",lmCloneString(hash->lm, row[1]),lmCloneString(hash->lm, row[2]));
     hashAdd(hash, row[0], lmCloneString(hash->lm, buff));
     }
 lineFileClose(&lf);
 return hash;
 }
 
 char* firstPart(char* name, char delim)
 /* return only a clone of the part of name before the split character. */
 {
 int i;
 for (i=0; name[i]!='\0'; i++)
     if (name[i]==delim) 
         break;
 char *ret = cloneStringZ(name, i);
 return ret;
 }
 
 boolean pairSelected3(struct hash* selectHash, char *qName, char *tName, int tStart)
 /* determine if the query/target/tStart triple is selected.  Handle the query
  * being paired to multiple targets */
 {
 char buff[128];
 char *qPrefix = firstPart(qName, qDelim);
 struct hashEl *hel = hashLookup(selectHash, qPrefix);
 while (hel != NULL)
     {
     char *target = hel->val;
     sprintf(buff,"%s%d",tName, tStart);
     if (sameString(target, buff))
         return TRUE;
     hel = hashLookupNext(hel);
     }
 freeMem(qPrefix);
 return FALSE;
 }
 
 struct hashEl *selectedItem(struct hash* selectHash, char *qName, char *tName)
 /* determine if the item is selected.  Handle the query
  * being paired to multiple query */
 {
 char *qPrefix = firstPart(qName, qDelim);
 struct hashEl *hel = hashLookup(selectHash, qPrefix);
 freeMem(qPrefix);
 
 //boolean notInTable = (hel==NULL);
 //boolean foundOneQuery = FALSE;
 
 if (isQPass && hel==NULL)
     return (struct hashEl*)1;
 
 while (hel != NULL)
     {
     //foundOneQuery = TRUE;
     char *target = hel->val;
     if (mode == QUERY_MODE || mode == QUERY_PAIRS_MODE)
         return hel;
     if (mode == QT_PAIRS_MODE && sameString(target, tName))
         return hel;
     hel = hashLookupNext(hel);
     }
 
 return NULL;
 }
 
 void pslSelect(char *inPsl, char *outPsl)
 /* select psl */
 {
 struct hash *selectHash = NULL;
 struct lineFile *inPslLf = pslFileOpen(inPsl);
 FILE *outPslFh = mustOpen(outPsl, "w");
 struct psl* psl;
 struct hashEl *hel;
 
 if (mode != QT_START)
     selectHash = loadSelect(selectFile);
 else
     selectHash = loadSelect3(selectFile);
 
 while ((psl = pslNext(inPslLf)) != NULL)
     {
     if (mode == QT_START)
         {
         if (pairSelected3(selectHash, psl->qName, psl->tName, psl->tStart))
             pslTabOut(psl, outPslFh);
         }
     else if ((hel = selectedItem(selectHash, psl->qName, psl->tName)) != NULL)
         {
         if (mode == QUERY_PAIRS_MODE)
             {
             freeMem(psl->qName);
             psl->qName = cloneString(hel->val);
             }
         pslTabOut(psl, outPslFh);
         }
     pslFree(&psl);
     }
 
 carefulClose(&outPslFh);
 lineFileClose(&inPslLf);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, optionSpecs);
 if (argc != 3)
     usage();
 if ((selectFile = optionVal("qtPairs", NULL)) != NULL)
     mode = QT_PAIRS_MODE;
 else if ((selectFile = optionVal("queries", NULL)) != NULL)
     {
     mode = QUERY_MODE;
     isPairs = FALSE;
     }
 else if ((selectFile = optionVal("queryPairs", NULL)) != NULL)
     mode = QUERY_PAIRS_MODE;
 else if ((selectFile = optionVal("qtStart", NULL)) != NULL)
     mode = QT_START;
 else
     errAbort("must specify option");
 
 char* delim = NULL;
 delim = optionVal("qDelim", NULL);
 if (delim)
     qDelim = delim[0];
 
 isQPass = optionExists("qPass");
 if (isQPass && (mode!=QT_PAIRS_MODE))
     errAbort("-qPass can only be used with -qtPairs");
 
 pslSelect(argv[1], argv[2]);
 
 return 0;
 }
 /*
  * Local Variables:
  * c-file-style: "jkent-c"
  * End:
  */