f7f5b164d6bacfd8da9b8f7772497ef971f2b0f8
galt
  Fri Dec 19 11:37:31 2025 -0800
Add options -chrom -start -end -range -bed -positions -udcDir to bigMafToMaf. Adds -positions to bigBedToBed. Moved parsePosition and parseRange routines into common.c so they could be shared with these and other utilities. -range has one 0-based start on commandline. -positions is a file with a list of 1-based starts. fixes #28109

diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index 1b68a0028f0..e9c677889b5 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -15237,57 +15237,30 @@
 if (!hFindSplitTable(database, seqName, tdb->table, table, sizeof table, &hasBin))
     errAbort("track %s not found", tdb->table);
 sqlSafef(query, sizeof query, "select * from %s where qName = '%s'", table, itemName);
 sr = sqlGetResult(conn, query);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     psl = pslLoad(row+hasBin);
     slAddHead(&pslList, psl);
     }
 sqlFreeResult(&sr);
 slReverse(&pslList);
 printAlignments(pslList, start, "htcBlatXeno", tdb->table, itemName);
 printTrackHtml(tdb);
 }
 
-boolean parseRange(char *range, char **retSeq, int *retStart, int *retEnd)
-/* Parse seq:start-end into components. */
-{
-char *s, *e;
-s = strchr(range, ':');
-if (s == NULL)
-    return FALSE;
-*s++ = 0;
-e = strchr(s, '-');
-if (e == NULL)
-    return FALSE;
-*e++ = 0;
-if (!isdigit(s[0]) || !isdigit(e[0]))
-    return FALSE;
-*retSeq = range;
-*retStart = atoi(s);
-*retEnd = atoi(e);
-return TRUE;
-}
-
-void mustParseRange(char *range, char **retSeq, int *retStart, int *retEnd)
-/* Parse seq:start-end or die. */
-{
-if (!parseRange(range, retSeq, retStart, retEnd))
-    errAbort("Malformed range %s", range);
-}
-
 struct psl *loadPslAt(char *track, char *qName, int qStart, int qEnd, char *tName, int tStart, int tEnd)
 /* Load a specific psl */
 {
 struct dyString *dy = dyStringNew(1024);
 struct sqlConnection *conn = hAllocConn(database);
 char table[HDB_MAX_TABLE_STRING];
 boolean hasBin;
 struct sqlResult *sr;
 char **row;
 struct psl *psl;
 
 if (!hFindSplitTable(database, tName, track, table, sizeof table, &hasBin))
     errAbort("track %s not found", track);
 sqlDyStringPrintf(dy, "select * from %s ", table);
 sqlDyStringPrintf(dy, "where qStart = %d ", qStart);