示例#1
0
文件: cmd.cpp 项目: voidpaper/sgs2010
// get a world from cmd split with space,return the point to the word first valid char, null if no more any words 
static char* get_word(char* cmd, char** next)
{
	char *p = cmd;
	char *q;
	char quote = 0;

	while(*p && isspace(C2I(*p))) p++;
	
	// end of line
	if(*p == 0)
	{
		if(next) *next = p;
		return NULL; 
	}

	if(*p == '\'' || *p == '\"')
	{
		quote = *p;

		p++;
	}

	q = p;

	if(quote == 0)
	{
		while(*q && !isspace(C2I(*q))) q++;
	}
	else
	{
		while(*q && *q != quote) q++;

		if(*q == 0 || !( isspace(C2I(*(q+1))) || *(q+1) == 0) )
		{
			if(next) *next = p;
			return NULL;
		}
	}

	if(*q)
	{
		*q = 0;
		if(next) *next = q + 1;
	}
	else
	{
		if(next) *next = q;
	}


	return p;
}
示例#2
0
文件: test.c 项目: jaredlwong/threes
void
test_possible_places(void)
{
	board_t *board;
	uint64_t possible_places;
	char *bstr[] = {
		"0", "0", "0", "0",
		"0", "0", "0", "0",
		"0", "0", "0", "0",
		"0", "0", "0", "0"
	};

	board = create_board(bstr, NORTH, 0, 0, 0);
	possible_places = comp_possible_places(board);
	assert(board->last_move_dir == NORTH);
	assert((possible_places & (1 << C2I(0,3))) > 0);
	assert((possible_places & (1 << C2I(1,3))) > 0);
	assert((possible_places & (1 << C2I(2,3))) > 0);
	assert((possible_places & (1 << C2I(3,3))) > 0);
	free(board);
}
示例#3
0
RESULT to_int(const char* text, int* pv)
{
	char* p;
	long l = strtol(text, &p, 0);

	while(*p && isspace(C2I(*p))) p++;

	if(*p != '\0')
		return R_E_FAIL;

	if(pv) *pv = l;
	return R_SUCC;
}
示例#4
0
文件: test.c 项目: jaredlwong/threes
void
test_comp_make_move(void)
{
	board_t *board;
	char *bstr[] = {
		"0", "0", "0", "0",
		"0", "0", "0", "0",
		"0", "0", "0", "0",
		"0", "0", "0", "0"
	};

	board = create_board(bstr, NORTH, 4, 4, 4);
	comp_make_move(board, C2I(0, 3), P1);
	assert(PIECE(board->b, 0, 3) == P1);
	assert(board->n_ones == 3);
	free(board);

	board = create_board(bstr, NORTH, 0, 0, 1);
	comp_make_move(board, C2I(0, 3), P3);
	assert(PIECE(board->b, 0, 3) == P3);
	assert(board->n_ones == 4);
	free(board);
}
示例#5
0
RESULT to_float(const char* text, float* pv)
{
	char* p;
	float f = (float)strtod(text, &p);

	while(*p && isspace(C2I(*p))) p++;

	if(*p != '\0')
		return R_E_FAIL;

	if(pv) *pv = f;
	return R_SUCC;

}
示例#6
0
RESULT to_uint(const char* text, unsigned int* pv)
{
	char* p;
	unsigned long ul = strtoul(text, &p, 0);

	while(*p && isspace(C2I(*p))) p++;

	if(*p != '\0')
		return R_E_FAIL;

	if(pv) *pv = ul;
	return R_SUCC;

}
示例#7
0
文件: server.c 项目: dmr0605/Kerberos
/* Have we read an entire request? */
static int
kdc_ready (struct listenspec *ls)
{
  size_t waitfor = ls->bufpos >= 4 ? C2I (ls->buf) : 4;

  syslog (LOG_DEBUG, "Got %d bytes of %d bytes from %s on socket %d\n",
	  ls->bufpos, waitfor + 4, ls->str, ls->sockfd);

  if (ls->type == SOCK_DGRAM && ls->bufpos > 0)
    return 1;
  else if (ls->bufpos > 4 && waitfor + 4 == ls->bufpos)
    return 1;

  return 0;
}
示例#8
0
char* strtrim(char* buffer)
{
	int b;
	int n = strlen(buffer) - 1;

	while(n >= 0 && isspace(C2I(buffer[n])))
	{
		buffer[n] = '\0';
		n--;
	}

	if(n < 0)
		return buffer;

	b = 0;
	while(buffer[b] != '\0' && isspace(C2I(buffer[b])))
	{
		b++;
	}

	memmove(buffer, buffer+b, n-b+1);
	buffer[n-b+1] = '\0';
	return buffer;
}
示例#9
0
int main(int argc, char * * argv)
{
	FILE * fichier;
	char * ligne;
	unsigned int i;
	unsigned int j;
	unsigned int k;
	unsigned int l;
	unsigned long long index;
	unsigned char position[256];
	unsigned int charset;
	unsigned int nb_lignes;

	if(argc!=3)
	{
		printf("Usage: %s statfile pwdfile\n", argv[0]);
		return -1;
	}

	fichier = fopen(argv[1], "r");
	if(!fichier)
	{
		printf("could not open %s\n", argv[1]);
		return -1;
	}

	first = malloc( sizeof(unsigned char) * 256 );
	if(first == NULL)
	{
		perror("malloc first");
		return 3;
	}

	ligne = malloc(4096);
	if(ligne == NULL) { perror("malloc ligne"); return 3; }
	proba2 = malloc(sizeof(unsigned char) * 256 * 256);
	if(proba2 == NULL) { perror("malloc proba2"); return 3; }
	proba1 = malloc(sizeof(unsigned char) * 256 );
	if(proba1 == NULL) { perror("malloc proba1"); return 3; }
	for(i=0;i<256*256;i++)
		proba2[i] = UNK_STR;
	for(i=0;i<256;i++)
		proba1[i] = UNK_STR;

	for(i=0;i<256;i++)
	{
		first[i] = 255;
		position[i] = 255;
	}

	nb_lignes = 0;
	charset = 0;
	fprintf(stderr, "reading stats ... [%p]\n", fichier);
	while(fgets(ligne, 4096, fichier))
	{
		if (ligne[0] == 0)
		{
			fprintf(stderr, "empty line?\n");
			continue;
		}
		ligne[strlen(ligne)-1] = 0; // chop
		if( sscanf(ligne, "%d=proba1[%d]", &i, &j) == 2 )
		{
			if( j>255 )
			{
				fprintf(stderr, "invalid line %s\n", ligne);
				continue;
			}
			proba1[j] = i;
			if(position[j] == 255)
			{
				position[j] = charset;
				charset++;
			}
		}
		else if( sscanf(ligne, "%d=proba2[%d*256+%d]", &i, &j, &k) == 3 )
		{
			if( (j>255) || (k>255) )
			{
				fprintf(stderr, "invalid line %s\n", ligne);
				continue;
			}
			if( (first[j]>k) && (i<UNK_STR))
				first[j] = k;
			proba2[j*256+k] = i;
			if(position[k] == 255)
			{
				position[k] = charset;
				charset++;
			}
		}
		else
			fprintf(stderr, "invalid line %s\n", ligne);
		nb_lignes++;
	}
	fprintf(stderr, "%d lines parsed [%p]\n", nb_lignes, fichier);
	fclose(fichier);

	fichier = fopen(argv[2], "r");
	if(!fichier)
	{
		printf("could not open %s\n", argv[2]);
		return -1;
	}

	fprintf(stderr, "scanning password file ...\n");
	while(fgets(ligne, 4096, fichier))
	{
		if (ligne[0] == 0)
			continue;
		ligne[strlen(ligne)-1] = 0; // chop
		i=1; j=0; k=0;
		j = C2I(ligne[0]);
		k = proba1[j];
		if(ligne[0]==0)
			k = 0;
		printf("%s\t%d", ligne, k);
		l = 0;
		index = position[j];
		if(position[j]==255)
			index = 8.1E18;
		while(ligne[i])
		{
			if(index<8E18)
				index = (index*charset)+position[C2I(ligne[i])];
			if(position[C2I(ligne[i])]==255)
				index = 8.1E18;
			printf("+%d", proba2[j*256+C2I(ligne[i])]);
			k+=proba2[j*256+C2I(ligne[i])];
			if(l)
				l+=proba2[j*256+C2I(ligne[i])];
			if(i==2)
				l=proba1[C2I(ligne[i])];
			j = C2I(ligne[i]);
			i++;
		}
		if(index<8E18)
			printf("\t%d\t%d\t%"LLd"\t%d\n",k,i,index,l);
		else
			printf("\t%d\t%d\t-\t%d\n",k,i,l);
	}
	fprintf(stderr, "freeing stuff ...\n");

	fclose(fichier);

	MEM_FREE(proba1);
	MEM_FREE(proba2);

	MEM_FREE(first);

	MEM_FREE(ligne);

	fprintf(stderr, "charsetsize = %d\n", charset);

	return 0;
}
示例#10
0
文件: calc_stat.c 项目: mimaun/Rose
int main(int argc, char * * argv)
{
	FILE * fichier;
	char * ligne;
	int i;
	int j;
	int np;
	int npflag;
	int args;
	unsigned int nb_lignes;
	unsigned int nb_lettres;

	FILE * statfile;

	if( (argc!=3) && (argc!=4) )
	{
		fprintf(stderr, "Usage: %s [-p] dictionary_file statfile\n\t-p: include non printable and 8-bit characters\n", argv[0]);
		return -1;
	}

	if(argc==4)
	{
		if(strcmp(argv[1], "-p"))
		{
			fprintf(stderr, "Usage: %s [-p] dictionary_file statfile\n\t-p: include non printable and 8-bit characters\n", argv[0]);
			return -1;
		}
		args = 1;
		npflag = 1;
	}
	else
	{
		args = 0;
		npflag = 0;
	}

	fichier = fopen(argv[1+args], "r");
	if(!fichier)
	{
		fprintf(stderr, "could not open %s\n", argv[1+args]);
		return -1;
	}

	first = malloc( sizeof(unsigned int) * 256 );

	ligne = malloc(4096);

	proba2 = malloc(sizeof(unsigned int) * 256 * 256);
	proba1 = malloc(sizeof(unsigned int) * 256 );
	memset(proba2, 0, sizeof(unsigned int) * 256 * 256);
	memset(proba1, 0, sizeof(unsigned int) * 256 );

	statfile = fopen(argv[2+args], "w");

	nb_lignes = 0;
	while(fgets(ligne, 4096, fichier))
	{
		if (ligne[0] == 0)
			continue;
		i = strlen(ligne)-1;
		while( (i>0) && ((ligne[i]=='\n') || (ligne[i]=='\r')) )
		{
			ligne[i]=0;
			i--;
		}
		for(i=0;ligne[i];i++)
		{
			np = 0;
			if (!npflag) {
				if(C2I(ligne[i])<32)
				{
					fprintf(stderr,
					        "Warning, skipping non printable character 0x%02x line %d offset %d: %s\n",
					        (unsigned char)ligne[i], nb_lignes, i, ligne);
					np += 1;
				}
				if(C2I(ligne[i])>127)
				{
					fprintf(stderr,
					        "Warning, skipping non-ASCII character 0x%02x line %d offset %d: %s\n",
					        (unsigned char)ligne[i], nb_lignes, i, ligne);
					np += 1;
				}
				if((i>0) && (C2I(ligne[i-1])<32))
				{
					np += 2;
				}
				if((i>0) && (C2I(ligne[i-1])>127))
				{
					np += 2;
				}
			}
			if( (i==0) && ((np == 0) || (npflag == 1)) )
				proba1[C2I(ligne[0])]++;
			if( (i>0) && ((np == 0) || (npflag == 1)) )
				proba2[C2I(ligne[i-1])*256 + C2I(ligne[i])]++;
		}
		nb_lignes++;
	}

	for(i=0;i<256;i++)
	{
		if ( (proba1[i] == 0 ) || (i==0) )
		{
			proba1[i] = 1000;
		}
		else
		{
			if( (unsigned int) (- 10*log( (double) proba1[i] / (double) nb_lignes )) == 0)
			{
				fprintf(stderr, "zero -10*log proba1[%d] (%d) / %d converted to 1\n", i, proba1[i], nb_lignes);
				proba1[i] = 1;
			}
			else
				proba1[i] = (unsigned int) (- 10*log( (double) proba1[i] / (double) nb_lignes ));
			fprintf(statfile, "%d=proba1[%d]\n", proba1[i], i);
		}

		/* premiere passe : nb lettres */
		nb_lettres = 0;
		for(j=0;j<256;j++)
		{
			nb_lettres += proba2[i*256 + j];
		}

		first[i] = 255;

		/* maintenant, calcul des stats */
		for(j=0;j<256;j++)
		{
			if( proba2[i*256 + j] == 0 )
			{
				proba2[i*256 + j] = 1000;
			}
			else
			{
				if(first[i] == 255)
					first[i] = j;
				if((unsigned int) (- 10*log( (double) proba2[i*256+j] / (double) nb_lettres )) == 0)
				{
					fprintf(stderr, "zero -10*log proba2[%d*256+%d] (%d) / %d, converted to 1 to prevent infinite length candidates\n", i, j, proba2[i*256+j],nb_lettres );
					proba2[i*256 + j] = 1;
				}
				else
				{
					proba2[i*256 + j] = (unsigned int) (- 10*log( (double) proba2[i*256+j] / (double) nb_lettres ));
				}
				fprintf(statfile, "%d=proba2[%d*256+%d]\n", proba2[i*256+j], i, j);
			}
		}
	}

	fclose(statfile);

	MEM_FREE(proba1);
	MEM_FREE(proba2);

	MEM_FREE(first);

	MEM_FREE(ligne);
	fclose(fichier);

	MEMDBG_PROGRAM_EXIT_CHECKS(stderr);

	return 0;
}