c79deb301511fcf0de0ed376c7746e4902804472
chmalee
  Fri May 5 16:59:33 2023 -0700
Experiment number one, can succesfully upload a file and store it via
hgCustom. New userdata library for managing where to store the files

Get skeleton structure of new cgi together

More work in progress, mostly stubbing out the CGI

More work in progress, mostly stubbing out the html page

diff --git src/hg/inc/cartJson.h src/hg/inc/cartJson.h
index 7fe745b..1fb828d 100644
--- src/hg/inc/cartJson.h
+++ src/hg/inc/cartJson.h
@@ -46,30 +46,33 @@
 boolean cartJsonIsNoWarns();
 /* Return TRUE if there are no warnings present */
 
 void cartJsonPrintWarnings(struct jsonWrite *jw);
 /* If there are warnings, write them out as JSON: */
 
 void cartJsonPushErrHandlers();
 /* Push warn and abort handlers for errAbort. */
 
 void cartJsonPopErrHandlers();
 /* Pop warn and abort handlers for errAbort. */
 
 void cartJsonExecute(struct cartJson *cj);
 /* Get commands from cgi, print Content-type, execute commands, print results as JSON. */
 
+char *cartJsonDumpJson(struct cartJson *cj);
+/* Return the string that has been built up so far or an empty string */
+
 void cartJsonFree(struct cartJson **pCj);
 /* Close **pCj's contents and nullify *pCj. */
 
 struct hgPositions *genomePosCJ(struct jsonWrite *jw, char *db, char *spec, char **retChromName,
                                int *retWinStart, int *retWinEnd, struct cart *cart, struct searchCategory *categories, boolean categorySearch);
 /* Search for positions in genome that match user query.
  * Return an hgp unless there is a problem.  hgp->singlePos will be set if a single
  * position matched. categorySearch determines whether to error out if we can't
  * uniquely determine a position for a multiTerm search
  * Otherwise display list of positions, put # of positions in retWinStart,
  * and return NULL. */
 
 void hgPositionsJson(struct jsonWrite *jw, char *db, struct hgPositions *hgp, struct cart *cart);
 /* Write out JSON description of multiple position matches. */