1 /* objgen.h 2 * =========================================================================== 3 * 4 * PUBLIC DOMAIN NOTICE 5 * National Center for Biotechnology Information 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 have not placed any restriction on its use or reproduction. 13 * 14 * Although all reasonable efforts have been taken to ensure the accuracy 15 * and reliability of the software and data, the NLM and the U.S. 16 * Government do not and cannot warrant the performance or results that 17 * may be obtained by using this software or data. The NLM and the U.S. 18 * Government disclaim all warranties, express or implied, including 19 * warranties of performance, merchantability or fitness for any particular 20 * purpose. 21 * 22 * Please cite the author in any work or product based on this material. 23 * 24 * =========================================================================== 25 * 26 * File Name: objgen.h 27 * 28 * Author: James Ostell 29 * 30 * Version Creation Date: 1/1/91 31 * 32 * $Revision: 6.15 $ 33 * 34 * File Description: Object manager interface for module NCBI-General 35 * 36 * Modifications: 37 * -------------------------------------------------------------------------- 38 * Date Name Description of modification 39 * ------- ---------- ----------------------------------------------------- 40 * 41 * ========================================================================== 42 */ 43 44 #ifndef _NCBI_General_ 45 #define _NCBI_General_ 46 47 #ifndef _ASNTOOL_ 48 #include <asn.h> 49 #endif 50 51 #undef NLM_EXTERN 52 #ifdef NLM_IMPORT 53 #define NLM_EXTERN NLM_IMPORT 54 #else 55 #define NLM_EXTERN extern 56 #endif 57 58 #ifdef __cplusplus 59 extern "C" { 60 #endif 61 62 /* gather/objmgr fields to be added to bioseq, features, descriptors, etc. */ 63 64 #define EXTRA_OBJMGR_FIELDS \ 65 Uint2 entityID; \ 66 Uint2 itemtype; \ 67 Uint1 subtype; \ 68 Uint1 deleteme; \ 69 Uint2 parenttype; \ 70 Uint4 itemID; \ 71 Pointer parentptr; \ 72 Pointer PNTR prevlink; \ 73 Pointer scratch; 74 75 /* structure containing gather/objmgr fields to add as a block to other structures */ 76 77 typedef struct gatherindex { 78 EXTRA_OBJMGR_FIELDS 79 } GatherIndex, PNTR GatherIndexPtr; 80 81 /* extended valnode for linking seqdesc, perhaps seqid and seqloc */ 82 83 typedef struct objvalnode { 84 ValNode vn; 85 GatherIndex idx; 86 } ObjValNode, PNTR ObjValNodePtr; 87 88 /* ValNode equivalent functions that allocate ObjValNode size */ 89 90 NLM_EXTERN ValNodePtr LIBCALL SeqDescrNew (ValNodePtr vnp); 91 NLM_EXTERN ValNodePtr LIBCALL SeqDescrAdd (ValNodePtr PNTR head); 92 NLM_EXTERN ValNodePtr LIBCALL SeqDescrAddPointer (ValNodePtr PNTR head, Int2 choice, VoidPtr value); 93 94 /***************************************************************************** 95 * 96 * loader 97 * 98 *****************************************************************************/ 99 NLM_EXTERN Boolean LIBCALL GeneralAsnLoad PROTO((void)); 100 101 /***************************************************************************** 102 * 103 * internal structures for NCBI-General objects 104 * 105 *****************************************************************************/ 106 107 /***************************************************************************** 108 * 109 * Date, Date-std share the same structure 110 * any data[2] or data[3] values = 0 means not set or not present 111 * data [0] - CHOICE of date ,0=str, 1=std 112 * [1] - year (- 1900) 113 * [2] - month (1-12) optional 114 * [3] - day (1-31) optional 115 * [4] - hour (0-23) optional 255=not set 116 * [5] - minute (0-59) optional 255=not set 117 * [6] - second (0-59) optional 255=not set 118 * [7] - not currently used 119 * 120 *****************************************************************************/ 121 122 #define NOT_SET 255 123 124 typedef struct date { 125 Uint1 data[8]; /* see box above */ 126 CharPtr str; /* str or season or NULL */ 127 } NCBI_Date, PNTR NCBI_DatePtr; 128 #define DatePtr NCBI_DatePtr 129 130 131 NLM_EXTERN NCBI_DatePtr LIBCALL DateNew PROTO((void)); 132 NLM_EXTERN NCBI_DatePtr LIBCALL DateClean PROTO((NCBI_DatePtr dp)); 133 NLM_EXTERN NCBI_DatePtr LIBCALL DateFree PROTO((NCBI_DatePtr dp)); 134 NLM_EXTERN Boolean LIBCALL DateWrite PROTO((NCBI_DatePtr dp, Int2 year, Int2 month, Int2 day, CharPtr season)); 135 NLM_EXTERN Boolean LIBCALL DateRead PROTO((NCBI_DatePtr dp, Int2Ptr year, Int2Ptr month, Int2Ptr day, CharPtr season)); 136 NLM_EXTERN Boolean LIBCALL DatePrint PROTO((NCBI_DatePtr dp, CharPtr buf)); 137 NLM_EXTERN NCBI_DatePtr LIBCALL DateCurr PROTO((void)); /* time fields not set */ 138 NLM_EXTERN NCBI_DatePtr LIBCALL DateTimeCurr PROTO((void)); /* fills time fields too */ 139 NLM_EXTERN NCBI_DatePtr LIBCALL DateDup PROTO((NCBI_DatePtr dp)); 140 NLM_EXTERN Boolean LIBCALL DateAsnWrite PROTO((NCBI_DatePtr dp, AsnIoPtr aip, AsnTypePtr atp)); 141 NLM_EXTERN NCBI_DatePtr LIBCALL DateAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 142 NLM_EXTERN Int2 LIBCALL DateMatch PROTO((DatePtr a, DatePtr b, Boolean all)); 143 NLM_EXTERN DatePtr LIBCALL DateParse (CharPtr str); 144 145 /***************************************************************************** 146 * 147 * DateCheck (dp) 148 * Checks the date and month values in a date structure 149 * returns: 150 * -4 = NULL pointer passed in 151 * -3 = string date, can't be checked 152 * -2 = month not set (but otherwise ok) 153 * -1 = day not set (but otherwise ok) 154 * 0 = date ok, month,day,year all set 155 * 1 = day invalid 156 * 2 = month invalid 157 * 3 = year not set (required for date) 158 * 159 *****************************************************************************/ 160 NLM_EXTERN Int2 LIBCALL DateCheck PROTO((DatePtr dp)); 161 162 /***************************************************************************** 163 * 164 * Object-id stuff 165 * 166 *****************************************************************************/ 167 typedef struct objid { 168 Int4 id; 169 CharPtr str; 170 } ObjectId, PNTR ObjectIdPtr; 171 172 NLM_EXTERN ObjectIdPtr LIBCALL ObjectIdNew PROTO((void)); 173 NLM_EXTERN ObjectIdPtr LIBCALL ObjectIdFree PROTO(( ObjectIdPtr oid)); 174 NLM_EXTERN ObjectIdPtr LIBCALL ObjectIdAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 175 NLM_EXTERN Boolean LIBCALL ObjectIdAsnWrite PROTO((ObjectIdPtr oid, AsnIoPtr aip, AsnTypePtr atp)); 176 NLM_EXTERN Boolean LIBCALL ObjectIdMatch PROTO((ObjectIdPtr a, ObjectIdPtr b)); 177 NLM_EXTERN Boolean LIBCALL ObjectIdMatchEx PROTO((ObjectIdPtr a, ObjectIdPtr b, Boolean case_sensitive)); 178 NLM_EXTERN ObjectIdPtr LIBCALL ObjectIdDup PROTO((ObjectIdPtr oldid)); 179 180 /***************************************************************************** 181 * 182 * DBtag stuff 183 * 184 *****************************************************************************/ 185 typedef struct dbtag { 186 CharPtr db; 187 ObjectIdPtr tag; 188 } Dbtag, PNTR DbtagPtr; 189 190 NLM_EXTERN DbtagPtr LIBCALL DbtagNew PROTO((void)); 191 NLM_EXTERN DbtagPtr LIBCALL DbtagFree PROTO(( DbtagPtr dbt)); 192 NLM_EXTERN DbtagPtr LIBCALL DbtagAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 193 NLM_EXTERN Boolean LIBCALL DbtagAsnWrite PROTO((DbtagPtr dbt, AsnIoPtr aip, AsnTypePtr atp)); 194 NLM_EXTERN Boolean LIBCALL DbtagMatchEx PROTO((DbtagPtr a, DbtagPtr b, Boolean case_sensitive)); 195 NLM_EXTERN Boolean LIBCALL DbtagMatch PROTO((DbtagPtr a, DbtagPtr b)); 196 NLM_EXTERN DbtagPtr LIBCALL DbtagDup PROTO((DbtagPtr oldtag)); 197 NLM_EXTERN Int2 LIBCALL DbtagLabel PROTO((DbtagPtr dbt, CharPtr buf, Int2 buflen)); 198 199 /***************************************************************************** 200 * 201 * Name-std 202 * names[0] = last 203 * [1] = first 204 * [2] = middle 205 * [3] = full 206 * [4] = initials 207 * [5] = suffix 208 * [6] = title 209 * 210 *****************************************************************************/ 211 typedef struct namestd { 212 CharPtr names[7]; 213 } NameStd, PNTR NameStdPtr; 214 215 NLM_EXTERN NameStdPtr LIBCALL NameStdNew PROTO((void)); 216 NLM_EXTERN NameStdPtr LIBCALL NameStdFree PROTO(( NameStdPtr nsp)); 217 NLM_EXTERN NameStdPtr LIBCALL NameStdAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 218 NLM_EXTERN Boolean LIBCALL NameStdAsnWrite PROTO((NameStdPtr nsp, AsnIoPtr aip, AsnTypePtr atp)); 219 NLM_EXTERN Boolean LIBCALL NameStdMatch (NameStdPtr nsp1, NameStdPtr nsp2); 220 221 /***************************************************************************** 222 * 223 * Person-id 224 * choice = 0 = not set 225 * 1 = dbtag 226 * 2 = name 227 * 3 = ml 228 * 4 = str 229 * 5 = consortium 230 * 231 *****************************************************************************/ 232 typedef struct personid { 233 Uint1 choice; /* which CHOICE, see above */ 234 Pointer data; /* points to appropriate data structure */ 235 } PersonId, PNTR PersonIdPtr; 236 237 NLM_EXTERN PersonIdPtr LIBCALL PersonIdNew PROTO((void)); 238 NLM_EXTERN PersonIdPtr LIBCALL PersonIdFree PROTO(( PersonIdPtr pid)); 239 NLM_EXTERN PersonIdPtr LIBCALL PersonIdAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 240 NLM_EXTERN Boolean LIBCALL PersonIdAsnWrite PROTO((PersonIdPtr pid, AsnIoPtr aip, AsnTypePtr atp)); 241 NLM_EXTERN Boolean LIBCALL PersonIdMatch (PersonIdPtr pip1, PersonIdPtr pip2); 242 243 /***************************************************************************** 244 * 245 * PersonIdLabel(pid, buf, buflen, format) 246 * Makes a short label, lastname then initials if it can 247 * format = PIDLABEL_GENBANK last,initials 248 * PIDLABEL_EMBL last initials 249 * 250 * Modeled from GBGetAuthNames in asn2ff 251 * returns number of bytes in buf 252 * buf MUST be at least (buflen + 1) long 253 * 254 *****************************************************************************/ 255 NLM_EXTERN Int2 LIBCALL PersonIdLabel PROTO((PersonIdPtr pid, CharPtr buf, Int2 buflen, Int2 format)); 256 #define PIDLABEL_GENBANK 1 257 #define PIDLABEL_EMBL 2 258 259 /***************************************************************************** 260 * 261 * Int-fuzz 262 * 263 *****************************************************************************/ 264 typedef struct intfuzz { 265 Uint1 choice; /* 1=p-m, 2=range, 3=pct, 4=lim 5=alt */ 266 Int4 a, b; /* a=p-m,max,pct,orlim, b=min */ 267 Int4Ptr alt; /* alternate positions, a=num alts, b=array size */ 268 } IntFuzz, PNTR IntFuzzPtr; 269 270 NLM_EXTERN IntFuzzPtr LIBCALL IntFuzzNew PROTO((void)); 271 NLM_EXTERN IntFuzzPtr LIBCALL IntFuzzFree PROTO(( IntFuzzPtr ifp)); 272 NLM_EXTERN IntFuzzPtr LIBCALL IntFuzzAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 273 NLM_EXTERN Boolean LIBCALL IntFuzzAsnWrite PROTO((IntFuzzPtr ifp, AsnIoPtr aip, AsnTypePtr atp)); 274 275 /***************************************************************************** 276 * 277 * User-field 278 * data is an DataVal where: 279 * choice asn1 data. = 280 1 = str VisibleString , ptrvalue = CharPtr 281 2 = int INTEGER , intvalue 282 3 = real REAL , realvalue 283 4 = bool BOOLEAN , boolvalue 284 5 = os OCTET STRING , ptrvalue = ByteStorePtr 285 6 = object User-object , ptrvalue = UserObjectPtr 286 7 = strs SEQUENCE OF VisibleString , ptrvalue = CharPtr PNTR 287 8 = ints SEQUENCE OF INTEGER , ptrvalue = Int4Ptr 288 9 = reals SEQUENCE OF REAL , ptrvalue = FloatHiPtr 289 10 = oss SEQUENCE OF OCTET STRING , ptrvalue = ByteStorePtr PNTR 290 11 = fields SEQUENCE OF User-field , ptrvalue = UserFieldPtr 291 12 = objects SEQUENCE OF User-object } } ptrvalue = UserObjectPtr 292 293 * User-object 294 * 295 *****************************************************************************/ 296 typedef struct userfield { 297 ObjectIdPtr label; 298 Int4 num; 299 Uint1 choice; 300 DataVal data; 301 struct userfield PNTR next; 302 } UserField, PNTR UserFieldPtr; 303 304 NLM_EXTERN UserFieldPtr LIBCALL UserFieldNew PROTO((void)); 305 NLM_EXTERN UserFieldPtr LIBCALL UserFieldFree PROTO(( UserFieldPtr ufp)); 306 NLM_EXTERN UserFieldPtr LIBCALL UserFieldAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 307 NLM_EXTERN Boolean LIBCALL UserFieldAsnWrite PROTO((UserFieldPtr ufp, AsnIoPtr aip, AsnTypePtr atp)); 308 309 typedef struct userobj { 310 CharPtr _class; 311 ObjectIdPtr type; 312 UserFieldPtr data; 313 struct userobj PNTR next; /* for SEQUENCE OF User-object */ 314 } UserObject, PNTR UserObjectPtr; 315 316 NLM_EXTERN UserObjectPtr LIBCALL UserObjectNew PROTO((void)); 317 NLM_EXTERN UserObjectPtr LIBCALL UserObjectFree PROTO(( UserObjectPtr uop)); 318 NLM_EXTERN UserObjectPtr LIBCALL UserObjectAsnRead PROTO((AsnIoPtr aip, AsnTypePtr atp)); 319 NLM_EXTERN Boolean LIBCALL UserObjectAsnWrite PROTO((UserObjectPtr uop, AsnIoPtr aip, AsnTypePtr atp)); 320 321 #ifdef __cplusplus 322 } 323 #endif 324 325 #undef NLM_EXTERN 326 #ifdef NLM_EXPORT 327 #define NLM_EXTERN NLM_EXPORT 328 #else 329 #define NLM_EXTERN 330 #endif 331 332 #endif 333 334