/* * $Id: vastuti.cpp,v 1.1 2005/07/26 17:12:50 chenj Exp $ * * * =========================================================================== * * PUBLIC DOMAIN NOTICE * National Center for Biotechnology Information * * This software/database is a "United States Government Work" under the * terms of the United States Copyright Act. It was written as part of * the author's official duties as a United States Government employee and * thus cannot be copyrighted. This software/database is freely available * to the public for use. The National Library of Medicine and the U.S. * Government have not placed any restriction on its use or reproduction. * * Although all reasonable efforts have been taken to ensure the accuracy * and reliability of the software and data, the NLM and the U.S. * Government do not and cannot warrant the performance or results that * may be obtained by using this software or data. The NLM and the U.S. * Government disclaim all warranties, express or implied, including * warranties of performance, merchantability or fitness for any particular * purpose. * * Please cite the author in any work or product based on this material. * * =========================================================================== * * * Author: Jie Chen * * * $Log: vastuti.cpp,v $ * Revision 1.1 2005/07/26 17:12:50 chenj * Making linux VSNbr.cgi * * Revision 1.1.1.1 2002/12/06 20:17:21 chenj * Imported Scouces * * * * * This is the utility program file. * * ========================================================================== */ #include "hUtilib.hpp" #include "vastuti.hpp" extern Uint1 numSubsets; extern SubsetNameData subsetNames[5]; extern string MAILto; extern char DATApath[MAX_TBUFF], VSPATH[MAX_TBUFF]; extern char URLcgi[MAX_TBUFF], CGIname[MAX_TBUFF]; extern bool SubsetInfoLoaded; extern string JobID, Passwd; void PrtMesC(string MAILto, CharPtr str1, CharPtr str2, CharPtr str3, bool ret) { printf("Content-type: text/html\n\n"); printf("\n"); printf("

%s

\n", str1); if (str2) { printf("

%s", str2); if (str3) printf("\"%s\".

\n", str3); else printf("

\n"); } if (MAILto != "") printf("

Please alert \"%s\" of this problem.

\n", MAILto); if (!ret) exit(1); } void loadSubsetInfo(void) { numSubsets = 0; numSubsets = constructSubsetNames(subsetNames, 10); if(numSubsets <= 0) PrtMesC(MAILto, "VASTSRV", "loadSubsetInfo() failed.", "", false); SubsetInfoLoaded = true; } /* loadSubsetInfo() */ string GetSubsetName_DB(unsigned subsetId) { Uint1 i = 0; if(SubsetInfoLoaded == false) loadSubsetInfo(); for(i = 0; i < numSubsets; i++) if(subsetNames[i].subId == (Uint1) subsetId) return (string)subsetNames[i].subName; PrtMesC(MAILto, "VASTSRV", "GetSubsetName_DB() failed.", "", false); return (""); } /* GetSubsetName_DB() */ /************************** DZ: extracted from mmdbsrv.c ********************** * WWWPrintFileData looks in the current CGI-BIN directory, or the "data" * subdirectory for the data file and prints it out to pFile. */ void WWWPrintFileData(char *FName, FILE *pFile) { FILE *f = NULL; char fullpath [PATH_MAX], pcBuf[1024]; char *ptr; fullpath[0] = '\0'; StringCpy(fullpath, DATApath); /* look in DATApath */ StringCat(fullpath, FName); f = FileOpen (fullpath, "r"); if (f == NULL) { f = FileOpen (FName, "r"); /* look in curent */ if (f == NULL) { /* look in ./data/ */ ProgramPath (fullpath, sizeof (fullpath) - 1); ptr = StringRChr (fullpath, DIRDELIMCHR); if (ptr != NULL) { *ptr = '\0'; } FileBuildPath (fullpath, (char *)"data", FName); f = FileOpen (fullpath, (char *)"r"); if (f == NULL) { return; } } } do { pcBuf[0] = '\0'; ptr = fgets(pcBuf, (size_t)1024, f); if (ptr) fprintf(pFile, ptr); } while (ptr); FileClose(f); } /* WWWPrintFileData() */ /* Note: A lot of this common html text could be put into a header file, * read in, and then spewed out. * Cf. the way this is done in mmdbsrv with WWWPrintFile. * Sometime I'll take the time to write a more general version of the latter * function that can be used for this purpose. T.M. */ /* DZ: most of the HTML file URLs are inside the new VAST subdirectory, and * references to these are interwoven with many query-specific references. * Becasue of this interleaving, using WWWPrintFileData would require several * invocations and corresponding text files. Instead, WWWPrintFileData is only * used to define the new path to CN3D, and all vast html references are now * prefixed with the VASTpath string. This variable has been added to .vastrc * and to the list of parameters to be extracted using GetVastParams. */ BiostrucAnnotSetPtr LIBCALL LocalGetBiostrucAnnotSet(unsigned mmdbid) { AsnIoPtr aip = NULL; BiostrucAnnotSetPtr pbsa = NULL; char path[PATH_MAX]; char pcId[20]; unsigned iFileExists = 0; sprintf(pcId, "/%ld", (long) mmdbid); StringCpy(path, VSPATH); StringCat(path, JobID.c_str()); StringCat(path, pcId); StringCat(path, ".bas"); iFileExists = FileLength(path); if (iFileExists == 0) return NULL; aip = AsnIoOpen(path, (char *)"r"); pbsa = BiostrucAnnotSetAsnRead(aip, NULL); AsnIoClose (aip); if (!pbsa) return NULL; return pbsa; } /* LocalGetBiostrucAnnotSet() */ /* BiostrucAnnotSetPtr LIBCALL LocalGetFeatureSet(unsigned mmdbid, unsigned feature_set_id) { BiostrucAnnotSetPtr basp2 = NULL; BiostrucFeatureSetPtr pbsfs = NULL; BiostrucAnnotSetPtr basp = NULL; BiostrucFeatureSetPtr pbsfsLast = NULL; if (IsVASTData(mmdbid)) basp = VASTBsAnnotSetGet(mmdbid); else if (IsVASTData(feature_set_id)) { basp = VASTBsAnnotSetGet(feature_set_id); if (basp != NULL) return basp; } else if (JobID != "") basp = LocalGetBiostrucAnnotSet(mmdbid); if (basp == NULL) return NULL; pbsfs = basp->features; pbsfsLast = NULL; basp2 = NULL; while (pbsfs) { if (pbsfs->id == feature_set_id) { basp2 = BiostrucAnnotSetNew(); basp2->id = basp->id; basp->id = NULL; // unlink the id valnode from basp object basp2->descr = basp->descr; basp->descr = NULL; // unlink the descr from basp object basp2->features = pbsfs; if (pbsfsLast) // relink next to prev pbsfsLast->next = pbsfs->next; else basp->features = pbsfs->next; basp2->features->next = NULL; BiostrucAnnotSetFree(basp); return basp2; } pbsfsLast = pbsfs; pbsfs = pbsfs->next; } BiostrucAnnotSetFree(basp); return basp2; } // LocalGetFeatureSet */ BiostrucAnnotSetPtr LIBCALL BiostrucAnnotSetGetByFid ( BiostrucAnnotSetPtr basp, int feature_id, int feature_set_id) { BiostrucAnnotSetPtr basp2 = NULL; BiostrucFeatureSetPtr pbsfs = NULL; BiostrucFeaturePtr pbsf = NULL; if (basp == NULL) return NULL; pbsfs = basp->features; while (pbsfs) { if (pbsfs->id == feature_set_id) { pbsf = pbsfs->features; while(pbsf) { if (pbsf->id == feature_id) { /* found it */ basp2 = BiostrucAnnotSetNew(); basp2->id = basp->id; basp->id = NULL; /* unlink the id valnode from basp object */ basp2->descr = basp->descr; basp->descr = NULL; /* unlink the descr from basp object */ basp2->features = BiostrucFeatureSetNew(); basp2->features->id = pbsfs->id; basp2->features->descr = pbsfs->descr; pbsfs->descr = NULL; /* unlink */ basp2->features->features = BiostrucFeatureNew(); basp2->features->features->id = pbsf->id; basp2->features->features->name = StringSave(pbsf->name); basp2->features->features->type = pbsf->type; basp2->features->features->Property_property=pbsf->Property_property; pbsf->Property_property = NULL; /* unlink */ basp2->features->features->Location_location=pbsf->Location_location; pbsf->Location_location = NULL; /* unlink */ BiostrucAnnotSetFree(basp); return basp2; } pbsf = pbsf->next; } } pbsfs = pbsfs->next; } BiostrucAnnotSetFree(basp); return basp2; } /* BiostrucAnnotSetGetByFid() */ short LIBCALL Check_VastSearch_Password() { char pcPassFile[24]; char PassPath[PATH_MAX]; FILE *passwdfile; char * pcPassOld; unsigned iPassLen; iPassLen = StringLen(Passwd.c_str()); pcPassOld = StringSave(Passwd.c_str()); sprintf(pcPassFile, "/%s.passwd", JobID.c_str()); PassPath[0]='\0'; StringCpy(PassPath, VSPATH); StringCat(PassPath, JobID.c_str()); StringCat(PassPath, pcPassFile); if ((passwdfile = FileOpen(PassPath, "r")) == NULL) { char str[100]; sprintf(str, (char *)"%s", JobID.c_str()); PrtMesC(NULL, (char *)"VASTSRV", (char *)"Password file doesn't exist for JobId = ", str, true); return 2; } fscanf(passwdfile, "%s", pcPassOld); FileClose(passwdfile); if (!StringNCmp(pcPassOld, Passwd.c_str(), iPassLen)) return 1; else return 0; } /* end of Check_VastSearch_Password */ /* new Prune */ BiostrucAnnotSetPtr PruneBiostrucAnnotHits( BiostrucAnnotSetPtr basp, unsigned FSID, ValNodePtr pvnFids) { BiostrucAnnotSetPtr basp2 = NULL; BiostrucFeatureSetPtr pbsfs = NULL; BiostrucFeaturePtr pbsf = NULL, pre_pbsf = NULL; BiostrucFeaturePtr pbsfHold = NULL; BiostrucFeaturePtr pbsf2 = NULL; bool found = false; if ((basp == NULL) || (pvnFids == NULL) || (FSID == 0)) return NULL; pbsfs = basp->features; while (pbsfs) { if (pbsfs->id == FSID) { basp2 = BiostrucAnnotSetNew(); basp2->id = basp->id; basp->id = NULL; /* unlink the id valnode from basp object */ basp2->descr = basp->descr; basp->descr = NULL; /* unlink the descr from basp object */ basp2->features = BiostrucFeatureSetNew(); basp2->features->id = pbsfs->id; pbsfs->id = NULL; basp2->features->descr = pbsfs->descr; pbsfs->descr = NULL; /* unlink */ pbsfHold = pbsfs->features; pbsfs->features = NULL; BiostrucAnnotSetFree(basp); pbsfs = NULL; while (pvnFids) { found = false; pbsf = pbsfHold; pre_pbsf = NULL; while (pbsf) { if ((unsigned) pvnFids->data.intvalue == pbsf->id) { found = true; break; } pre_pbsf = pbsf; pbsf = pbsf->next; } if (found) { if (!pre_pbsf) pbsfHold = pbsf->next; else pre_pbsf->next = pbsf->next; if (!basp2->features->features) { basp2->features->features = pbsf; pbsf2 = basp2->features->features; } else { pbsf2->next = pbsf; pbsf2 = pbsf; } } pvnFids = pvnFids->next; } /* while pvbFids */ pbsf2->next = NULL; } if(pbsfs) pbsfs = pbsfs->next; } return basp2; } /* PruneBiostrucAnnotHits() */ void MakeNbrList(char * nbrString, char * *(*SelNames), unsigned **SelSds, unsigned *iCount, unsigned ischar) { char SavedChar = NULLB; char *Ptr=NULL, *Ptr2=NULL; unsigned i, j; Ptr2 = Ptr = SkipSpaces(nbrString); if (*Ptr == NULLB) return; *iCount = 0; while (*Ptr) { if (*Ptr != ',') (*iCount)++; Ptr = SkipToSet(Ptr, (char *)" ,"); Ptr = SkipSet(Ptr, (char *)" ,"); } if (!(*iCount)) return; if (ischar) { *SelNames = new char* [*iCount]; for (i=0; i< *iCount; i++) (*SelNames)[i] = new char [100]; } else *SelSds = new unsigned [*iCount]; Ptr = Ptr2; i = 0; while (*Ptr) { Ptr2 = SkipToSet(Ptr, (char *)" ,"); SavedChar = *Ptr2; *Ptr2 = NULLB; if (ischar && Ptr[0] != '\0') { for (j=0; j< StrLen(Ptr); j++) Ptr[j] = toupper(Ptr[j]); if (Ptr[4] == '.') Ptr[4] = ' '; strcpy((*SelNames)[i++], Ptr); } else if (!ischar) { if ( isInt(Ptr) ) (*SelSds)[i++] = atoi(Ptr); else { PrtMesC("", "VASTSRV", "Please use numbers as 3D-Domain ids, but not this: ", Ptr, false); } } *Ptr2 = SavedChar; Ptr = SkipSet(Ptr2, (char *)" ,"); } *iCount = i; } /* end of MakeNbrList */ void OrderCopyVpp(VastPageDataPtr vpptmp, VastPageDataPtr vpp, unsigned iKept, unsigned * KepId) { unsigned i, j, k; for (i=0; i< iKept; i++) { j=0; while (j