📄 stream.c
字号:
/******************************************************************************** Copyright 2006 National ASIC Center, All right Reserved** FILE NAME: stream.c* PROGRAMMER: ming.c* Date of Creation: 2006/08/8** DESCRIPTION: * * NOTE: ** FUNCTIONS LIST:* -----------------------------------------------------------------------------** -----------------------------------------------------------------------------** MODIFICATION HISTORY* LastModify 2006/09/18******************************************************************************/#include "mingui.h"
//---------------------------------------------------------------------------
STREAM *OpenMemStream(const BYTE *pBuf, UINT bufsize)
{ if(pBuf && bufsize>0)
{ STREAM *stream=(STREAM *)GetMem(sizeof(STREAM));
if(stream)
{ stream->Handle=(HANDLE)pBuf;
stream->MemPos=0;
stream->FromMem=true;
stream->Length=bufsize;
return stream;
}
}
return NULL;
}
//---------------------------------------------------------------------------
STREAM *OpenFileStream(const char *file_path)
{ FILE *f=fopen(file_path,"r+b");/*Open an existing file for reading and writing.*/
if(f)
{ STREAM *stream=(STREAM *)GetMem(sizeof(STREAM));
if(stream)
{ stream->Handle=(HANDLE)f;
stream->FromMem=false;
stream->Length=0;
return stream;
}
fclose(f);
}
return NULL;
}
//---------------------------------------------------------------------------
void CloseStream(STREAM *stream)
{ if(stream && stream->Handle)
{ if(!stream->FromMem)
{ fclose((FILE *)stream->Handle);
}
stream->Handle=0;
FreeMem(stream);
}
}
//---------------------------------------------------------------------------
void StreamSeek(STREAM *stream,long offset,int whence)
{ if(stream && stream->Handle)
{ if(!stream->FromMem)
{ fseek( (FILE *)stream->Handle,offset, whence);
}
else
{ if(whence == SEEK_SET) /*from buffer beginning*/
{ stream->MemPos=(offset>=0)?offset:0;
}
else if(whence == SEEK_CUR)
{ stream->MemPos+=offset;
if(stream->MemPos<0)stream->MemPos=0;
}
else
{ stream->MemPos=stream->Length-1-offset;
if(stream->MemPos<0)stream->MemPos=0;
}
}
}
}
//---------------------------------------------------------------------------
int StreamGetByte(STREAM *stream)
{ if(stream->Handle)
{ if(!stream->FromMem)
{ return fgetc( (FILE *)stream->Handle );
}
else if(stream->MemPos<stream->Length)
{ return *((BYTE *)stream->Handle + stream->MemPos++);
}
}
return EOF;
}
//---------------------------------------------------------------------------
int StreamRead(void *ptr, int size, STREAM *stream)
{ if(stream->Handle && size>0)
{
if(!stream->FromMem)
{ return fread(ptr,1,size, (FILE *)stream->Handle);
}
else
{ int readpos=stream->MemPos;
if(readpos<stream->Length)
{ stream->MemPos += size;
if(stream->MemPos>= stream->Length)
size= stream->Length-readpos;
memcpy(ptr,(BYTE *)stream->Handle+readpos,size);
return size;
}
}
}
return 0;
}//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -