src/hg/lib/hCommon.c 1.37

1.37 2009/06/04 21:06:18 fanhsu
Added hIsGisaidServer().
Index: src/hg/lib/hCommon.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hCommon.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -b -B -U 1000000 -r1.36 -r1.37
--- src/hg/lib/hCommon.c	31 Oct 2008 22:32:29 -0000	1.36
+++ src/hg/lib/hCommon.c	4 Jun 2009 21:06:18 -0000	1.37
@@ -1,289 +1,304 @@
 /* hCommon.c - routines used by many files in hgap project. */
 
 #include "common.h"
 #include "hCommon.h"
 #include "chromInfo.h"
 #include "portable.h"
 #include "hgConfig.h"
 
 static char const rcsid[] = "$Id$";
 
 static char *_hgcName = "../cgi-bin/hgc";	/* Path to click processing program. */
 static char *_hgTracksName = "../cgi-bin/hgTracks"; /* Path back to genome browser. */
 static char *_hgTrackUiName = "../cgi-bin/hgTrackUi"; /* Path to extended ui program. */
 static char *_hgTextName = "../cgi-bin/hgText"; /* Path back to the text browser. */
 static char *_hgTablesName = "../cgi-bin/hgTables"; /* Path back to the table browser. */
 static char *_hgCustomName = "../cgi-bin/hgCustom"; /* Path back to the custom tracks manager. */
 static char *_hgSessionName = "../cgi-bin/hgSession";	/* Path to session manager. */
 static char *_hgPalName = "../cgi-bin/hgPal"; /* Path back to the protein aligner */
 
 char *hgPalName()
 /* Relative URL to click processing program. */
 {
 return _hgPalName;
 }
 
 char *hgcName()
 /* Relative URL to click processing program. */
 {
 return _hgcName;
 }
 
 char *hgTracksName()
 /* Relative URL to browser. */
 {
 return _hgTracksName;
 }
 
 char *hgTrackUiName()
 /* Relative URL to extended track UI. */
 {
 return _hgTrackUiName;
 }
 
 char *hgTextName()
 /* Relative URL to old table browser. */
 {
 return _hgTextName;
 }
 
 char *hgTablesName()
 /* Relative URL to table browser. */
 {
 return _hgTablesName;
 }
 
 char *hgCustomName()
 /* Relative URL to custom tracks manager. */
 {
 return _hgCustomName;
 }
 
 char *hgSessionName()
 /* Relative URL to session manager. */
 {
 return _hgSessionName;
 }
 
 static void finishCloneName(char *fragName, char *e, char cloneName[128])
 /* Finish conversion from frag to clone or clone.ver name. */
 {
 int size;
 
 if (e == NULL)
     e = fragName + strlen(fragName);
 size = e - fragName;
 if (size >= 128)
     errAbort("name too long %s\n", fragName);
 memcpy(cloneName, fragName, size);
 cloneName[size] = 0;
 }
 
 void fragToCloneName(char *fragName, char cloneName[128])
 /* Convert fragment name to clone name. */
 {
 char *e = strchr(fragName, '.');
 finishCloneName(fragName, e, cloneName);
 }
 
 void fragToCloneVerName(char *fragName, char cloneVerName[128])
 /* Convert fragment name to clone.version name. */
 {
 char *e = strchr(fragName, '.');
 if (e == NULL)
     errAbort("No . in fragName %s", fragName);
 e = strchr(e, '_');
 finishCloneName(fragName, e, cloneVerName);
 }
 
 void recNameToFileName(char *dir, char *recName, char *fileName, char *suffix)
 /* Convert UCSC style fragment name to name of file for a clone. */
 {
 char *e;
 char *d = fileName;
 int size;
 
 
 /* Start file name with directory if any. */
 if (dir != NULL)
     {
     size = strlen(dir);
     memcpy(d, dir, size);
     d += size;
     if (dir[size-1] != '/')
 	*d++ = '/';
     }
 if (*recName == '>')
     ++recName;
 recName = skipLeadingSpaces(recName);
 e = strchr(recName, '.');
 if (e == NULL)
     e = skipToSpaces(recName);
 if (e == NULL)
     e = recName + strlen(recName);
 size = e - recName;
 memcpy(d, recName, size);
 d += size;
 strcpy(d, suffix);
 }
 
 void faRecNameToQacFileName(char *dir, char *recName, char *fileName)
 /* Convert fa record name to file name. */
 {
 recNameToFileName(dir, recName, fileName, ".qac");
 }
 
 void faRecNameToFaFileName(char *dir, char *recName, char *fileName)
 /* Convert fa record name to file name. */
 {
 recNameToFileName(dir, recName, fileName, ".fa");
 }
 
 void gsToUcsc(char *gsName, char *ucscName)
 /* Convert from 
  *    AC020585.5~1.2 Fragment 2 of 29 (AC020585.5:1..1195)
  * to
  *    AC020585.5_1_2
  */
 {
 char *s, *e, *d;
 int size;
 
 /* Copy in accession and version. */
 d = ucscName;
 s = gsName;
 e = strchr(s, '~');
 if (e == NULL)
     errAbort("Expecting . in %s", gsName);
 size = e - s;
 memcpy(d, s, size);
 d += size;
 
 /* Skip over tilde and replace it with _ */
 s = e+1;
 *d++ = '_';
 
 e = skipToSpaces(s);
 if (e == NULL)
     e = s + strlen(s);
 size = e - s;
 memcpy(d, s, size);
 d[size] = 0;
 subChar(d, '.', '_');
 return;
 }
 
 char *skipChr(char *s)
 /* Skip leading 'chr' in string (to get the actual chromosome part). */
 {
 if (startsWith("chr", s))
     s += 3;
 else if (startsWith("scaffold_", s))
     s += 9;
 else if (startsWith("Scaffold_", s))
     s += 9;
 return s;
 }
 
 int chromToInt(char *s)
 /* converts a chrom name chrXX into an integer from 1 to 54. 
     X = 23 Y = 24 Un = 25 M = 26 random = chr + 26;*/
 {
 char *u;
 int ret = 0;
 char str[64];
 
 if (!startsWith("chr", s))
     {
     return 0;
     }
 s += 3;
 safef(str, sizeof(str), "%s", s);
 u = strchr(str,'_');
 if (u != NULL)
     {
     ret = 26;
     *u = '\0';
     }
 switch (str[0])
     {
     case 'X':
         ret += 23; 
         break;
     case 'Y':
         ret += 24; 
         break;
     case 'U':
         ret += 25; 
         break;
     case 'M':
         ret += 26; 
         break;
     default:
         ret += atoi(s);
     }
 return ret;
 }
 boolean hIsMgcServer()
 /* Is this the MGC-customized server? Change for config variable
  * mgc.server=yes */
 {
 static boolean mgcHost = FALSE;
 static boolean haveChecked = FALSE;
 if (!haveChecked)
     {
     char *serverOpt = cfgOption("mgc.server");
     mgcHost = (serverOpt != NULL) && sameString(serverOpt, "yes");
     haveChecked = TRUE;
     }
 return mgcHost;
 }
 
+boolean hIsGisaidServer()
+/* Is this the GISAID-customized server? Change for config variable
+ * gisaid.server=yes */
+{
+static boolean gisaidHost = FALSE;
+static boolean haveChecked = FALSE;
+if (!haveChecked)
+    {
+    char *serverOpt = cfgOption("gisaid.server");
+    gisaidHost = (serverOpt != NULL) && sameString(serverOpt, "yes");
+    haveChecked = TRUE;
+    }
+return gisaidHost;
+}
+
 boolean hIsGsidServer()
 /* Is this the GSID-customized server? Change for config variable
  * gsid.server=yes */
 {
 static boolean gsidHost = FALSE;
 static boolean haveChecked = FALSE;
 if (!haveChecked)
     {
     char *serverOpt = cfgOption("gsid.server");
     gsidHost = (serverOpt != NULL) && sameString(serverOpt, "yes");
     haveChecked = TRUE;
     }
 return gsidHost;
 }
 
 boolean hIsCgbServer()
 /* Is this a cancer genome browser server? Change for config variable
  * cgb.server=yes */
 {
 static boolean cgbHost = FALSE;
 static boolean haveChecked = FALSE;
 if (!haveChecked)
     {
     char *serverOpt = cfgOption("cgb.server");
     cgbHost = (serverOpt != NULL) && sameString(serverOpt, "yes");
     haveChecked = TRUE;
     }
 return cgbHost;
 }
 
 void hTableStart()
 /* Output a table with solid borders. */
 /* For some reason BORDER=1 does not work in our web.c nested table scheme.
  * So use web.c's trick of using an enclosing table to provide a border.   */
 {
 puts("<!--hTableStart-->" "\n"
      "<TABLE BGCOLOR=\"#"HG_COL_BORDER"\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"1\"><TR><TD>");
 puts("<TABLE BORDER=\"1\" BGCOLOR=\"#"HG_COL_INSIDE"\" CELLSPACING=\"0\">");
 }
 
 void hTableEnd()
 /* Close out table started with hTableStart() */
 {
 puts("</TABLE>");
 puts("</TD></TR></TABLE>");
 puts("<!--hTableEnd-->");
 }