83858083785a6b2b1f3c05f93e818e5a89318692
max
  Tue Aug 25 01:42:34 2026 -0700
hgSession: show cytoBand and gene/locus annotations for each saved session; date-only Created/Last used columns with full timestamp on hover. Factor locusName lookup into reusable hLocusName/hLocusNameExpand in hdb.c and reuse from hgBlat. refs #38157

The Assembly column now shows band, gene/locus name and Mbp position (separated by whitespace, normal text size). hLocusNameExpand centralizes the ex:/in:/ig: and | to - expansion that hgBlat's results page did inline.

diff --git src/hg/inc/hdb.h src/hg/inc/hdb.h
index e604aebfea5..88dee2a4bf2 100644
--- src/hg/inc/hdb.h
+++ src/hg/inc/hdb.h
@@ -278,30 +278,38 @@
 /* Return mixed case (repeats in lower case) DNA from chromosome, given an
  * input nib path. */
 
 struct dnaSeq *hSeqForBed(char *db, struct bed *bed);
 /* Get the sequence associated with a particular bed concatenated together. */
 
 boolean hChromBand(char *db, char *chrom, int pos, char retBand[HDB_MAX_BAND_STRING]);
 /* Fill in text string that says what band pos is on.
  * Return FALSE if not on any band, or table missing. */
 
 boolean hChromBandConn(struct sqlConnection *conn,
 	char *chrom, int pos, char retBand[HDB_MAX_BAND_STRING]);
 /* Fill in text string that says what band pos is on.
  * Return FALSE if not on any band, or table missing. */
 
+char *hLocusNameExpand(char *raw);
+/* Expand locusName-table abbreviations ("ex:"/"in:"/"ig:" and "|") into a human-readable
+ * string. Returns a cloneString'd value (caller frees), or NULL for empty input. */
+
+char *hLocusName(struct sqlConnection *conn, char *chrom, int start, int end);
+/* If conn's database has a "locusName" table, return the human-readable gene/locus label
+ * overlapping the range ("intron STON2", "intergenic FOO-BAR"), else NULL. Caller frees. */
+
 boolean hScaffoldPos(char *db, char *chrom, int start, int end,
                      char **retScaffold, int *retStart, int *retEnd);
 /* Return the scaffold, and start end coordinates on a scaffold, for
  * a chromosome range.  If the range extends past end of a scaffold,
  * it is truncated to the scaffold end.
  * Return FALSE if unable to convert */
 
 struct dnaSeq *hDnaFromSeq(char *db, char *seqName,
 	int start, int end, enum dnaCase dnaCase);
 /* Fetch DNA in a variety of cases.  */
 
 struct dnaSeq *hLoadChrom(char *db, char *chromName);
 /* Fetch entire chromosome into memory. */
 
 void hNibForChrom(char *db, char *chromName, char retNibName[HDB_MAX_PATH_STRING]);