?? svinapdisp.cpp
字號:
/*****************************************************
Update History:
2000.06.14:增加防范措施
******************************************************/
#include "stdafx.h"
#include <windows.h>
extern unsigned char *dispbuf,*recbuf;
extern unsigned char UDTlen;
extern unsigned short displen;
extern void procSourcePARAdisp(BYTE dfldno);
extern void procNULL(unsigned char dfldno);
extern char procsequencetag(unsigned char dfldno);
extern void procsbasicpara(unsigned char dfldno);
extern void procmoredatadisp(WORD len);
void procinteger(BYTE dfldno)
{ BYTE li;
*dispbuf++=dfldno; //tag
*dispbuf++=8;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
*dispbuf++=dfldno+1; //li
*dispbuf++=8;
li=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
*dispbuf++=dfldno+2;
*dispbuf++=li*8;
if(li==1) *dispbuf++=*recbuf++;
else if(li==2)
{*dispbuf++=*(recbuf+1);
*dispbuf++=*recbuf;
recbuf+=2;
}
else if(li==3)
{*dispbuf++=*(recbuf+2);
*dispbuf++=*(recbuf+1);
*dispbuf++=*recbuf;
recbuf+=3;
}
else if(li==4)
{*dispbuf++=*(recbuf+3);
*dispbuf++=*(recbuf+2);
*dispbuf++=*(recbuf+1);
*dispbuf++=*recbuf;
recbuf+=4;
}
*dispbuf++=0xcc;
displen+=li+11;
}
void procCase(BYTE dfldno)
{ BYTE li;
*dispbuf++=dfldno; //tag
*dispbuf++=8;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
*dispbuf++=dfldno+1; //li
*dispbuf++=8;
li=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
if((*recbuf&0x80)==0) {recbuf+=2;li-=2;} //expand
else {recbuf++;li--;}
*dispbuf++=dfldno+2;
*dispbuf++=8;
*dispbuf++=(*recbuf)&0x7f;
recbuf+=li;
*dispbuf++=0xcc;
displen+=12;
}
void procINAPCHGADDR(unsigned char dfldno) //P49-50
{ unsigned char li,i,code;
//ADDR TAG
*dispbuf++=dfldno;
*dispbuf++=8;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//ADDR LI
*dispbuf++=dfldno+1;
*dispbuf++=8;
li=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
UDTlen-=li+2;
//ADDR IN
*dispbuf++=dfldno+2;
*dispbuf++=8;
code=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//ADDR SIGNAL
if((code&0x7f)==9)
{
*dispbuf++=dfldno+3;
*dispbuf++=32;
for(i=0;i<2;i++)
{*dispbuf=(*recbuf&0x0f)<<4;*dispbuf|=(*recbuf&0xf0)>>4;dispbuf++;recbuf++;}
*dispbuf++=0xcc;
recbuf+=li-3;
}
else if((code&0x7f)==10)
{
*dispbuf++=dfldno+3;
*dispbuf++=11*4;
for(i=0;i<6;i++)
{*dispbuf=(*recbuf&0x0f)<<4;*dispbuf|=(*recbuf&0xf0)>>4;dispbuf++;recbuf++;}
*dispbuf++=0xcc;
recbuf+=li-7;
}
else
{li--;
*dispbuf++=dfldno+3;
if((code&0x80)==0x80) //there is fill,odd
*dispbuf++=li*8-4;
else *dispbuf++=li*8;
for(i=0;i<li;i++)
{*dispbuf=(*recbuf&0x0f)<<4;*dispbuf|=(*recbuf&0xf0)>>4;dispbuf++;recbuf++;}
*dispbuf++=0xcc;
displen+=li+15; //li*2+22;
}//else
}
void procINAPADDR(unsigned char dfldno) //P49-50
{ unsigned char li,i,code;
//ADDR TAG
*dispbuf++=dfldno;
*dispbuf++=8;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//ADDR LI
*dispbuf++=dfldno+1;
*dispbuf++=8;
li=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
UDTlen-=li+2;
//ADDR IN
*dispbuf++=dfldno+2;
*dispbuf++=8;
code=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//ADDR SIGNAL
li-=2;
recbuf++;
*dispbuf++=dfldno+3;
if((code&0x80)==0x80) //there is fill,odd
*dispbuf++=li*8-4;
else *dispbuf++=li*8;
for(i=0;i<li;i++)
{*dispbuf=(*recbuf&0x0f)<<4;*dispbuf|=(*recbuf&0xf0)>>4;dispbuf++;recbuf++;}
*dispbuf++=0xcc;
displen+=li+15; //li*2+22;
}
void ProcAdditionalCharg(BYTE dfldno)
{ BYTE indeffmt;
indeffmt=procsequencetag(dfldno); //附加費 sequence
procsbasicpara(dfldno+2); //附加費值
procsbasicpara(dfldno+5); //附加費類型
if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
}
void ProcAdjustRate(BYTE dfldno)
{ BYTE indeffmt;
indeffmt=procsequencetag(dfldno); //計費調整率 sequence
procsbasicpara(dfldno+2); //計費調整率值
procsbasicpara(dfldno+5); //計費調整率類型
if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
}
void procBearer(BYTE dfldno) //承載者
{ BYTE li,i,code;
//承載者 TAG
*dispbuf++=dfldno;
*dispbuf++=8;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//承載者 LI
*dispbuf++=dfldno+1;
*dispbuf++=8;
li=*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
UDTlen-=li+2;
//承載者的選擇
*dispbuf++=dfldno+2;
*dispbuf++=8;
*dispbuf++=*recbuf++;
*dispbuf++=0xcc;
//承載者ID
code=*recbuf++;
li-=3;
*dispbuf++=dfldno+3;
*dispbuf++=code*4;
code/=2;code++;
for(i=0;i<code;i++) *dispbuf++=*(recbuf+i);
*dispbuf++=0xcc;
recbuf+=li;
displen+=code+12;
}
void procLegID(BYTE dfldno)
{ BYTE indeffmt;
indeffmt=procsequencetag(dfldno); //LEGID sequence
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+2); //發方ID
else if((*recbuf&0x3f)==1) procsbasicpara(dfldno+5); //收方ID
if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
}
void ProcSendingInfo(BYTE dfldno,BYTE dfldno2) //要發送的信息
{ BYTE indeffmt0,indeffmt,indeffmt2,indeffmt3,indeffmt4,li,len;
indeffmt0=procsequencetag(dfldno2); //要發送的信息 sequence
//“要發送的信息”選擇“帶內信息”“信號音”“顯示信息”
if((*recbuf&0x3f)==0x20)//選擇“帶內信息”
{indeffmt=procsequencetag(dfldno); //帶內信息 sequence
//“消息ID”選擇“基本消息ID”“文本”“基本消息ID組”“可變消息”
if((*recbuf&0x3f)==0x20)//“消息ID”
{indeffmt2=procsequencetag(dfldno+2); //消息ID sequence
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+4); //基本消息ID
else if((*recbuf&0x3f)==0x21) //“文本”
{indeffmt3=procsequencetag(dfldno+7); //文本 sequence
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+9); //消息內容
if((*recbuf&0x3f)==1) procsbasicpara(dfldno+12); //屬性
if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
}//“文本”
else if((*recbuf&0x3f)==0x3d) //“基本消息ID組”
{indeffmt3=procsequencetag(dfldno+13); //基本消息ID組
while((*recbuf&0x3f)==2) procsbasicpara(dfldno+4); //基本消息ID
if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
}//“基本消息ID組”
else if((*recbuf&0x3f)==0x3e) //“可變消息”
{indeffmt3=procsequencetag(dfldno+17); //可變消息sequence
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+4); //基本消息ID
if((*recbuf&0x3f)==0x21)//可變部分
{if(*(recbuf+1)<=0x80) li=*(recbuf+1);
else li=*(recbuf+2);
indeffmt4=procsequencetag(dfldno+19); //可變部分sequence
if(indeffmt4!=0)//indefinite formatt
{
while(*(WORD *)recbuf!=0)
{
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+21); //整數
else if((*recbuf&0x3f)==1) procsbasicpara(dfldno+24); //數字
else if((*recbuf&0x3f)==2) procsbasicpara(dfldno+27); //時間
else if((*recbuf&0x3f)==3) procsbasicpara(dfldno+30); //日期
else if((*recbuf&0x3f)==4) procsbasicpara(dfldno+33); //價格
else
{
procmoredatadisp(UDTlen); //add by 2000.06.14
UDTlen = 0;
return;
}
}//while
recbuf+=2;UDTlen-=2;
}//indefinite formatt
else//short\long format
{
while(li!=0)
{len=UDTlen;
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+21); //整數
else if((*recbuf&0x3f)==1) procsbasicpara(dfldno+24); //數字
else if((*recbuf&0x3f)==2) procsbasicpara(dfldno+27); //時間
else if((*recbuf&0x3f)==3) procsbasicpara(dfldno+30); //日期
else if((*recbuf&0x3f)==4) procsbasicpara(dfldno+33); //價格
if(len>UDTlen)
{len-=UDTlen; li-=len;}
else
{
procmoredatadisp(UDTlen); //add by 2000.06.14
UDTlen = 0;
return;
}
}//while
}//short\long format
}//可變部分
if(indeffmt3!=0) {recbuf+=2;UDTlen-=2;}
}//“可變消息”
if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
}////“消息ID”
//重復次數
if((*recbuf&0x3f)==1) procsbasicpara(dfldno+36); //重復次數
//持續時間
if((*recbuf&0x3f)==2) procsbasicpara(dfldno+39); //持續時間
//時間間隔
if((*recbuf&0x3f)==3) procsbasicpara(dfldno+42); //時間間隔
if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
}//選擇“帶內信息”
else if((*recbuf&0x3f)==0x21)//選擇“信號音”
{indeffmt=procsequencetag(dfldno+45); //信號音 sequence
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+47); //信號音ID
if((*recbuf&0x3f)==1) procsbasicpara(dfldno+39); //持續時間
if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
}//選擇“信號音”
else if((*recbuf&0x1f)==2) //選擇“顯示信息”
procsbasicpara(dfldno+50);
if(indeffmt0!=0) {recbuf+=2;UDTlen-=2;}
}
void ProcExpand(BYTE dfldno) //“擴展”,P63
{ BYTE indeffmt,indeffmt2;
indeffmt=procsequencetag(dfldno); //擴展 sequence
while(*recbuf==0x30 && UDTlen>2 && UDTlen<255)//擴展域
{indeffmt2=procsequencetag(dfldno+2);//擴展域 sequence
procsbasicpara(dfldno+4); //類型
procsbasicpara(dfldno+7); //準則
procsbasicpara(dfldno+10); //值
if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
}//擴展域
if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
}
void procResourceID(BYTE dfldno)//"資源ID"
{ BYTE indeffmt,indeffmt2;
indeffmt=procsequencetag(dfldno); // 資源ID sequence
//"資源ID"選擇“設備群ID”“設備群成員ID”“中繼群ID”
if((*recbuf&0x3f)==0x21)//選擇“設備群ID”
{indeffmt2=procsequencetag(dfldno+2); // 設備群ID sequence
if((*recbuf&0x3f)==0) procsbasicpara(dfldno+4); //選擇“中繼群ID”
else if((*recbuf&0x3f)==1) procsbasicpara(dfldno+7); //選擇“單個設備ID”
else if((*recbuf&0x3f)==2) procsbasicpara(dfldno+10); //選擇“搜索群”
else if((*recbuf&0x3f)==3) procsbasicpara(dfldno+13); //選擇“路由索引”
if(indeffmt2!=0) {recbuf+=2;UDTlen-=2;}
}//選擇“設備群ID”
else if((*recbuf&0x3f)==2) procsbasicpara(dfldno+16); //設備群成員ID
else if((*recbuf&0x3f)==3) procsbasicpara(dfldno+19); //中繼群ID
if(indeffmt!=0) {recbuf+=2;UDTlen-=2;}
}
void procINAPdisp(BYTE oc,BYTE compt)
{ BYTE indeffmt,indeffmt2,indeffmt3,indeffmt4,li,len;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -