📄 input.cpp
字号:
#include <stdio.h>
#include "Input.h"
int InitStream(StrmType *strm, char *fileName)
{
strm->fp = fopen(fileName, "wb");
if (strm->fp == NULL)
return -1; /*ERR_FILE_CANT_OPEN;*/
fseek(strm->fp, 0, SEEK_SET);
strm->buffer = 0;
strm->ptr = 0;
return 0;
}
int WriteDirect(StrmType *strm, BYTE *buffer, DWORD length)
{
if (strm->ptr != 0)
return -1; //ERR_STREAM_NOT_EMPTY
fwrite(buffer, 1, length, strm->fp);
return 0;
}
void WriteStream(StrmType *strm, DWORD code, BYTE length, int flag)
{
int i, k, len = length;
BYTE fillbyte = 0;
while (len > 0)
{
while (strm->ptr == 32)
{
for (i=3; i>=0; i--)
{
fwrite(((BYTE *)&(strm->buffer))+i, sizeof(BYTE), 1, strm->fp);
strm->ptr -= 8;
if (flag)
{
if (*(((BYTE *)&(strm->buffer))+i) == 0xff)
fwrite(&fillbyte, sizeof(BYTE), 1, strm->fp);
}
}
strm->buffer = 0;
}
if (len <= 32-strm->ptr)
k = len;
else
k = 32-strm->ptr;
strm->buffer <<= k;
strm->buffer |= (code>>(len-k))&((1<<k)-1);
strm->ptr += k;
len -= k;
}
}
void FlushStream(StrmType *strm, int flag)
{
int i;
BYTE fillbyte = 0;
while (strm->ptr%8 != 0)
WriteStream(strm, 1, 1, 1);
for (i=(strm->ptr)/8-1; i>=0; i--)
{
fwrite(((BYTE *)&(strm->buffer))+i, sizeof(BYTE), 1, strm->fp);
strm->ptr -= 8;
if (flag)
{
if (*(((BYTE *)&(strm->buffer))+i) == 0xff)
fwrite(&fillbyte, sizeof(BYTE), 1, strm->fp);
}
}
strm->buffer = 0;
}
void FreeStream(StrmType *strm, int flag)
{
if (strm->ptr > 0)
FlushStream(strm, flag);
fclose(strm->fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -