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

📄 stream.c

📁 名厂车载GPS通信终端
💻 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 + -