Mercurial > repos > ktnyt > gembassy
view GEMBASSY-1.0.3/include/gfile.c @ 1:84a17b3fad1f draft
Uploaded
author | ktnyt |
---|---|
date | Fri, 26 Jun 2015 05:20:29 -0400 |
parents | 8300eb051bea |
children |
line wrap: on
line source
/****************************************************************************** ** @source GEMBASSY file routines ** ** @version 1.0 ** @modified December 27 2012 Hidetoshi Itaya Created this file ** @@ ** ** This library is free software; you can redistribute it and/or ** modify it under the terms of the GNU Library General Public ** License as published by the Free Software Foundation; either ** version 2 of the License, or (at your option) any later version. ** ** This library is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ** Library General Public License for more details. ** ** You should have received a copy of the GNU Library General Public ** License along with this library; if not, write to the ** Free Software Foundation, Inc., 59 Temple Place - Suite 330, ** Boston, MA 02111-1307, USA. ******************************************************************************/ #include "gfile.h" /* @func gValID *************************************************************** ** ** Checks if an input string is a valid ID ** ** @param id [r] [AjPStr] ID to check ** @return [AjBool] ** @@ ******************************************************************************/ ajint gValID(AjPStr id){ AjPFilebuff buff = NULL; AjPStr url = NULL; AjPStr line = NULL; AjPRegexp pval = NULL; url = ajStrNewC("http://web.sfc.keio.ac.jp/~t11080hi/valID/valID.cgi?id="); url = ajStrNew(); ajFmtPrintS(&url, "http://rest.g-language.org/%S", id); //ajStrAppendS(&url, id); if(!gFilebuffURLS(url, &buff)) { return ajFalse; } return ajTrue; ajBuffreadLine(buff, &line); pval = ajRegCompC("^0"); if(ajRegExec(pval, line)) return ajFalse; return ajTrue; } /* @func gStrAppendURLS ******************************************************* ** ** Downloads file from a specified URL and writes to given output file ** ** @param [r] url [AjPStr] URL to download file from ** @param [r] string [AjPStr] String to write into ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gStrAppendURLS(AjPStr url, AjPStr* string){ AjPFilebuff buff = NULL; AjPStr file = NULL; AjPStr line = NULL; if(!*string) *string = ajStrNew(); if(!gFilebuffURLS(url, &buff)) return ajFalse; while(ajBuffreadLine(buff, &line)){ ajStrAppendS(string, line); } ajFilebuffDel(&buff); return ajTrue; } /* @func gStrAppendURLC ******************************************************* ** ** Downloads file from a specified URL and writes to given output file ** ** @param [r] url [char*] URL to download file from ** @param [r] string [AjPStr] String to write into ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gStrAppendURLC(char* url, AjPStr* string){ if(!gStrAppendURLS(ajStrNewC(url), string)) { return ajFalse; } return ajTrue; } /* @func gFileOutURLS ********************************************************* ** ** Downloads file from a specified URL and writes to given output file ** ** @param [r] url [AjPStr] URL to download file from ** @param [r] outf [AjPFile] File object to write into ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gFileOutURLS(AjPStr url, AjPFile* outf){ AjPFilebuff buff = NULL; AjPStr file = NULL; AjPStr line = NULL; if(!gFilebuffURLS(url, &buff)) return ajFalse; while(ajBuffreadLine(buff, &line)){ ajWriteline(*outf, line); } ajFilebuffDel(&buff); return ajTrue; } /* @func gFileOutURLC ********************************************************* ** ** Downloads file from a specified URL and writes to given output file ** ** @param [r] url [char*] URL to download file from ** @param [r] outf [AjPFile] File object to write into ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gFileOutURLC(char* url, AjPFile* outf){ if(!gFileOutURLS(ajStrNewC(url), outf)) { return ajFalse; } return ajTrue; } /* @func gFilebuffURLS ******************************************************** ** ** Downloads file from a specified URL and inputs in file buffer ** ** @param [r] url [AjPStr] URL to download file from ** @param [r] buff [AjPFilebuff] File buffer to set ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gFilebuffURLS(AjPStr url, AjPFilebuff* buff){ AjPStr line = NULL; AjPStr host = NULL; AjPStr path = NULL; ajint port = 80; ajHttpUrlDeconstruct(url, &port, &host, &path); *buff = ajHttpRead(NULL, NULL, NULL, host, port, path); if(!*buff) return ajFalse; ajFilebuffHtmlNoheader(*buff); return ajTrue; } /* @func gFilebuffURLC ******************************************************** ** ** Downloads file from a specified URL and inputs in file buffer ** ** @param [r] url [char*] URL to download file from ** @param [r] buff [AjPFilebuff] File buffer to set ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gFilebuffURLC(char* url, AjPFilebuff* buff){ gFilebuffURLS(ajStrNewC(url), buff); if(!*buff) return ajFalse; return ajTrue; } /* @func gAssignUniqueName **************************************************** ** ** Creates a unique filename ** ** @return [AjPStr] the unique filename ** @@ ******************************************************************************/ void gAssignUniqueName(AjPStr *string) { static char ext[2] = "A"; ajFmtPrintS(string, "%08d%s", getpid(), ext); if( ++ext[0] > 'Z' ) { ext[0] = 'A'; } } /* @func gCreateUniqueName **************************************************** ** ** Returns a unique filename ** ** @return [AjPStr] the unique filename ** @@ ******************************************************************************/ AjPStr gCreateUniqueName() { AjPStr string; gAssignUniqueName(&string); return string; } /* @func gFormatGenbank ******************************************************* ** ** Creates a genbank format string with sequence and features ** ** @param [r] seq [AjPSeq] Sequence object to write ** @param [r] inseq [AjPStr] String to write to ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gFormatGenbank(AjPSeq seq, AjPStr *inseq){ AjPSeqout seqout = NULL; AjPFeattabOut featout = NULL; AjPFeattable feat = NULL; AjPStr seqline = NULL; AjPStr featline = NULL; AjPFile seqfile = NULL; AjPFile featfile = NULL; AjPStr filename = NULL; AjBool hasfeats = ajTrue; gAssignUniqueName(&filename); feat = ajSeqGetFeatCopy(seq); if(!feat) { hasfeats = ajFalse; } seqout = ajSeqoutNew(); if(!ajSeqoutOpenFilename(seqout,filename)) embExitBad(); ajSeqoutSetFormatS(seqout,ajStrNewC("genbank")); ajSeqoutWriteSeq(seqout,seq); ajSeqoutClose(seqout); ajSeqoutDel(&seqout); seqfile = ajFileNewInNameS(filename); ajSysFileUnlinkS(filename); if(hasfeats) { featout = ajFeattabOutNew(); if(!ajFeattabOutOpen(featout,filename)) return ajFalse; ajFeattableWriteGenbank(featout,feat); ajFeattableDel(&feat); //ajFeattabOutDel(&featout); ajFileClose(&(featout->Handle)); featfile = ajFileNewInNameS(filename); ajSysFileUnlinkS(filename); } while(ajReadline(seqfile,&seqline)){ if(hasfeats && ajStrMatchC(seqline,"ORIGIN\n")){ while(ajReadline(featfile,&featline)){ ajStrAppendS(inseq, featline); } } ajStrAppendS(inseq, seqline); } ajStrDel(&seqline); ajStrDel(&featline); ajStrDel(&filename); ajFileClose(&seqfile); ajFileClose(&featfile); return hasfeats; } /* @func gGetFileContent ****************************************************** ** ** Reads file content and sets it to string pointer ** ** @param [r] content [AjPSeq] String to write to ** @param [r] filename [AjPSeq] Filename to open ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gGetFileContent(AjPStr* content, AjPStr filename){ AjPFile file = NULL; AjPStr line = NULL; if((file = ajFileNewInNameS(filename)) == NULL) return ajFalse; while(ajReadline(file, &line)) ajStrAppendS(content, line); if(file) ajFileClose(&file); ajSysFileUnlinkS(filename); return ajTrue; } /* @func gtaiFileOutURLS ****************************************************** ** ** Downloads file from a specified URL and inputs in file buffer ** ** @param [r] url [AjPStr] URL to download file from ** @param [r] buff [AjPFilebuff] File buffer to set ** @return [AjBool] ** @@ ******************************************************************************/ AjBool gtaiFileOutURLS(AjPStr url, AjPFile* outf, AjBool tai){ if(tai) { CURL *curl; CURLcode curl_res; Memory *mem = malloc(sizeof(Memory*)); mem->size = 0; mem->memory = NULL; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, ajCharNewS(url)); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write); curl_easy_setopt(curl, CURLOPT_WRITEDATA, mem); } curl_res = curl_easy_perform(curl); if(CURLE_OK == curl_res) { char* redir; curl_res = curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &redir); if((CURLE_OK == curl_res) && redir) { ajStrAssignC(&url, redir); ajStrExchangeCC(&url, "cai.csv", "tai.csv"); } } free(mem); curl_easy_cleanup(curl); curl_global_cleanup(); } return gFileOutURLS(url, outf); }