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

📄 io.c

📁 about sound recognition.i want to downlod
💻 C
字号:
#ifdef ENABLE_LARGEFILE#define _LARGEFILE_SOURCE#define _LARGEFILE64_SOURCE#define _FILE_OFFSET_BITS 64#endif#include "io.h"#include "libs.h"#include "misc.h"#include <ctype.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#define IS_SPACE(x)  (isspace((int)(x))&&((x)&0x80)==0)#ifdef HAVE_ZLIBFILEHANDLE z_open(const char *file, const char* mode){    FILEHANDLE f = New(struct filehandle);    f->f = gzopen(file,mode);    f->ugbuf_ptr = 0;    return f;}void z_close(FILEHANDLE f){    gzclose(f->f);    Free(f);}void z_printf(FILEHANDLE f, char *fmt,...){    va_list *ap;    va_start(ap,fmt);    gzprintf(f->f,fmt,ap);    va_end(ap);}FILEHANDLE FILEIO_stdin(){    FILEHANDLE h = New(struct filehandle);    h->f = gzdopen(fileno(stdin),"r");    h->ugbuf_ptr = 0;    return h;}FILEHANDLE FILEIO_stdout(){    FILEHANDLE h = New(struct filehandle);    h->f = gzdopen(fileno(stdout),"w");    h->ugbuf_ptr = 0;    return h;}FILEHANDLE FILEIO_stderr(){    FILEHANDLE h = New(struct filehandle);    h->f = gzdopen(fileno(stdout),"w");    h->ugbuf_ptr = 0;    return h;}#else /* not HAVE_ZLIB */static char tmpbuf[256];FILEHANDLE z_open(char *file, char *mode){    int len = strlen(file);    int i;    FILEHANDLE fh = New(struct filehandle);    char buf[1024];    fh->flag = 0;    if (len > 4 && strcmp(file+len-3,".gz") == 0) {	fh->flag |= FH_PIPE;	switch (*mode) {	case 'r':	    sprintf(tmpbuf,"gzip -dc %s",file);	    fh->flag |= FH_READ;	    break;	case 'w':	    sprintf(tmpbuf,"gzip > %s",file);	    fh->flag |= FH_WRITE;	    break;	case 'a':	    sprintf(tmpbuf,"gzip >> %s",file);	    fh->flag |= FH_APPEND;	    break;	default:	    fprintf(stderr,"z_open ERROR: %s: unknown mode\n",mode);	    exit(1);	}	fh->f = popen(tmpbuf,mode);	if (fh->f == NULL)	    goto error;	fh->flag |= FH_OPEN;	return fh;    }    for (i = len-1; i >= 0; i--)	if (!IS_SPACE(file[i]))	    break;    if (file[i] == '|') {	/* PIPE */	fh->flag |= FH_PIPE;	strcpy(buf,file);	buf[i] = '\0';	fh->f = popen(buf,mode);    }    else {	fh->flag |= FH_FILE;	fh->f = fopen(file,mode);    }    fh->flag |= FH_OPEN;    switch (*mode) {    case 'r':	fh->flag |= FH_READ;	break;    case 'w':	fh->flag |= FH_WRITE;	break;    case 'a':	fh->flag |= FH_APPEND;	break;    default:	fprintf(stderr,"z_open ERROR: %s: unknown mode\n",mode);	exit(1);    }    if (fh->f == NULL)	goto error;    return fh; error:    fprintf(stderr,"z_open ERROR: Can't open %s for %s\n",file,mode);    exit(1);}void z_close(FILEHANDLE fh){    if (!(fh->flag & FH_OPEN))	return;    if (fh->flag & FH_PIPE) 	pclose(fh->f);    else	fclose(fh->f);    Free(fh);}FILEHANDLE FILEIO_stdin(){    FILEHANDLE h = New(struct filehandle);    h->flag = FH_FILE | FH_READ;    h->f = stdin;    return h;}FILEHANDLE FILEIO_stdout(){    FILEHANDLE h = New(struct filehandle);    h->flag = FH_FILE | FH_WRITE;    h->f = stdout;    return h;}FILEHANDLE FILEIO_stderr(){    FILEHANDLE h = New(struct filehandle);    h->flag = FH_FILE | FH_WRITE;    h->f = stdout;    return h;}void z_printf(FILEHANDLE f, char *fmt,...){    va_list ap;    va_start(ap,fmt);    vfprintf(f->f,fmt,ap);    va_end(ap);}#endif /* not HAVE_ZLIB */#define BUFSIZE 1024static char geti_buf[BUFSIZE];#define ST_REJECT 255#define ST_SKIP   128#include "int_autom.c"#include "float_autom.c"/* common subroutines */static int z_getbuf(FILEHANDLE f, unsigned char **autom){    int i = 0;    int c;    int status = 0;    unsigned char *a;    while (1) {	c = z_getc(f);	if (c == EOF || z_eof(f) || c < 0) {	    if (i > 0) {		geti_buf[i] = '\0';		return 0;	    }	    return EOF;	}	a = autom[status];	if (a[c] == ST_REJECT) {	    geti_buf[i] = '\0';	    z_ungetc(c,f);	    return 0;	}	else {	    if ((a[c] & ST_SKIP) == 0) {		geti_buf[i++] = c;		status = a[c];	    }	    else		status = (a[c] & ~ST_SKIP);	}    }}int z_getint(FILEHANDLE f, int *iptr){    int r;    if ((r = z_getbuf(f, int_autom)) != 0) 	return r;    *iptr = atoi(geti_buf);    return 0;}int z_getlong(FILEHANDLE f, int4 *iptr){    int r;    if ((r = z_getbuf(f, int_autom)) != 0) 	return r;    *iptr = atol(geti_buf);    return 0;}int z_getulong(FILEHANDLE f, uint4 *iptr){    int r;    if ((r = z_getbuf(f, int_autom)) != 0) 	return r;    *iptr = strtoul(geti_buf,NULL,10);    return 0;}int z_getushort(FILEHANDLE f, unsigned short *iptr){    int r;    if ((r = z_getbuf(f, int_autom)) != 0)	return r;    *iptr = (unsigned short)atoi(geti_buf);    return 0;}int z_getfloat(FILEHANDLE f, float *fptr){    int r;    if ((r = z_getbuf(f, float_autom)) != 0) 	return r;    *fptr = atof(geti_buf);    return 0;}int z_getdouble(FILEHANDLE f, double *fptr){    int r;    if ((r = z_getbuf(f, float_autom)) != 0) 	return r;    *fptr = atof(geti_buf);    return 0;}int z_getstr(FILEHANDLE f, char *buf, int limit){    int i = 0;    char c;    if (limit == 0)	return EOF;    /* skip spaces */    while (1) {	c = z_getc(f);	if (!IS_SPACE(c)) {	    if (!z_eof(f))		buf[i++] = c;	    break;	}    }    while (1) {	c = z_getc(f);	if (c == EOF || z_eof(f)) {	    if (i > 0) {		buf[i] = '\0';		return 0;	    }	    return EOF;	}	if (!IS_SPACE(c)) {	    buf[i++] = c;	    if (i == limit-1) {		/* buffer overflow */		buf[i] = '\0';		return 0;	    }	}	else {	    buf[i] = '\0';	    z_ungetc(c,f);	    return 0;	}    }}

⌨️ 快捷键说明

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