📄 callrht.c
字号:
/****************************************************************
** *
** FILE : CallRHT.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "tools.h"
#include "public.h"
#include "callrht.h"
/*
********************************************************************************
* DEFINE RETMASK_STRUCT
********************************************************************************
*/
typedef struct {
BOOLEAN retmask;
INT8U mask1;
INT8U mask2;
} RHTMASK_STRUCT;
/*
********************************************************************************
* DEFINE MODULE VARIANTS
********************************************************************************
*/
static RHTMASK_STRUCT Dialed_Mask[4] = {{TRUE, 0x80, 0x80},
{FALSE, 0x80, 0x80},
{FALSE, 0x00, 0x10},
{TRUE, 0x10, 0x00}
};
static RHTMASK_STRUCT Recved_Mask[4] = {{TRUE, 0x80, 0x80},
{FALSE, 0x80, 0x80},
{FALSE, 0x20, 0x30},
{TRUE, 0x30, 0x20}
};
static void ClearCallRHT(INT8U type)
{
INT8U i, mask;
if (type == CALLRHT_DIALED) mask = 0x00;
else mask = 0x20;
for (i = 0; i < MAX_CALLRHT; i++) {
if ((CallRHT.tel[i].attrib & 0x20) == mask) CallRHT.tel[i].attrib = 0;
}
}
static INT8S FindBlank(void)
{
INT8U i;
for (i = 0; i < MAX_CALLRHT; i++) {
if ((CallRHT.tel[i].attrib & 0x0f) == 0) return i;
}
return -1;
}
static BOOLEAN FindCall(INT8U mask, INT8U tellen, INT8U *tel)
{
INT8U i, len;
if (mask & 0x80) return TRUE;
for (i = 0; i < MAX_CALLRHT; i++) {
if ((CallRHT.tel[i].attrib & 0x30) == (mask & 0x30)) {
len = CallRHT.tel[i].attrib & 0x0f;
if (len > 0 && len <= tellen) {
if (CmpString(tel, CallRHT.tel[i].tel, len) == STR_EQUAL) return TRUE;
}
}
}
return FALSE;
}
static char str_10086[] = {"10086"};
static char str_1861[] = {"1861"};
static char str_1860[] = {"1860"};
static char str_110[] = {"110"};
static char str_112[] = {"112"};
static char str_119[] = {"119"};
static char str_120[] = {"120"};
static char *pgtel[] = {str_10086, str_1861, str_1860, str_110, str_112, str_119, str_120};
BOOLEAN CallRHTPass(INT8U type, INT8U tellen, INT8U *tel)
{
RHTMASK_STRUCT *mask;
INT8U tag, i;
BOOLEAN ret;
for (i = 0; i < sizeof(pgtel) / sizeof(pgtel[0]); i++) {
if (ACmpString(FALSE, tel, (INT8U *)pgtel[i], tellen, strlen(pgtel[i])) == STR_EQUAL)
return TRUE;
}
if (type == CALLRHT_DIALED) {
mask = Dialed_Mask;
tag = CallRHT.attrib >> 2;
} else {
mask = Recved_Mask;
tag = CallRHT.attrib;
}
tag &= 0x03;
ret = mask[tag].retmask;
if (!FindCall(mask[tag].mask1, tellen, tel)) {
return ret;
} else {
if (FindCall(mask[tag].mask2, tellen, tel))
return ret;
else
return (!ret);
}
}
BOOLEAN SetCallRHT(INT8U *ptr)
{
INT8U num, len, i;
INT8S blanknum;
CallRHT.attrib = *ptr++;
if (CallRHT.attrib & 0x20)
ClearCallRHT(CALLRHT_DIALED);
if (CallRHT.attrib & 0x10)
ClearCallRHT(CALLRHT_RECVED);
CallRHT.attrib &= 0x0f;
num = *ptr++;
if (num == 0x7f) num = 0;
for (i = 1; i <= num; i++) {
if ((blanknum = FindBlank()) == -1) {
StorePubPara(CALLRHT_);
return FALSE;
} else {
CallRHT.tel[blanknum].attrib = len = *ptr++;
len &= 0x0f;
memcpy(CallRHT.tel[blanknum].tel, ptr, len);
ptr += len;
}
}
StorePubPara(CALLRHT_);
return TRUE;
}
void InitCallRHT(void)
{
if (!PubParaValid(CALLRHT_)) {
memset(&CallRHT, 0, sizeof(CallRHT));
StorePubPara(CALLRHT_);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -