2025-06-27 00:32:57 +08:00
|
|
|
|
#include "mywin_inc.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
/******************<2A><><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>**********************/
|
2025-06-27 00:32:57 +08:00
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void QUEUE_Init (QUEUE_Struct *q,int blocksize,int blocknum)
|
|
|
|
|
{
|
|
|
|
|
q->queueByteSize=blocksize*blocknum;
|
|
|
|
|
q->blockByteSize=blocksize;
|
|
|
|
|
q->data=mymalloc (q->queueByteSize);
|
|
|
|
|
q->inPointer=q->data;
|
|
|
|
|
q->outPointer=q->data;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void QUEUE_Delete (QUEUE_Struct *q)
|
|
|
|
|
{
|
|
|
|
|
myfree(q->data);
|
|
|
|
|
q->data=0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int QUEUE_Out (QUEUE_Struct *q,void *buff)
|
|
|
|
|
{
|
|
|
|
|
int ret=0;
|
|
|
|
|
if (q->data==0) return ret;
|
|
|
|
|
if ((q->outPointer!=q->inPointer)||q->fill==1)
|
|
|
|
|
{
|
|
|
|
|
ret=1;
|
|
|
|
|
mymemcpy (buff,q->outPointer,q->blockByteSize);
|
|
|
|
|
q->outPointer+=q->blockByteSize;
|
|
|
|
|
if (q->outPointer>=q->data+q->queueByteSize)
|
|
|
|
|
q->outPointer=q->data;
|
2025-07-05 19:47:28 +08:00
|
|
|
|
q->fill=0;//<2F><><EFBFBD>з<EFBFBD><D0B7><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ұ<EFBFBD><D2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int QUEUE_In (QUEUE_Struct *q,void *block)
|
|
|
|
|
{
|
|
|
|
|
if (q->data==0) return 1;
|
|
|
|
|
if (q->fill==1) return 1;
|
|
|
|
|
mymemcpy (q->inPointer,block,q->blockByteSize);
|
|
|
|
|
q->inPointer+=q->blockByteSize;
|
|
|
|
|
if (q->inPointer>=q->data+q->queueByteSize)
|
|
|
|
|
q->inPointer=q->data;
|
2025-07-05 19:47:28 +08:00
|
|
|
|
if (q->inPointer==q->outPointer)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
q->fill=1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>鿴<EFBFBD><E9BFB4>ʼ<EFBFBD><CABC>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int QUEUE_CheckStart (QUEUE_Struct *q)
|
|
|
|
|
{
|
|
|
|
|
if (q->data==0) return 1;
|
|
|
|
|
q->checkPointer=q->checkPointer=q->outPointer;
|
|
|
|
|
if ((q->checkPointer!=q->inPointer)||q->fill==1)
|
|
|
|
|
q->checkEnd=0;
|
|
|
|
|
else q->checkEnd=1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>鿴<EFBFBD><E9BFB4><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>أ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>0
|
2025-06-27 00:32:57 +08:00
|
|
|
|
void *QUEUE_Check (QUEUE_Struct *q)
|
|
|
|
|
{
|
|
|
|
|
void *ret=0;
|
|
|
|
|
if (q->data==0) return ret;
|
|
|
|
|
if (q->checkEnd==0)
|
|
|
|
|
{
|
|
|
|
|
ret=q->checkPointer;
|
|
|
|
|
q->checkPointer+=q->blockByteSize;
|
|
|
|
|
if (q->checkPointer>=q->data+q->queueByteSize)
|
|
|
|
|
q->outPointer=q->data;
|
|
|
|
|
if (q->checkPointer==q->inPointer) q->checkEnd=1;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
/****************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*************************/
|
2025-06-27 00:32:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>Ƿ<C7B7><F1B3ACB9>˰뾶<CBB0><EBBEB6>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><CBB7>ط<EFBFBD>0
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int POS_RoundPix (int r,int x1,int y1,int x2,int y2)
|
|
|
|
|
{
|
|
|
|
|
if ((x1-x2>r)||(x2-x1>r))
|
|
|
|
|
return -1;
|
|
|
|
|
if ((y1-y2>r)||(y2-y1>r))
|
|
|
|
|
return -1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ж<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD>,1,<2C>ڣ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int POS_InRect (int rect_x,int rect_y,int rect_x_size,int rect_y_size,int x,int y)
|
|
|
|
|
{
|
|
|
|
|
if (((x>=rect_x)&&(x<=rect_x+rect_x_size-1))&&
|
|
|
|
|
((y>=rect_y)&&(y<=rect_y+rect_y_size-1)))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int POS_RectIntersection (RECT_Struct *out,RECT_Struct *r1,RECT_Struct *r2)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ȡ<><C8A1><EFBFBD>¾<EFBFBD><C2BE>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>Ͻ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int x_s=r1->x;
|
|
|
|
|
int y_s=r1->y;
|
|
|
|
|
if (x_s<r2->x)
|
|
|
|
|
x_s=r2->x;
|
|
|
|
|
if (y_s<r2->y)
|
|
|
|
|
y_s=r2->y;
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ȡ<><C8A1><EFBFBD>¾<EFBFBD><C2BE>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>½<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int x_e=r1->x+r1->x_size-1;
|
|
|
|
|
int y_e=r1->y+r1->y_size-1;
|
|
|
|
|
if (x_e>r2->x+r2->x_size-1)
|
|
|
|
|
x_e=r2->x+r2->x_size-1;
|
|
|
|
|
if (y_e>r2->y+r2->y_size-1)
|
|
|
|
|
y_e=r2->y+r2->y_size-1;
|
|
|
|
|
out->x=x_s;
|
|
|
|
|
out->y=y_s;
|
|
|
|
|
out->x_size=x_e-x_s+1;
|
|
|
|
|
out->y_size=y_e-y_s+1;
|
|
|
|
|
|
|
|
|
|
if ((y_e>=y_s)&&(x_e>=x_s))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int POS_RectContain (RECT_Struct *out,RECT_Struct *r1,RECT_Struct *r2)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ȡ<><C8A1><EFBFBD>¾<EFBFBD><C2BE>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>Ͻ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int x_s=r1->x;
|
|
|
|
|
int y_s=r1->y;
|
|
|
|
|
if (x_s>r2->x)
|
|
|
|
|
x_s=r2->x;
|
|
|
|
|
if (y_s>r2->y)
|
|
|
|
|
y_s=r2->y;
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//ȡ<><C8A1><EFBFBD>¾<EFBFBD><C2BE>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>½<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int x_e=r1->x+r1->x_size-1;
|
|
|
|
|
int y_e=r1->y+r1->y_size-1;
|
|
|
|
|
if (x_e<r2->x+r2->x_size-1)
|
|
|
|
|
x_e=r2->x+r2->x_size-1;
|
|
|
|
|
if (y_e<r2->y+r2->y_size-1)
|
|
|
|
|
y_e=r2->y+r2->y_size-1;
|
|
|
|
|
out->x=x_s;
|
|
|
|
|
out->y=y_s;
|
|
|
|
|
out->x_size=x_e-x_s+1;
|
|
|
|
|
out->y_size=y_e-y_s+1;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r2<72><32><EFBFBD><EFBFBD>r1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>վ<EFBFBD><D5BE><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int POS_RectSub (RECT_Struct *out,RECT_Struct *r1,RECT_Struct *r2)
|
|
|
|
|
{
|
|
|
|
|
RECT_Struct temp={0};
|
|
|
|
|
out->x=r1->x;
|
|
|
|
|
out->y=r1->y;
|
|
|
|
|
out->x_size=r1->x_size;
|
|
|
|
|
out->y_size=r1->y_size;
|
|
|
|
|
|
|
|
|
|
if(POS_RectIntersection(&temp,r1,r2))
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if(temp.x_size<r1->x_size&&temp.y_size<r1->y_size)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>¾<EFBFBD><C2BE>γ<EFBFBD><CEB3>Ϳ<EFBFBD><CDBF><EFBFBD>С<EFBFBD><D0A1>ԭ<EFBFBD><D4AD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else if((temp.x>r1->x&&(temp.x+temp.x_size<r1->x+r1->x_size))||
|
|
|
|
|
(temp.y>r1->y&&(temp.y+temp.y_size<r1->y+r1->y_size)))
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>ε<EFBFBD><CEB5>м䣬<D0BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else if(POS_RectEqual(&temp,r1))
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
2025-06-27 00:32:57 +08:00
|
|
|
|
out->x=0;
|
|
|
|
|
out->x_size=0;
|
|
|
|
|
out->y=0;
|
|
|
|
|
out->y_size=0;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else if(temp.x_size==r1->x_size)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>εĿ<CEB5><C4BF><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if(r1->y==temp.y)
|
|
|
|
|
out->y+=temp.y_size;
|
|
|
|
|
out->y_size-=temp.y_size;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else if(temp.y_size==r1->y_size)
|
|
|
|
|
{
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>εĸ<CEB5><C4B8><EFBFBD><EFBFBD><EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
if(r1->x==temp.x)
|
|
|
|
|
out->x+=temp.x_size;
|
|
|
|
|
out->x_size-=temp.x_size;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-05 19:47:28 +08:00
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3>Ƿ<EFBFBD><C7B7><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>0
|
2025-06-27 00:32:57 +08:00
|
|
|
|
int POS_RectEqual (RECT_Struct *r1,RECT_Struct *r2)
|
|
|
|
|
{
|
|
|
|
|
if(r1->x==r2->x&&r1->y==r2->y&&r1->x_size==r2->x_size&&r1->y_size==r2->y_size)
|
|
|
|
|
return 1;
|
|
|
|
|
else
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|