mask=set_sysmask(opt);
static int set_sysmask(const char *opt)
//设定需要屏蔽的卫星系统
//mask代表被屏蔽的系统,将该值转换为二进制可更直观的看出
//二进制的每一位代表一个系统,若值为0则代表被屏蔽,若为1则代表不屏蔽
//因此简单的位运算可实现系统的屏蔽与选取
{
const char *p;
int mask=SYS_NONE;
if (!(p=strstr(opt,"-SYS="))) return SYS_ALL;
for (p+=5;*p&&*p!=' ';p++) {
switch (*p) {
//八大系统,分别用1,2,4,8,16,32,64,128表示
//用二进制表示,刚好可用二进制表示如下,故而可用按位与和按位或对信号进行屏蔽
//mask 初始为0 0 0 0 0 0 0 0 代表无系统被选用
/* 0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
*/
case 'G': mask|=SYS_GPS; break;
case 'R': mask|=SYS_GLO; break;
case 'E': mask|=SYS_GAL; break;
case 'J': mask|=SYS_QZS; break;
case 'C': mask|=SYS_CMP; break;
case 'I': mask|=SYS_IRN; break;
case 'S': mask|=SYS_SBS; break;
}
}
return mask;
}
/*
//若被屏蔽,则mask对应位上为0,按位与的结果为0,if 条件句为真,表明该系统不启用,
//从而令stat=0;
if (!(satsys(obs->sat,NULL)&mask)) {
stat=0;
}
*/