#define americano 0 #define europeo 1 #define lmax 200 #define posin 18 #define estac 3+posin #define linea 10+posin #define durac 36+posin #define hor 25 +posin #define fech 17 +posin #define tranf 47+posin #define numero 47+posin #define ccost 34+posin #define proye 68+posin #define cuenta 0 #define pulsos 0 #define ruta 0 #define prinum 0 #define ring 0 #define antran 0 // anexo transferido #define fofech americano #define num_tra 200 char anum[20],apry[4]; struct { char hora[8],line[3],nume[17],proy[4] ; } lla_tra[num_tra+1] ; int max_tra ; extern char rgua[]; /* abrir archivo de llamadas posibles de ser transferidas */ void abr_tra(void) { char bufp[40] ; FCHAN t_arch; //mio int i,j=0 ; max_tra=-1 ; if( (t_arch = _FOpen("ptelf.tra",FO_READONLY)) != -1 ) { while ( !_FEOF(t_arch) && j<=num_tra) { i=_FGets(t_arch,bufp,35); //mio if (i==34) { max_tra=j ; for(i=0 ;i<8 ;i++) lla_tra[j].hora[i- 0] = bufp[i] ; for(i=8 ;i<11;i++) lla_tra[j].line[i- 8] = bufp[i] ; for(i=11;i<28;i++) lla_tra[j].nume[i-11] = bufp[i] ; for(i=28;i<32;i++) lla_tra[j].proy[i-28] = bufp[i] ; j++ ; } } _FClose(t_arch); } } /* cerrar archivo de llamadas posibles de transferir */ void cer_tra(void) { int j=0 ; FCHAN t_arch; t_arch = _FCreate("ptelf.tra",FC_NORMAL); while (j<=max_tra) { /* for (i=0;i<8 ;i++) _fputchar(lla_tra[j].hora[i]) ; for (i=0;i<3 ;i++) _fputchar(lla_tra[j].line[i]) ; for (i=0;i<17;i++) _fputchar(lla_tra[j].nume[i]) ; for (i=0;i<4 ;i++) _fputchar(lla_tra[j].proye[i]) ; _fputchar('\r') ; _fputchar('\n') ; j++ ; */ _FWrite(t_arch,(char *)&lla_tra[j],32); _FWrite(t_arch,"\r\n",2); j++ ; } _FClose(t_arch) ; } void in_central() { rgua[0]='\0'; abr_tra() ; /* abrir llamadas anteriores */ } void fi_central() { cer_tra(); } /* incrementar hora + duraci¢n */ void inc_hor(char *chor, int horas, int dur, char *buf) { int i,ihor_h,ihor_m,ihor_s,idur_h,idur_m,idur_s ; char chor_h[3],chor_m[3],chor_s[3],cdur_h[3],cdur_m[3],cdur_s[3] ; for(i=0;i<2;i++) chor_h[i-0]=buf[horas+i] ; chor_h[2]='\0' ; for(i=3;i<5;i++) chor_m[i-3]=buf[horas+i] ; chor_m[2]='\0' ; for(i=6;i<8;i++) chor_s[i-6]=buf[horas+i] ; chor_s[2]='\0' ; for(i=0;i<2;i++) cdur_h[i-0]=buf[dur+i] ; cdur_h[2]='\0' ; for(i=3;i<5;i++) cdur_m[i-3]=buf[dur+i] ; cdur_m[2]='\0' ; for(i=6;i<8;i++) cdur_s[i-6]=buf[dur+i] ; cdur_s[2]='\0' ; ihor_h=atoi(chor_h) ; ihor_m=atoi(chor_m) ; ihor_s=atoi(chor_s) ; idur_h=atoi(cdur_h) ; idur_m=atoi(cdur_m) ; idur_s=atoi(cdur_s) ; if ((ihor_s += idur_s)>=60) { ihor_s -= 60 ; ihor_m++ ;} if ((ihor_m += idur_m)>=60) { ihor_m -= 60 ; ihor_h++ ;} if ((ihor_h += idur_h)>=24) { ihor_h -= 24 ;} itoa(ihor_h,chor_h,10) ; itoa(ihor_m,chor_m,10) ; itoa(ihor_s,chor_s,10) ; if (ihor_h<10) {chor[0]='0' ; chor[1]=chor_h[0] ;} else { chor[0]=chor_h[0] ; chor[1]=chor_h[1] ;} chor[2]=':' ; if (ihor_m<10) {chor[3]='0' ; chor[4]=chor_m[0] ;} else { chor[3]=chor_m[0] ; chor[4]=chor_m[1] ;} chor[5]=':' ; if (ihor_s<10) {chor[6]='0' ; chor[7]=chor_s[0] ;} else { chor[6]=chor_s[0] ; chor[7]=chor_s[1] ;} } /* agregar llamada */ void agr_tra(int hori,int lin,int num, int pry, int dur, char *buf, int *max_tra) { int i,j ; char chor[8] ; inc_hor(chor,hori,dur,buf) ; if (*max_tra=num_tra) { for(j=0;j<(*max_tra-1);j++) { for (i=0;i<8 ;i++) lla_tra[j].hora[i] = lla_tra[j+1].hora[i] ; for (i=0;i<3 ;i++) lla_tra[j].line[i] = lla_tra[j+1].line[i] ; for (i=0;i<17;i++) lla_tra[j].nume[i] = lla_tra[j+1].nume[i] ; for (i=0;i<4 ;i++) lla_tra[j].proy[i] = lla_tra[j+1].proy[i] ; } } for(i=0;i<8 ;i++) lla_tra[*max_tra].hora[i] = chor[i] ; for(i=0;i<3 ;i++) lla_tra[*max_tra].line[i] = buf[lin+i] ; for(i=0;i<17;i++) lla_tra[*max_tra].nume[i] = buf[num+i] ; for(i=0;i<4 ;i++) lla_tra[*max_tra].proy[i] = buf[pry+i] ; } /* buscar llamada */ void bus_tra(int hori,int lin,char *num, char *pry, char *buf) { int i,j=0,c_hor=0,t_hor=10,i_lin=0 ; char chor_h[3],chor_m[3],chor_s[3],thor_h[3],thor_m[3],thor_s[3] ; for(i=0;i<2;i++) chor_h[i-0]=buf[hori+i] ; chor_h[2]='\0' ; for(i=3;i<5;i++) chor_m[i-3]=buf[hori+i] ; chor_m[2]='\0' ; for(i=6;i<8;i++) chor_s[i-6]=buf[hori+i] ; chor_s[2]='\0' ; c_hor = atoi(chor_h)*3600+atoi(chor_m)*60+atoi(chor_s) ; while ( (abs(c_hor-t_hor)>180 || i_lin!=3 ) && j<=max_tra ) { for(i=0;i<2;i++) thor_h[i-0]=lla_tra[j].hora[i] ; thor_h[2]='\0' ; for(i=3;i<5;i++) thor_m[i-3]=lla_tra[j].hora[i] ; thor_m[2]='\0' ; for(i=6;i<8;i++) thor_s[i-6]=lla_tra[j].hora[i] ; thor_s[2]='\0' ; t_hor = atoi(thor_h)*3600+atoi(thor_m)*60+atoi(thor_s) ; for(i=0;i<3 && lla_tra[j].line[i]==buf[lin+i];i++) ; i_lin = i ; if (abs(c_hor-t_hor)>180 || i_lin!=3 ) j++ ; } if (abs(c_hor-t_hor)<=180 && i_lin==3) { for(i=0;i<17;i++) num[i] = lla_tra[j].nume[i] ; for(i=0;i<4 ;i++) pry[i] = lla_tra[j].proy[i] ; for(;jvtranf && (buf[vfech+2]=='/' || buf[vfech+2]==':') && buf[vhor+2]==':' && buf[vhor+5]==':' && buf[vdurac+2]==':' && buf[vdurac+5]==':' && isalnum(buf[vtranf])) { k=0 ; tel[k++]=buf[vestac] ; tel[k++]=buf[vestac+1] ; tel[k++]=buf[vestac+2] ; tel[k++]=buf[vestac+3] ; tel[k++] = ' ' ; tel[k++] = buf[vlinea] ; tel[k++] = buf[vlinea+1] ; tel[k++] = buf[vlinea+2] ; tel[k++] = ' ' ; if (buf[vdurac+0]!=' ') tel[k++]=buf[vdurac+0] ; else tel[k++]='0' ; if (buf[vdurac+1]!=' ') tel[k++]=buf[vdurac+1] ; else tel[k++]='0' ; tel[k++] = ':' ; if (buf[vdurac+3]!=' ') tel[k++]=buf[vdurac+3] ; else tel[k++]='0' ; if (buf[vdurac+4]!=' ') tel[k++]=buf[vdurac+4] ; else tel[k++]='0' ; tel[k++] = ':' ; if (buf[vdurac+6]!=' ') tel[k++]=buf[vdurac+6] ; else tel[k++]='0' ; if (buf[vdurac+7]!=' ') tel[k++]=buf[vdurac+7] ; else tel[k++]='0' ; tel[k++] = ' ' ; ka = k ; tel[k++] = buf[vhor] ; tel[k++] = buf[vhor+1] ; if (tel[ka]==' ') tel[ka]='0' ; tel[k++] = ':' ; tel[k++] = buf[vhor+3] ; tel[k++] = buf[vhor+4] ; tel[k++] = ' ' ; if (vfofech==americano) { tel[k++] = buf[vfech+0] ; tel[k++] = buf[vfech+1]; tel[k++] = '/'; tel[k++] = buf[vfech+3] ; tel[k++] = buf[vfech+4]; tel[k++] = '/'; tel[k++] = buf[6] ; tel[k++] = buf[7] ; } else { tel[k++] = buf[vfech+3] ; tel[k++] = buf[vfech+4]; tel[k++] = '/'; tel[k++] = buf[vfech+0] ; tel[k++] = buf[vfech+1]; tel[k++] = '/'; tel[k++] = buf[6] ; tel[k++] = buf[7] ; } tel[k++] = ' ' ; if (buf[vproye]==' ' && buf[vproye+1]==' ' && buf[vproye+2]==' ' && buf[vproye+3]==' ') { for(i=0;i<4;i++) apry[i]='*' ; } else { for(i=0;i<4;i++) apry[i]=buf[vproye+i] ; } if (buf[vtranf]=='x' && buf[vtranf+1]!='I') agr_tra(vhor,vlinea,vnumero+1,vproye,vdurac,buf,&max_tra) ; if (isdigit(buf[vtranf+1])) { tel[k++] = 'O' ; tel[k++] = ' ' ; if (isdigit(buf[vnumero])) it=vnumero ; else it=vnumero+1 ; for (; it<(vnumero+17) ; it++) tel[k++]=buf[it] ; } else if ((buf[vtranf]=='T' && buf[vtranf+1]=='R') || (buf[vtranf+1]=='T' && buf[vtranf+2]=='R') || (buf[vtranf]=='H' && buf[vtranf+1]=='O')) { bus_tra(vhor,vlinea,anum,apry,buf) ; if (apry[0]==' ' && apry[1]==' ' && apry[2]==' ' && apry[3]==' ') { for(i=0;i<4;i++) apry[i]='*' ; } if (isdigit(anum[0])) { tel[k++]='O' ; tel[k++]=' ' ; for (it=0; it<17 ; it++) tel[k++]=anum[it] ; } else { tel[k++]='I' ; tel[k++]=' ' ; tel[k++]='*' ; } } else { tel[k++]='I' ; tel[k++]=' ' ; tel[k++]='*' ; } tel[k++] = ' ' ; tel[k++] = '*' ; tel[k++] = '*' ; tel[k++] = '*' ; tel[k++] = ' ' ; for (i=0;i<4;) tel[k++]=apry[i++] ; //codigo de proyecto tel[k++] = ' ' ; tel [k++] = '*'; // cuenta tel[k++] = ' '; for (it=0 ; it<4 ; it++) tel[k++]= '0' ; // pulsos tel[k++] = ' ' ; tel[k++] = '*' ; tel[k++] = '*' ; tel[k++] = '*' ; /* ruta */ tel[k++] = ' ' ; tel[k++] = '*' ; /* primer numero */ tel[k++] = ' ' ; tel[k++] = '0' ; tel[k++] = '0' ; tel[k++] = ':' ; tel[k++] = '0' ; tel[k++] = '0' ; /* tiempo ring */ tel[k++] = ' '; tel[k++] = '*'; // anexo transferido tel[k++] = '\r' ; tel[k++] = '\n' ; tel[k++] = '\0' ; } }