| Код | #include <stdio.h> #include <limits.h> /* for UINT_MAX */
#define UFIH__CALL_TYPE__TA_MOC 11 #define UFIH__CALL_TYPE__TA_MTC 12
#define UFIH__GSM_PI__TELEPHONY 20017 #define UFIH__GSM_PI__MTSMS 20033 #define UFIH__GSM_PI__MOSMS 20034 #define UFIH__GSM_PI__GPRS 41
#define _INTCOMB_MAXHI (UINT_MAX >> INTCOMB_BITS) #define _INTCOMB_MAXLO (~(UINT_MAX << INTCOMB_BITS)) #define _INTCOMB_VALID(val, maxval) ((val) >= 0 && (val) <= maxval ? 1 : 0)
#define INTCOMB_BITS 8 #define INTCOMB_DEFAULT -1 #define INTCOMB_STATIC(hi, lo) ( ( ((hi) << INTCOMB_BITS) | (lo) ) / _INTCOMB_VALID( (hi), _INTCOMB_MAXHI) / _INTCOMB_VALID( (lo), _INTCOMB_MAXLO) ) #define INTCOMB(hi, lo) ( _INTCOMB_VALID( (hi), _INTCOMB_MAXHI) && _INTCOMB_VALID( (lo), _INTCOMB_MAXLO) ? ( ((hi) << INTCOMB_BITS) | (lo) ) : INTCOMB_DEFAULT )
int main(int argc, char* argv[]) { int hi, lo; printf("possible GSM PI:\n"); printf(" UFIH__GSM_PI__TELEPHONY = %d\n", UFIH__GSM_PI__TELEPHONY); printf(" UFIH__GSM_PI__MTSMS = %d\n", UFIH__GSM_PI__MTSMS); printf(" UFIH__GSM_PI__MOSMS = %d\n", UFIH__GSM_PI__MOSMS ); printf(" UFIH__GSM_PI__GPRS = %d\n", UFIH__GSM_PI__GPRS );
printf("possible call types:\n"); printf(" UFIH__CALL_TYPE__TA_MOC = %d\n", UFIH__CALL_TYPE__TA_MOC); printf(" UFIH__CALL_TYPE__TA_MTC = %d\n", UFIH__CALL_TYPE__TA_MTC); printf("\n");
printf("input 2 ints> "); if (scanf("%d %d", &hi, &lo) < 2) { return 1; }
switch(INTCOMB(hi, lo)) { case INTCOMB_DEFAULT: default: printf("unknown combination: %d %d\n", hi, lo); break;
/* TELESERVICECODE */ case INTCOMB_STATIC(UFIH__GSM_PI__TELEPHONY, UFIH__CALL_TYPE__TA_MTC): printf("roaming Mobile Terminated Voice call\n"); break; case INTCOMB_STATIC(UFIH__GSM_PI__TELEPHONY, UFIH__CALL_TYPE__TA_MOC): printf("roaming Mobile Originated Voice call\n"); break; case INTCOMB_STATIC(UFIH__GSM_PI__MOSMS, UFIH__CALL_TYPE__TA_MOC): printf("roaming Mobile Originated SMS\n"); break; case INTCOMB_STATIC(UFIH__GSM_PI__GPRS, UFIH__CALL_TYPE__TA_MOC): printf("roaming GPRS\n"); /* BEARERSERVICECODE */ /* CDR_CALLTYPE_ROAM_MO_VT, CDR_CALLTYPE_ROAM_MT_VT, CDR_CALLTYPE_ROAM_DATA_MO, CDR_CALLTYPE_ROAM_DATA_MT */ } return 0; }
|
|