#include #include int main (void) { char dtmfbuf [300] = "*1581537359#*002044896227#*3592943431012#"; char IXC_PRESUB[3]; char IXC_ANI[11]; char IXC_DNIS[11]; char IXC_INTL[2]; char IXC_CIC[5]; char IXC_OZZ[4]; char IXC_COUNTRY[4]; char IXC_OPERATOR[2]; char IXC_CUTTHROUGH[2]; char src[100], dest[100], intl[100]; int ret; if (strlen(dtmfbuf)==14) { sscanf (dtmfbuf,"*%12s#",src); ret = 1; } else if (strlen (dtmfbuf) == 26) { sscanf (dtmfbuf,"*%12s#*%10s#",src, dest); ret = 2; } else if (strlen (dtmfbuf) == 27) { sscanf (dtmfbuf,"*%12s#*%11s#",src, dest); ret = 4; } else if (strlen (dtmfbuf) == 41) { sscanf (dtmfbuf, "*%10s#*%12s#*%13s", src, dest, intl); ret = 3; } switch (ret) { case 1: sscanf (src,"%2s%10s",IXC_PRESUB, IXC_ANI); break; case 4: sscanf (src, "%2s%10s",IXC_PRESUB,IXC_ANI); if (strlen(dest) == 10) { strcpy (IXC_DNIS,dest); } else { sscanf (dest,"%c%10s",IXC_OPERATOR, IXC_DNIS); } break; case 2: sscanf (src, "%2s%10s",IXC_PRESUB,IXC_ANI); if (strlen(dest) == 10) { strcpy (IXC_DNIS,dest); } else { sscanf (dest,"%10s",IXC_OPERATOR,IXC_DNIS); } break; case 3: sscanf (src,"%3s%4s%3s",IXC_OZZ, IXC_CIC, IXC_COUNTRY); sscanf (dest, "%2s%10s",IXC_PRESUB,IXC_ANI); strcpy (IXC_DNIS,intl); } printf ("src=%s\n dest=%s\nintl=%s\n",src,dest,intl); return 0; }