Esempio n. 1
0
int main(int argc, char *argv[]){
	char str[1024];
	int num = 0;
	int format = HEX;
	char opt;
	
	memset(str, 0, 1024);

	while((opt=getopt(argc, argv, "oxb")) != -1){
		switch(opt){
		case 'o': format = OCT;
			break;
		case 'x': format = HEX;
			break;
		case 'b': format = BIN;
			break;
		default: usage(argv[0]);
		}
	}
	
	if(optind >= argc){
		scanf("%s", str);
	} else {
		strcpy(str, argv[optind]);
	}
	
	switch(format){
	case HEX: num = htoi(str);
		break;
	case OCT: num = otoi(str);
		break;
	case BIN: num = btoi(str);
		break;
	default: num = -1;
	}
	
	if(num == -1){
		fprintf(stderr, "Error: incorrectly formatted string %s\n", str);
		return EXIT_FAILURE;
	}
	
	printf("%d\n", num);

	return 0;
}
Esempio n. 2
0
Char myesc(Char *array)
	{
	Char c, esc_char;

	switch ( array[1] )
		{
		case 'b': return '\b';
		case 'f': return '\f';
		case 'n': return '\n';
		case 'r': return '\r';
		case 't': return '\t';

#if __STDC__
		case 'a': return '\a';
		case 'v': return '\v';
#else
		case 'a': return '\007';
		case 'v': return '\013';
#endif

		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
			{ /* \<octal> */
			int sptr = 1;

			while ( isascii( array[sptr] ) &&
				isdigit( array[sptr] ) )
				/* Don't increment inside loop control
				 * because if isdigit() is a macro it might
				 * expand into multiple increments ...
				 */
				++sptr;

			c = array[sptr];
			array[sptr] = '\0';

			esc_char = otoi( array + 1 );

			array[sptr] = c;

			return esc_char;
			}

		case 'x':
			{ /* \x<hex> */
			int sptr = 2;

			while ( isascii( array[sptr] ) &&
				isxdigit( (char) array[sptr] ) )
				/* Don't increment inside loop control
				 * because if isdigit() is a macro it might
				 * expand into multiple increments ...
				 */
				++sptr;

			c = array[sptr];
			array[sptr] = '\0';

			esc_char = htoi( array + 2 );

			array[sptr] = c;

			return esc_char;
			}

		default:
			return array[1];
		}
	}
Esempio n. 3
0
File: cmp.c Progetto: alhazred/onarm
int
main(int argc, char **argv)
{
	int		c;
	int		c1, c2;

	(void) setlocale(LC_ALL, "");
#if !defined(TEXT_DOMAIN)	/* Should be defined by cc -D */
#define	TEXT_DOMAIN "SYS_TEST"	/* Use this only if it weren't */
#endif
	(void) textdomain(TEXT_DOMAIN);

	while ((c = getopt(argc, argv, "ls")) != EOF)
		switch (c) {
			case 'l':
				lflg = 2;
				break;
			case 's':
				lflg = 0;
				break;
			case '?':
			default:
				narg();
		}
	argv += optind;
	argc -= optind;
	if (argc < 2 || argc > 4)
		narg();

	arg = argv[0];
	if (arg[0] == '-' && arg[1] == 0)
		file1 = stdin;
	else if ((file1 = fopen(arg, "r")) == NULL)
		barg();

	arg = argv[1];
	if (arg[0] == '-' && arg[1] == 0)
		file2 = stdin;
	else if ((file2 = fopen(arg, "r")) == NULL)
		barg();

	if (file1 == stdin && file2 == stdin)
		narg();

	if (argc > 2)
		skip1 = otoi(argv[2]);
	if (argc > 3)
		skip2 = otoi(argv[3]);
	while (skip1) {
		if ((c1 = getc(file1)) == EOF) {
			arg = argv[0];
			earg();
		}
		skip1--;
	}
	while (skip2) {
		if ((c2 = getc(file2)) == EOF) {
			arg = argv[1];
			earg();
		}
		skip2--;
	}

	for (;;) {
		chr++;
		c1 = getc(file1);
		c2 = getc(file2);
		if (c1 == c2) {
			if (c1 == '\n')
				line++;
			if (c1 == EOF) {
				if (eflg)
					return (1);
				return (0);
			}
			continue;
		}
		if (lflg == 0)
			return (1);
		if (c1 == EOF) {
			arg = argv[0];
			earg();
		}
		if (c2 == EOF)
			earg();
		if (lflg == 1) {
			(void) printf(
			    gettext("%s %s differ: char %lld, line %lld\n"),
			    argv[0], arg, chr, line);
			return (1);
		}
		eflg = 1;
		(void) printf("%6lld %3o %3o\n", chr, c1, c2);
	}
}