📄 ewsd.cpp
字号:
//EWSD Exchange bill convert Programe 格式转换程序
//Write by Sunzhengxin @2002-07-04
//conveter Bin file to text file 转换二进制文件到文本文件
//source file : 0000002.BIN
#define MARK_REC 0x84
#define ESC 0x1b
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#include <io.h>
struct BillTime{
int year; // 0-99 h'00-h'63
int month; // 1-12 h'01-h'0c
int day; // 1-31 h'01-h'1f
int hour; // 0-23 h'00-h'17
int min; // 0-59 h'00-h'3b
int sec; // 0-59 h'00-h'3b
char f0;
char f7;
char f8;
long int leng;
char flag;
};
struct TrunkGroup{
char incomtg[10]; //<6
int itno; // 0-4095
char iflag;
char outgotg[10];
int otno; //0-4095
char oflag;
};
struct SpecData{
char length; //unsigned ?
char SpecData[40];
char flag;
};
struct ConnectBillCell{
long CBC; // 3byte
char flag;
};
struct ServiceQuarlityData{
char length; //unsigned ?
int resion; // 2 byte
char code; //7 6 5 4 3 2 1 0
char posi; //r c c r p p p p
char flag;
};
struct BeforeAnaswerTime{ //
char length; //unsigened ?
int tone; // 2 byte
int answ; // 2 byte
char flag;
};
struct A_class{
int leng; //
char nadi3;
char npi4;
char disp4;
char select4;
char lacl5;
char nl5;
char A_No[40];
int a_class;
char flag;
};
struct ConnectID{
char length;
unsigned long cid;
char flag;
};
struct B_Number{
int leng;
char nadi;
char npi;
char lacl;
char nl;
char B_No[40];
char flag;
};
struct RecordFlag{
char f12;
char f14;
char f18;
char f24;
char f25;
char f33;
char f37;
char f38;
};
struct RecordTypeAndState{
int type;
int state;
};
void _szx_disp(void);
void Mark_H64(unsigned char *,int *,struct BillTime *); //YYMMDDHHMMSS & total_Seconds
void Mark_H69(unsigned char *,int *,struct TrunkGroup *); //InComming_Trunk
void Mark_H6a(unsigned char *,int *,struct TrunkGroup *); //OutGoing_Trunk
void Mark_H75(unsigned char *,int *,struct SpecData *); //Special_Data
void Mark_H67(unsigned char *,int *,struct ConnectBillCell *); //Connect Billing Cell
void Mark_H82(unsigned char *,int *,struct ServiceQuarlityData *); //Service Quarlity Data
void Mark_H86(unsigned char *,int *,struct BeforeAnaswerTime *); //Before Anaswer time
void Mark_H8e(unsigned char *,int *,struct A_class *); //A_Class
void Mark_H6e(unsigned char *,int *,struct ConnectID *); //Connect ID
void Mark_Ha8(unsigned char *,int *,struct B_Number *); //B_Number
main(int argc,char *argv[])
{
FILE *fi,*fo;
struct BillTime BillT;
struct A_class Acl;
struct B_Number Bno;
struct TrunkGroup Tkg;
struct SpecData SpecD;
struct ConnectBillCell CBC;
struct ServiceQuarlityData SQD;
struct BeforeAnaswerTime BeAT;
struct ConnectID ConnID;
struct RecordFlag Flag;
struct RecordTypeAndState RecTS;
unsigned char RecBuffer[512];
long ptr_BillCur,cnt_recno;
int ptr_BuffCur;
int Rec_length;
int Rec_Mark;
char Rec_flag,Rec_type,Pack_mark;
char filename_bin[20],filename_txt[20];
int i,j,m,n;
//extern int_wscroll;
//Check Command Line Parameter
if(argc<3){
_szx_disp();
printf("\a\nPress ESC key exit.\n");
do{}while(getch()!=ESC);
return (-300);
}
else {
strcpy(filename_bin,argv[1]);
strcpy(filename_txt,argv[2]);
}
//Error Handler
if ((fi=fopen(filename_bin,"rb"))==0){
_szx_disp();
printf("\a\nPress ESC key exit.\n");
do{}while(getch()!=ESC);
return(-301);
}
//Error Handler
if ((fo=fopen(filename_txt,"wb+"))==0){
_szx_disp();
printf("\a\nPress ESC key exit.\n");
do{}while(getch()!=ESC);
return(-303);
}
//flash Buffer
clrscr();
_szx_disp();
//fi=fopen("00000002","rb");
//fo=fopen("BILL.TXT","wt");
ptr_BuffCur=0;
fseek(fi,0,SEEK_SET); fseek(fo,0,SEEK_SET);
//c=0x84;
Rec_Mark=0;
BillT.flag=0;
Tkg.iflag=0;
Tkg.oflag=0;
SpecD.flag=0;
CBC.flag=0;
SQD.flag=0;
BeAT.flag=0;
Acl.flag=0;
ConnID.flag=0;
Bno.flag=0;
cnt_recno=0;
while(!(feof(fi))){
fread(RecBuffer,512,1,fi); //Get Data to Buffer
for (ptr_BuffCur;ptr_BuffCur<512;ptr_BuffCur++){
if((RecBuffer[ptr_BuffCur]==0x84)&&(!Rec_Mark)){
Rec_Mark=1;
i=ptr_BuffCur;
Rec_length=(int)RecBuffer[ptr_BuffCur+1];
Flag.f12=(RecBuffer[ptr_BuffCur+3]&0x02)>>1;
Flag.f14=(RecBuffer[ptr_BuffCur+3]&0x08)>>3;
Flag.f18=(RecBuffer[ptr_BuffCur+3]&0x80)>>7;
Flag.f24=(RecBuffer[ptr_BuffCur+4]&0x08)>>3;
Flag.f25=(RecBuffer[ptr_BuffCur+4]&0x10)>>4;
Flag.f33=(RecBuffer[ptr_BuffCur+5]&0x04)>>2;
Flag.f37=(RecBuffer[ptr_BuffCur+5]&0x40)>>6;
Flag.f38=(RecBuffer[ptr_BuffCur+5]&0x80)>>7;
RecTS.type=(int)((RecBuffer[ptr_BuffCur+6]&0xf0)>>4);
RecTS.state=(int)(RecBuffer[ptr_BuffCur+6]&0x0f);
// Rec_flag=(int)RecBuffer[ptr_BuffCur+3];
// Rec_type=RecBuffer[ptr_BuffCur+6];
// Pack_mark=RecBuffer[ptr_BuffCur+8];
ptr_BuffCur+=8;
for(ptr_BuffCur;ptr_BuffCur<Rec_length+i;ptr_BuffCur++){
switch (RecBuffer[ptr_BuffCur]){
case 0x64: //YYMMDDHHMMSS & total_Seconds
Mark_H64(&RecBuffer[0],&ptr_BuffCur,&BillT);
break;
case 0x69: //InComming Trunk
Mark_H69(&RecBuffer[0],&ptr_BuffCur,&Tkg);
break;
case 0x6a: //OutGoing Trunk
Mark_H6a(&RecBuffer[0],&ptr_BuffCur,&Tkg);
break;
case 0x75: //Special Data
Mark_H75(&RecBuffer[0],&ptr_BuffCur,&SpecD);
break;
case 0x67: //Connect Billing Cell
Mark_H67(&RecBuffer[0],&ptr_BuffCur,&CBC);
break;
case 0x82: //Service Quarlity Data
Mark_H82(&RecBuffer[0],&ptr_BuffCur,&SQD);
break;
case 0x86: //Before Anaswer time
Mark_H86(&RecBuffer[0],&ptr_BuffCur,&BeAT);
break;
case 0x8e: //A Class
Mark_H8e(&RecBuffer[0],&ptr_BuffCur,&Acl);
break;
case 0x6e: //Connect ID
Mark_H6e(&RecBuffer[0],&ptr_BuffCur,&ConnID);
break;
case 0xa8: //B Number
Mark_Ha8(&RecBuffer[0],&ptr_BuffCur,&Bno);
break;
} //End of switch
} //End of "for" Packet scan
if (Rec_Mark) { //Output Record data
fprintf(fo,"\n%i %i",RecTS.type,RecTS.state);
if(BillT.flag){
fprintf(fo," %02i-%02i-%02i %02i:%02i:%02i %i %i %i %8i",
BillT.year,BillT.month,BillT.day,BillT.hour,BillT.min,
BillT.sec,BillT.f0,BillT.f7,BillT.f8,BillT.leng);
//printf(" %i %i %08lx %04i",RecTS.type,RecTS.state,ConnID.cid,Tkg.otno);
//printf(" %s %s %s\n",Tkg.outgotg,Acl.A_No,Bno.B_No);
BillT.flag=0;
}
if(Acl.flag){
fprintf(fo," %x %x %x %x %x %x %-12s",Acl.nadi3,Acl.npi4,
Acl.disp4,Acl.select4,Acl.lacl5,Acl.nl5,Acl.A_No);//,Acl.a_class);
Acl.flag=0;
}
if(Bno.flag){
fprintf(fo," %x %x %x %x %-18s",Bno.nadi,Bno.npi,Bno.lacl,Bno.nl,Bno.B_No);
Bno.flag=0;
}
if(Tkg.iflag){
fprintf(fo," %-8s %-4i",Tkg.incomtg,Tkg.itno);
Tkg.iflag=0;
}
if(Tkg.oflag){
fprintf(fo," %-8s %-4i",Tkg.outgotg,Tkg.otno);
Tkg.oflag=0;
}
if(ConnID.flag){
fprintf(fo," %08lx",ConnID.cid);
ConnID.flag=0;
}
if(SpecD.flag){
//printf("%x %x",SpecD.length,SpecD.SpecData);
SpecD.flag=0;
}
if(CBC.flag){
fprintf(fo," %lx",CBC.CBC);
CBC.flag=0;
}
if(SQD.flag){
fprintf(fo," %x %x %x",SQD.resion,SQD.code,SQD.posi);
SQD.flag=0;
}
if(BeAT.flag){
fprintf(fo," %x %x",BeAT.tone,BeAT.answ);
BeAT.flag=0;
}
//Flag
fprintf(fo," %i %i %i %i %i %i %i %i",Flag.f12,Flag.f14,Flag.f18,Flag.f24,
Flag.f25,Flag.f33,Flag.f37,Flag.f38);
//fprintf(fo,"%02i-%02i-%02i %02i:%02i:%02i %8i",BillT.year,BillT.month,
// BillT.day,BillT.hour,BillT.min,BillT.sec,BillT.leng);
//fprintf(fo,"\t%s %s %s\n",Tkg.outgotg,Acl.A_No,Bno.B_No);
//window(1,15,40,20);
//int_wscroll=1;
//gotoxy(1,5);
cnt_recno+=1;
printf("%08i\t\t",cnt_recno);
printf("%02i-%02i-%02i %02i:%02i:%02i %i %i %i %08i",
BillT.year,BillT.month,BillT.day,BillT.hour,BillT.min,
BillT.sec,BillT.f0,BillT.f7,BillT.f8,BillT.leng);
printf(" %-18s\n",Bno.B_No);
//window(1,21,40,25);
//gotoxy(1,1); cnt_recno+=1;
Rec_Mark=0;
//m=ftell(fi);
//ptr_BuffCur-512;
fseek(fi,ptr_BuffCur-512,SEEK_CUR);
if(!fread(RecBuffer,512,1,fi))
break;
//m=ftell(fi);
ptr_BuffCur=-1;
i=0;
//continue;
} //End of "if" Record data output
} //End of "if" Buffer Record scan
if(ptr_BuffCur>50){ //Cat Zero data
//m=ftell(fi);
//j=ptr_BuffCur-512;
fseek(fi,ptr_BuffCur-512,SEEK_CUR);
if(!fread(RecBuffer,512,1,fi))
break;
//m=ftell(fi);
ptr_BuffCur=-1;
i=0;
continue;
}
} //Eof "for" Buffer Rec.
//printf("%i\t\n",ptr_BuffCur);
};
fclose(fi);
fclose(fo);
return(0);
}
void _szx_disp(void)
{
printf("Bill Convert Program. Write by Sun Zheng-xin@2002.");
printf("\n\rConvert Tape file to Format Textfile .");
printf("\n\r!!!For EWSD Bill Only!!!");
printf("\r\nFormat:\r\n\tEWSDB2T.EXE [BinBillFile] [outfile]");
printf("\r\r");
printf("\r\n\nExample:EWSDB2T.EXE Bill225.BIN OutBill225.TXT");
printf("\r\n\n\n");
}
//YYMMDDHHMMSS & total_Seconds
void Mark_H64(unsigned char *Buff,int *ptr,struct BillTime *pBillT)
{
pBillT->year = Buff[*ptr+1];
pBillT->month = Buff[*ptr+2];
pBillT->day = Buff[*ptr+3];
pBillT->hour = Buff[*ptr+4];
pBillT->min = Buff[*ptr+5];
pBillT->sec = Buff[*ptr+6];
pBillT->f0 = Buff[*ptr+7]&0x01;
pBillT->f7 = (Buff[*ptr+7]&0x40)>>6;
pBillT->f8 = (Buff[*ptr+7]&0x80)>>7;
pBillT->leng = Buff[*ptr+8]+Buff[*ptr+9]*256+Buff[*ptr+10]*65536;
pBillT->flag = 1;
*ptr+=10;
}
//InComming_Trunk
void Mark_H69(unsigned char *Buff,int *ptr,struct TrunkGroup *pTkg)
{
int n;
//struct TrunkGroup{
// char incomtg[10]; //<6
// int itno; // 0-4095
// char iflag;
// char outgotg[10];
// int otno; //0-4095
// char oflag;
// };
for(n=0;n<6;n++)
pTkg->incomtg[n]=Buff[*ptr+n+1];
pTkg->incomtg[n]=0x00;
pTkg->itno=(int)Buff[*ptr+7]+(((int)Buff[*ptr+8])<<8);
pTkg->iflag=1;
*ptr+=8;
}
//OutGoing_Trunk
void Mark_H6a(unsigned char *Buff,int *ptr,struct TrunkGroup *pTkg)
{
int n;
for(n=0;n<6;n++)
pTkg->outgotg[n]=Buff[*ptr+n+1];
pTkg->outgotg[n]='\0';//0x00;
pTkg->otno=(int)Buff[*ptr+7]+(((int)Buff[*ptr+8])<<8);
pTkg->oflag=1;
*ptr+=8;
}
//Special_Data
void Mark_H75(unsigned char *Buff,int *ptr,struct SpecData *pSpecD)
{
//struct SpecData{
// char length; //unsigned ?
// char SpecData[40];
// char flag;
// };
int n;
pSpecD->length = Buff[*ptr+1];
for(n=0;n<(pSpecD->length-1);n++)
pSpecD->SpecData[n]=Buff[*ptr+2+n];
pSpecD->SpecData[n]=0x00;
pSpecD->flag=1;
*ptr+=32;
}
//Connect Billing Cell
void Mark_H67(unsigned char *Buff,int *ptr,struct ConnectBillCell *pCBC)
{
pCBC->flag=1;
*ptr+=3;
}
//Service Quarlity Data
void Mark_H82(unsigned char *Buff,int *ptr,struct ServiceQuarlityData *pSQD)
{
pSQD->flag=1;
*ptr+=4;
}
//Before Anaswer time
void Mark_H86(unsigned char *Buff,int *ptr,struct BeforeAnaswerTime *pBeAT)
{
pBeAT->flag=1;
*ptr+=5;
}
//A_Class
void Mark_H8e(unsigned char *Buff,int *ptr,struct A_class *pAcl)
{
int n;
pAcl->leng=(int)Buff[*ptr+1];
pAcl->nadi3=Buff[*ptr+2]&0x7f;
pAcl->npi4=(Buff[*ptr+3]&0x70)>>4;
pAcl->disp4=(Buff[*ptr+3]&0x06)>>2;
pAcl->select4=Buff[*ptr+3]&0x03;
pAcl->lacl5=(Buff[*ptr+4]&0xe0)>>5;
pAcl->nl5=Buff[*ptr+4]&0x1f;
for(n=0;n<(pAcl->leng-5);n++){
pAcl->A_No[2*n]=((Buff[*ptr+5+n]&0xf0)/16)+0x30;
pAcl->A_No[2*n+1]=(Buff[*ptr+5+n]&0x0f)+0x30;
}
if(pAcl->nl5&0x01)
pAcl->A_No[2*n-1]=0x00;
pAcl->A_No[2*n]=0x00;
pAcl->flag=1;
*ptr+=pAcl->leng-1;
}
//Connect ID
void Mark_H6e(unsigned char *Buff,int *ptr,struct ConnectID *pCID)
{
//struct ConnectID{
// long cid;
// char flag;
//
// };
pCID->length=Buff[*ptr+1];
pCID->cid=Buff[*ptr+2]+(((long)Buff[*ptr+3])<<8)+(((long)Buff[*ptr+4])<<16)
+(((long)Buff[*ptr+5])<<24);
pCID->flag=1;
*ptr+=5;
}
//B_Number
void Mark_Ha8(unsigned char *Buff,int *ptr,struct B_Number *pBno)
{
//struct B_Number{
// int leng;
// char nadi;
// char npi;
// char lacl;
// char nl;
// char B_No[40];
// char flag;
// };
int n;
pBno->leng=(int)Buff[*ptr+1];
pBno->nadi=Buff[*ptr+2]&0x7f;
pBno->npi =(Buff[*ptr+3]&0x70)>>4;
pBno->lacl=(Buff[*ptr+4]&0xe0)>>5;
pBno->nl =Buff[*ptr+4]&0x1f;
for(n=0;n<(pBno->leng-5);n++){
pBno->B_No[2*n]=((Buff[*ptr+5+n]&0xf0)/16)+0x30;
pBno->B_No[2*n+1]=(Buff[*ptr+5+n]&0x0f)+0x30;
}
if(pBno->nl&0x01)
pBno->B_No[2*n-1]=0x00;
pBno->B_No[2*n]=0x00;
pBno->flag=1;
*ptr+=pBno->leng-1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -