示例#1
0
int next_num(int num)
{
	char num_str[10];
	int index, len, i, least_idx, least_num;
	int num_array[9], tmp;

	memset(num_str, 0, 10);
	sprintf(num_str, "%d", num);

	len = strlen(num_str);

	for (i = 0; i < len; i++)
	{
		num_array[i] = C2N(num_str[i]);
	}

	for (i = 0; i < len - 1; i++)
	{
		if (num_array[i] < num_array[i + 1])
			index = i;
	}


	for (i = index + 1, least_num = 9; i < len; i++)
	{
		if (num_array[i] < least_num && num_array[i] > num_array[index])
		{
			least_idx = i;
			least_num = num_array[i];
		}
	}
	tmp = num_array[index];
	num_array[index] = num_array[least_idx];
	num_array[least_idx] = tmp;

	quick_sort(num_array, index + 1, len - 1);

	for (i = 0; i < len; i++)
	{
		num_str[i] = N2C(num_array[i]);
	}

	return atoi(num_str);
}
示例#2
0
int
gdb_tx_mem(const unsigned char *addr, size_t size)
{
	void *prev;
	jmp_buf jb;
	int ret;

	prev = kdb_jmpbuf(jb);
	ret = setjmp(jb);
	if (ret == 0) {
		while (size-- > 0) {
			*gdb_txp++ = N2C(*addr >> 4);
			*gdb_txp++ = N2C(*addr & 0x0f);
			addr++;
		}
	}
	(void)kdb_jmpbuf(prev);
	return ((ret == 0) ? 1 : 0);
}
示例#3
0
int
gdb_tx_end(void)
{
	const char *p;
	int runlen;
	unsigned char c, cksum;

	do {
		gdb_cur->gdb_putc('$');

		cksum = 0;
		p = gdb_txbuf;
		while (p < gdb_txp) {
			/* Send a character and start run-length encoding. */
			c = *p++;
			gdb_cur->gdb_putc(c);
			cksum += c;
			runlen = 0;
			/* Determine run-length and update checksum. */
			while (p < gdb_txp && *p == c) {
				runlen++;
				p++;
			}
			/* Emit the run-length encoded string. */
			while (runlen >= 97) {
				gdb_cur->gdb_putc('*');
				cksum += '*';
				gdb_cur->gdb_putc(97+29);
				cksum += 97+29;
				runlen -= 97;
				if (runlen > 0) {
					gdb_cur->gdb_putc(c);
					cksum += c;
					runlen--;
				}
			}
			if (runlen == 1) {
				gdb_cur->gdb_putc(c);
				cksum += c;
				runlen--;
			}
			if (runlen == 0)
				continue;
			/* Don't emit '$', '#', '+' or '-'. */
			if (runlen == 7) {
				gdb_cur->gdb_putc(c);
				cksum += c;
				runlen--;
			}
			if (runlen == 6 || runlen == 14 || runlen == 16) {
				gdb_cur->gdb_putc(c);
				cksum += c;
				runlen--;
			}
			gdb_cur->gdb_putc('*');
			cksum += '*';
			gdb_cur->gdb_putc(runlen+29);
			cksum += runlen+29;
		}

		gdb_cur->gdb_putc('#');
		c = cksum >> 4;
		gdb_cur->gdb_putc(N2C(c));
		c = cksum & 0x0f;
		gdb_cur->gdb_putc(N2C(c));

		c = gdb_getc();
	} while (c != '+');

	return (0);
}