add oversampler
This commit is contained in:
262
oversampling/WDL/eel2/eel_files.h
Normal file
262
oversampling/WDL/eel2/eel_files.h
Normal file
@@ -0,0 +1,262 @@
|
||||
#ifndef __EEL_FILES_H__
|
||||
#define __EEL_FILES_H__
|
||||
|
||||
// should include eel_strings.h before this, probably
|
||||
//#define EEL_FILE_OPEN(fn,mode) ((instance)opaque)->OpenFile(fn,mode)
|
||||
//#define EEL_FILE_GETFP(fp) ((instance)opaque)->GetFileFP(fp)
|
||||
//#define EEL_FILE_CLOSE(fpindex) ((instance)opaque)->CloseFile(fpindex)
|
||||
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fopen(void *opaque, EEL_F *fn_index, EEL_F *mode_index)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
const char *fn = EEL_STRING_GET_FOR_INDEX(*fn_index,NULL);
|
||||
const char *mode = EEL_STRING_GET_FOR_INDEX(*mode_index,NULL);
|
||||
if (!fn || !mode) return 0;
|
||||
return (EEL_F) EEL_FILE_OPEN(fn,mode);
|
||||
}
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fclose(void *opaque, EEL_F *fpp)
|
||||
{
|
||||
EEL_F ret=EEL_FILE_CLOSE((int)*fpp);
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
if (ret < 0) EEL_STRING_DEBUGOUT("fclose(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fgetc(void *opaque, EEL_F *fpp)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (fp) return (EEL_F)fgetc(fp);
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fgetc(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_ftell(void *opaque, EEL_F *fpp)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (fp) return (EEL_F)ftell(fp);
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("ftell(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
return -1.0;
|
||||
}
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fflush(void *opaque, EEL_F *fpp)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (fp) { fflush(fp); return 0.0; }
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fflush(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_feof(void *opaque, EEL_F *fpp)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (fp) return feof(fp) ? 1.0 : 0.0;
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("feof(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
return -1.0;
|
||||
}
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fseek(void *opaque, EEL_F *fpp, EEL_F *offset, EEL_F *wh)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (fp) return fseek(fp, (int) *offset, *wh<0 ? SEEK_SET : *wh > 0 ? SEEK_END : SEEK_CUR);
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fseek(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
return -1.0;
|
||||
}
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fgets(void *opaque, EEL_F *fpp, EEL_F *strOut)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
EEL_STRING_STORAGECLASS *wr=NULL;
|
||||
EEL_STRING_GET_FOR_WRITE(*strOut, &wr);
|
||||
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (!fp)
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fgets(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
if (wr) wr->Set("");
|
||||
return 0.0;
|
||||
}
|
||||
char buf[16384];
|
||||
buf[0]=0;
|
||||
fgets(buf,sizeof(buf),fp);
|
||||
if (wr)
|
||||
{
|
||||
wr->Set(buf);
|
||||
return (EEL_F)wr->GetLength();
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fgets: bad destination specifier passed %f, throwing away %d bytes",*strOut, (int)strlen(buf));
|
||||
#endif
|
||||
return (int)strlen(buf);
|
||||
}
|
||||
}
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fread(void *opaque, EEL_F *fpp, EEL_F *strOut, EEL_F *flen)
|
||||
{
|
||||
int use_len = (int) *flen;
|
||||
if (use_len < 1) return 0.0;
|
||||
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
EEL_STRING_STORAGECLASS *wr=NULL;
|
||||
EEL_STRING_GET_FOR_WRITE(*strOut, &wr);
|
||||
if (!wr)
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fread: bad destination specifier passed %f, not reading %d bytes",*strOut, use_len);
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (!fp)
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fread(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
if (wr) wr->Set("");
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
wr->SetLen(use_len);
|
||||
if (wr->GetLength() != use_len)
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fread: error allocating storage for read of %d bytes", use_len);
|
||||
#endif
|
||||
return -1.0;
|
||||
}
|
||||
use_len = (int)fread((char *)wr->Get(),1,use_len,fp);
|
||||
wr->SetLen(use_len > 0 ? use_len : 0, true);
|
||||
return (EEL_F) use_len;
|
||||
}
|
||||
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fwrite(void *opaque, EEL_F *fpp, EEL_F *strOut, EEL_F *flen)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
int use_len = (int) *flen;
|
||||
|
||||
EEL_STRING_STORAGECLASS *wr=NULL;
|
||||
const char *str=EEL_STRING_GET_FOR_INDEX(*strOut, &wr);
|
||||
if (!wr && !str)
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fwrite: bad source specifier passed %f, not writing %d bytes",*strOut, use_len);
|
||||
#endif
|
||||
return -1.0;
|
||||
}
|
||||
if (!wr)
|
||||
{
|
||||
const int ssl = (int)strlen(str);
|
||||
if (use_len < 1 || use_len > ssl) use_len = ssl;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (use_len < 1 || use_len > wr->GetLength()) use_len = wr->GetLength();
|
||||
}
|
||||
|
||||
if (use_len < 1) return 0.0;
|
||||
|
||||
FILE *fp = EEL_FILE_GETFP((int)*fpp);
|
||||
if (!fp)
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fwrite(): file handle %f not valid",*fpp);
|
||||
#endif
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
return (EEL_F) fwrite(str,1,use_len,fp);
|
||||
}
|
||||
|
||||
static EEL_F NSEEL_CGEN_CALL _eel_fprintf(void *opaque, INT_PTR nparam, EEL_F **parm)
|
||||
{
|
||||
if (opaque && nparam > 1)
|
||||
{
|
||||
EEL_STRING_MUTEXLOCK_SCOPE
|
||||
FILE *fp = EEL_FILE_GETFP((int)*(parm[0]));
|
||||
if (!fp)
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fprintf(): file handle %f not valid",parm[0][0]);
|
||||
#endif
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
EEL_STRING_STORAGECLASS *wr_src=NULL;
|
||||
const char *fmt = EEL_STRING_GET_FOR_INDEX(*(parm[1]),&wr_src);
|
||||
if (fmt)
|
||||
{
|
||||
char buf[16384];
|
||||
const int len = eel_format_strings(opaque,fmt,wr_src?(fmt+wr_src->GetLength()) : NULL, buf,(int)sizeof(buf),(int)nparam-2,parm+2);
|
||||
|
||||
if (len >= 0)
|
||||
{
|
||||
return (EEL_F) fwrite(buf,1,len,fp);
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fprintf: bad format string %s",fmt);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef EEL_STRING_DEBUGOUT
|
||||
EEL_STRING_DEBUGOUT("fprintf: bad format specifier passed %f",*(parm[1]));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
void EEL_file_register()
|
||||
{
|
||||
NSEEL_addfunc_retval("fopen",2,NSEEL_PProc_THIS,&_eel_fopen);
|
||||
|
||||
NSEEL_addfunc_retval("fread",3,NSEEL_PProc_THIS,&_eel_fread);
|
||||
NSEEL_addfunc_retval("fgets",2,NSEEL_PProc_THIS,&_eel_fgets);
|
||||
NSEEL_addfunc_retval("fgetc",1,NSEEL_PProc_THIS,&_eel_fgetc);
|
||||
|
||||
NSEEL_addfunc_retval("fwrite",3,NSEEL_PProc_THIS,&_eel_fwrite);
|
||||
NSEEL_addfunc_varparm("fprintf",2,NSEEL_PProc_THIS,&_eel_fprintf);
|
||||
|
||||
NSEEL_addfunc_retval("fseek",3,NSEEL_PProc_THIS,&_eel_fseek);
|
||||
NSEEL_addfunc_retval("ftell",1,NSEEL_PProc_THIS,&_eel_ftell);
|
||||
NSEEL_addfunc_retval("feof",1,NSEEL_PProc_THIS,&_eel_feof);
|
||||
NSEEL_addfunc_retval("fflush",1,NSEEL_PProc_THIS,&_eel_fflush);
|
||||
NSEEL_addfunc_retval("fclose",1,NSEEL_PProc_THIS,&_eel_fclose);
|
||||
}
|
||||
|
||||
#ifdef EEL_WANT_DOCUMENTATION
|
||||
static const char *eel_file_function_reference =
|
||||
"fopen\t\"fn\",\"mode\"\tOpens a file \"fn\" with mode \"mode\". For read, use \"r\" or \"rb\", write \"w\" or \"wb\". Returns a positive integer on success.\0"
|
||||
"fclose\tfp\tCloses a file previously opened with fopen().\0"
|
||||
"fread\tfp,#str,length\tReads from file fp into #str, up to length bytes. Returns actual length read, or negative if error.\0"
|
||||
"fgets\tfp,#str\tReads a line from file fp into #str. Returns length of #str read.\0"
|
||||
"fgetc\tfp\tReads a character from file fp, returns -1 if EOF.\0"
|
||||
"fwrite\tfp,#str,len\tWrites up to len characters of #str to file fp. If len is less than 1, the full contents of #str will be written. Returns the number of bytes written to file.\0"
|
||||
"fprintf\tfp,\"format\"[,...]\tFormats a string and writes it to file fp. For more information on format specifiers, see sprintf(). Returns bytes written to file.\0"
|
||||
"fseek\tfp,offset,whence\tSeeks file fp, offset bytes from whence reference. Whence negative specifies start of file, positive whence specifies end of file, and zero whence specifies current file position.\0"
|
||||
"ftell\tfp\tRetunrs the current file position.\0"
|
||||
"feof\tfp\tReturns nonzero if the file fp is at the end of file.\0"
|
||||
"fflush\tfp\tIf file fp is open for writing, flushes out any buffered data to disk.\0"
|
||||
;
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user