init
This commit is contained in:
commit
c9b94ce735
6 changed files with 4431 additions and 0 deletions
111
Makefile
Normal file
111
Makefile
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
#
|
||||||
|
# Unix Makefile for readseq
|
||||||
|
# to use, command me:
|
||||||
|
# % make -- or --
|
||||||
|
# % make CC=your-c-compiler-name
|
||||||
|
#
|
||||||
|
|
||||||
|
# pick an ANSI C compiler (the default Sun CC is not ANSI)
|
||||||
|
CC=gcc # Gnu C Compiler
|
||||||
|
#CC=cc # SGI Irix
|
||||||
|
#CC=vcc # some DEC Ultrix
|
||||||
|
|
||||||
|
CFLAGS=
|
||||||
|
#CFLAGS= -DSMALLCHECKSUM # if you prefer to use a GCG-standard 13 bit checksum
|
||||||
|
# instead of a full 32 bit checksum. This may enhance compatibility w/ GCG software
|
||||||
|
|
||||||
|
SOURCES= readseq.c ureadseq.c ureadseq.h ureadasn.c
|
||||||
|
DOCS= Readme Readseq.help Formats Stdfiles Makefile Make.com add.gdemenu *.std
|
||||||
|
|
||||||
|
|
||||||
|
# NCBI toolkit support for ASN.1 reader
|
||||||
|
|
||||||
|
# this is path to NCBI toolkit, you must set for your system:
|
||||||
|
NCBI=
|
||||||
|
#NCBI=/bio/mb/ncbi
|
||||||
|
#
|
||||||
|
OTHERLIBS=-lm
|
||||||
|
LIB1=-lncbi
|
||||||
|
LIB2=-lncbiobj
|
||||||
|
LIB3=-lncbicdr
|
||||||
|
LIB4=-lvibrant
|
||||||
|
INCPATH=$(NCBI)/include
|
||||||
|
LIBPATH=$(NCBI)/lib
|
||||||
|
NCFLAGS=$(CFLAGS) -DNCBI -I$(INCPATH)
|
||||||
|
NLDFLAGS=-I$(INCPATH) -L$(LIBPATH)
|
||||||
|
NLIBS=$(LIB1) $(LIB2) $(OTHERLIBS)
|
||||||
|
|
||||||
|
|
||||||
|
all: build test
|
||||||
|
|
||||||
|
build: $(SOURCES)
|
||||||
|
@echo "Compiling readseq..."
|
||||||
|
$(CC) $(CFLAGS) -o readseq readseq.c ureadseq.c
|
||||||
|
|
||||||
|
# if using NCBI, uncomment these lines in place of build: above
|
||||||
|
#build: $(SOURCES)
|
||||||
|
# @echo "Compiling readseq with NCBI toolkit support...";
|
||||||
|
# $(CC) -o readseq $(NLDFLAGS) $(NCFLAGS) readseq.c ureadseq.c ureadasn.c $(NLIBS)
|
||||||
|
|
||||||
|
test: $(SOURCES) readseq
|
||||||
|
@echo ""
|
||||||
|
@echo "Test for general read/write of all chars:"
|
||||||
|
./readseq -p alphabet.std -otest.alpha
|
||||||
|
-diff test.alpha alphabet.std
|
||||||
|
|
||||||
|
@echo ""
|
||||||
|
@echo "Test for valid format conversions:"
|
||||||
|
./readseq -v -p -f=ig nucleic.std -otest.ig
|
||||||
|
./readseq -v -p -f=gb test.ig -otest.gb
|
||||||
|
./readseq -v -p -f=nbrf test.gb -otest.nbrf
|
||||||
|
./readseq -v -p -f=embl test.nbrf -otest.embl
|
||||||
|
./readseq -v -p -f=gcg test.embl -otest.gcg
|
||||||
|
./readseq -v -p -f=strider test.gcg -otest.strider
|
||||||
|
./readseq -v -p -f=fitch test.strider -otest.fitch
|
||||||
|
./readseq -v -p -f=fasta test.fitch -otest.fasta
|
||||||
|
./readseq -v -p -f=pir test.fasta -otest.pir
|
||||||
|
./readseq -v -p -f=ig test.pir -otest.ig-b
|
||||||
|
-diff test.ig test.ig-b
|
||||||
|
|
||||||
|
@echo ""
|
||||||
|
@echo "Test for multiple-sequence format conversions:"
|
||||||
|
./readseq -p -f=ig multi.std -otest.m-ig
|
||||||
|
./readseq -p -f=gb test.m-ig -otest.m-gb
|
||||||
|
./readseq -p -f=nbrf test.m-gb -otest.m-nbrf
|
||||||
|
./readseq -p -f=embl test.m-nbrf -otest.m-embl
|
||||||
|
./readseq -p -f=fasta test.m-embl -otest.m-fasta
|
||||||
|
./readseq -p -f=pir test.m-fasta -otest.m-pir
|
||||||
|
./readseq -p -f=msf test.m-pir -otest.m-msf
|
||||||
|
./readseq -p -f=paup test.m-msf -otest.m-paup
|
||||||
|
./readseq -p -f=ig test.m-paup -otest.m-ig-b
|
||||||
|
-diff test.m-ig test.m-ig-b
|
||||||
|
#
|
||||||
|
# if using NCBI, uncomment these lines
|
||||||
|
# @echo ""
|
||||||
|
# @echo "Test of NCBI ASN.1 conversions:"
|
||||||
|
# ./readseq -p -f=asn test.m-ig -otest.m-asn
|
||||||
|
# ./readseq -p -f=ig test.m-asn -otest.m-ig-c
|
||||||
|
# -diff test.m-ig test.m-ig-c
|
||||||
|
#
|
||||||
|
@echo ""
|
||||||
|
@echo "Expect differences in the header lines due to"
|
||||||
|
@echo "different format headers. If any sequence lines"
|
||||||
|
@echo "differ, or if the checksums differ, there is a problem."
|
||||||
|
@echo "----------------------"
|
||||||
|
@echo ""
|
||||||
|
@echo "To clean up test files, command me:"
|
||||||
|
@echo " make clean"
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o core test.*
|
||||||
|
|
||||||
|
shar:
|
||||||
|
@echo "shell archiving files..."
|
||||||
|
-rm -f readseq*.shar
|
||||||
|
mkdir readseqd
|
||||||
|
cp $(SOURCES) readseqd
|
||||||
|
cp $(DOCS) readseqd
|
||||||
|
shar -v readseqd > readseq.shar
|
||||||
|
rm -rf readseqd
|
||||||
|
|
292
macinit.c
Normal file
292
macinit.c
Normal file
|
@ -0,0 +1,292 @@
|
||||||
|
/*
|
||||||
|
macinit.c
|
||||||
|
-- Macintosh initializations, then call real main
|
||||||
|
|
||||||
|
Note: compile this segment as Main for generic 68000 processor, so it won't
|
||||||
|
fail on generic mac
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma segment Main
|
||||||
|
|
||||||
|
#include <Events.h>
|
||||||
|
#include <Memory.h>
|
||||||
|
#include <OSUtils.h>
|
||||||
|
#include <Palettes.h>
|
||||||
|
#include <Quickdraw.h>
|
||||||
|
#include <StandardFile.h>
|
||||||
|
#include <StdLib.h>
|
||||||
|
#include <ToolUtils.h>
|
||||||
|
#include <Types.h>
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <dialogs.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
// #include <Menus.h>
|
||||||
|
// #include <Fonts.h>
|
||||||
|
|
||||||
|
Boolean StopKey()
|
||||||
|
{
|
||||||
|
EventRecord ev;
|
||||||
|
|
||||||
|
if (EventAvail(keyDownMask + autoKeyMask, &ev)) {
|
||||||
|
if ((ev.modifiers & cmdKey) &&
|
||||||
|
((char)(ev.message & charCodeMask) == '.')) {
|
||||||
|
SysBeep(1);
|
||||||
|
(void)GetNextEvent(keyDownMask + autoKeyMask, &ev);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean cmdKeyIsDown()
|
||||||
|
{
|
||||||
|
KeyMap kmap;
|
||||||
|
GetKeys(&kmap);
|
||||||
|
return BitTst(kmap, (sizeof(KeyMap) * 8) - 55);
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean shiftKeyIsDown()
|
||||||
|
{
|
||||||
|
KeyMap kmap;
|
||||||
|
GetKeys(&kmap);
|
||||||
|
return BitTst(kmap, (sizeof(KeyMap) * 8) - 56);
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean capsLockIsDown()
|
||||||
|
{
|
||||||
|
KeyMap kmap;
|
||||||
|
GetKeys(&kmap);
|
||||||
|
return BitTst(kmap, (sizeof(KeyMap) * 8) - 57);
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean optionKeyIsDown()
|
||||||
|
{
|
||||||
|
KeyMap kmap;
|
||||||
|
GetKeys(&kmap);
|
||||||
|
return BitTst(kmap, (sizeof(KeyMap) * 8) - 58);
|
||||||
|
}
|
||||||
|
|
||||||
|
Boolean MouseButton() { return Button(); }
|
||||||
|
|
||||||
|
Boolean Keypress()
|
||||||
|
{
|
||||||
|
EventRecord ev;
|
||||||
|
return EventAvail(keyDownMask + keyUpMask + autoKeyMask, &ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *StdGetFile(char *prompt, OSType fileTypes[], int nFileTypes)
|
||||||
|
{
|
||||||
|
Point wher; /*where to display dialog*/
|
||||||
|
SFReply reply; /*reply record*/
|
||||||
|
short len;
|
||||||
|
static char filename[80] = "\0";
|
||||||
|
|
||||||
|
wher.h = 80;
|
||||||
|
wher.v = 90;
|
||||||
|
if (optionKeyIsDown()) nFileTypes = 0;
|
||||||
|
|
||||||
|
SFGetFile(wher, prompt, nil, nFileTypes, fileTypes, nil, &reply);
|
||||||
|
|
||||||
|
if (reply.good) {
|
||||||
|
len = SetVol(nil, reply.vRefNum);
|
||||||
|
len = reply.fName[0];
|
||||||
|
strncpy(filename, (char *)(&reply.fName[1]), len);
|
||||||
|
filename[len] = '\0';
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int readCmdOptions(FILE *cl, char *progname, char ***argv)
|
||||||
|
/* command line reader for Mac/MPW -- dgg */
|
||||||
|
{
|
||||||
|
#define MAXS 255
|
||||||
|
#define addarg(sptr) \
|
||||||
|
if (strlen(sptr) > 0) { \
|
||||||
|
targv = (char **)realloc(targv, (argc + 1) * sizeof(char *)); \
|
||||||
|
targv[argc] = (char *)malloc(1 + strlen(sptr) * sizeof(char)); \
|
||||||
|
strcpy(targv[argc], sptr); \
|
||||||
|
argc++; \
|
||||||
|
}
|
||||||
|
|
||||||
|
char *pword, st[MAXS];
|
||||||
|
int argc = 0;
|
||||||
|
char **targv;
|
||||||
|
|
||||||
|
targv = (char **)malloc(1);
|
||||||
|
if (progname == NULL) progname = "program";
|
||||||
|
addarg(progname);
|
||||||
|
fgets(st, MAXS, cl);
|
||||||
|
if (!feof(cl) && st != NULL && *st != 0) {
|
||||||
|
pword = strtok(st, "\ \n");
|
||||||
|
while (pword != NULL) {
|
||||||
|
addarg(pword);
|
||||||
|
pword = strtok(NULL, "\ \n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*argv = targv;
|
||||||
|
return argc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ccommand(char ***argv)
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **targv;
|
||||||
|
|
||||||
|
argc = readCmdOptions(stdin, *argv[0], &targv);
|
||||||
|
*argv = targv;
|
||||||
|
return argc;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern _DataInit();
|
||||||
|
|
||||||
|
// #define VERSION curSysEnvVers
|
||||||
|
#define nocolorID 130
|
||||||
|
#define no68020 133
|
||||||
|
#define no68881 132
|
||||||
|
#define no256 134
|
||||||
|
#define nosys6 135
|
||||||
|
|
||||||
|
void MacInit()
|
||||||
|
{
|
||||||
|
SysEnvRec theWorld;
|
||||||
|
OSErr OSys;
|
||||||
|
DialogPtr crashDia;
|
||||||
|
long tick;
|
||||||
|
|
||||||
|
UnloadSeg(_DataInit);
|
||||||
|
|
||||||
|
InitGraf((Ptr)&qd.thePort);
|
||||||
|
// InitFonts();
|
||||||
|
InitWindows();
|
||||||
|
// InitMenus();
|
||||||
|
// TEInit();
|
||||||
|
InitDialogs(nil);
|
||||||
|
InitCursor();
|
||||||
|
|
||||||
|
/*______________________________________________________*/
|
||||||
|
/* If not right Machine then stop */
|
||||||
|
/*______________________________________________________*/
|
||||||
|
OSys = SysEnvirons(curSysEnvVers, &theWorld);
|
||||||
|
|
||||||
|
/*if(!theWorld.hasColorQD) {
|
||||||
|
crashDia = GetNewDialog (nocolorID, nil, (WindowPtr) -1);
|
||||||
|
DrawDialog (crashDia);
|
||||||
|
Delay (300, &tick);
|
||||||
|
ExitToShell();
|
||||||
|
}*/
|
||||||
|
/*if(theWorld.processor < env68020) {
|
||||||
|
crashDia = GetNewDialog (no68020, nil, (WindowPtr) -1);
|
||||||
|
DrawDialog (crashDia);
|
||||||
|
Delay (300, &tick);
|
||||||
|
ExitToShell();
|
||||||
|
}*/
|
||||||
|
/*if(!theWorld.hasFPU) {
|
||||||
|
crashDia = GetNewDialog (no68881, nil, (WindowPtr) -1);
|
||||||
|
DrawDialog (crashDia);
|
||||||
|
Delay (300, &tick);
|
||||||
|
ExitToShell();
|
||||||
|
}
|
||||||
|
if(theWorld.systemVersion < 0x0600) {
|
||||||
|
crashDia = GetNewDialog (nosys6, nil, (WindowPtr) -1);
|
||||||
|
DrawDialog (crashDia);
|
||||||
|
Delay (300, &tick);
|
||||||
|
ExitToShell();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
#ifdef UnDeFineD
|
||||||
|
/*______________________________________________________*/
|
||||||
|
/* Set Rects */
|
||||||
|
/*______________________________________________________*/
|
||||||
|
screenRect = qd.screenBits.bounds;
|
||||||
|
offLeft = 0;
|
||||||
|
offTop = 0;
|
||||||
|
offRight = screenRect.right;
|
||||||
|
offBottom = screenRect.bottom;
|
||||||
|
SetRect(&BaseRect, 40, 60, 472, 282);
|
||||||
|
tempRgn = GetGrayRgn();
|
||||||
|
HLock((Handle)tempRgn);
|
||||||
|
TotalRect = (**tempRgn).rgnBBox;
|
||||||
|
SetRect(&minRect, 80, 80, (**tempRgn).rgnBBox.right - 40,
|
||||||
|
(**tempRgn).rgnBBox.bottom - 40);
|
||||||
|
HUnlock((Handle)tempRgn);
|
||||||
|
|
||||||
|
/*______________________________________________________*/
|
||||||
|
/* Open Window & set Palette & Picture */
|
||||||
|
/*______________________________________________________*/
|
||||||
|
theGDevice = GetMainDevice();
|
||||||
|
HLock((Handle)theGDevice);
|
||||||
|
mycolors = (**(**theGDevice).gdPMap).pmTable;
|
||||||
|
numcolor = (**(**theGDevice).gdPMap).pixelSize;
|
||||||
|
HUnlock((Handle)theGDevice);
|
||||||
|
switch (numcolor) {
|
||||||
|
case 1:
|
||||||
|
numcolor = 2;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
numcolor = 4;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
numcolor = 16;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
numcolor = 256;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
myWindow = NewCWindow(nil, &BaseRect, "", true, zoomDocProc,
|
||||||
|
(WindowPtr)-1, true, 150);
|
||||||
|
SetPort((WindowPtr)myWindow);
|
||||||
|
DrawGrowIcon(myWindow);
|
||||||
|
|
||||||
|
srcPalette = NewPalette(numcolor, mycolors, pmCourteous, 0);
|
||||||
|
SetPalette((WindowPtr)myWindow, srcPalette, true);
|
||||||
|
|
||||||
|
/*______________________________________________________*/
|
||||||
|
/* Set menus */
|
||||||
|
/*______________________________________________________*/
|
||||||
|
mymenu0 = GetMenu(appleID);
|
||||||
|
AddResMenu(mymenu0, 'DRVR');
|
||||||
|
InsertMenu(mymenu0, 0);
|
||||||
|
mymenu1 = newmenu(129, "File");
|
||||||
|
appendmenu(mymenu1, "Start;Quit");
|
||||||
|
InsertMenu(mymenu1, 0);
|
||||||
|
mymenu2 = newmenu(130, "Edit");
|
||||||
|
InsertMenu(mymenu2, 0);
|
||||||
|
DrawMenuBar();
|
||||||
|
|
||||||
|
/*______________________________________________________*/
|
||||||
|
/* Init variables */
|
||||||
|
/*______________________________________________________*/
|
||||||
|
DoneFlag = false;
|
||||||
|
yieldTime = 0;
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
Boolean loop = true;
|
||||||
|
char **myargv;
|
||||||
|
int myargc;
|
||||||
|
|
||||||
|
/* MacInit(); -- SIOW library handles this */
|
||||||
|
do {
|
||||||
|
fprintf(stderr, "\nEnter command line for %s [cmd-Q to quit]\n",
|
||||||
|
argv[0]);
|
||||||
|
fprintf(stderr, "-> %s ", argv[0]);
|
||||||
|
myargv = argv;
|
||||||
|
myargc = ccommand(&myargv);
|
||||||
|
|
||||||
|
siow_main(myargc, myargv);
|
||||||
|
fflush(stdout);
|
||||||
|
|
||||||
|
} while (true);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
324
ureadasn.c
Normal file
324
ureadasn.c
Normal file
|
@ -0,0 +1,324 @@
|
||||||
|
/* ureadasn.c
|
||||||
|
-- parse, mangle and otherwise rewrite ASN1 file/entries for readseq reading
|
||||||
|
-- from NCBI toolkit (ncbi.nlm.nih.gov:/toolkit)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef NCBI
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* NCBI toolkit :include: must be on lib path */
|
||||||
|
#include <ncbi.h>
|
||||||
|
#include <seqport.h>
|
||||||
|
|
||||||
|
#define UREADASN
|
||||||
|
#include "ureadseq.h"
|
||||||
|
|
||||||
|
#pragma segment ureadasn
|
||||||
|
|
||||||
|
/* this stuff is hacked up from tofasta.c of ncbitools */
|
||||||
|
#define kBaseAny 0
|
||||||
|
#define kBaseNucleic 1
|
||||||
|
#define kBaseAmino 2
|
||||||
|
|
||||||
|
typedef struct tofasta {
|
||||||
|
Boolean idonly;
|
||||||
|
short *seqnum;
|
||||||
|
short whichSeq;
|
||||||
|
char **seq, **seqid;
|
||||||
|
long *seqlen;
|
||||||
|
} FastaDat, PNTR FastaPtr;
|
||||||
|
|
||||||
|
void BioseqRawToRaw(BioseqPtr bsp, Boolean idonly, short whichSeq,
|
||||||
|
short *seqnum, char **seq, char **seqid, long *seqlen)
|
||||||
|
{
|
||||||
|
SeqPortPtr spp;
|
||||||
|
SeqIdPtr bestid;
|
||||||
|
Uint1 repr, code, residue;
|
||||||
|
CharPtr tmp, title;
|
||||||
|
long outlen, outmax;
|
||||||
|
char localid[256], *sp;
|
||||||
|
|
||||||
|
/* !!! this may be called several times for a single sequence
|
||||||
|
because SeqEntryExplore looks for parts and joins them...
|
||||||
|
assume seq, seqid, seqlen may contain data (or NULL)
|
||||||
|
*/
|
||||||
|
if (bsp == NULL) return;
|
||||||
|
repr = Bioseq_repr(bsp);
|
||||||
|
if (!(repr == Seq_repr_raw || repr == Seq_repr_const)) return;
|
||||||
|
|
||||||
|
(*seqnum)++;
|
||||||
|
if (!(whichSeq == *seqnum || whichSeq == 0)) return;
|
||||||
|
|
||||||
|
bestid = SeqIdFindBest(bsp->id, (Uint1)0);
|
||||||
|
title = BioseqGetTitle(bsp);
|
||||||
|
if (idonly) {
|
||||||
|
sprintf(localid, " %d) ", *seqnum);
|
||||||
|
tmp = localid + strlen(localid) - 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
strcpy(localid, " ");
|
||||||
|
tmp = localid;
|
||||||
|
}
|
||||||
|
tmp = SeqIdPrint(bestid, tmp, PRINTID_FASTA_SHORT);
|
||||||
|
tmp = StringMove(tmp, " ");
|
||||||
|
StringNCpy(tmp, title, 200);
|
||||||
|
/* fprintf(stderr,"BioseqRawToRaw: localid='%s'\n",localid); */
|
||||||
|
|
||||||
|
/* < seqid is fixed storage */
|
||||||
|
/* strcpy( *seqid, localid); */
|
||||||
|
/* < seqid is variable sized */
|
||||||
|
outmax = strlen(localid) + 3;
|
||||||
|
if (*seqid == NULL) {
|
||||||
|
*seqid = (char *)malloc(outmax);
|
||||||
|
if (*seqid == NULL) return;
|
||||||
|
strcpy(*seqid, localid);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outmax += strlen(*seqid) + 2;
|
||||||
|
*seqid = (char *)realloc(*seqid, outmax);
|
||||||
|
if (*seqid == NULL) return;
|
||||||
|
if (!idonly) strcat(*seqid, "; ");
|
||||||
|
strcat(*seqid, localid);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idonly) {
|
||||||
|
strcat(*seqid, "\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ISA_na(bsp->mol))
|
||||||
|
code = Seq_code_iupacna;
|
||||||
|
else
|
||||||
|
code = Seq_code_iupacaa;
|
||||||
|
spp = SeqPortNew(bsp, 0, -1, 0, code);
|
||||||
|
SeqPortSeek(spp, 0, SEEK_SET);
|
||||||
|
|
||||||
|
sp = *seq;
|
||||||
|
if (sp == NULL) { /* this is always true now !? */
|
||||||
|
outlen = 0;
|
||||||
|
outmax = 500;
|
||||||
|
sp = (char *)malloc(outmax);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outlen = strlen(sp);
|
||||||
|
outmax = outlen + 500;
|
||||||
|
sp = (char *)realloc(sp, outmax);
|
||||||
|
}
|
||||||
|
if (sp == NULL) return;
|
||||||
|
|
||||||
|
while ((residue = SeqPortGetResidue(spp)) != SEQPORT_EOF) {
|
||||||
|
if (outlen >= outmax) {
|
||||||
|
outmax = outlen + 500;
|
||||||
|
sp = (char *)realloc(sp, outmax);
|
||||||
|
if (sp == NULL) return;
|
||||||
|
}
|
||||||
|
sp[outlen++] = residue;
|
||||||
|
}
|
||||||
|
sp = (char *)realloc(sp, outlen + 1);
|
||||||
|
if (sp != NULL) sp[outlen] = '\0';
|
||||||
|
*seq = sp;
|
||||||
|
*seqlen = outlen;
|
||||||
|
SeqPortFree(spp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SeqEntryRawseq(SeqEntryPtr sep, Pointer data, Int4 index,
|
||||||
|
Int2 indent)
|
||||||
|
{
|
||||||
|
FastaPtr tfa;
|
||||||
|
BioseqPtr bsp;
|
||||||
|
|
||||||
|
if (!IS_Bioseq(sep)) return;
|
||||||
|
bsp = (BioseqPtr)sep->data.ptrvalue;
|
||||||
|
tfa = (FastaPtr)data;
|
||||||
|
BioseqRawToRaw(bsp, tfa->idonly, tfa->whichSeq, tfa->seqnum, tfa->seq,
|
||||||
|
tfa->seqid, tfa->seqlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SeqEntryToRaw(SeqEntryPtr sep, Boolean idonly, short whichSeq,
|
||||||
|
short *seqnum, char **seq, char **seqid, long *seqlen)
|
||||||
|
{
|
||||||
|
FastaDat tfa;
|
||||||
|
|
||||||
|
if (sep == NULL) return;
|
||||||
|
tfa.idonly = idonly;
|
||||||
|
tfa.seqnum = seqnum;
|
||||||
|
tfa.whichSeq = whichSeq;
|
||||||
|
tfa.seq = seq;
|
||||||
|
tfa.seqid = seqid;
|
||||||
|
tfa.seqlen = seqlen;
|
||||||
|
SeqEntryExplore(sep, (Pointer)&tfa, SeqEntryRawseq);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *listASNSeqs(
|
||||||
|
const char *filename, const long skiplines,
|
||||||
|
const short format, /* note: this is kASNseqentry or kASNseqset */
|
||||||
|
short *nseq, short *error)
|
||||||
|
{
|
||||||
|
AsnIoPtr aip = NULL;
|
||||||
|
SeqEntryPtr the_set;
|
||||||
|
AsnTypePtr atp, atp2;
|
||||||
|
AsnModulePtr amp;
|
||||||
|
Boolean inIsBinary =
|
||||||
|
FALSE; /* damn, why can't asn routines test this? */
|
||||||
|
char *seq = NULL;
|
||||||
|
char *seqid = NULL, stemp[256];
|
||||||
|
long seqlen;
|
||||||
|
int i, count;
|
||||||
|
|
||||||
|
*nseq = 0;
|
||||||
|
*error = 0;
|
||||||
|
|
||||||
|
/* asn dictionary setups */
|
||||||
|
/*fprintf(stderr,"listASNSeqs: SeqEntryLoad\n");*/
|
||||||
|
if (!SeqEntryLoad())
|
||||||
|
goto errxit; /* sequence alphabets (and sequence parse trees)
|
||||||
|
*/
|
||||||
|
amp = AsnAllModPtr(); /* get pointer to all loaded ASN.1 modules */
|
||||||
|
if (amp == NULL) goto errxit;
|
||||||
|
atp = AsnFind("Bioseq-set"); /* get the initial type pointers */
|
||||||
|
if (atp == NULL) goto errxit;
|
||||||
|
atp2 = AsnFind("Bioseq-set.seq-set.E");
|
||||||
|
if (atp2 == NULL) goto errxit;
|
||||||
|
|
||||||
|
/*fprintf(stderr,"listASNSeqs: AsnIoOpen\n");*/
|
||||||
|
/* open the ASN.1 input file in the right mode */
|
||||||
|
/* !!!! THIS FAILS when filename has MAC PATH (& other paths?)
|
||||||
|
* (:folder:filename) */
|
||||||
|
if ((aip = AsnIoOpen(filename, inIsBinary ? "rb" : "r")) == NULL)
|
||||||
|
goto errxit;
|
||||||
|
for (i = 0; i < skiplines; i++)
|
||||||
|
fgets(stemp, 255,
|
||||||
|
aip->fp); /* this may mess up asn routines... */
|
||||||
|
|
||||||
|
if (!ErrSetLog("stderr"))
|
||||||
|
goto errxit;
|
||||||
|
else
|
||||||
|
ErrSetOpts(ERR_CONTINUE,
|
||||||
|
ERR_LOG_ON); /*?? log errors instead of die */
|
||||||
|
|
||||||
|
if (format == kASNseqentry) { /* read one Seq-entry */
|
||||||
|
/*fprintf(stderr,"listASNSeqs: SeqEntryAsnRead\n");*/
|
||||||
|
the_set = SeqEntryAsnRead(aip, NULL);
|
||||||
|
SeqEntryToRaw(the_set, true, 0, nseq, &seq, &seqid, &seqlen);
|
||||||
|
if (seq) free(seq);
|
||||||
|
seq = NULL;
|
||||||
|
SeqEntryFree(the_set);
|
||||||
|
}
|
||||||
|
else { /* read Seq-entry's from a Bioseq-set */
|
||||||
|
count = 0;
|
||||||
|
/*fprintf(stderr,"listASNSeqs: AsnReadId\n");*/
|
||||||
|
while ((atp = AsnReadId(aip, amp, atp)) != NULL) {
|
||||||
|
if (atp == atp2) { /* top level Seq-entry */
|
||||||
|
the_set = SeqEntryAsnRead(aip, atp);
|
||||||
|
SeqEntryToRaw(the_set, true, 0, nseq, &seq,
|
||||||
|
&seqid, &seqlen);
|
||||||
|
SeqEntryFree(the_set);
|
||||||
|
if (seq) free(seq);
|
||||||
|
seq = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AsnReadVal(aip, atp, NULL);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AsnIoClose(aip);
|
||||||
|
*error = 0;
|
||||||
|
return seqid;
|
||||||
|
|
||||||
|
errxit:
|
||||||
|
AsnIoClose(aip);
|
||||||
|
if (seqid) free(seqid);
|
||||||
|
*error = eASNerr;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *readASNSeq(
|
||||||
|
const short whichEntry, const char *filename, const long skiplines,
|
||||||
|
const short format, /* note: this is kASNseqentry or kASNseqset */
|
||||||
|
long *seqlen, short *nseq, short *error, char **seqid)
|
||||||
|
{
|
||||||
|
AsnIoPtr aip = NULL;
|
||||||
|
SeqEntryPtr the_set;
|
||||||
|
AsnTypePtr atp, atp2;
|
||||||
|
AsnModulePtr amp;
|
||||||
|
Boolean inIsBinary =
|
||||||
|
FALSE; /* damn, why can't asn routines test this? */
|
||||||
|
char *seq, stemp[200];
|
||||||
|
int i, count;
|
||||||
|
|
||||||
|
*seqlen = 0;
|
||||||
|
*nseq = 0;
|
||||||
|
*error = 0;
|
||||||
|
seq = NULL;
|
||||||
|
|
||||||
|
/*fprintf(stderr,"readASNseq: SeqEntryLoad\n");*/
|
||||||
|
/* asn dictionary setups */
|
||||||
|
if (!SeqEntryLoad())
|
||||||
|
goto errxit; /* sequence alphabets (and sequence parse trees)
|
||||||
|
*/
|
||||||
|
amp = AsnAllModPtr(); /* get pointer to all loaded ASN.1 modules */
|
||||||
|
if (amp == NULL) goto errxit;
|
||||||
|
atp = AsnFind("Bioseq-set"); /* get the initial type pointers */
|
||||||
|
if (atp == NULL) goto errxit;
|
||||||
|
atp2 = AsnFind("Bioseq-set.seq-set.E");
|
||||||
|
if (atp2 == NULL) goto errxit;
|
||||||
|
|
||||||
|
/* open the ASN.1 input file in the right mode */
|
||||||
|
/*fprintf(stderr,"readASNseq: AsnIoOpen(%s)\n", filename);*/
|
||||||
|
if ((aip = AsnIoOpen(filename, inIsBinary ? "rb" : "r")) == NULL)
|
||||||
|
goto errxit;
|
||||||
|
for (i = 0; i < skiplines; i++)
|
||||||
|
fgets(stemp, 255,
|
||||||
|
aip->fp); /* this may mess up asn routines... */
|
||||||
|
|
||||||
|
if (!ErrSetLog("stderr"))
|
||||||
|
goto errxit;
|
||||||
|
else
|
||||||
|
ErrSetOpts(ERR_CONTINUE,
|
||||||
|
ERR_LOG_ON); /*?? log errors instead of die */
|
||||||
|
|
||||||
|
seq = NULL;
|
||||||
|
if (format == kASNseqentry) { /* read one Seq-entry */
|
||||||
|
/*fprintf(stderr,"readASNseq: SeqEntryAsnRead\n");*/
|
||||||
|
the_set = SeqEntryAsnRead(aip, NULL);
|
||||||
|
SeqEntryToRaw(the_set, false, whichEntry, nseq, &seq, seqid,
|
||||||
|
seqlen);
|
||||||
|
SeqEntryFree(the_set);
|
||||||
|
goto goodexit;
|
||||||
|
}
|
||||||
|
|
||||||
|
else { /* read Seq-entry's from a Bioseq-set */
|
||||||
|
count = 0;
|
||||||
|
/*fprintf(stderr,"readASNseq: AsnReadId\n");*/
|
||||||
|
while ((atp = AsnReadId(aip, amp, atp)) != NULL) {
|
||||||
|
if (atp == atp2) { /* top level Seq-entry */
|
||||||
|
the_set = SeqEntryAsnRead(aip, atp);
|
||||||
|
SeqEntryToRaw(the_set, false, whichEntry, nseq,
|
||||||
|
&seq, seqid, seqlen);
|
||||||
|
SeqEntryFree(the_set);
|
||||||
|
if (*nseq >= whichEntry) goto goodexit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
AsnReadVal(aip, atp, NULL);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
goodexit:
|
||||||
|
AsnIoClose(aip);
|
||||||
|
*error = 0;
|
||||||
|
return seq;
|
||||||
|
|
||||||
|
errxit:
|
||||||
|
AsnIoClose(aip);
|
||||||
|
*error = eASNerr;
|
||||||
|
if (seq) free(seq);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /*NCBI*/
|
2121
ureadseq.c
Normal file
2121
ureadseq.c
Normal file
File diff suppressed because it is too large
Load diff
172
ureadseq.h
Normal file
172
ureadseq.h
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
/* File: ureadseq.h
|
||||||
|
*
|
||||||
|
* Header for module UReadSeq
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UREADSEQ_H
|
||||||
|
#define UREADSEQ_H
|
||||||
|
|
||||||
|
typedef char boolean;
|
||||||
|
#define NEWLINE '\n'
|
||||||
|
#define false 0
|
||||||
|
#define true 1
|
||||||
|
#define min(a, b) (a < b) ? a : b
|
||||||
|
#define max(a, b) (a > b) ? a : b
|
||||||
|
#define skipwhitespace(string) \
|
||||||
|
{ \
|
||||||
|
while (*string <= ' ' && *string != 0) string++; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NLM strings */
|
||||||
|
#define is_upper(c) ('A' <= (c) && (c) <= 'Z')
|
||||||
|
#define is_lower(c) ('a' <= (c) && (c) <= 'z')
|
||||||
|
#define to_lower(c) ((char)(is_upper(c) ? (c) + ' ' : (c)))
|
||||||
|
#define to_upper(c) ((char)(is_lower(c) ? (c) - ' ' : (c)))
|
||||||
|
|
||||||
|
/* readSeq errors */
|
||||||
|
#define eFileNotFound -1
|
||||||
|
#define eNoData -2
|
||||||
|
#define eMemFull -3
|
||||||
|
#define eItemNotFound -4
|
||||||
|
#define eOneFormat -5
|
||||||
|
#define eUnequalSize -6
|
||||||
|
#define eFileCreate -7
|
||||||
|
#define eUnknownFormat -8
|
||||||
|
#define eOptionBad -9
|
||||||
|
#define eASNerr -10
|
||||||
|
|
||||||
|
/* magic number for readSeq(whichEntry) to give seq list */
|
||||||
|
#define kListSequences -1
|
||||||
|
|
||||||
|
/* sequence types parsed by getseqtype */
|
||||||
|
#define kOtherSeq 0
|
||||||
|
#define kDNA 1
|
||||||
|
#define kRNA 2
|
||||||
|
#define kNucleic 3
|
||||||
|
#define kAmino 4
|
||||||
|
|
||||||
|
/* formats known to readSeq */
|
||||||
|
#define kIG 1
|
||||||
|
#define kGenBank 2
|
||||||
|
#define kNBRF 3
|
||||||
|
#define kEMBL 4
|
||||||
|
#define kGCG 5
|
||||||
|
#define kStrider 6
|
||||||
|
#define kFitch 7
|
||||||
|
#define kPearson 8
|
||||||
|
#define kZuker 9
|
||||||
|
#define kOlsen 10
|
||||||
|
#define kPhylip2 11
|
||||||
|
#define kPhylip4 12
|
||||||
|
#define kPhylip3 kPhylip4
|
||||||
|
#define kPhylip kPhylip4
|
||||||
|
#define kPlain 13 /* keep this at #13 */
|
||||||
|
#define kPIR 14
|
||||||
|
#define kMSF 15
|
||||||
|
#define kASN1 16
|
||||||
|
#define kPAUP 17
|
||||||
|
#define kPretty 18
|
||||||
|
|
||||||
|
#define kMaxFormat 18
|
||||||
|
#define kMinFormat 1
|
||||||
|
#define kNoformat -1 /* format not tested */
|
||||||
|
#define kUnknown 0 /* format not determinable */
|
||||||
|
|
||||||
|
/* subsidiary types */
|
||||||
|
#define kASNseqentry 51
|
||||||
|
#define kASNseqset 52
|
||||||
|
|
||||||
|
#define kPhylipInterleave 61
|
||||||
|
#define kPhylipSequential 62
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
boolean isactive, baseonlynum;
|
||||||
|
boolean numright, numleft, numtop, numbot;
|
||||||
|
boolean nameright, nameleft, nametop;
|
||||||
|
boolean noleaves, domatch, degap;
|
||||||
|
char matchchar, gapchar;
|
||||||
|
short numline, atseq;
|
||||||
|
short namewidth, numwidth;
|
||||||
|
short interline, spacer, seqwidth, tab;
|
||||||
|
} prettyopts;
|
||||||
|
|
||||||
|
#define gPrettyInit(p) \
|
||||||
|
{ \
|
||||||
|
p.isactive = false; \
|
||||||
|
p.baseonlynum = true; \
|
||||||
|
p.numline = p.atseq = 0; \
|
||||||
|
p.numright = p.numleft = p.numtop = p.numbot = false; \
|
||||||
|
p.nameright = p.nameleft = p.nametop = false; \
|
||||||
|
p.noleaves = p.domatch = p.degap = false; \
|
||||||
|
p.matchchar = '.'; \
|
||||||
|
p.gapchar = '-'; \
|
||||||
|
p.namewidth = 8; \
|
||||||
|
p.numwidth = 5; \
|
||||||
|
p.interline = 1; \
|
||||||
|
p.spacer = 10; \
|
||||||
|
p.seqwidth = 50; \
|
||||||
|
p.tab = 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef UREADSEQ_G
|
||||||
|
prettyopts gPretty;
|
||||||
|
#else
|
||||||
|
extern prettyopts gPretty;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern short seqFileFormat(const char *filename, long *skiplines, short *error);
|
||||||
|
extern short seqFileFormatFp(FILE *fseq, long *skiplines, short *error);
|
||||||
|
|
||||||
|
extern char *listSeqs(const char *filename, const long skiplines,
|
||||||
|
const short format, short *nseq, short *error);
|
||||||
|
|
||||||
|
extern char *readSeq(const short whichEntry, const char *filename,
|
||||||
|
const long skiplines, const short format, long *seqlen,
|
||||||
|
short *nseq, short *error, char *seqid);
|
||||||
|
|
||||||
|
extern char *readSeqFp(const short whichEntry_, FILE *fp_,
|
||||||
|
const long skiplines_, const short format_,
|
||||||
|
long *seqlen_, short *nseq_, short *error_,
|
||||||
|
char *seqid_);
|
||||||
|
|
||||||
|
extern short writeSeq(FILE *outf, const char *seq, const long seqlen,
|
||||||
|
const short outform, const char *seqid);
|
||||||
|
|
||||||
|
extern unsigned long CRC32checksum(const char *seq, const long seqlen,
|
||||||
|
unsigned long *checktotal);
|
||||||
|
extern unsigned long GCGchecksum(const char *seq, const long seqlen,
|
||||||
|
unsigned long *checktotal);
|
||||||
|
#ifdef SMALLCHECKSUM
|
||||||
|
#define seqchecksum GCGchecksum
|
||||||
|
#else
|
||||||
|
#define seqchecksum CRC32checksum
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern short getseqtype(const char *seq, const long seqlen);
|
||||||
|
extern char *compressSeq(const char gapc, const char *seq, const long seqlen,
|
||||||
|
long *newlen);
|
||||||
|
|
||||||
|
#ifdef NCBI
|
||||||
|
|
||||||
|
extern char *listASNSeqs(const char *filename, const long skiplines,
|
||||||
|
const short format, short *nseq, short *error);
|
||||||
|
|
||||||
|
extern char *readASNSeq(const short whichEntry, const char *filename,
|
||||||
|
const long skiplines, const short format, long *seqlen,
|
||||||
|
short *nseq, short *error, char **seqid);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* patches for some missing string.h stuff */
|
||||||
|
extern int Strcasecmp(const char *a, const char *b);
|
||||||
|
extern int Strncasecmp(const char *a, const char *b, long maxn);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*UREADSEQ_H*/
|
||||||
|
|
Loading…
Reference in a new issue