rem: dprintf("port: not enough arguments\n");
add: dprintf("usage: port [id|name|address]\n");
context: dump_port_info(int argc, char **argv){	int i;	if (argc < 2) {		dprintf("port: not enough arguments\n");		return 0;	}	// if the argument looks like a hex number, treat it as such	if (strlen(argv[1]) > 2 && argv[1][0] == '0' && argv[1][1] == 'x') {		unsigned long num = strtoul(argv[1], NULL, 16);		if (num > KERNEL_BASE && num <= (KERNEL_BASE + (KERNEL_SIZE - 1))) {			// XXX semi-hack			// one can use either address or a port_id, since KERNEL_BASE > sMaxPorts assumed			_dump_port_info((struct port_entry *)num);			return 0;		} else {			unsigned slot = num % sMaxPorts;			if(sPorts[slot].id != (int)num) {				dprintf("port 0x%lx doesn't exist!\n", num);				return 0;			}			_dump_port_info(&sPorts[slot]);			return 0;		}	}	// walk through the ports list, trying to match name	for (i = 0; i < sMaxPorts; i++) {		if (sPorts[i].name != NULL			&& strcmp(argv[1], sPorts[i].name) == 0) {			_dump_port_info(&sPorts[i]);			return 0;		}	}	return 0;}