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

📄 stream.c

📁 MinGUI 可视化程序代码
💻 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 + -