NCBI C Toolkit Cross Reference

C/biostruc/mmdb_pubstruct.c


  1 /*  $Id: mmdb_pubstruct.c,v 6.4 2001/05/25 01:42:10 kimelman Exp $
  2 * ===========================================================================
  3 *
  4 *                            PUBLIC DOMAIN NOTICE
  5 *            National Center for Biotechnology Information (NCBI)
  6 *
  7 *  This software/database is a "United States Government Work" under the
  8 *  terms of the United States Copyright Act.  It was written as part of
  9 *  the author's official duties as a United States Government employee and
 10 *  thus cannot be copyrighted.  This software/database is freely available
 11 *  to the public for use. The National Library of Medicine and the U.S.
 12 *  Government do not place any restriction on its use or reproduction.
 13 *  We would, however, appreciate having the NCBI and the author cited in
 14 *  any work or product based on this material
 15 *
 16 *  Although all reasonable efforts have been taken to ensure the accuracy
 17 *  and reliability of the software and data, the NLM and the U.S.
 18 *  Government do not and cannot warrant the performance or results that
 19 *  may be obtained by using this software or data. The NLM and the U.S.
 20 *  Government disclaim all warranties, express or implied, including
 21 *  warranties of performance, merchantability or fitness for any particular
 22 *  purpose.
 23 *
 24 * ===========================================================================
 25 *
 26 * File Name:  $Id: mmdb_pubstruct.c,v 6.4 2001/05/25 01:42:10 kimelman Exp $
 27 *
 28 * File Description: Defines MMDB access using sybase retrival.
 29 *                   
 30 * Modifications:  
 31 * --------------------------------------------------------------------------
 32 * Date     Name        Description of modification
 33 * -------  ----------  -----------------------------------------------------
 34 *
 35 * $Log: mmdb_pubstruct.c,v $
 36 * Revision 6.4  2001/05/25 01:42:10  kimelman
 37 * mmdb2livemmdb
 38 *
 39 * Revision 6.3  1999/12/01 23:27:26  kimelman
 40 * added guards to avoid repeatable connect/disconnect
 41 *
 42 * Revision 6.2  1999/08/02 19:50:51  kimelman
 43 * keep connection alive foor mmdbsrv & vastsrv sessions
 44 *
 45 * Revision 6.1  1999/05/17 21:29:20  kimelman
 46 * extracted version of pubstruct specific implementations of MMDBBiostrucGET & Co..
 47 *
 48 *
 49 * ==========================================================================
 50 */
 51 
 52 /*********************************************************************************/
 53 /* This file abstracts the calls to Network Entrez that were previously          */
 54 /* embedded in mmdbapi1.c  Linking with this file forces sysbase retrival        */
 55 /********   NOTE - .mmdbrc (UNIX) mmdb.ini (Win) mmdb.cnf (Mac) required   *******/
 56 /* containing paths to database and index file name:                         ****** 
 57  *
 58  * [MMDB]
 59  * PubStruct  = PUBSEQ_OS:PubStruct=anyone:allowed
 60  * 
 61  */
 62 
 63 #include <ncbi.h>
 64 #include <mmdbapi1.h>
 65 #include <mmdbdata.h>
 66 #include <mmdblocl.h>
 67 #include <accentr.h>
 68 #include <accutils.h>
 69 #include "PubStructAsn.h"
 70 #include <assert.h>
 71 
 72 
 73 static int  pubstruct_init=0;
 74 static Char pubstruct[PATH_MAX];
 75 static ps_handle_t db = NULL;
 76 
 77 /**************************************************************
 78  *  PUBLIC INTERFACE
 79  **************************************************************/
 80 Boolean  LIBCALL
 81 MMDB2liveMMDB(DocUid *mmdb,Int4Ptr live,CharPtr pdb)
 82 {
 83   Boolean b;
 84   if (!db && pubstruct[0]==0) {
 85     strcpy(pubstruct,"BACH:PubStruct=anyone,allowed");
 86   }
 87   MMDBInit();
 88   b = PubStruct_mmdb2livemmdb(db,*mmdb,mmdb,live,pdb);
 89   MMDBFini();
 90   return b;
 91 }
 92 
 93 DocUid  LIBCALL
 94 MMDBEvalPDB (CharPtr str)
 95 {
 96   Char eval[10];
 97   DocUid id=0;
 98   
 99   StringNCpy(eval,  str,  4);
100   eval[4] = '\0';
101   StrUpper(eval);
102   { /* let's be paranoid */
103     int i,is_mmdb=1;
104     for(i=0;i<4;i++)if(eval[i]>='A') { is_mmdb=0; break; }
105     if(is_mmdb)
106       id=atol(eval);
107   }
108   MMDBInit();
109   id = PubStruct_pdb2mmdb1(db, eval);
110   MMDBFini();
111   return  id;
112 }
113 
114 BiostrucPtr LIBCALL
115 MMDBBiostrucGet (DocUid uid, Int4 mdlLvl, Int4 maxModels)
116 {
117   extern WWWInfoPtr     info; /* mmdbsrv:info */
118 
119   AsnIoPtr    aip = NULL;
120   BiostrucPtr pbs = NULL;
121   int         index;
122   char       *item;
123   Int4        sat_key   = 0;
124   Int4        state     = 0;
125   /*   char       *dbserver = (pubstruct[0]?pubstruct:NULL); */
126 
127   MMDBInit();
128 
129   /*
130    * THE following block should be defined ONLY for server which show up internal blob revisions in DB
131    */
132 #ifdef INTERNAL_SERVER
133   /* printf("MMDBBiostrucGet_pubstruct(%s,%d)\n",dbserver,uid); */
134   if(WWWFindName(info, "sat_key") >=0) 
135     {
136       index = WWWFindName(info, "sat_key");
137       item  = WWWGetValueByIndex(info,index);
138       sat_key=atol(item);
139       if (sat_key<=0) {
140         ErrPostEx(SEV_ERROR,0,0, "cant convert Pubstruct..Struct.acc (sat_key) <%s> into integer",item);
141         return NULL;
142       }
143     }
144   if (WWWFindName(info, "state"))
145     {
146       index = WWWFindName(info, "state");
147       item = WWWGetValueByIndex(info,index);
148       state=-1;
149       state=atol(item);
150       if (state<0) {
151         ErrPostEx(SEV_ERROR,0,0, "cant convert Pubstruct..Struct.state<%s> into integer",item);
152         return NULL;
153       }
154     }
155 #endif
156   
157   if(state>0 && sat_key==0) {
158     sat_key = PubStruct_lookup1(db,uid, state);
159   }
160   if(sat_key>0)
161     aip = PubStruct_readasn1(db, sat_key);
162   else if (state==0)
163     aip = PubStruct_viewasn1(db, uid);
164 
165   if(aip)
166     {
167       pbs = BiostrucAsnGet(aip, NULL,  mdlLvl,  maxModels);
168       PubStruct_closeasn (aip,1);
169     }
170   MMDBFini();
171   return pbs;
172 }
173 
174 Boolean LIBCALL
175 MMDBInit (void)
176 {
177   pubstruct_init++;
178   if(db)
179     return TRUE;
180   if(pubstruct_init==1)
181     {
182       GetAppParam("mmdb", "MMDB", "PubStruct", "", pubstruct, sizeof(pubstruct));
183       if (pubstruct[0]==0) {
184         strcpy(pubstruct,"PUBSEQ_OS:PubStruct=anyone,allowed");
185       }
186     }
187   db = PubStruct_connect(pubstruct);
188   if(!db)
189     {
190       ErrPostEx(SEV_ERROR,0,0, "cant connect to Pubstruct (%s)",pubstruct);
191       return FALSE;
192     }
193   return TRUE;
194 }
195 
196 void LIBCALL
197 MMDBFini (void)
198 {
199   pubstruct_init--;
200   if(pubstruct_init>0)
201     return;
202   if(db)
203     {
204       PubStruct_disconnect(db);
205       db = NULL;
206     }
207   return;
208 }
209 
210 CharPtr LIBCALL
211 MMDB_configuration(void)
212 {
213   return "Version:\t$Id: mmdb_pubstruct.c,v 6.4 2001/05/25 01:42:10 kimelman Exp $\nConfiguration: PubStruct" ;
214 }
215 

source navigation ]   [ diff markup ]   [ identifier search ]   [ freetext search ]   [ file search ]  

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.