f0950c077f8427a3f65e8cc7ab37a42446041ae6
max
  Wed Sep 16 00:18:19 2015 -0700
libifying cartGetPosition because this code is needed twice, once in
hgTracks and also in cart.c for setting the page title. refs #16022,
note 18

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 43ed723..f3c1061 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -5339,50 +5339,33 @@
 withPriorityOverride = cartUsualBoolean(cart, configPriorityOverride, FALSE);
 insideX = trackOffsetX();
 insideWidth = tl.picWidth-gfxBorder-insideX;
 
 }
 
 void tracksDisplay()
 /* Put up main tracks display. This routine handles zooming and
  * scrolling. */
 {
 char newPos[256];
 char *defaultPosition = hDefaultPos(database);
 char titleVar[256];
 position = getPositionFromCustomTracks();
 
-// position=lastDbPos in URL? -> go back to the last browsed position for this db
-char dbPosKey[256];
-safef(dbPosKey, sizeof(dbPosKey), "position.%s", database);
-if (sameOk(cgiOptionalString("position"), "lastDbPos"))
-    {
-    char *position = cartUsualString(cart, dbPosKey, defaultPosition);
-    cartSetString(cart, "position", position);
-    }
-    
-if (NULL == position)
-    {
-    position = cloneString(cartUsualString(cart, "position", NULL));
-    }
+if (position == NULL)
+    position = cartGetPosition(cart, database);
 
-/* default if not set at all, as would happen if it came from a URL with no
- * position. Otherwise tell them to go back to the gateway. Also recognize
- * "default" as specifying the default position. */
-if (((position == NULL) || sameString(position, "default"))
-    && (defaultPosition != NULL))
-    position = cloneString(defaultPosition);
 if (sameString(position, ""))
     {
     hUserAbort("Please go back and enter a coordinate range or a search term in the \"search term\" field.<br>For example: chr22:20100000-20200000.\n");
     }
 
 chromName = NULL;
 winStart = 0;
 if (isGenome(position) || NULL ==
     (hgp = findGenomePos(database, position, &chromName, &winStart, &winEnd, cart)))
     {
     if (winStart == 0)  /* number of positions found */
         {
         freeMem(position);
         position = cloneString(cartUsualString(cart, "lastPosition", defaultPosition));
         hgp = findGenomePos(database, position, &chromName, &winStart, &winEnd,cart);
@@ -5396,31 +5379,31 @@
 createHgFindMatchHash();
 
 /* This means that no single result was found
 I.e., multiple results may have been found and are printed out prior to this code*/
 if (NULL == chromName)
     {
     // In case user manually edits the browser location as described in #13009,
     // revert the position.  If they instead choose from the list as we expect,
     // that will set the position to their choice.
     char *lastPosition = cartUsualString(cart, "lastPosition", hDefaultPos(database));
     cartSetString(cart, "position", lastPosition);
     return;
     }
 
 // save the current position to the cart var position.<db>
-cartSetString(cart, dbPosKey, position);
+cartSetDbPosition(cart, database, position);
 
 seqBaseCount = hChromSize(database, chromName);
 winBaseCount = winEnd - winStart;
 
 /* Figure out basic dimensions of display.  This
  * needs to be done early for the sake of the
  * zooming and dinking routines. */
 setLayoutGlobals();
 
 baseShowPos = cartUsualBoolean(cart, BASE_SHOWPOS, FALSE);
 baseShowAsm = cartUsualBoolean(cart, BASE_SHOWASM, FALSE);
 baseShowScaleBar = cartUsualBoolean(cart, BASE_SCALE_BAR, TRUE);
 baseShowRuler = cartUsualBoolean(cart, BASE_SHOWRULER, TRUE);
 safef(titleVar,sizeof(titleVar),"%s_%s", BASE_TITLE, database);
 baseTitle = cartUsualString(cart, titleVar, "");