⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wfdbf.c

📁 ecg wave detection program for unix / linux
💻 C
📖 第 1 页 / 共 2 页
字号:
/* file: wfdbf.c	G. Moody	 23 August 1995			Last revised:     11 June 2008		wfdblib 10.4.7_______________________________________________________________________________wfdbf: Fortran wrappers for the WFDB library functionsCopyright (C) 1995-2008 George B. MoodyThis library is free software; you can redistribute it and/or modify it underthe terms of the GNU Library General Public License as published by the FreeSoftware Foundation; either version 2 of the License, or (at your option) anylater version.This library is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR APARTICULAR PURPOSE.  See the GNU Library General Public License for moredetails.You should have received a copy of the GNU Library General Public License alongwith this library; if not, write to the Free Software Foundation, Inc., 59Temple Place - Suite 330, Boston, MA 02111-1307, USA.You may contact the author by e-mail (george@mit.edu) or postal mail(MIT Room E25-505A, Cambridge, MA 02139 USA).  For updates to this software,please visit PhysioNet (http://www.physionet.org/)._______________________________________________________________________________General notes on using the wrapper functionsWrappers are provided below for all of the WFDB library functions exceptsetmsheader.  See the sample program (example.f, in this directory)to see how the wrappers are used.Include the statements	implicit integer(a-z)	real aduphys, getbasecount, getcfreq, sampfreq(or the equivalent for your dialect of Fortran) in your Fortran program toensure that these functions (except for the four listed in the secondstatement) will be understood to return integer*4 values (equivalent to C`long' values).Note that Fortran arrays are 1-based, and C arrays are 0-based.  Signal andannotator numbers passed to these functions must be 0-based.If you are using a UNIX Fortran compiler, or a Fortran-to-C translator, notethat the trailing `_' in these function names should *not* appear in yourFortran program;  thus, for example, `annopen_' should be invoked as`annopen'.  UNIX Fortran compilers and translators append a `_' to thenames of all external symbols referenced in Fortran source files whengenerating object files.  Thus the linker can recognize that annopen_(defined below) is the function required by a Fortran program that invokes`annopen';  if the Fortran program were to invoke `annopen_', the linkerwould search (unsuccessfully) for a function named `annopen__'.If you are using a Fortran compiler that does not follow this convention,you are on your own.*/#include <stdio.h>#include <wfdb/wfdb.h>#include <wfdb/ecgmap.h>#ifndef BSD# include <string.h>#else		/* for Berkeley UNIX only */# include <strings.h>#endif/* If a WFDB_Sample is the same size as a long (true except for MS-DOS PCs and   a few less common systems), considerable efficiency gains are possible.   Otherwise, define REPACK below to compile the code needed to repack arrays   of DB_Samples into long arrays. *//* #define REPACK *//* If Fortran strings are terminated by spaces rather than by null characters,   define FIXSTRINGS. *//* #define FIXSTRINGS */#ifdef FIXSTRINGS/* This function leaks memory!  Ideally we would like to free(t) once *t is   no longer needed.  If this is a concern, we might push all values assigned   to t onto a stack and free them all on exit.  In practice we are usually   dealing with a small number of short strings. */char *fcstring(char *s)	/* change final space to null */{    char *p = s, *t;    while (*s && *s != ' ')	s++;    t = calloc(1, s-p+1);    if (s > p) strncpy(t, p, s-p);    return (t);}char *cfstring(char *s)	/* change final null to space */{    char *p = s;    while (*s)	s++;    *s = ' ';    return (p);}#else#define fcstring(s)	(s)#define cfstring(s)	(s)#endif/* Static data shared by the wrapper functions.  Since Fortran does not support   composite data types (such as C `struct' types), these are defined here, and   functions for setting and retrieving data from these structures are provided   below. */static WFDB_Siginfo sinfo[WFDB_MAXSIG];static WFDB_Calinfo cinfo;static WFDB_Anninfo ainfo[WFDB_MAXANN*2];/* The functions setanninfo_, setsiginfo_, and getsiginfo_ do not have direct   equivalents in the WFDB library;  they are provided in order to permit   Fortran programs to read and write data structures passed to and from   several of the WFDB library functions.  Since the contents of these   structures are directly accessible by C programs, these functions are not   needed in the C library.*/long setanninfo_(long int *a, char *name, long int *stat){    if (0 <= *a && *a < WFDB_MAXANN*2) {	ainfo[*a].name = fcstring(name);	ainfo[*a].stat = *stat;	return (0L);    }    else	return (-1L);}long getsiginfo_(long int *s, char *fname, char *desc, char *units, double *gain, long int *initval, long int *group, long int *fmt, long int *spf, long int *bsize, long int *adcres, long int *adczero, long int *baseline, long int *nsamp, long int *cksum){    if (0 <= *s && *s < WFDB_MAXSIG) {	fname = sinfo[*s].fname;	desc = sinfo[*s].desc;	units = sinfo[*s].units;	*gain = sinfo[*s].gain;	*initval = sinfo[*s].initval;	*group = sinfo[*s].group;	*fmt = sinfo[*s].fmt;	*spf = sinfo[*s].spf;	*bsize = sinfo[*s].bsize;	*adcres = sinfo[*s].adcres;	*adczero = sinfo[*s].adczero;	*baseline = sinfo[*s].baseline;	*nsamp = sinfo[*s].nsamp;	*cksum = sinfo[*s].cksum;	return (0L);    }    else	return (-1L);}long setsiginfo_(long int *s, char *fname, char *desc, char *units, double *gain, long int *initval, long int *group, long int *fmt, long int *spf, long int *bsize, long int *adcres, long int *adczero, long int *baseline, long int *nsamp, long int *cksum){    if (0 <= *s && *s < WFDB_MAXSIG) {	sinfo[*s].fname = fname;	sinfo[*s].desc = desc;	sinfo[*s].units = units;	sinfo[*s].gain = *gain;	sinfo[*s].initval = *initval;	sinfo[*s].group = *group;	sinfo[*s].fmt = *fmt;	sinfo[*s].spf = *spf;	sinfo[*s].bsize = *bsize;	sinfo[*s].adcres = *adcres;	sinfo[*s].adczero = *adczero;	sinfo[*s].baseline = *baseline;	sinfo[*s].nsamp = *nsamp;	sinfo[*s].cksum = *cksum;	return (0L);    }    else	return (-1L);}/* Before using annopen_, set up the annotation information structures using   setanninfo_. */long annopen_(char *record, long int *nann){    return (annopen(fcstring(record), ainfo, (unsigned int)(*nann)));}/* After using isigopen_ or osigopen_, use getsiginfo_ to obtain the contents   of the signal information structures if necessary. */long isigopen_(char *record, long int *nsig){    return (isigopen(fcstring(record), sinfo, (unsigned int)(*nsig)));}long osigopen_(char *record, long int *nsig){    return (osigopen(fcstring(record), sinfo, (unsigned int)(*nsig)));}/* Before using osigfopen_, use setsiginfo_ to set the contents of the signal   information structures. */long osigfopen_(long int *nsig){    return (osigfopen(sinfo, (unsigned int)(*nsig)));}/* Before using wfdbinit_, use setanninfo_ and setsiginfo_ to set the contents   of the annotation and signal information structures. */long wfdbinit_(char *record, long int *nann, long int *nsig){    return (wfdbinit(fcstring(record), ainfo, (unsigned int)(*nann),		     sinfo, (unsigned int)(*nsig)));}long setgvmode_(long int *mode){    setgvmode((int)(*mode));    return (0L);}long getspf_(long int *dummy){    return (getspf());}long setifreq_(double *freq){    return (setifreq(*freq));}double getifreq_(long int *dummy){    return (getifreq());}long setafreq_(double *freq){    setafreq(*freq);    return (0L);}double getafreq_(long int *dummy){    return (getafreq());}long getvec_(long int *long_vector){#ifndef REPACK    return (getvec((WFDB_Sample *)long_vector));#else    WFDB_Sample v[WFDB_MAXSIG];    int i, j;    i = getvec(v);    for (j = 0; j < i; j++)	long_vector[i] = v[i];    return (i);#endif}long getframe_(long int *long_vector){#ifndef REPACK    return (getframe((WFDB_Sample *)long_vector));#else    WFDB_Sample v[WFDB_MAXSIG*WFDB_MAXSPF];    int i, j, k;    i = getframe(v);    for (j = 0; j < i; j += k)	for (k = 0; k < sinfo[i].spf; k++)	    long_vector[j+k] = v[j+k];    return (i);#endif}long putvec_(long int *long_vector){#ifndef REPACK    return (putvec((WFDB_Sample *)long_vector));#else    WFDB_Sample v[WFDB_MAXSIG*WFDB_MAXSPF];    int i;    for (i = 0; i < WFDB_MAXSIG*WFDB_MAXSPF; i++)	v[i] = long_vector[i];    return (putvec(v));#endif}long getann_(long int *annotator, long int *time, long int *anntyp, long int *subtyp, long int *chan, long int *num, char *aux){    static WFDB_Annotation iann;    int i, j;    i = getann((WFDB_Annotator)(*annotator), &iann);    if (i == 0) {	*time = iann.time;	*anntyp = iann.anntyp;	*subtyp = iann.subtyp;	*chan = iann.chan;	*num = iann.num;	aux = iann.aux;    }    return (i);}long ungetann_(long int *annotator, long int *time, long int *anntyp, long int *subtyp, long int *chan, long int *num, char *aux){    static WFDB_Annotation oann;    int i, j;    oann.time = *time;    oann.anntyp = *anntyp;    oann.subtyp = *subtyp;    oann.chan = *chan;    oann.num = *num;    oann.aux = aux;    return (ungetann((WFDB_Annotator)(*annotator), &oann));}long putann_(long int *annotator, long int *time, long int *anntyp, long int *subtyp, long int *chan, long int *num, char *aux){    static WFDB_Annotation oann;    int i, j;    char *p, *q = NULL;    oann.time = *time;    oann.anntyp = *anntyp;    oann.subtyp = *subtyp;    oann.chan = *chan;    oann.num = *num;    if (aux) {	p = fcstring(aux);	q = calloc(strlen(p)+2, 1);	*q = strlen(p);	strcpy(q+1, p);    }    oann.aux = q;    i = putann((WFDB_Annotator)(*annotator), &oann);    if (q) free(q);    return (i);}long isigsettime_(long int *time){    return (isigsettime((WFDB_Time)(*time)));}long isgsettime_(long int *group, long int *time){    return (isgsettime((WFDB_Group)(*group), (WFDB_Time)(*time)));}long iannsettime_(long int *time){    return (iannsettime((WFDB_Time)(*time)));}long ecgstr_(long int *code, char *string){    strcpy(string, ecgstr((int)(*code)));    cfstring(string);    return (0L);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -