📄 stream.c
字号:
#define STREAM_GLOBAL 1
#include "includes.h"
void Init_StreamMem(void)
{
uchar i;
for(i= 0; i<MAX_STREAM_NUM; i++)
{
stream[i].status = _FREE;
stream[i].start = NULL;
stream[i].in = NULL;
stream[i].size = 0;
stream[i].len = 0;
}
}
uchar Find_FreeStream(void)
{
uchar i;
for(i=0; i<MAX_STREAM_NUM; i++)
{
if(stream[i].status==_FREE){
return i;
}
}
return 0xff;
}
STREAM_STRUCT *Create_Stream(uchar *buf ,uint size)
{
uchar id;
id = Find_FreeStream();
if(id==0xff){
return NULL;
}
else{
stream[id].start = buf;
stream[id].in = buf;
stream[id].size = size;
stream[id].status = _USE;
stream[id].len = 0;
}
return stream+id;
}
void Init_Stream(STREAM_STRUCT *stream)
{
stream->in = stream->start;
stream->len = 0;
}
uchar Write_Absbyte_Stream(STREAM_STRUCT *stream,uint num,uchar ch)
{
if(stream->status==_FREE) return FALSE;
if(num>=stream->size) return FALSE;
stream->start[num] = ch;
return TRUE;
}
uchar Write_Absword_Stream(STREAM_STRUCT *stream,uint num ,uint ch)
{
if(stream->status==_FREE) return FALSE;
if((num+1)>=stream->size) return FALSE;
stream->start[num] = ch&0x00ff;
stream->start[num+1] = (ch>>8)&0x00ff;
return TRUE;
}
uchar Write_Byte_Stream(STREAM_STRUCT *stream,uchar ch)
{
if(stream->status==_FREE) return FALSE;
if((stream->len+1)>stream->size) return FALSE;
*(stream->in)++ = ch;
(stream->len)++;
return TRUE;
}
uchar Num2Ascii(uchar ch)
{
if(ch<10)
{
return ch+0x30;
}
else
{
return ch+'A'-0x0a;
}
}
uchar Write_Ascii_Stream(STREAM_STRUCT *stream,uchar far *ptr,uint len)
{
uint i;
if(stream->status==_FREE) return FALSE;
if((stream->len+2*len)>stream->size) return FALSE;
for(i=0; i<len; i++,ptr++)
{
Write_Byte_Stream(stream,Num2Ascii((*ptr)>>4));
Write_Byte_Stream(stream,Num2Ascii((*ptr)&0x0f));
}
return TRUE;
}
uchar Write_Word_Stream(STREAM_STRUCT *stream,uint ch)
{
if(stream->status==_FREE) return FALSE;
if((stream->len+2)>stream->size) return FALSE;
Write_Byte_Stream(stream,ch&0xff);
Write_Byte_Stream(stream,(ch>>8)&0xff);
return TRUE;
}
uchar write_crc_stream(STREAM_STRUCT *stream)
{
if(stream->status==_FREE) return FALSE;
if((stream->len+2)>stream->size) return FALSE;
stream->len += 2;
stream->in += 2;
crc_gen(stream->start,stream->len);
return TRUE;
}
uchar Write_Ptr_Stream(STREAM_STRUCT *stream,uchar far *ptr,uint len)
{
uint i;
if(stream->status==_FREE) return FALSE;
if((stream->len+len)>stream->size) return FALSE;
for(i=0; i<len; i++)
{
Write_Byte_Stream(stream,ptr[i]);
}
return TRUE;
}
uint Get_Stream_Len(STREAM_STRUCT *stream)
{
return stream->len;
}
uchar *Get_Stream_Head(STREAM_STRUCT *stream)
{
return stream->start;
}
uchar Write_Code_Stream(STREAM_STRUCT *stream,uchar far *ptr,uchar key,uchar ptrlen,uchar len)
{
uchar i;
if(stream->status==_FREE) return FALSE;
if((stream->len+len)>stream->size) return FALSE;
if(ptrlen>len)return FALSE;
for(i=0; i<ptrlen; i++)
{
Write_Byte_Stream(stream,ptr[i]);
}
if(len>ptrlen)
for(i=0; i<len-ptrlen; i++)
{
Write_Byte_Stream(stream,key);
}
return TRUE;
}
uchar Write_Tel_Stream(STREAM_STRUCT *stream,uchar far *tel,uchar tellen,uchar limitlen)
{
uchar i;
uchar len;
uchar temp;
if(stream->status==_FREE) return FALSE;
if((stream->len+limitlen)>stream->size) return FALSE;
if(((tellen+1)/2)>limitlen)return FALSE;
len = 0;
for(i=0; i<tellen/2; i++)
{
temp = (tel[2*i]-0x30)*16+(tel[2*i+1]-0x30);
Write_Byte_Stream(stream,temp);
len ++;
}
if(tellen&0x01)
{
temp = (tel[tellen-1]-0x30)*16+0x0f;
Write_Byte_Stream(stream,temp);
len ++;
}
while(len<limitlen)
{
Write_Byte_Stream(stream,0xff);
len ++;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -