Esempio n. 1
0
int assert(Emulator *emul)
{	
	interpreteur inter = emul->inter;
	char* what= NULL;
	char* va = NULL;
	char *value = NULL;
	unsigned int val = 0; // value en unsigned int
	char usage[] = "Usage : assert reg <registre> <valeur>\n\tassert word <adresse> <valeur>\n\tassert byte <adresse> <valeur>\n";

	what = get_next_token (inter); // récupère reg, word ou byte
	va = get_next_token(inter); // registre ou adresse
	value = get_next_token(inter); // valeur

	if(what == NULL
	|| va == NULL
	|| value == NULL 
	|| get_next_token(inter) != NULL) // pas assez ou trop de tokens
	{
		WARNING_MSG("Problem with tokens");
		printf("%s", usage);
		return 1;
	}

	/* On commence par tester la valeur car elle est commune au 3 commandes
	*/

	if(is_figure(value) != 0) // La valeur n'est pas correcte
	{
		WARNING_MSG("Value must be decimal, hexadecimal or octodecimal");
		return 2;
	}

	val = strtoul(value, NULL, 0);

	if(strcmp(what, "reg") == 0)
	{
		return assert_reg(va, val, emul->reg);
	}
	else if(strcmp(what, "word") == 0)
	{
		return assert_wrd(strtoul(va, NULL, 0), val, emul->map);
	}
	else if(strcmp(what, "byte") == 0)
	{
		return assert_bte(strtoul(va, NULL, 0), val, emul->map);
	}
	else {
		WARNING_MSG("Bad value for second token");
		printf("%s", usage);
		return 3;
	}
}
Esempio n. 2
0
File: 905.c Progetto: shtyd/syspro
void
print_content()
{
	char  *query_string ;
	char **qv ;
	int    qc ;
	char  *arg1, *arg2, *arg3;

	int n1, n2, op;

	printf("<HTML><HEAD></HEAD><BODY><PRE>\n");
	query_string = get_query_string();

	if(  string_split( query_string,'&',&qc, &qv ) < 0 )
	{
		printf("Error while parsing query string\n");
		printf("</PRE></BODY></HTML>\n");
		if( query_string )
			free( query_string );
		exit( -1 );
	}

	arg1 = getparam( qc, qv, "arg1" );
	arg2 = getparam( qc, qv, "arg2" );
	arg3 = getparam( qc, qv, "arg3" );

	if (arg1 == NULL || arg2 == NULL)
	{
		printf("error: QUERY STRING must be \"arg1=INT&arg2=INT&arg3=INT\"\n");
		printf("</PRE></BODY></HTML>\n");
		free_string_vector( qc, qv );
		if( query_string )
			free( query_string );
		exit(-1);
	}

	if (arg3 == NULL)
	{
		printf("error: QUERY STRING must be \"arg1=INT&arg2=INT&arg3=INT\"\n");
		printf("</PRE></BODY></HTML>\n");
		free_string_vector( qc, qv );
		if( query_string )
			free( query_string );
		exit(-1);
	}

	/* printf("arg1: ["); safe_print_string( arg1 ); printf("]\n"); */
	/* printf("arg2: ["); safe_print_string( arg2 ); printf("]\n"); */

	if (*arg1 == '\0' || *arg2 == '\0')
	{
		printf("error: too few arguments to execute this program\n");
		printf("</PRE></BODY></HTML>\n");
		free_string_vector( qc, qv );
		if( query_string )
			free( query_string );
		exit(-1);
	}

	if (!is_figure(arg1) || !is_figure(arg2))
	{
		printf("error:input figure\n");
		printf("</PRE></BODY></HTML>\n");
		free_string_vector( qc, qv );
		if( query_string )
			free( query_string );
		exit(-1);
	}

	if (*arg3 == '\0')
	{
		printf("error: select a kind of calculation\n");
		printf("</PRE></BODY></HTML>\n");
		free_string_vector( qc, qv );
		if( query_string )
			free( query_string );
		exit(-1);
	}

	n1 = atoi(arg1);
	n2 = atoi(arg2);
	op = atoi(arg3);

	if (op == 1)
		printf("%d\n", n1 + n2);
	else if (op == 2)
		printf("%d\n", n1 - n2);
	else if (op == 3)
		printf("%d\n", n1 * n2);
	else if (op == 4)
	{
		if (n2 == 0) 			
			printf("error : divisor is zero\n");
		else
			printf("%d\n", n1 / n2);		
	}

	printf("</PRE></BODY></HTML>\n");
	free_string_vector( qc, qv );
	if( query_string )
		free( query_string );
}