⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ewsd.cpp

📁 西门子交换机话单处理
💻 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 + -