示例#1
0
/*****************************************************************************
*
*   opens a file and reads SeqEntrys
*   calls ProcessSeqEntry to do the actual work on it
*
*****************************************************************************/
static void ProcessFile (FileListPtr flp, CharPtr root, CharPtr outputfile)
{
  CASN_Handle  casnh;
  FILE         *fp;
  Char         path [PATH_MAX];
  SeqEntryPtr  sep;
  CASN_Type    type;
  Char buf[40];
  Int4 ctr = 0;

  if (flp != NULL) {
    fp = FileOpen (outputfile, "a");
    if (fp != NULL) {
	  if (pmon != NULL)
	  {
	  	sprintf(path, "Opening [%s]", flp->fname);
		MonitorStrValue(pmon, path);
	  }
      StringCpy (path, root);
      FileBuildPath (path, flp->fdir, NULL);
      FileBuildPath (path, NULL, flp->fname);
      if ((casnh = CASN_Open (path)) != NULL) {
        if (! is_na) {
          type = CASN_Type_aa;
        } else {
          type = CASN_Type_nt;
        }
        if (CASN_DocType (casnh) == type) {
          while ((sep = CASN_NextSeqEntry (casnh)) != NULL) {
            if (pmon != NULL)
            {
		ctr++;
		sprintf(buf, "Processing %s Entry %ld", flp->fname,(long)ctr);
                MonitorStrValue(pmon, buf);
	    }
            ProcessSeqEntry (sep, fp);
            SeqEntryFree (sep);
          }
        }
        CASN_Close (casnh);
      }
	  else
		Message(MSG_ERROR, "Can't open [%s]", path);
      FileClose (fp);
    } else {
      Message (MSG_FATAL, "Unable to reopen output file [%s]", outputfile);
    }
  }
}
示例#2
0
static Pointer ReadOneFile (
  CharPtr directory,
  CharPtr base,
  CharPtr suffix,
  Uint2Ptr datatype
)

{
  Pointer  dataptr;
  Char     file [FILENAME_MAX], path [PATH_MAX];
  FILE*    fp;

  *datatype = 0;

  StringNCpy_0 (path, directory, sizeof (path));
  sprintf (file, "%s.%s", base, suffix);
  FileBuildPath (path, NULL, file);

  fp = FileOpen (path, "r");
  if (fp == NULL) return NULL;

  /* ReadAsnFastaOrFlatFile can read ASN.1, FASTA, and feature table formats */

  dataptr = ReadAsnFastaOrFlatFile (fp, datatype, NULL, FALSE, FALSE, TRUE, FALSE);

  FileClose (fp);

  return dataptr;
}
示例#3
0
static void FlatfileOneFile (
  CharPtr directory,
  CharPtr base,
  CharPtr suffix,
  SeqEntryPtr sep
)

{
  Char    file [FILENAME_MAX], path [PATH_MAX];
  FILE    *fp;
  ErrSev  oldErrSev;

  StringNCpy_0 (path, directory, sizeof (path));
  sprintf (file, "%s.%s", base, suffix);
  FileBuildPath (path, NULL, file);

  fp = FileOpen (path, "w");
  if (fp == NULL) return;

  oldErrSev = ErrSetMessageLevel (SEV_MAX);
  SeqEntryToFlat (sep, fp, GENBANK_FMT, SEQUIN_MODE);
  ErrSetMessageLevel (oldErrSev);

  FileClose (fp);
}
示例#4
0
static void ValidateOneFile (
  CharPtr directory,
  CharPtr base,
  CharPtr suffix,
  SeqEntryPtr sep
)

{
  Char            file [FILENAME_MAX], path [PATH_MAX];
  ErrSev          oldErrSev;
  ValidStructPtr  vsp;

  StringNCpy_0 (path, directory, sizeof (path));
  sprintf (file, "%s.%s", base, suffix);
  FileBuildPath (path, NULL, file);

  ErrSetOptFlags (EO_LOGTO_USRFILE);
  ErrSetLogfile (path, ELOG_APPEND | ELOG_NOCREATE);

  vsp = ValidStructNew ();
  if (vsp != NULL) {
    vsp->useSeqMgrIndexes = TRUE;
    vsp->suppressContext = TRUE;
    oldErrSev = ErrSetMessageLevel (SEV_NONE);
    ValidateSeqEntry (sep, vsp);
    ValidStructFree (vsp);
    ErrSetMessageLevel (oldErrSev);
  }

  ErrSetLogfile (NULL, ELOG_APPEND | ELOG_NOCREATE);
  ErrClearOptFlags  (EO_LOGTO_USRFILE);
}
示例#5
0
static AsnIoPtr AsnIoFromInputStream (
  InputStreamPtr isp
)

{
  AsnIoPtr aip;
  Char     file [FILENAME_MAX], path [PATH_MAX];
  CharPtr  read_flag;

  if (isp == NULL) return NULL;

  if (isp->is_binary) {
    read_flag = "rb";
  } else {
    read_flag = "r";
  }

  if (isp->base == NULL) {
    aip = AsnIoOpen ("stdin", read_flag);
  } else {
    StringNCpy_0 (path, isp->directory, sizeof (path));
    sprintf (file, "%s%s", isp->base, isp->suffix);
    FileBuildPath (path, NULL, file);
    aip = AsnIoOpen (path, read_flag);
  }
  return aip;
}
示例#6
0
static AsnIoPtr AsnIoFromOutputStream (OutputStreamPtr osp)
{
  AsnIoPtr   aip;
  Char       file [FILENAME_MAX], path [PATH_MAX];
  CharPtr    write_flag;

  if (osp == NULL) return NULL;
  if (osp->aip == NULL) {
    write_flag = osp->is_binary ? "wb" : "w";
    if (StringDoesHaveText (osp->outfile)) {
      StringNCpy_0 (path, osp->outfile, sizeof (path));
    } else {
      if (osp->base == NULL) {
        aip = AsnIoOpen ("stdout", write_flag);
      } else {
        if (osp->outsuffix == NULL) {
          osp->outsuffix = "";
        }
        StringNCpy_0 (path, osp->results_dir, sizeof (path));
        sprintf (file, "%s%s%s", osp->base, osp->suffix, osp->outsuffix);
        FileBuildPath (path, NULL, file);
        aip = AsnIoOpen (path, write_flag);
        if (aip == NULL) {
          Message (MSG_POSTERR, "Unable to write to %s.", path);
        }
      }
    }
  } else {
    aip = osp->aip;
  }
  return aip;
}
示例#7
0
static SeqSubmitPtr ReadOneSubmission (
  CharPtr directory,
  CharPtr base,
  CharPtr suffix
)

{
  AsnIoPtr      aip;
  Char          file [FILENAME_MAX], path [PATH_MAX];
  SeqSubmitPtr  ssp;

  if (base == NULL) {
    base = "";
  }
  if (suffix == NULL) {
    suffix = "";
  }
  StringNCpy_0 (path, directory, sizeof (path));
  sprintf (file, "%s%s", base, suffix);
  FileBuildPath (path, NULL, file);

  aip = AsnIoOpen (path, "r");
  if (aip == NULL) return NULL;
  ssp = SeqSubmitAsnRead (aip, NULL);
  AsnIoClose (aip);

  return ssp;
}
示例#8
0
static FILE* OpenOneFile (
  CharPtr directory,
  CharPtr base,
  CharPtr suffix
)

{
  Char  file [FILENAME_MAX], path [PATH_MAX];

  if (base == NULL) {
    base = "";
  }
  if (suffix == NULL) {
    suffix = "";
  }

  StringNCpy_0 (path, directory, sizeof (path));
  sprintf (file, "%s%s", base, suffix);
  FileBuildPath (path, NULL, file);

  return FileOpen (path, "r");
}
示例#9
0
static void WriteOneFile (
  CharPtr directory,
  CharPtr base,
  CharPtr suffix,
  SeqEntryPtr sep
)

{
  AsnIoPtr  aip;
  Char      file [FILENAME_MAX], path [PATH_MAX];

  StringNCpy_0 (path, directory, sizeof (path));
  sprintf (file, "%s.%s", base, suffix);
  FileBuildPath (path, NULL, file);

  aip = AsnIoOpen (path, "w");
  if (aip == NULL) return;

  SeqEntryAsnWrite (sep, aip, NULL);

  AsnIoFlush (aip);
  AsnIoClose (aip);
}
示例#10
0
/* return -1 on failure, 0 on success */
static Int4 FileRecurse (
  CharPtr         directory,
  InputStreamPtr  isp,
  OutputStreamPtr osp,
  AsnStreamPtr    asp,
  Int4Ptr         gap_sizes
)

{
  Char        path [PATH_MAX];
  CharPtr     ptr;
  CharPtr     str;
  ValNodePtr  head, vnp;
  CharPtr     orig_dir, orig_base;
  Int4        rval = 0;

  /* get list of all files in source directory */

  head = DirCatalog (directory);

  for (vnp = head; vnp != NULL; vnp = vnp->next) {
    if (vnp->choice == 0) {
      str = (CharPtr) vnp->data.ptrvalue;
      if (StringDoesHaveText (str)) {

        /* does filename have desired substring? */

        ptr = StringStr (str, osp->suffix);

        if (ptr != NULL) {

          /* make sure detected suffix is really at end of filename */

          if (StringCmp (ptr, osp->suffix) == 0) {
            *ptr = '\0';

            /* process file that has desired suffix (usually .fsa) */
            osp->base = str;
            orig_dir = isp->directory;
            isp->directory = directory;
            orig_base = isp->base;
            isp->base = str;
            if (isp->is_binary) {
              rval |= ProcessStream (isp, osp, asp, gap_sizes);
            } else {
              rval |= ProcessOneRecord (directory, osp, gap_sizes);
            }
            isp->directory = orig_dir;
            isp->base = orig_base;
            osp->base = NULL;
          }
        }
      }
    } else if (vnp->choice == 1) {

      /* recurse into subdirectory */

      StringNCpy_0 (path, directory, sizeof (path));
      str = (CharPtr) vnp->data.ptrvalue;
      FileBuildPath (path, str, NULL);
      rval |= FileRecurse (path, isp, osp, asp, gap_sizes);
    }
  }

  /* clean up file list */

  ValNodeFreeData (head);
  return rval;
}
示例#11
0
文件: csan.c 项目: iandonaldson/slri
PCSAN LIBCALL LoadCSAN(CharPtr pcFile)
{

   FILE *f;
   Char fullpath [PATH_MAX];
   CharPtr ptr;
   PCSAN pcsanHead = NULL;
   PCSAN pcsanTemp = NULL;
   Char pcBuf[250];
   CharPtr ppcParse[125];
   CharPtr pcTemp = NULL;
   CharPtr pcTest = NULL;
   CharPtr pcSeqPart = NULL;
   ValNodePtr pvn = NULL;
   long int val = 0;
   Int4 i = 0;
   Int4 iString = 0;
   Int4 iLen =0;
   Int4 iWC =0;
   Int4 iWL = 0;
   Int4 iGi = 0;

   if (!pcFile) return(NULL);

   ProgramPath (fullpath, sizeof (fullpath) - 1);
   ptr = StringRChr (fullpath, DIRDELIMCHR);
   if (ptr != NULL) {
      *ptr = '\0';
   }

   /* printf("FULLPATH[%s]\n",IsNullStr(fullpath)); */

   FileBuildPath (fullpath, NULL, pcFile);
   /* printf("FULLPATH[%s]\n",IsNullStr(fullpath)); */

   if ((f = FileOpen (fullpath, "r")) == NULL)
     {
      if (FindPath ("NCBI", "NCBI", "DATA", fullpath, sizeof (fullpath) - 1))
        {
          FileBuildPath (fullpath, NULL, pcFile);
          f = FileOpen (fullpath, "r");
          if (f == NULL)
	    {
             ErrPost(CTX_NCBIOBJ, 1, "Couldn't open [%s] in LoadCSA", IsNullStr(fullpath));
             return (NULL);
            }
       }
     else
       {
         ErrPost(CTX_NCBIOBJ, 1, "FindPath failed in LoadNeighbors");
         return (NULL);
       }
    }

  do   /* get each line, tokenize into ppcParse */
     {
      pcBuf[0] = '\0';
      pcTest = fgets(pcBuf,  (size_t)250,  f);
      /* printf("[%s]\n",IsNullStr(pcTest)); */
      if (pcTest)
        {
		   iLen = StringLen(pcTest);
           /* Break into words delimited by whitespace or "|" */
           /* gi|123456| */
           /* printf("LineLength %d\n",(int) iLen); */
           for (i=0; i < 125; i++) ppcParse[i] = NULL;
           pcTemp = pcTest;
           ppcParse[0] = pcTest;
           iWC = 1;
           while ((*pcTemp != '\0') && (iWC < 125))
             {
                 if ((*pcTemp == '|') || (*pcTemp == ' ') || (*pcTemp == '\t') || (*pcTemp == '\n'))
                   {
                      *pcTemp = '\0';  /* terminate current word */
                       do {
                            pcTemp++;  /* skip whitespace to next word */
                          }  while ((*pcTemp == '|') || (*pcTemp == ' ') || (*pcTemp == '\t') || (*pcTemp == '\n'));
                       ppcParse[iWC] = pcTemp;  /* start next word */
                       iWC++;
                   }
                 else
                   pcTemp++;
             }

     /* DEBUG TEST */

/*           for (i=0; i<125; i++)
             if (ppcParse[i] != NULL)
               {
                 printf("%ld/%ld [%s]\n",i,iWC, IsNullStr(ppcParse[i]));
               } */

     /* If ppcParse[0] is "gi" then this is a VALID sequence line and the last
        word parsed is the sequence */
      if (ppcParse[0][0] != '\0')
        {
           iWL = StringLen(ppcParse[0]);
           if (iWL == 2)
             if (((ppcParse[0][0] == 'g') ||
                (ppcParse[0][0] == 'G')) &&
                ((ppcParse[0][1] == 'i') ||
                (ppcParse[0][1] == 'I')))
               {
                 /* next word should be GI */
                  iGi = 0;
                  if (StrToInt4 (ppcParse[1], &iGi))
                    {
                      /* printf("GI is (%ld)\n",iGi); */
                      if (iGi == 0) goto parserr;
                      /* find the 2nd last string = sequence */
                      /* last string is stripped off line terminator, by the way... */
                      iString=2; /* start after GI */
                      while (ppcParse[iString+1] != NULL)
                        {  /* iString is the LAST sting - line terminator */
                              iString++;
                         }
                      pcsanTemp = pcsanHead;
                      while (pcsanTemp)
                        {  /* look for existing pcsan */
                         if (iGi == pcsanTemp->iGi)
                          {
                            break;
                          }
                         pcsanTemp = pcsanTemp->next;
                        }
                      if (!pcsanTemp) /* otherwise add a new one */
                        {
                          pcsanTemp = NewCSAN();
                          pcsanTemp->next = pcsanHead;
                          pcsanHead = pcsanTemp; /* put at head of list */
                          pcsanTemp->iGi = iGi;
                        }
                      /* Initialize fields */
                      pcSeqPart = NULL;
                      pcSeqPart = StringSave(ppcParse[iString-1]);
                      /* printf("SEQ [%ld]= [%s]\n",(long) iString-1, IsNullStr(pcSeqPart)); */
                      ValNodeAddStr(&pcsanTemp->pvnSeqAlnPart, 0,  pcSeqPart);
                    }  /* if GI */
               }  /* if line starts with GI */
         }  /* if line starts with a word */
      } /* if pcTest */
    } while (pcTest);


  printf("REPORT\n");
  pcsanTemp = pcsanHead;
  while (pcsanTemp)
  {
     printf("GI = [%ld]\n", (long) pcsanTemp->iGi);
     pvn = pcsanTemp->pvnSeqAlnPart;
     while (pvn)
       {
         printf(">%s<\n",(char *) IsNullStr(pvn->data.ptrvalue));
         pvn = pvn->next;
       }
     pcsanTemp = pcsanTemp->next;
  }

   FileClose(f);
   return pcsanHead;


parserr:
   FileClose(f);
   ErrPostEx(SEV_FATAL,0,0, "Error in input format \n");
   FreeCSAN(pcsanHead);
   return NULL;

}
示例#12
0
/*****************************************************************************
*
*   AsnTreeLoad(file, &avn, &at, &amp)
*
*****************************************************************************/
NLM_EXTERN Boolean LIBCALL  AsnTreeLoad (char *file, AsnValxNodePtr *avnptr, AsnTypePtr *atptr, AsnModulePtr *ampptr)
{
    AsnValxNodePtr avn = NULL, avncurr;
    AsnTypePtr at = NULL, atcurr;
    AsnModulePtr amp = NULL, ampcurr;
    ValNodePtr anp, ampanp;
    int numval, numtype, nummod, i;
    FILE * fp;
    int isa, next;
    long intvalue;
    double realvalue;
    char name[PATH_MAX], fname[60];
    CharPtr ptr;
    int bools[5], tagclass, tagnumber, defaultvalue, type, branch;

                    /* check to see if we already have it (could happen) */

    anp = names;
    ampanp = amps;
    while (anp != NULL)
    {
        if (! StringCmp((CharPtr)anp->data.ptrvalue, file))
        {                               /* have it */
            if (* ampptr == NULL)       /* fill dynamic load */
            {
                * ampptr = (AsnModulePtr) ampanp->data.ptrvalue;
                * atptr = (* ampptr)->types;
                     /* don't really need avnptr filled in */
            }
            return TRUE;
        }
        ampanp = ampanp->next;
        anp = anp->next;
    }

	if (! ProgMon("Load ASN.1 Trees"))
		return FALSE;

    if (* ampptr != NULL)      /* static load, add to list */
    {
        AsnStoreTree(file, (* ampptr));
        return TRUE;        /* already loaded */
    }

    if (! FindPath("ncbi", "ncbi", "asnload", name, sizeof (name)))
	{
		AsnIoErrorMsg(NULL, 85);
        return FALSE;
	}

    FileBuildPath (name, NULL, file);/* add file to path */

    fp = FileOpen(name, "r");
    if (fp == NULL)
    {
        AsnIoErrorMsg(NULL, 83, (CharPtr) name);
        return FALSE;
    }

    fscanf(fp, "%d %d %d", &numval, &numtype, &nummod);

    if (numval)
        avn = (AsnValxNodePtr) MemNew(numval * sizeof(AsnValxNode));
    at  = (AsnTypePtr)   MemNew(numtype * sizeof(AsnType));
    amp = (AsnModulePtr) MemNew(nummod  * sizeof(AsnModule));

    *avnptr = avn;
    *atptr = at;
    *ampptr = amp;

    avncurr = avn;
    for (i = 0; i < numval; i++)
    {
        fscanf(fp, "%d %s %ld %lf %d", &isa, name, &intvalue, &realvalue, &next);
        avncurr->valueisa = isa;
        if (*name != '-')
            avncurr->name = StringSave(name);
        avncurr->intvalue = (Int4)intvalue;
        avncurr->realvalue = (FloatHi)realvalue;
        avncurr->next = (AsnValxNodePtr) PointerDecode((Int2)next, avn, at);
        avncurr++;
    }

    atcurr = at;
    for (i = 0; i < numtype; i++)
    {
        fscanf(fp, "%d %s %d %d %d %d %d %d %d %d %d %d %d",
            &isa, name, &tagclass, &tagnumber, bools, bools+1, bools+2,
            bools+3, bools+4, &defaultvalue, &type, &branch, &next);
        atcurr->isa = isa;
        if (*name != '-')
        {
            atcurr->name = StringSave(name);
            ptr = atcurr->name;
            while (*ptr != '\0')
            {
                if (*ptr == '!')
                    *ptr = ' ';
                ptr++;
            }
        }
        atcurr->tagclass = (Uint1)tagclass;
        atcurr->tagnumber = tagnumber;
        atcurr->implicit = (Boolean)bools[0];
        atcurr->optional = (Boolean)bools[1];
        atcurr->hasdefault = (Boolean)bools[2];
        atcurr->exported = (Boolean)bools[3];
        atcurr->imported = (Boolean)bools[4];
        atcurr->defaultvalue = (AsnValxNodePtr)PointerDecode((Int2)defaultvalue, avn, at);
        atcurr->type = (AsnTypePtr)PointerDecode((Int2)type, avn, at);
        atcurr->branch = PointerDecode((Int2)branch, avn, at);
        atcurr->next = (AsnTypePtr)PointerDecode((Int2)next, avn,at);
        atcurr++;
    }

    ampcurr = amp;
    for (i = 0; i < nummod; i++)
    {
        fscanf(fp, "%s %s %d %d", name, fname, &type, &next);
        if (*name != '-')
            ampcurr->modulename = StringSave(name);
		if (*fname != '-')
			ampcurr->filename = StringSave(fname);
        ampcurr->types = (AsnTypePtr)PointerDecode((Int2)type, avn, at);
        if (next != -32000)
            ampcurr->next = &amp[next];
        ampcurr++;
    }

    FileClose(fp);
                                  /* store it in list */
    AsnStoreTree(file, (* ampptr));

    return TRUE;
}
示例#13
0
static FloatHiPtr NTComposition (SeqPortPtr spp, Int4 length,
                                 Int4 window, Uint1 filtertype)
{
  Int4         i, n, iring;
  Boolean      flagMatch;
  FloatHi      NTcount;
  FloatHiPtr   ringptr;
  Char         res[FILTS], chres;
  FloatHi      scr[FILTS];
  Boolean      flagFilter;
  FloatHiPtr   fhead, fptr;
  Char         buf[PATH_MAX], filename[32];

  if (length < window)
    return NULL;

  if (!FindPath ("ncbi", "ncbi", "data", buf, sizeof (buf)))
    return NULL;

  fptr = (FloatHiPtr) MemNew ((sizeof (FloatHi)) * length);
  fhead = fptr;
  for (i = 0; i < length; i++)
    *fptr++ = 0.0;

  fptr = fhead;
  switch (filtertype)
  {
   case NA_FILTER_GC:
    StringCpy (filename, "KSgc.flt");
    FileBuildPath (buf, NULL, "KSgc.flt");
    break;
   case NA_FILTER_AT:
    StringCpy (filename, "KSat.flt");
    FileBuildPath (buf, NULL, "KSat.flt");
    break;
   case NA_FILTER_PUR:
    StringCpy (filename, "KSpur.flt");
    FileBuildPath (buf, NULL, "KSpur.flt");
    break;
   case NA_FILTER_PYR:
    StringCpy (filename, "KSpyr.flt");
    FileBuildPath (buf, NULL, "KSpyr.flt");
    break;
   default:
    MemFree (fptr);
    return NULL;
  }
  flagFilter = ReadFilter (res, scr, buf, filename);
  if (!flagFilter)
  {
    MemFree (fptr);
    return NULL;
  }

/* set up ring buffer */
  ringptr = (FloatHiPtr) MemNew (sizeof (FloatHi) * window);
  iring = 0;
  NTcount = 0;
  for (i = 0; i < window; i++)
  {
    chres = SeqPortGetResidue (spp);
    flagMatch = 0;
    n = 0;
    while (res[n] != '\0')
    {
      if (chres == res[n])
      {
        flagMatch = 1;
        break;
      }
      n++;
    }
    switch (flagMatch)
    {
      case 1:
        NTcount += scr[n];
        ringptr[iring] = scr[n];
        break;
      default:
        ringptr[iring] = 0;
        break;
    }
    iring++;
    if (iring == window)
      iring = 0;
  }

  for (i = 0; i < window/2; i++)
    fptr++;
  *fptr = NTcount/window*100;
  fptr++;

/* calculate average */
  for (i = window; i < length; i++)
  {
    NTcount = NTcount - ringptr[iring];
    chres = SeqPortGetResidue (spp);
    flagMatch = FALSE;
    n = 0;
    while (res[n] != '\0')
    {
      if (chres == res[n])
      {
        flagMatch = TRUE;
        break;
      }
      n++;
    }
    switch (flagMatch)
    {
      case 1:
        NTcount += scr[n];
        ringptr[iring] = scr[n];
        break;
      default:
        ringptr[iring] = 0;
        break;
    }
    iring++;
    if (iring == window)
      iring = 0;
    *fptr = NTcount/window*100;
    fptr++;
  }
  MemFree (ringptr);
  return fhead;
}
示例#14
0
/*****************************************************************************
*
*   PrintTemplateSetPtr PrintTemplateSetLoad()
*       loads PrintTemplates
*       If path== NULL, looks for "prt.prt" in the "data" directory
*
*****************************************************************************/
static Boolean PrintTemplateSetLoadInt ( CharPtr path, Boolean verbose )
{
	AsnIoPtr aip;
	FILE *f;
	Boolean retval;
	Char filename [80];
	Char fullpath [PATH_MAX];
	CharPtr ptr;
	ErrSev lastLevel;

	aip = NULL;
	if (path != NULL && *path != '\0' && StringRChr (path, DIRDELIMCHR) != NULL) {
		StringNCpy (fullpath, path, sizeof (fullpath) - 1);
		if ((aip = AsnIoOpen (fullpath, "r")) == NULL) {
		    if (verbose) {
	    		ErrPost(CTX_NCBIOBJ, 1, "Couldn't open [%s]", fullpath);
		    }
			return FALSE;
		}
	} else {
		if (path != NULL && *path != '\0') {
			StringNCpy (filename, path, sizeof (filename) - 1);
		} else {
			StringCpy (filename, "prt.prt");
		}
		ProgramPath (fullpath, sizeof (fullpath) - 1);
		ptr = StringRChr (fullpath, DIRDELIMCHR);
		if (ptr != NULL) {
			*ptr = '\0';
		}
		FileBuildPath (fullpath, NULL, filename);
		/* silence SEV_INFO errors from FileOpen() */
		if ((lastLevel = ErrGetMessageLevel()) < SEV_WARNING)
			ErrSetMessageLevel (SEV_WARNING);
		if ((f = FileOpen (fullpath, "r")) == NULL) {
			ErrSetMessageLevel (lastLevel);
			if (FindPath ("NCBI", "NCBI", "DATA", fullpath, sizeof (fullpath) - 1)) {
				FileBuildPath (fullpath, NULL, filename);
				if ((aip = AsnIoOpen (fullpath, "r")) == NULL) {
				    if (verbose) {
					    ErrPost(CTX_NCBIOBJ, 1, "Couldn't open [%s]", fullpath);
				    }
					return FALSE;
				}
			} else {
			    if (verbose) {
			    	ErrPost(CTX_NCBIOBJ, 1, "FindPath failed in PrintTemplateSetLoad - ncbi configuration file missing or incorrect");
			    }
				return FALSE;
			}
		} else {
			ErrSetMessageLevel (lastLevel);
			FileClose (f);
			if ((aip = AsnIoOpen(fullpath, "r")) == NULL) {
			    if (verbose) {
				    ErrPost(CTX_NCBIOBJ, 1, "Couldn't open [%s]", fullpath);
			    }
				return FALSE;
			}
		}
	}

    retval = PrintTemplateSetAsnRead(aip);

    AsnIoClose(aip);
    return retval;
}