📄 message.c
字号:
#include <reg51.h>
#include <absacc.h>
#include <stdio.h>
#include <string.h>
#include "message.h"
WORD g_msg_size = sizeof(MESSAGE);
void init_msg_q(MESSAGE *pmsg, WORD len)
{
WORD i;
if((pmsg == NULL)||(len < 1)) return;
for(i=0;i<len;i++)
{
pmsg->pre = pmsg->next = pmsg;
pmsg++;
}
}
MESSAGE * enqueue(MESSAGE *pmsg, WORD len, BYTE *psrc)
{
WORD i;
MESSAGE *pdst = NULL;
MESSAGE *pins = pmsg;
MESSAGE *phead = pmsg;
MESSAGE *pinsed;
EA = 0;
if((pmsg == NULL)||(len < 1)||(psrc ==NULL))
{
EA = 1;
return(NULL);
}
pmsg++;
for(i=1;i<len;i++)
{
if((pmsg->pre == pmsg) && (pmsg->next == pmsg))
{
pdst = pmsg;
break;
}
pmsg++;
}
if(pdst == NULL)
{
EA = 1;
return(NULL);
}
memcpy((BYTE *)pdst, psrc, g_msg_size);
for(i=0;i<len;i++)
{
if(pins->next == phead)
{
pins->next = pdst;
pdst->next = phead;
pdst->pre = pins;
phead->pre = pdst;
EA = 1;
return(pdst);
}
if(pins->next->timer <= pdst->timer)
{
pins = pins->next;
continue;
}
pinsed = pins->next;
pins->next = pdst;
pdst->next = pinsed;
pinsed->pre = pdst;
pdst->pre = pins;
EA = 1;
return(pdst);
}
EA = 1;
return(NULL);
}
MESSAGE * dequeue(MESSAGE *pmsg, WORD len, MESSAGE *pdst)
{
MESSAGE *phead = pmsg;
MESSAGE *pde;
MESSAGE *plink;
EA = 0;
if((pmsg == NULL)||(len < 1)||(pdst ==NULL))
{
EA = 1;
return(NULL);
}
if(pmsg->next == pmsg)
{
EA = 1;
return(NULL);
}
pde = phead->next;
if(pde->timer > 0)
{
EA = 1;
return(NULL);
}
plink = pde->next;
phead->next = plink;
plink->pre = phead;
pde->pre = pde->next = pde;
memcpy((BYTE *)pdst, (BYTE *)pde, g_msg_size);
EA = 1;
return(pdst);
}
void timer_msg_q(MESSAGE *pmsg, WORD len)
{
WORD i;
if((pmsg == NULL)||(len < 1)) return;
for(i=0;i<len;i++)
{
if(pmsg->timer) pmsg->timer--;
pmsg++;
}
}
MESSAGE *cancel_msg(MESSAGE *pmsg, WORD len, MESSAGE *pcancel)
{
MESSAGE *phead = pmsg;
MESSAGE *ppre;
MESSAGE *pnext;
EA = 0;
if((pmsg == NULL)||(len < 1)||(pcancel == NULL))
{
EA = 1;
return(NULL);
}
if(((pcancel - pmsg) < 1) || ((pcancel - pmsg) > (len - 1)))
{
EA = 1;
return(NULL);
}
if((pcancel->pre == pcancel) && (pcancel->next == pcancel))
{
EA = 1;
return(NULL);
}
ppre = pcancel->pre;
pnext = pcancel->next;
ppre->next = pnext;
pnext->pre = ppre;
pcancel->pre = pcancel->next = pcancel;
EA = 1;
return(pcancel);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -