Пример #1
0
bool is_palindrome(unsigned N){
	unsigned len = digit_length(N, 10);
	unsigned lower = 10;
	unsigned upper = powi(10, len);
	unsigned low_digit, high_digit;
	for (unsigned i = 0; i < len / 2; i += 1){
		low_digit  = (10 * (N % lower)) / lower;
		high_digit = (10 * (N % upper)) / upper;
		if (low_digit != high_digit){
			return false;
		}
		lower *= 10;
		upper /= 10;
	}
	return true;
}
Пример #2
0
void cmd_resp(int8 retval, int8 idval)
{
	uint8 cnt, len, idx = 0;

	DBGA("ret(%d), id(%d)", retval, idval);
	cnt = (atci.tcmd.arg1[0] != 0) + (atci.tcmd.arg2[0] != 0) + (atci.tcmd.arg3[0] != 0) + 
		  (atci.tcmd.arg4[0] != 0) + (atci.tcmd.arg5[0] != 0) + (atci.tcmd.arg6[0] != 0);
#define MAKE_RESP(item_v, size_v) \
{ \
	if(item_v[0] != 0) { \
		termbuf[idx++] = ','; \
		len = strlen((char*)item_v); \
		if(len > size_v-1) CRITICAL_ERR("resp buf overflow"); \
		memcpy((char*)&termbuf[idx], (char*)item_v, len); \
		idx += len; \
		cnt--; \
	} else if(cnt) { \
		termbuf[idx++] = ','; \
	} \
}//printf("MakeResp-(%s)(%d)", item_v, len); 
	termbuf[idx++] = '[';
	if(retval >= RET_OK) {
		if(retval == RET_OK) termbuf[idx++] = 'S';
		else if(retval == RET_OK_DUMP) CRITICAL_ERR("use cmd_resp_dump for dump");
		else if(retval == RET_ASYNC) termbuf[idx++] = 'W';
		else if(retval == RET_RECV) termbuf[idx++] = 'R';
		else CRITICAL_ERRA("undefined return value (%d)", retval);

		if(idval != VAL_NONE) {
			termbuf[idx++] = ',';
			//snprintf((char*)tbuf, TBUF_SIZE, "%d", idval);
			//len = strlen((char*)tbuf);
			//strcpy((char*)&termbuf[idx], (char*)tbuf);
			sprintf((char*)&termbuf[idx], "%d", idval);
			len = digit_length(idval, 10);
			idx += len;
		} else if(cnt) termbuf[idx++] = ',';
	} else {
		termbuf[idx++] = 'F';
		termbuf[idx++] = ',';
		if(idval != VAL_NONE) {
			//snprintf((char*)tbuf, TBUF_SIZE, "%d", idval);
			//len = strlen((char*)tbuf);
			//strcpy((char*)&termbuf[idx], (char*)tbuf);
			sprintf((char*)&termbuf[idx], "%d", idval);
			len = digit_length(idval, 10);
			idx += len;
		}
		termbuf[idx++] = ',';
#define CMD_SWT_DEF(errval_v) termbuf[idx++] = errval_v; break;
#define CMD_SWT_EXT(base_v, errval_v) termbuf[idx++]=base_v;termbuf[idx++] = errval_v; break;
		switch(retval) {
		case RET_UNSPECIFIED: CMD_SWT_DEF(ERRVAL_UNSPECIFIED);
		case RET_WRONG_OP: CMD_SWT_DEF(ERRVAL_WRONG_OP);
		case RET_WRONG_SIGN: CMD_SWT_DEF(ERRVAL_WRONG_SIGN);
		case RET_WRONG_ARG: CMD_SWT_DEF(ERRVAL_WRONG_ARG);
		case RET_RANGE_OUT: CMD_SWT_DEF(ERRVAL_RANGE_OUT);
		case RET_DISABLED: CMD_SWT_DEF(ERRVAL_DISABLED);
		case RET_NOT_ALLOWED: CMD_SWT_DEF(ERRVAL_NOT_ALLOWED);
		case RET_BUSY: CMD_SWT_DEF(ERRVAL_BUSY);
		case RET_TIMEOUT: CMD_SWT_DEF(ERRVAL_TIMEOUT);
		case RET_NO_SOCK: CMD_SWT_EXT('1', ERRVAL_NO_SOCK);
		case RET_SOCK_CLS: CMD_SWT_EXT('1', ERRVAL_SOCK_CLS);
		case RET_USING_PORT: CMD_SWT_EXT('1', ERRVAL_USING_PORT);
		case RET_NOT_CONN: CMD_SWT_EXT('1', ERRVAL_NOT_CONN);
		case RET_WRONG_ADDR: CMD_SWT_EXT('1', ERRVAL_WRONG_ADDR);
		case RET_NO_DATA: CMD_SWT_EXT('1', ERRVAL_NO_DATA);
		case RET_NO_FREEMEM: CMD_SWT_EXT('2', ERRVAL_NO_FREEMEM);
		default:termbuf[idx++] = '0';break;
		}
	}
	MAKE_RESP(atci.tcmd.arg1, ARG_1_SIZE);
	MAKE_RESP(atci.tcmd.arg2, ARG_2_SIZE);
	MAKE_RESP(atci.tcmd.arg3, ARG_3_SIZE);
	MAKE_RESP(atci.tcmd.arg4, ARG_4_SIZE);
	MAKE_RESP(atci.tcmd.arg5, ARG_5_SIZE);
	MAKE_RESP(atci.tcmd.arg6, ARG_6_SIZE);
	termbuf[idx++] = ']';
	termbuf[idx++] = 0;
	printf("%s\r\n", termbuf);	// print basic response
}