#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TYPESIZE 40
#define TESTNAMES 6

typedef struct ptype_ {
	char type[TYPESIZE];
	int asize;
	int wsize;
} PTYPE;

void usage(void)
{
	printf("Illegal arguments!\n");
	exit(1);
}

int main(int argc, char **argv)
{
	int value;
	char proc[40];
	int i;
	int first = 1;
	PTYPE info[] = { 
		{ "8080", 16, 8 },
		{ "8088", 20, 8 },
		{ "8086", 20, 16 },
		{ "80188", 20, 8 },
		{ "80186", 20, 16 },
		{ "80286", 24, 16 },
		{ "80386", 32, 32 },
		{ "80486", 32, 32 },
		{ "Pentium", 32, 32 },
		{ "", 0, 0 } // end marker
	};


	if(argc != 2) usage();

	if(argv[1][0] != '/') usage();
	printf("[%s]\n", argv[1]);

	if(sscanf(argv[1], "/a=%d", &value) == 1) {
		printf("a=%d: ", value);
		for(i = 0; info[i].asize != 0; i++) {
			if(info[i].asize == value) {
				if(first) first = 0;
				else printf(", ");
				printf("%s", info[i].type);
			}
		}
	}
	else if(sscanf(argv[1], "/w=%d", &value) == 1) {
		printf("w=%d: ", value);
		for(i = 0; info[i].wsize != 0; i++) {
			if(info[i].wsize == value) {
				if(first) first = 0;
				else printf(", ");
				printf("%s", info[i].type);
			}
		}
	}
	else if(sscanf(argv[1], "/p=%s", &proc) == 1) {
		for(i = 0; info[i].asize != 0; i++) {
			if(strcmp(info[i].type, proc)==0) {
				printf("%s: w=%db a=%db", info[i].type, info[i].wsize, info[i].asize);
			}
		}
	}
	else {
		usage();
	}
	printf("\n");

	return 0;
}