Filewatcher File Search
FTP Search
  
Directory (beta)
  
Content Search (beta)
   
pkg://MAKEDEV-3.3.8-1.src.rpm:96139/MAKEDEV-3.3.8-1.tar.gz  info  downloads

MAKEDEV-3.3.8/0040775000471600047240000000000007731332761011615 5ustar  nalinnalinMAKEDEV-3.3.8/MAKEDEV.c0100664000471600047240000005605007445712735013045 0ustar  nalinnalin/*
 *  Copyright 2000,2001 Red Hat, Inc.
 * 
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *  This file is formatted to fit on a 132-column screen.
 */

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <assert.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <grp.h>
#include <limits.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#ifndef CFGDIR
#define CFGDIR "/etc/makedev.d"
#endif

#ifndef DEVDIR
#define DEVDIR "/dev"
#endif

#define VERBOSE		(1 << 0)
#define FAKE		(1 << 1)
#define DELETE		(1 << 2)
#define IGNORE		(1 << 3)
#define MANIFEST	(1 << 4)
#define SCRIPT		(1 << 5)

enum entry_type {
	BLOCK = 'b',
	CHAR = 'c',
	LINK = 'l',
	ALIAS = 'a',
	SOCKET = 's',
	MACRO = '=',
};

struct device_entry {
	enum entry_type type;
	unsigned int perms;       /* permissions */
	const char *user;         /* device owner */
	const char *group;        /* device group */
	unsigned int major;       /* device major number */
	unsigned int minor;       /* minor number of the first device */
	unsigned int minor_step;  /* difference between minor one and two */
	unsigned int num;         /* number of devices to create */
	const char *name;         /* format string for the devices */
	unsigned int base;        /* number to start formatting names with */
	const char *link_target;  /* target for a symlink, if it is one */
	struct device_entry *next;
};

struct dirlist_entry {
	char *path;
	struct dirlist_entry *next;
};

struct macro {
	const char *name, *expansion;
	struct macro *next;
};

struct device_entry *devices = NULL, *last_device = NULL;
struct dirlist_entry *dirlist = NULL;
struct macro *macros = NULL;

static void makedevices(const char *directory, const char *fragment, int max, int flags);

/* Check if the directory list contains a particular directory. */
static int
dirlist_contains(const char *directory)
{
	struct dirlist_entry *entry = dirlist;
	while(entry) {
		if(strcmp(entry->path, directory) == 0) {
			return 1;
		}
		entry = entry->next;
	}
	return 0;
}

static void
dirlist_add(const char *directory)
{
	struct dirlist_entry *entry = NULL;
	entry = malloc(sizeof(struct dirlist_entry));
	entry->path = strdup(directory);
	entry->next = dirlist;
	dirlist = entry;
}

/* Make the device files and links associated with this entry. */
static int
makenodes(const char *directory, const char *fragment, struct device_entry *entry, int max, int flags)
{
	struct passwd *pwd;
	struct group *grp;
	struct stat st;
	char path[PATH_MAX], pattern[PATH_MAX], tmp[PATH_MAX];
	mode_t mode;
	dev_t dev;
	int mul, frlen, dirlen, i;
	int ret = 0;

	/* Compute the lengths of our fixed-length strings, because we'll be
	 * using them a lot. */
	frlen = strlen(fragment);
	dirlen = strlen(directory);

	/* Limit the number of devices we'll create per entry. */
	for(mul = 0; (max != 0) && (mul < entry->num); max--, mul++) {
		memset(pattern, '\0', sizeof(pattern));
		memset(path, '\0', sizeof(path));
		memset(tmp, '\0', sizeof(tmp));

		/* Build the file name. */
		snprintf(pattern, sizeof(pattern),
			 "%s/%s", directory, entry->name);

		/* If this is not the first device, and there's not some
		 * format specifier in there, append a "%d", which makes things
		 * like hda/hda1 really easy to do. */
		if(mul > 0) {
			if(strchr(pattern, '%') == NULL) {
				strncat(pattern, "%d", sizeof(pattern) - 1 - strlen(pattern));
			}
		}
		snprintf(path, sizeof(path), pattern, mul + entry->base);

		/* Check if the target matches the fragment. */
		if(strncmp(fragment, path + dirlen + 1, frlen) != 0) {
			continue;
		}
		ret = 1;

		/* If the device is in a subdirectory, go ahead and create it
		 * if it doesn't already exist. */
		for(i = 0; path[i] != '\0'; i++) {
			if( !((path[i] == '/') && (i > 0)) )
				continue;
			strcpy(tmp, path);
			tmp[i] = '\0';
			if((lstat(tmp, &st) != -1) || (errno != ENOENT))
				continue;
			if(dirlist_contains(tmp))
				continue;
			dirlist_add(tmp);
			if(flags & MANIFEST) {
				printf("%%attr(0%o, %s, %s) %%dir %s\n", 0755, "root", "root", tmp);
			} else
			if(flags & SCRIPT) {
				printf("mkdir -p -m 0%o %s\n", 0755, tmp);
				printf("chown %s.%s %s\n", "root", "root", tmp);
			} else
			if(flags & VERBOSE) {
				printf("mkdir %s\n", tmp);
			}

			if(!(flags & FAKE)) {
				mkdir(tmp, 0755);
				if(!(flags & MANIFEST)) {
					pwd = getpwnam(entry->user);
					grp = getgrnam(entry->group);

					chown(tmp, pwd ? pwd->pw_uid : 0, grp ? grp->gr_gid : 0);
				}
			}
		}

		/* Set the mode. */
		assert((entry->type == BLOCK) ||
		       (entry->type == CHAR) ||
		       (entry->type == LINK) ||
		       (entry->type == ALIAS) ||
		       (entry->type == SOCKET));
		mode = entry->perms;
		if(entry->type == BLOCK) {
			mode |= S_IFBLK;
		} else
		if(entry->type == CHAR) {
			mode |= S_IFCHR;
		} else
		if(entry->type == LINK) {
			mode |= S_IFLNK;
		}

		/* Actually create device files. */
		if((entry->type == BLOCK) || (entry->type == CHAR)) {
			/* Set the major/minor numbers. */
			dev = makedev(entry->major, entry->minor + (mul * entry->minor_step));

			/* Determine the IDs of the owner and her group. */
			pwd = getpwnam(entry->user);
			grp = getgrnam(entry->group);

			/* Check that we aren't trying anything unnecessary. */
			if(lstat(path, &st) == 0)
			if(((entry->type == CHAR) && S_ISCHR(st.st_mode)) || ((entry->type == BLOCK) && S_ISBLK(st.st_mode)))
			if(st.st_rdev == dev)
			if(st.st_uid == pwd->pw_uid)
			if(st.st_gid == pwd->pw_gid)
			if((st.st_mode & 0777) == entry->perms) {
				/* We know how to create this, but we didn't. */
				ret = 1;
				continue;
			}

			/* Log a message if we're being verbose. */
			if(flags & MANIFEST) {
				printf("%%attr(0%o, %s, %s)", entry->perms, entry->user, entry->group);
				printf(" %%dev(%c, %d, %d)",
				    (entry->type == CHAR) ? 'c' :
				    ((entry->type == BLOCK) ? 'b' : '?'),
				    entry->major,
				    entry->minor + (mul * entry->minor_step));
				printf(" %s\n", path);
			} else
			if(flags & SCRIPT) {
				printf("mknod -m 0%o %s %c %d %d\n",
				       entry->perms, path, (entry->type == CHAR) ? 'c' :
				       ((entry->type == BLOCK) ? 'b' : '?'),
				       entry->major,
				       entry->minor + (mul * entry->minor_step));
				printf("chown %s.%s %s\n", "root", "root", path);
			} else
			if(flags & VERBOSE) {
				printf("create %-30s %c %3d %3d %s:%s %3o\n",
				       path + dirlen + 1,
				       (entry->type == CHAR) ? 'c' :
				       ((entry->type == BLOCK) ? 'b' : '?'),
				       entry->major,
				       entry->minor + (mul * entry->minor_step),
				       entry->user,
				       entry->group,
				       mode & 0777);
			}

			/* Create the node. */
			if(!(flags & (FAKE | MANIFEST))) {
				int r, made = 0;
				strcpy(pattern, path);
				strcat(pattern, "-");
				/* First, create it with a different name. */
				r = mknod(pattern, mode, makedev(entry->major, entry->minor + mul * entry->minor_step));
				/* Well, we created something, so keep track
				 * of that fact in case things go awry. */
				if(r != -1) {
					made = 1;
				}
				/* Set permissions. */
				if(r != -1) {
					r = chmod(pattern, mode);
				}
				/* Set ownership. */
				if(r != -1) {
					r = chown(pattern, pwd ? pwd->pw_uid : -1, grp ? grp->gr_gid : -1);
				}
				/* Finally rename it to the right place. */
				if(r != -1) {
					r = rename(pattern, path);
				}
				/* Report any errors. */
				if(r != 0) {
					fprintf(stderr, "MAKEDEV: error making %s: %s\n", path, strerror(errno));
					exit(8);
				} else {
					/* Clean up. */
					if(made) {
						unlink(pattern);
					}
				}
			}
		}

		/* We're creating symlinks today. */
		if(entry->type == LINK) {
			/* Check that we aren't trying anything unnecessary. */
			memset(tmp, '\0', sizeof(tmp));
			if(lstat(path, &st) == 0)
			if(S_ISLNK(st.st_mode))
			if(readlink(path, tmp, sizeof(tmp) - 1) != -1)
			if(strcmp(tmp, entry->link_target) == 0) {
				/* We know how to create this, but didn't need
				 * to, as it was already there. */
				ret = 1;
				continue;
			}

			/* Mark that we're going to make a symlink. */
			if(flags & MANIFEST) {
				printf("%%attr(0%o, %s, %s) %s\n", 0777, "root", "root", path);
			} else
			if(flags & SCRIPT) {
				printf("ln -s %s %s\n", path + dirlen + 1, entry->link_target);
			} else
			if(flags & VERBOSE) {
				printf("symlink %s -> %s\n", path + dirlen + 1, entry->link_target);
			}

			/* Make the symlink. */
			if(!(flags & FAKE)) {
				int r;
				r = symlink(entry->link_target, path);
				if(r != 0) {
					fprintf(stderr, "error making %s: %s\n", path, strerror(errno));
					exit(9);
				}
			}
		}

		if(entry->type == SOCKET) {
			struct sockaddr_un sun;
			int sockfd, r;

			memset(&sun, 0, sizeof(sun));
			sun.sun_family = AF_UNIX;
			snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s", directory, entry->name);

			/* Check that we aren't trying anything unnecessary. */
			if(lstat(sun.sun_path, &st) == 0)
			if(S_ISSOCK(st.st_mode))
			if(st.st_uid == pwd->pw_uid)
			if(st.st_gid == pwd->pw_gid)
			if((st.st_mode & 0777) == entry->perms) {
				/* We know how to create this, but we didn't
				 * need to bother. */
				ret = 1;
				continue;
			}

			/* Log a message if we're being verbose. */
			if(flags & MANIFEST) {
				printf("%%attr(0%o, %s, %s) %s\n", entry->perms, entry->user, entry->group, sun.sun_path);
			} else
			if(flags & SCRIPT) {
				printf("mksock -m 0%o %s\n", entry->perms, sun.sun_path);
				printf("chmod %s.%s %s\n", entry->user, entry->group, sun.sun_path);
			} else
			if(flags & VERBOSE) {
				printf("bind    %-30s %14s:%s %3o\n", entry->name, entry->user, entry->group, entry->perms);
			}

			sockfd = socket(PF_UNIX, SOCK_STREAM, 0);
			if(!(flags & FAKE)) {
				pwd = getpwnam(entry->user);
				grp = getgrnam(entry->group);

				r = bind(sockfd, (struct sockaddr*)&sun, sizeof(sun));

				if(r != -1) {
					r = chmod(sun.sun_path, entry->perms);
				}
				if(r != -1) {
					if(!(flags & MANIFEST)) {
						r = chown(sun.sun_path, pwd ? pwd->pw_uid : -1, grp ? grp->gr_gid : -1);
					}
				}
				if(r != 0) {
					fprintf(stderr, "MAKEDEV: error making %s: %s\n", path, strerror(errno));
					exit(11);
				}
			}
			close(sockfd);
		}

		/* We're executing an aliased item. */
		if(entry->type == ALIAS) {
			makedevices(directory, entry->link_target, max, flags);
		}
	}
	return ret;
}

void
makedevices(const char *directory, const char *fragment, int max, int flags)
{
	struct device_entry *entry = NULL;
	int matched = 0, relevant = 0;
	char buf[PATH_MAX];

	while((fragment[relevant] != '\0') && (isalnum(fragment[relevant]) || (fragment[relevant] == '/')))
		relevant++;

	for(entry = devices;
	    (entry != NULL) && (entry->name != NULL);
	    entry = entry->next) {
		if(entry->type == LINK) {
			char *p = buf;
			memset(buf, '\0', sizeof(buf));
			strncpy(buf, entry->name, sizeof(buf) - 1);
			if(strrchr(buf, '/') != NULL) {
				p = strrchr(buf, '/') + 1;
				strncpy(p, entry->link_target, sizeof(buf) - 1 - (p - buf));
			} else {
				strncpy(buf, entry->link_target, sizeof(buf) - 1);
			}
		}
		matched += makenodes(directory, fragment, entry, max, flags);
	}

	if(matched == 0) {
		fprintf(stderr, "don't know how to make device \"%s\"\n", fragment);
	}
}

void
read_config_line(const char *path, const char *pline)
{
	char *p, *q;
	char buf[LINE_MAX], line[LINE_MAX];
	struct device_entry *entry = NULL;
	struct macro *macro = NULL;
	enum entry_type type = -1;

	/* Expand macros. This is not as elegant as it could be, but it
	 * should suffice for our use here. */
	strncpy(line, pline, sizeof(line) - 1);
	line[sizeof(line) - 1] = '\0';
	while(strchr(line, '$')) {
		strncpy(buf, line, sizeof(buf) - 1);
		buf[sizeof(buf) - 1] = '\0';
		p = strchr(buf, '$');
		for(macro = macros; macro != NULL; macro = macro->next) {
			if(!strncmp(p + 1, macro->name, strlen(macro->name))) {
				q = p + strlen(p) + strlen(macro->expansion) - (1 + strlen(macro->name));
				memmove(p + strlen(macro->expansion), p + 1 + strlen(macro->name),
					strlen(p + 1 + strlen(macro->name)));
				memcpy(p, macro->expansion, strlen(macro->expansion));
				q[0] = '\0';
				break;
			}
		}
		if(macro == NULL) {
			fprintf(stderr, "unrecognized macro at \"%s\"\n", pline);
			exit(6);
		}
		macro = NULL;
		strncpy(line, buf, sizeof(line) - 1);
		line[sizeof(line) - 1] = '\0';
	}

	/* First, skip leading whitespace. */
	for(p = line; (*p != '\0') && isspace(*p); p++);

	/* If it's a comment of some kind, ignore it. */
	if(*p == '\0') return;
	if(*p == '\n') return;
	if(*p == '\r') return;
	if(*p == '#') return;

	/* Now determine what kind of entry this is. */
	if(*p == BLOCK) {
		type = BLOCK;
	} else
	if(*p == CHAR) {
		type = CHAR;
	} else
	if(*p == LINK) {
		type = LINK;
	} else
	if(*p == ALIAS) {
		type = ALIAS;
	} else
	if(*p == SOCKET) {
		type = SOCKET;
	} else
	if(*p == MACRO) {
		type = MACRO;
	} else
	{
		fprintf(stderr, "error at \"%s\"\n", pline);
		exit(6);
	}

	/* Allocate memory. */
	switch(type) {
		case BLOCK:
		case CHAR:
		case LINK:
		case ALIAS:
		case SOCKET:
			entry = malloc(sizeof(struct device_entry));
			if(entry == NULL) {
				fprintf(stderr, "couldn't allocate buffer\n");
				exit(5);
			}
			memset(entry, 0, sizeof(struct device_entry));
			entry->type = type;
			break;
		case MACRO:
			macro = malloc(sizeof(struct macro));
			if(macro == NULL) {
				fprintf(stderr, "couldn't allocate buffer\n");
				exit(5);
			}
			memset(macro, 0, sizeof(struct macro));
			break;
	}

	if(macro) {
		/* Read the macro name. */
		for(p++; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		macro->name = strdup(buf);
		if((macro->name == NULL) || (strlen(macro->name) == 0)) {
			fprintf(stderr, "error parsing \"%s\": bad macro name in \"%s\"\n", path, line);
			exit(7);
		}
		p = q;

		/* Now read the expansion. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		strncpy(buf, p, sizeof(buf) - 1);
		buf[sizeof(buf) - 1] = '\0';
		macro->expansion = strdup(buf);

		if((macro->expansion == NULL) ||
		   (strlen(macro->expansion) == 0)) {
			fprintf(stderr, "error parsing \"%s\": bad expansion in \"%s\"\n", path, line);
			exit(7);
		}
		p = q;

		macro->next = macros;
		macros = macro;

		return;
	}

	if((entry->type == BLOCK) || (entry->type == CHAR)) {
		/* Now read the permissions. */
		for(p++; (*p != '\0') && isspace(*p); p++);
		while(isdigit(*p) && (*p != '\0')) {
			entry->perms *= 8;
			entry->perms += (*p - '0');
			p++;
		}

		/* Now read the owner. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->user = strdup(buf);
		if((entry->user == NULL) || (strlen(entry->user) == 0)) {
			fprintf(stderr, "error parsing \"%s\": bad user in \"%s\"\n", path, line);
			exit(7);
		}
		p = q;

		/* Now read the group. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->group = strdup(buf);
		if((entry->group == NULL) || (strlen(entry->group) == 0)) {
			fprintf(stderr, "error parsing \"%s\": bad group in \"%s\"\n", path, line);
			exit(7);
		}
		p = q;

		/* And now the major number. */
		for(; (*p != '\0') && isspace(*p); p++);
		while(isdigit(*p) && (*p != '\0')) {
			entry->major *= 10;
			entry->major += (*p - '0');
			p++;
		}
		if(entry->major <= 0) {
			fprintf(stderr, "error parsing \"%s\": bad major in \"%s\"\n", path, line);
			exit(7);
		}

		/* And now the minor number. */
		for(; (*p != '\0') && isspace(*p); p++);
		while(isdigit(*p) && (*p != '\0')) {
			entry->minor *= 10;
			entry->minor += (*p - '0');
			p++;
		}
		if(entry->minor < 0) {
			fprintf(stderr, "error parsing \"%s\": bad minor in \"%s\"\n", path, line);
			exit(7);
		}

		/* And now the minor step number. */
		for(; (*p != '\0') && isspace(*p); p++);
		while(isdigit(*p) && (*p != '\0')) {
			entry->minor_step *= 10;
			entry->minor_step += (*p - '0');
			p++;
		}
		if(entry->minor_step < 0) {
			fprintf(stderr, "error parsing \"%s\": bad step in \"%s\"\n", path, line);
			exit(7);
		}

		/* And now the number of devices we can create this way. */
		for(; (*p != '\0') && isspace(*p); p++);
		while(isdigit(*p) && (*p != '\0')) {
			entry->num *= 10;
			entry->num += (*p - '0');
			p++;
		}
		if(entry->num <= 0) {
			fprintf(stderr, "error parsing \"%s\": bad count in \"%s\"\n", path, line);
			exit(7);
		}

		/* Now read the device's (root) name. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->name = strdup(buf);
		p = q;

		/* Now read the (optional) base. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		if(strstr(entry->name, "%c")) {
			entry->base = buf[0];
		} else {
			entry->base = atoi(buf);
		}
	}

	if(entry->type == LINK) {
		/* Read the link's name. */
		for(p++; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->name = strdup(buf);
		p = q;

		/* Read the link's target's name. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->link_target = strdup(buf);
		p = q;

		entry->num = 1;
	}

	if(entry->type == ALIAS) {
		/* Read the alias's name. */
		for(p++; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->name = strdup(buf);
		p = q;

		/* Read the target's name. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->link_target = strdup(buf);
		p = q;

		entry->num = 1;
	}

	if(entry->type == SOCKET) {
		/* Now read the permissions. */
		for(p++; (*p != '\0') && isspace(*p); p++);
		while(isdigit(*p) && (*p != '\0')) {
			entry->perms *= 8;
			entry->perms += (*p - '0');
			p++;
		}

		/* Now read the owner. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->user = strdup(buf);
		if((entry->user == NULL) || (strlen(entry->user) == 0)) {
			fprintf(stderr, "error parsing \"%s\": bad user in \"%s\"\n", path, line);
			exit(7);
		}
		p = q;

		/* Now read the group. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->group = strdup(buf);
		if((entry->group == NULL) || (strlen(entry->group) == 0)) {
			fprintf(stderr, "error parsing \"%s\": bad group in \"%s\"\n", path, line);
			exit(7);
		}
		p = q;

		/* Now read the socket's name. */
		for(; (*p != '\0') && isspace(*p); p++);
		memset(buf, '\0', sizeof(buf));
		for(q = p; (*q != '\0') && !isspace(*q); q++);
		memcpy(buf, p, q - p);
		entry->name = strdup(buf);
		p = q;

		entry->num = 1;
	}

	/* Add it to the end of the list. */
	if(devices == NULL) {
		devices = entry;
		last_device = entry;
	} else {
		last_device->next = entry;
		last_device = entry;
	}
}

void
read_config_single_file(const char *path)
{
	FILE *fp = NULL;
	char buf[LINE_MAX];

	fp = fopen(path, "r");
	if(fp == NULL) {
		fprintf(stderr, "error opening %s: %s\n", path, strerror(errno));
		exit(4);
	}

	while(fgets(buf, sizeof(buf), fp) != NULL) {
		int l = strlen(buf);

		while((l > 0) && ((buf[l - 1] == '\n') || (buf[l - 1] == '\r'))) {
			l--;
			buf[l] = '\0';
		}

		read_config_line(path, buf);
	}

	fclose(fp);
}

int
screen_out_bad(const struct dirent *ent)
{
	size_t l;
	if(strcmp(ent->d_name, ".") == 0)
		return 0;
	if(strcmp(ent->d_name, "..") == 0)
		return 0;

	l = sizeof(".rpmsave") - 1;
	if(ent->d_reclen > l)
		if(strcmp(ent->d_name + ent->d_reclen - l, ".rpmsave") == 0)
			return 0;

	l = sizeof(".rpmorig") - 1;
	if(ent->d_reclen > l)
		if(strcmp(ent->d_name + ent->d_reclen - l, ".rpmorig") == 0)
			return 0;

	l = sizeof(".rpmnew") - 1;
	if(ent->d_reclen > l)
		if(strcmp(ent->d_name + ent->d_reclen - l, ".rpmnew") == 0)
			return 0;

	return 1;
}

void
read_configs(const char *configdir, int flags)
{
	struct dirent **ent;
	struct stat st;
	char path[PATH_MAX];
	int i, count;

	count = scandir(configdir, &ent, screen_out_bad, alphasort);
	if(count == -1) {
		if((flags & IGNORE)) {
			fprintf(stderr, "warning: ");
		} else {
			fprintf(stderr, "error: ");
		}
		fprintf(stderr, "%s is not a directory\n", configdir);
		if(!(flags & IGNORE)) {
			exit(1);
		}
		return;
	}

	for(i = 0; i < count; i++) {
		snprintf(path, sizeof(path), "%s/%s", configdir, ent[i]->d_name);
		if(stat(path, &st) != -1) {
			if(S_ISREG(st.st_mode)) {
				read_config_single_file(path);
			} else {
				if((flags & IGNORE)) {
					fprintf(stderr, "warning: ");
				} else {
					fprintf(stderr, "error: ");
				}
				fprintf(stderr, "%s is not a regular " "file\n", path);
				if(!(flags & IGNORE)) {
					exit(2);
				}
			}
		} else {
			if((flags & IGNORE)) {
				fprintf(stderr, "warning: ");
			} else {
				fprintf(stderr, "error: ");
			}
			fprintf(stderr, "failure reading %s: %s\n", path, strerror(errno));
			if(!(flags & IGNORE)) {
				exit(3);
			}
		}
	}
}

int
main(int argc, char **argv)
{
	int c, i, flags = 0;
	int max = -1;
	const char *cfgdir = CFGDIR, *devdir = DEVDIR;
	char *p;

	/* Scan arguments. */
	while((c = getopt(argc, argv, "c:d:m:invNMSV")) != -1)
	switch(c) {
		case 'c': cfgdir = strdup(optarg);
			  break;
		case 'd': devdir = strdup(optarg);
			  break;
		case 'm': max = strtol(optarg, &p, 10);
			  if((p != NULL) && (*p != '\0')) {
				fprintf(stderr, "-m requires a numeric argument\n");
			  	return -1;
			  }
			  break;
		case 'i': flags |= IGNORE;
			  break;
		case 'n': flags |= FAKE;
			  /* fall through */
		case 'v': flags |= VERBOSE;
			  break;
		case 'M': flags |= MANIFEST;
			  break;
		case 'S': flags |= (FAKE | SCRIPT);
			  break;
		case 'V': printf("MAKEDEV version " VERSION "\n");
			  return 0;
		default:  break;
	}

	/* Usage message. */
	if(optind >= argc) {
		printf("Usage: MAKEDEV -V\n"
		       "       MAKEDEV [-c configdir] [-d devicedir] [-m maxdevices] [-i] [-n] [-v]\n"
		       "               [-M] [-S] name\n");
		return 0;
	}

	/* Read our configuration files. */
	read_configs(cfgdir, flags);

	/* Do the hard work now. */
	for(i = optind; i < argc; i++) {
		makedevices(devdir, argv[i], max, flags);
	}

	return 0;
}
MAKEDEV-3.3.8/COPYING0100664000471600047240000004311007231446131012634 0ustar  nalinnalin		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year  name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.
MAKEDEV-3.3.8/makedev.d/0040775000471600047240000000000007731332762013454 5ustar  nalinnalinMAKEDEV-3.3.8/makedev.d/00macros0100664000471600047240000000054707450652616015027 0ustar  nalinnalin=ALLREAD  644 root root
=ALLWRITE 666 root root
=FLOPPY   660 root floppy
=KMEM     640 root kmem	 
=PRINTER  660 root lp
=PTY      666 root tty
=ROOT     600 root root
=SERIAL   660 root uucp
=STORAGE  660 root disk
=TTY      620 root tty
=VCSA     620 vcsa tty

# Define "console" as an alias for root for specifying input devices and such.
=CONSOLE  $ROOT
MAKEDEV-3.3.8/makedev.d/cdrom0100664000471600047240000000045607134712647014506 0ustar  nalinnalin# Just some aliases for non-SCSI, non-ATAPI CD-ROM devices.
a cdrom aztcd
a cdrom bpcd
a cdrom cdu31a
a cdrom cdu535
a cdrom cm205cd
a cdrom cm206cd
a cdrom gscd
a cdrom hitcd
a cdrom i2o/hdcd
a cdrom mcd
a cdrom mcdx
a cdrom optcd
a cdrom sdcd
a cdrom sjcd
a cdrom sonycd
a cdrom sbpcd
l sbpcd sbpcd0
MAKEDEV-3.3.8/makedev.d/console0100664000471600047240000000004507135343662015034 0ustar  nalinnalin# The "console" alias.
a console tty
MAKEDEV-3.3.8/makedev.d/ftape0100664000471600047240000000036207134712647014475 0ustar  nalinnalin# Aliases for devices used by the ftape driver.
a ftape qft
a ftape nqft
a ftape rft
a ftape nrft
a ftape zqft
a ftape nzqft
a ftape rawqft
a ftape nrawqft
a ftape tape-d
a ftape tape-reset
a ftape tpqic
a ftape ntpqic
a ftape st
a ftape nst
MAKEDEV-3.3.8/makedev.d/generic0100664000471600047240000000033207134712647015007 0ustar  nalinnalin# Support for the older "generic" devices.
a generic std
a generic fd
a generic hda
a generic hdb
a generic hdc
a generic hdd
a generic tty
a generic ptyp
a generic mouse
a generic lp
a generic parport
a generic sound
MAKEDEV-3.3.8/makedev.d/ia640100664000471600047240000000021507316453617014137 0ustar  nalinnalin# Implements normal rtc access, but through EFI firmware
# (dunno why it's a different device).
c $ALLREAD              10 136  1   1 efirtc
MAKEDEV-3.3.8/makedev.d/ibcs0100664000471600047240000000032207466570472014320 0ustar  nalinnalin# Aliases for ibcs.
a ibcs2 egp
a ibcs2 ggp
a ibcs2 icmp
a ibcs2 idp
a ibcs2 inet
a ibcs2 ip
a ibcs2 ipip
a ibcs2 nfsd
a ibcs2 null
a ibcs2 pup
a ibcs2 socksys
a ibcs2 spx
a ibcs2 rawip
a ibcs2 tcp
a ibcs2 X0R
MAKEDEV-3.3.8/makedev.d/ide0100664000471600047240000000040007253224736014127 0ustar  nalinnalin# Some aliases for IDE controllers.
a ide0 hda
a ide0 hdb
a ide1 hdc
a ide1 hdd
a ide2 hde
a ide2 hdf
a ide3 hdg
a ide3 hdh
a ide4 hdi
a ide4 hdj
a ide5 hdk
a ide5 hdl
a ide6 hdm
a ide6 hdn
a ide7 hdo
a ide7 hdp
a ide8 hdq
a ide8 hdr
a ide9 hds
a ide9 hdt
MAKEDEV-3.3.8/makedev.d/ipfilter0100664000471600047240000000014007134712647015206 0ustar  nalinnalin# Aliases for firewalling.
a ipfilter ipauth
a ipfilter ipl
a ipfilter ipnat
a ipfilter ipstate
MAKEDEV-3.3.8/makedev.d/isdn0100664000471600047240000000013207466553100014321 0ustar  nalinnalin# Aliases for ISDN users.
a isdn dcbri
a isdn ippp
a isdn cui
a isdn ttyI
a isdn usb/auer
MAKEDEV-3.3.8/makedev.d/linux-2.2.x0100664000471600047240000010644307324662300015300 0ustar  nalinnalin# This file is written almost directly from the devices.txt file provided in
# the Documentation/ subdirectory of the Linux kernel source tree.

c 640 root     kmem      1   1  1   1 mem
c 640 root     kmem      1   2  1   1 kmem
c 666 root     root      1   3  1   1 null
c 640 root     kmem      1   4  1   1 port
c 666 root     root      1   5  1   1 zero
c 666 root     root      1   7  1   1 full
c 644 root     root      1   8  1   1 random
c 644 root     root      1   9  1   1 urandom

b 660 root     disk      1   0  1 128 ram%d
b 660 root     disk      1 250  1   1 initrd

c 666 root     tty       2   0  1  16 ptyp%x
c 666 root     tty       2  16  1  16 ptyq%x
c 666 root     tty       2  32  1  16 ptyr%x
c 666 root     tty       2  48  1  16 ptys%x
c 666 root     tty       2  64  1  16 ptyt%x
c 666 root     tty       2  80  1  16 ptyu%x
c 666 root     tty       2  96  1  16 ptyv%x
c 666 root     tty       2 112  1  16 ptyw%x
c 666 root     tty       2 128  1  16 ptyx%x
c 666 root     tty       2 144  1  16 ptyy%x
c 666 root     tty       2 160  1  16 ptyz%x
c 666 root     tty       2 176  1  16 ptya%x
c 666 root     tty       2 192  1  16 ptyb%x
c 666 root     tty       2 208  1  16 ptyc%x
c 666 root     tty       2 224  1  16 ptyd%x
c 666 root     tty       2 240  1  16 ptye%x

b 660 root     floppy    2   0  1   4 fd%d 0
b 660 root     floppy    2 128  1   4 fd%d 4

b 660 root     floppy    2   4  1   4 fd%dd360  0
b 660 root     floppy    2  20  1   4 fd%dh360  0
b 660 root     floppy    2  48  1   4 fd%dh410  0
b 660 root     floppy    2  64  1   4 fd%dh420  0
b 660 root     floppy    2  24  1   4 fd%dh720  0
b 660 root     floppy    2  80  1   4 fd%dh880  0
b 660 root     floppy    2   8  1   4 fd%dh1200 0
b 660 root     floppy    2  40  1   4 fd%dh1440 0
b 660 root     floppy    2  56  1   4 fd%dh1476 0
b 660 root     floppy    2  72  1   4 fd%dh1494 0
b 660 root     floppy    2  92  1   4 fd%dh1660 0

b 660 root     floppy    2  12  1   4 fd%du360  0
b 660 root     floppy    2  16  1   4 fd%du720  0
b 660 root     floppy    2 120  1   4 fd%du800  0
b 660 root     floppy    2  52  1   4 fd%du820  0
b 660 root     floppy    2  68  1   4 fd%du830  0
b 660 root     floppy    2  84  1   4 fd%du1040 0
b 660 root     floppy    2  88  1   4 fd%du1120 0
b 660 root     floppy    2  28  1   4 fd%du1440 0
b 660 root     floppy    2 124  1   4 fd%du1660 0
b 660 root     floppy    2  44  1   4 fd%du1680 0
b 660 root     floppy    2  60  1   4 fd%du1722 0
b 660 root     floppy    2  76  1   4 fd%du1743 0
b 660 root     floppy    2  96  1   4 fd%du1760 0
b 660 root     floppy    2 116  1   4 fd%du1840 0
b 660 root     floppy    2 100  1   4 fd%du1920 0
b 660 root     floppy    2  32  1   4 fd%du2880 0
b 660 root     floppy    2 104  1   4 fd%du3200 0
b 660 root     floppy    2 108  1   4 fd%du3520 0
b 660 root     floppy    2 112  1   4 fd%du3840 0

b 660 root     floppy    2 132  1   4 fd%dd360  4
b 660 root     floppy    2 148  1   4 fd%dh360  4
b 660 root     floppy    2 176  1   4 fd%dh410  4
b 660 root     floppy    2 192  1   4 fd%dh420  4
b 660 root     floppy    2 152  1   4 fd%dh720  4
b 660 root     floppy    2 208  1   4 fd%dh880  4
b 660 root     floppy    2 136  1   4 fd%dh1200 4
b 660 root     floppy    2 168  1   4 fd%dh1440 4
b 660 root     floppy    2 184  1   4 fd%dh1476 4
b 660 root     floppy    2 200  1   4 fd%dh1494 4
b 660 root     floppy    2 220  1   4 fd%dh1660 4

b 660 root     floppy    2 140  1   4 fd%du360  4
b 660 root     floppy    2 144  1   4 fd%du720  4
b 660 root     floppy    2 248  1   4 fd%du800  4
b 660 root     floppy    2 180  1   4 fd%du820  4
b 660 root     floppy    2 196  1   4 fd%du830  4
b 660 root     floppy    2 212  1   4 fd%du1040 4
b 660 root     floppy    2 216  1   4 fd%du1120 4
b 660 root     floppy    2 156  1   4 fd%du1440 4
b 660 root     floppy    2 252  1   4 fd%du1660 4
b 660 root     floppy    2 172  1   4 fd%du1680 4
b 660 root     floppy    2 188  1   4 fd%du1722 4
b 660 root     floppy    2 204  1   4 fd%du1743 4
b 660 root     floppy    2 224  1   4 fd%du1760 4
b 660 root     floppy    2 244  1   4 fd%du1840 4
b 660 root     floppy    2 228  1   4 fd%du1920 4
b 660 root     floppy    2 160  1   4 fd%du2880 4
b 660 root     floppy    2 232  1   4 fd%du3200 4
b 660 root     floppy    2 236  1   4 fd%du3520 4
b 660 root     floppy    2 240  1   4 fd%du3840 4

b 660 root     floppy    2   4  1   4 fd%dCompaQ 0
b 660 root     floppy    2 132  1   4 fd%dCompaQ 4

c 666 root     tty       3   0  1  16 ttyp%x
c 666 root     tty       3  16  1  16 ttyq%x
c 666 root     tty       3  32  1  16 ttyr%x
c 666 root     tty       3  48  1  16 ttys%x
c 666 root     tty       3  64  1  16 ttyt%x
c 666 root     tty       3  80  1  16 ttyu%x
c 666 root     tty       3  96  1  16 ttyv%x
c 666 root     tty       3 112  1  16 ttyw%x
c 666 root     tty       3 128  1  16 ttyx%x
c 666 root     tty       3 144  1  16 ttyy%x
c 666 root     tty       3 160  1  16 ttyz%x
c 666 root     tty       3 176  1  16 ttya%x
c 666 root     tty       3 192  1  16 ttyb%x
c 666 root     tty       3 208  1  16 ttyc%x
c 666 root     tty       3 224  1  16 ttyd%x
c 666 root     tty       3 240  1  16 ttye%x

b 660 root     disk      3   0  1  64 hda
b 660 root     disk      3  64  1  64 hdb

c 600 root     root      4   0  1   1 systty
c 600 root     tty       4   0  1  64 tty%d
c 660 root     uucp      4  64  1 192 ttyS%d

c 666 root     root      5   0  1   1 tty
c 600 root     root      5   1  1   1 console
c 666 root     root      5   2  1   1 ptmx
c 660 root     uucp      5  64  1 192 cua%d

c 660 root     lp        6   0  1   4 lp%d

c 620 root     tty       7   0  1  64 vcs
c 620 root     tty       7 128  1  64 vcsa

b 660 root     disk      7   0  1  16 loop%d

b 660 root     disk      8   0  1  16 sda
b 660 root     disk      8  16  1  16 sdb
b 660 root     disk      8  32  1  16 sdc
b 660 root     disk      8  48  1  16 sdd
b 660 root     disk      8  64  1  16 sde
b 660 root     disk      8  80  1  16 sdf
b 660 root     disk      8  96  1  16 sdg
b 660 root     disk      8 112  1  16 sdh
b 660 root     disk      8 128  1  16 sdi
b 660 root     disk      8 144  1  16 sdj
b 660 root     disk      8 160  1  16 sdk
b 660 root     disk      8 176  1  16 sdl
b 660 root     disk      8 192  1  16 sdm
b 660 root     disk      8 208  1  16 sdn
b 660 root     disk      8 224  1  16 sdo
b 660 root     disk      8 240  1  16 sdp

c 660 root     disk      9   0  1  32 st%d
c 660 root     disk      9  32  1  32 st%dl
c 660 root     disk      9  64  1  32 st%dm
c 660 root     disk      9  96  1  32 st%da
c 660 root     disk      9 128  1  32 nst%d
c 660 root     disk      9 160  1  32 nst%dl
c 660 root     disk      9 192  1  32 nst%dm
c 660 root     disk      9 224  1  32 nst%da

b 660 root     disk      9   0  1  32 md%d

c 660 root     root     10   0  1   1 logibm
c 660 root     root     10   1  1   1 psaux
c 660 root     root     10   2  1   1 inportbm
c 660 root     root     10   3  1   1 atibm
c 660 root     root     10   4  1   1 jbm
c 660 root     root     10   4  1   1 amigamouse
c 660 root     root     10   5  1   1 atarimouse
c 660 root     root     10   6  1   1 sunmouse
c 660 root     root     10   7  1   1 amigamouse1
c 660 root     root     10   8  1   1 smouse
c 660 root     root     10   9  1   1 pc110pad
c 660 root     root     10  10  1   1 adbmouse
c 660 root     root     10  11  1   1 vrtpanel

c 660 root     root     10 128  1   1 beep
c 660 root     root     10 129  1   1 modreq
c 660 root     root     10 130  1   1 watchdog
c 660 root     root     10 131  1   1 temperature
c 660 root     root     10 132  1   1 hwtrap
c 660 root     root     10 133  1   1 exttrp
c 660 root     sys      10 134  1   1 apm_bios
c 664 root     root     10 135  1   1 rtc
# Where did 136, 137, and 138 go?
c 660 root     root     10 139  1   1 openprom
c 660 root     root     10 140  1   1 relay8
c 660 root     root     10 141  1   1 relay16
c 660 root     root     10 142  1   1 msr
c 660 root     root     10 143  1   1 pciconf
c 660 root     root     10 144  1   1 nvram
c 660 root     root     10 145  1   1 hfmodem
c 660 root     root     10 146  1   1 graphics
c 660 root     root     10 147  1   1 opengl
c 660 root     root     10 148  1   1 gfx
c 666 root     sys      10 149  1   1 input/mouse
c 660 root     root     10 150  1   1 input/keyboard
c 660 root     root     10 151  1   1 led
# Where did 152 go?
c 660 root     root     10 153  1   1 mergemem
c 660 root     root     10 154  1   1 pmu
c 660 root     root     10 155  1   1 isictl
c 660 root     root     10 156  1   1 lcd
c 660 root     root     10 157  1   1 ac
c 660 root     root     10 158  1   1 nwbutton
c 660 root     root     10 159  1   1 nwdebug
c 660 root     root     10 160  1   1 nwflash
c 660 root     root     10 161  1   1 userdma
c 660 root     root     10 162  1   1 smbus
c 660 root     root     10 163  1   1 lik
c 660 root     root     10 164  1   1 ipmo
c 660 root     root     10 165  1   1 vmmon
c 660 root     root     10 166  1   1 i2o/ctl
c 660 root     root     10 167  1   1 specialix_sxctl
c 660 root     root     10 168  1   1 tcldrv
c 660 root     root     10 169  1   1 specialix_rioctl
c 660 root     root     10 170  1   1 smapi
c 660 root     root     10 171  1   1 srripc
c 660 root     root     10 172  1   1 usemacclone
c 660 root     root     10 173  1   1 ipmikcs
c 660 root     root     10 174  1   1 uctrl
c 664 root     root     10 175  1   1 agpgart
c 660 root     root     10 176  1   1 gtrsc
c 660 root     root     10 177  1   1 cbm
c 660 root     root     10 178  1   1 jsflash
c 660 root     root     10 179  1   1 xsvc
c 660 root     root     10 180  1   1 vrbuttons

c 660 root     root     11   0  1   1 kbd
b 660 root     disk     11   0  1  32 sr%d

c 660 root     disk     12   2  1   1 ntpqic11
c 660 root     disk     12   3  1   1 tpqic11
c 660 root     disk     12   4  1   1 ntpqic24
c 660 root     disk     12   5  1   1 tpqic24
c 660 root     disk     12   6  1   1 ntpqic120
c 660 root     disk     12   7  1   1 tpqic120
c 660 root     disk     12   8  1   1 ntpqic150
c 660 root     disk     12   9  1   1 tpqic150

b 660 root     root     12   0  1   8 dos_cd%d

# These are obsolete!
# c 660 root     sys      13   0  1   1 pcmixer
# c 660 root     sys      13   1  1   1 pcsp
# c 660 root     sys      13   4  1   1 pcaudio
# c 660 root     sys      13   5  1   1 pcsp16r

b 660 root     disk     13   0  1  64 xda
b 660 root     disk     13  64  1  64 xdb

c 600 root     sys      14   0  1   1 mixer
c 666 root     sys      14   1  1   1 sequencer
c 600 root     sys      14   2  1   1 midi00
c 600 root     sys      14   3  1   1 dsp
c 600 root     sys      14   4  1   1 audio
# Where did 5 go?
c 644 root     sys      14   6  1   1 sndstat
c 600 root     sys      14   7  1   1 audioctl
c 600 root     sys      14   8  1   1 sequencer2

c 600 root     sys      14  16  1   1 mixer1
c 600 root     sys      14  17  1   1 patmgr0
c 600 root     sys      14  18  1   1 midi01
c 600 root     sys      14  19  1   1 dsp1
c 600 root     sys      14  20  1   1 audio1

c 600 root     sys      14  33  1   1 patmgr1
c 600 root     sys      14  34  1   1 midi02
c 600 root     sys      14  50  1   1 midi03

b 660 root     root     14   0  1  64 dos_hda
b 660 root     root     14  64  1  64 dos_hdb
b 660 root     root     14 128  1  64 dos_hdc
b 660 root     root     14 192  1  64 dos_hdd

c 600 root     root     15   0  1 128 js%d
c 660 root     sys      15 128  1 128 djs%d

b 660 root     disk     15   0  1   1 sonycd

c 660 root     root     16   0  1   1 gs4500
b 660 root     disk     16   0  1   1 gscd

c 660 root     uucp     17   0  1  16 ttyH%d
b 660 root     disk     17   0  1   1 optcd

c 660 root     uucp     18   0  1  16 cuh%d
b 660 root     disk     18   0  1   1 sjcd

c 660 root     uucp     19   0  1  33 ttyC%d
b 660 root     root     19   0  1   8 double%d
b 660 root     root     19 128  1   8 cdouble%d

c 660 root     uucp     20   0  1  32 cub%d
b 660 root     disk     20   0  1   1 hitcd

c 600 root     sys      21   0  1  32 sg%d
b 660 root     root     21   0  1  64 mfma
b 660 root     root     21  64  1  64 mfmb

c 660 root     uucp     22   0  1  32 ttyD%d
b 660 root     disk     22   0  1  64 hdc
b 660 root     disk     22  64  1  64 hdd

c 660 root     uucp     23   0  1  32 cud%d
b 660 root     disk     23   0  1   1 mcd

c 660 root     uucp     24   0  1 256 ttyE%d
b 660 root     disk     24   0  1   1 cdu535

c 660 root     uucp     25   0  1 256 cue%d
b 660 root     disk     25   0  1   4 sbpcd%d 0

c 660 root     sys      26   0  1   1 wvisfgrab
b 660 root     disk     26   0  1   4 sbpcd%d 4

c 660 root     disk     27   0  1   4 qft%d
c 660 root     disk     27   4  1   4 nqft%d
c 660 root     disk     27  16  1   4 zqft%d
c 660 root     disk     27  20  1   4 nzqft%d
c 660 root     disk     27  32  1   4 rawqft%d
c 660 root     disk     27  36  1   4 nrawqft%d
b 660 root     disk     27   0  1   4 sbpcd%d 8

c 600 root     sys      28   0  1   4 staliomem%d
c 660 root     daemon   28   0  1   4 slm%d
b 660 root     disk     28   0  1   4 sbpcd%d 12

# This next set's commented out because it conflicts with the Apple Desktop
# Bus driver, which appears to be the more correct of the two.
# b 660 root     root     28   0  1  16 ada
# b 660 root     root     28  16  1  16 adb
# b 660 root     root     28  32  1  16 adc
# b 660 root     root     28  48  1  16 add
# b 660 root     root     28  64  1  16 ade
# b 660 root     root     28  80  1  16 adf
# b 660 root     root     28  96  1  16 adg
# b 660 root     root     28 112  1  16 adh
# b 660 root     root     28 128  1  16 adi
# b 660 root     root     28 144  1  16 adj
# b 660 root     root     28 160  1  16 adk
# b 660 root     root     28 176  1  16 adl
# b 660 root     root     28 192  1  16 adm
# b 660 root     root     28 208  1  16 adn
# b 660 root     root     28 224  1  16 ado
# b 660 root     root     28 240  1  16 adp

# Aaargh.  Change the 8 to a 1 on the next line for 2.4!
c 600 root     root     29   0 32   8 fb%d
b 660 root     disk     29   0  1   1 aztcd

#c 660 root     root     30   0  1   1 socksys
#c 660 root     root     30   1  1   1 spx
#c 660 root     root     30   2  1   1 inet/arp
#c 660 root     root     30   2  1   1 inet/icmp
#c 660 root     root     30   2  1   1 inet/ip
#c 660 root     root     30   2  1   1 inet/udp
#c 660 root     root     30   2  1   1 inet/tcp

b 660 root     root     30   0  1   1 cm205cd

c 600 root     sys      31   0  1   1 mpu401data
c 600 root     sys      31   1  1   1 mpu401stat
b 660 root     disk     31   0  1   8 rom%d
b 660 root     disk     31   8  1   8 rrom%d
b 660 root     disk     31  16  1   8 flash%d
b 660 root     disk     31  24  1   8 rflash%d

c 660 root     uucp     32   0  1  16 ttyX%d
b 660 root     disk     32   0  1   1 cm206cd

c 660 root     uucp     33   0  1  16 cux%d
b 660 root     disk     33   0  1  64 hde
b 660 root     disk     33  64  1  64 hdf

c 600 root     sys      34   0  1  16 scc%d
b 660 root     disk     34   0  1  64 hdg
b 660 root     disk     34  64  1  64 hdh

c 600 root     sys      35   0  1   4 midi%d
c 600 root     sys      35  64  1   4 rmidi%d
c 600 root     sys      35 128  1   4 smpte%d
b 600 root     root     35   0  1   1 slram

c 600 root     sys      36   0  1   1 route
c 600 root     sys      36   1  1   1 skip
c 660 root     root     36   2  1   1 fwmonitor
c 660 root     root     36  16  1  16 tap%d
b 660 root     root     36   0  1  64 eda
b 660 root     root     36  64  1  64 edb

c 660 root     disk     37   0  1 128 ht%d
c 660 root     disk     37 128  1 128 nht%d
b 660 root     root     37   0  1   1 z2ram

c 660 root     root     38   0  1  16 mlanai%d

c 660 root     root     39   0  1  16 ml16pa-a%d
c 660 root     root     39  16  1   1 ml16pa-d
c 660 root     root     39  17  1   3 ml16pa-c%d
c 660 root     root     39  32  1  16 ml16pb-a%d
c 660 root     root     39  48  1   1 ml16pb-d
c 660 root     root     39  49  1   3 ml16pb-c%d

c 660 root     sys      40   0  1   1 mmetfgrab
#b 660 root     root     40   0  1   1 eza

c 660 root     root     41   0  1   1 yamm
b 660 root     disk     41   0  1   1 bpcd

# Stay away from 42!

c 660 root     uucp     43   0  1  64 ttyI%d
b 660 root     disk     43   0  1 128 nb%d

c 660 root     uucp     44   0  1  64 cui%d
b 660 root     root     44   0  1  16 ftla
b 660 root     root     44  16  1  16 ftlb
b 660 root     root     44  32  1  16 ftlc
b 660 root     root     44  48  1  16 ftld
b 660 root     root     44  64  1  16 ftle
b 660 root     root     44  80  1  16 ftlf
b 660 root     root     44  96  1  16 ftlg
b 660 root     root     44 112  1  16 ftlh
b 660 root     root     44 128  1  16 ftli
b 660 root     root     44 144  1  16 ftlj
b 660 root     root     44 160  1  16 ftlk
b 660 root     root     44 176  1  16 ftll
b 660 root     root     44 192  1  16 ftlm
b 660 root     root     44 208  1  16 ftln
b 660 root     root     44 224  1  16 ftlo
b 660 root     root     44 240  1  16 ftlp

c 600 root     root     45   0  1  64 isdn%d
c 600 root     root     45  64  1  64 isdnctrl%d
c 600 root     root     45 128  1  64 ippp%d
c 600 root     root     45 255  1   1 isdninfo
b 660 root     disk     45   0  1  16 pda
b 660 root     disk     45  16  1  16 pdb
b 660 root     disk     45  32  1  16 pdc
b 660 root     disk     45  48  1  16 pdd

c 660 root     uucp     46   0  1  16 ttyR%d
b 660 root     disk     46   0  1   4 pcd%d

c 660 root     uucp     47   0  1  16 cur%d
b 660 root     disk     47   0  1   4 pf%d

c 660 root     uucp     48   0  1  16 ttyL%d
c 660 root     uucp     49   0  1  16 cul%d

c 660 root     root     51   0  1  16 bc%d

c 600 root     sys      52   0  1   4 dcbri%d

c 660 root     root     53   0  1   3 pd_bdm%d
c 660 root     root     53   3  1   3 icd_bdm%d

c 660 root     root     54   0  1   3 holter%d

c 660 root     root     55   0  1   1 dsp56k

c 660 root     root     56   0  1   1 adb
b 660 root     disk     56   0  1  64 hdi
b 660 root     disk     56  64  1  64 hdj

c 660 root     uucp     57   0  1  16 ttyP%d
b 660 root     disk     57   0  1  64 hdk
b 660 root     disk     57  64  1  64 hdl

c 660 root     uucp     58   0  1  16 cup%d

c 660 root     root     59   0  1   1 firewall
b 660 root     root     59   0  1   8 pda%d

# Here there be dragons.

c 600 root     sys      64   0  1   1 enskip

c 660 root     root     65   0  1   4 plink%d
c 660 root     root     65  64  1   4 rplink%d
c 660 root     root     65 128  1   4 plink%dd
c 660 root     root     65 192  1   4 rplink%dd
b 660 root     disk     65   0  1  16 sdq
b 660 root     disk     65  16  1  16 sdr
b 660 root     disk     65  32  1  16 sds
b 660 root     disk     65  48  1  16 sdt
b 660 root     disk     65  64  1  16 sdu
b 660 root     disk     65  80  1  16 sdv
b 660 root     disk     65  96  1  16 sdw
b 660 root     disk     65 112  1  16 sdx
b 660 root     disk     65 128  1  16 sdy
b 660 root     disk     65 144  1  16 sdz
b 660 root     disk     65 160  1  16 sdaa
b 660 root     disk     65 176  1  16 sdab
b 660 root     disk     65 192  1  16 sdac
b 660 root     disk     65 208  1  16 sdad
b 660 root     disk     65 224  1  16 sdae
b 660 root     disk     65 240  1  16 sdaf

c 660 root     root     66   0  1  16 yppcpci%d
b 660 root     disk     66   0  1  16 sdag
b 660 root     disk     66  16  1  16 sdah
b 660 root     disk     66  32  1  16 sdai
b 660 root     disk     66  48  1  16 sdaj
b 660 root     disk     66  64  1  16 sdak
b 660 root     disk     66  80  1  16 sdal
b 660 root     disk     66  96  1  16 sdam
b 660 root     disk     66 112  1  16 sdan
b 660 root     disk     66 128  1  16 sdao
b 660 root     disk     66 144  1  16 sdap
b 660 root     disk     66 160  1  16 sdaq
b 660 root     disk     66 176  1  16 sdar
b 660 root     disk     66 192  1  16 sdas
b 660 root     disk     66 208  1  16 sdat
b 660 root     disk     66 224  1  16 sdau
b 660 root     disk     66 240  1  16 sdav

c 600 root     sys      67   0  1   1 cfs0
b 660 root     disk     67   0  1  16 sdaw
b 660 root     disk     67  16  1  16 sdax
b 660 root     disk     67  32  1  16 sday
b 660 root     disk     67  48  1  16 sdaz
b 660 root     disk     67  64  1  16 sdba
b 660 root     disk     67  80  1  16 sdbb
b 660 root     disk     67  96  1  16 sdbc
b 660 root     disk     67 112  1  16 sdbd
b 660 root     disk     67 128  1  16 sdbe
b 660 root     disk     67 144  1  16 sdbf
b 660 root     disk     67 160  1  16 sdbg
b 660 root     disk     67 176  1  16 sdbh
b 660 root     disk     67 192  1  16 sdbi
b 660 root     disk     67 208  1  16 sdbj
b 660 root     disk     67 224  1  16 sdbk
b 660 root     disk     67 240  1  16 sdbl

c 600 root     sys      68   0  1   1 capi20
c 600 root     sys      68   1  1  20 capi20.%02d
b 660 root     disk     68   0  1  16 sdbm
b 660 root     disk     68  16  1  16 sdbn
b 660 root     disk     68  32  1  16 sdbo
b 660 root     disk     68  48  1  16 sdbp
b 660 root     disk     68  64  1  16 sdbq
b 660 root     disk     68  80  1  16 sdbr
b 660 root     disk     68  96  1  16 sdbs
b 660 root     disk     68 112  1  16 sdbt
b 660 root     disk     68 128  1  16 sdbu
b 660 root     disk     68 144  1  16 sdbv
b 660 root     disk     68 160  1  16 sdbw
b 660 root     disk     68 176  1  16 sdbx
b 660 root     disk     68 192  1  16 sdby
b 660 root     disk     68 208  1  16 sdbz
b 660 root     disk     68 224  1  16 sdca
b 660 root     disk     68 240  1  16 sdcb

c 660 root     root     69   0  1   1 ma16
b 660 root     disk     69   0  1  16 sdcc
b 660 root     disk     69  16  1  16 sdcd
b 660 root     disk     69  32  1  16 sdce
b 660 root     disk     69  48  1  16 sdcf
b 660 root     disk     69  64  1  16 sdcg
b 660 root     disk     69  80  1  16 sdch
b 660 root     disk     69  96  1  16 sdci
b 660 root     disk     69 112  1  16 sdcj
b 660 root     disk     69 128  1  16 sdck
b 660 root     disk     69 144  1  16 sdcl
b 660 root     disk     69 160  1  16 sdcm
b 660 root     disk     69 176  1  16 sdcn
b 660 root     disk     69 192  1  16 sdco
b 660 root     disk     69 208  1  16 sdcp
b 660 root     disk     69 224  1  16 sdcq
b 660 root     disk     69 240  1  16 sdcr

c 660 root     root     70   0  1   1 apscfg
c 660 root     root     70   1  1   1 apsauth
c 660 root     root     70   2  1   1 apslog
c 660 root     root     70   3  1   1 apsdbg
c 660 root     root     70  64  1   1 apsisdn
c 660 root     root     70  65  1   1 apsasync
c 660 root     root     70 128  1   1 apsmon
b 660 root     disk     70   0  1  16 sdcs
b 660 root     disk     70  16  1  16 sdct
b 660 root     disk     70  32  1  16 sdcu
b 660 root     disk     70  48  1  16 sdcv
b 660 root     disk     70  64  1  16 sdcw
b 660 root     disk     70  80  1  16 sdcx
b 660 root     disk     70  96  1  16 sdcy
b 660 root     disk     70 112  1  16 sdcz
b 660 root     disk     70 128  1  16 sdda
b 660 root     disk     70 144  1  16 sddb
b 660 root     disk     70 160  1  16 sddc
b 660 root     disk     70 176  1  16 sddd
b 660 root     disk     70 192  1  16 sdde
b 660 root     disk     70 208  1  16 sddf
b 660 root     disk     70 224  1  16 sddg
b 660 root     disk     70 240  1  16 sddh

c 660 root     uucp     71   0  1 256 ttyF%d
b 660 root     disk     71   0  1  16 sddi
b 660 root     disk     71  16  1  16 sddj
b 660 root     disk     71  32  1  16 sddk
b 660 root     disk     71  48  1  16 sddl
b 660 root     disk     71  64  1  16 sddm
b 660 root     disk     71  80  1  16 sddn
b 660 root     disk     71  96  1  16 sddo
b 660 root     disk     71 112  1  16 sddp
b 660 root     disk     71 128  1  16 sddq
b 660 root     disk     71 144  1  16 sddr
b 660 root     disk     71 160  1  16 sdds
b 660 root     disk     71 176  1  16 sddt
b 660 root     disk     71 192  1  16 sddu
b 660 root     disk     71 208  1  16 sddv
b 660 root     disk     71 224  1  16 sddw
b 660 root     disk     71 240  1  16 sddx

c 660 root     uucp     72   0  1 256 cuf%d

c 600 root     sys      73   0  4   4 ip2ipl%d
c 600 root     sys      73   1  4   4 ip2stat%d

c 660 root     root     74   0  1  16 SCI/%d

c 660 root     uucp     75   0  1  16 ttyW%d
c 660 root     uucp     76   0  1  16 cuw%d

c 600 root     sys      77   0  1   1 qng

#c 660 root     uucp     78   0  1  16 ttyM%x
#c 660 root     uucp     79   0  1  16 cum%d

c 660 root     root     80   0  1   1 at200
b 660 root     root     80   0  1  16 i2o/hda
b 660 root     root     80  16  1  16 i2o/hdb
b 660 root     root     80  32  1  16 i2o/hdc
b 660 root     root     80  48  1  16 i2o/hdd
b 660 root     root     80  64  1  16 i2o/hde
b 660 root     root     80  80  1  16 i2o/hdf
b 660 root     root     80  96  1  16 i2o/hdg
b 660 root     root     80 112  1  16 i2o/hdh
b 660 root     root     80 128  1  16 i2o/hdi
b 660 root     root     80 144  1  16 i2o/hdj
b 660 root     root     80 160  1  16 i2o/hdk
b 660 root     root     80 176  1  16 i2o/hdl
b 660 root     root     80 192  1  16 i2o/hdm
b 660 root     root     80 208  1  16 i2o/hdn
b 660 root     root     80 224  1  16 i2o/hdo
b 660 root     root     80 240  1  16 i2o/hdp

c 600 root     sys      81   0  1  64 video%d
c 600 root     sys      81  64  1  64 radio%d
c 600 root     sys      81 192  1  32 vtx%d
c 600 root     sys      81 224  1  32 vbi%d

b 660 root     root     81   0  1  16 i2o/hdq
b 660 root     root     81  16  1  16 i2o/hdr
b 660 root     root     81  32  1  16 i2o/hds
b 660 root     root     81  48  1  16 i2o/hdt
b 660 root     root     81  64  1  16 i2o/hdu
b 660 root     root     81  80  1  16 i2o/hdv
b 660 root     root     81  96  1  16 i2o/hdw
b 660 root     root     81 112  1  16 i2o/hdx
b 660 root     root     81 128  1  16 i2o/hdy
b 660 root     root     81 144  1  16 i2o/hdz
b 660 root     root     81 160  1  16 i2o/hdaa
b 660 root     root     81 176  1  16 i2o/hdab
b 660 root     root     81 192  1  16 i2o/hdac
b 660 root     root     81 208  1  16 i2o/hdad
b 660 root     root     81 224  1  16 i2o/hdae
b 660 root     root     81 240  1  16 i2o/hdaf

c 600 root     sys      82   0  1   4 winradio%d

b 660 root     root     82   0  1  16 i2o/hdag
b 660 root     root     82  16  1  16 i2o/hdah
b 660 root     root     82  32  1  16 i2o/hdai
b 660 root     root     82  48  1  16 i2o/hdaj
b 660 root     root     82  64  1  16 i2o/hdak
b 660 root     root     82  80  1  16 i2o/hdal
b 660 root     root     82  96  1  16 i2o/hdam
b 660 root     root     82 112  1  16 i2o/hdan
b 660 root     root     82 128  1  16 i2o/hdao
b 660 root     root     82 144  1  16 i2o/hdap
b 660 root     root     82 160  1  16 i2o/hdaq
b 660 root     root     82 176  1  16 i2o/hdar
b 660 root     root     82 192  1  16 i2o/hdas
b 660 root     root     82 208  1  16 i2o/hdat
b 660 root     root     82 224  1  16 i2o/hdau
b 660 root     root     82 240  1  16 i2o/hdav

c 600 root     sys      83   0  1   1 vtx
c 600 root     sys      83  16  1   1 vttuner

b 660 root     root     83   0  1  16 i2o/hdaw
b 660 root     root     83  16  1  16 i2o/hdax
b 660 root     root     83  32  1  16 i2o/hday
b 660 root     root     83  48  1  16 i2o/hdaz
b 660 root     root     83  64  1  16 i2o/hdba
b 660 root     root     83  80  1  16 i2o/hdbb
b 660 root     root     83  96  1  16 i2o/hdbc
b 660 root     root     83 112  1  16 i2o/hdbd
b 660 root     root     83 128  1  16 i2o/hdbe
b 660 root     root     83 144  1  16 i2o/hdbf
b 660 root     root     83 160  1  16 i2o/hdbg
b 660 root     root     83 176  1  16 i2o/hdbh
b 660 root     root     83 192  1  16 i2o/hdbi
b 660 root     root     83 208  1  16 i2o/hdbj
b 660 root     root     83 224  1  16 i2o/hdbk
b 660 root     root     83 240  1  16 i2o/hdbl

c 660 root     root     84   0  1   2 ihcp%d

b 660 root     root     84   0  1  16 i2o/hdbm
b 660 root     root     84  16  1  16 i2o/hdbn
b 660 root     root     84  32  1  16 i2o/hdbo
b 660 root     root     84  48  1  16 i2o/hdbp
b 660 root     root     84  64  1  16 i2o/hdbq
b 660 root     root     84  80  1  16 i2o/hdbr
b 660 root     root     84  96  1  16 i2o/hdbs
b 660 root     root     84 112  1  16 i2o/hdbt
b 660 root     root     84 128  1  16 i2o/hdbu
b 660 root     root     84 144  1  16 i2o/hdbv
b 660 root     root     84 160  1  16 i2o/hdbw
b 660 root     root     84 176  1  16 i2o/hdbx
b 660 root     root     84 192  1  16 i2o/hdby
b 660 root     root     84 208  1  16 i2o/hdbz
b 660 root     root     84 224  1  16 i2o/hdca
b 660 root     root     84 240  1  16 i2o/hdcb

c 660 root     root     85   0  1   1 shmiq
c 660 root     root     85   1  1   8 qcntl%d

b 660 root     root     85   0  1  16 i2o/hdcc
b 660 root     root     85  16  1  16 i2o/hdcd
b 660 root     root     85  32  1  16 i2o/hdce
b 660 root     root     85  48  1  16 i2o/hdcf
b 660 root     root     85  64  1  16 i2o/hdcg
b 660 root     root     85  80  1  16 i2o/hdch
b 660 root     root     85  96  1  16 i2o/hdci
b 660 root     root     85 112  1  16 i2o/hdcj
b 660 root     root     85 128  1  16 i2o/hdck
b 660 root     root     85 144  1  16 i2o/hdcl
b 660 root     root     85 160  1  16 i2o/hdcm
b 660 root     root     85 176  1  16 i2o/hdcn
b 660 root     root     85 192  1  16 i2o/hdco
b 660 root     root     85 208  1  16 i2o/hdcp
b 660 root     root     85 224  1  16 i2o/hdcq
b 660 root     root     85 240  1  16 i2o/hdcr

c 660 root     root     86   0  1   8 sch%d

b 660 root     root     86   0  1  16 i2o/hdcs
b 660 root     root     86  16  1  16 i2o/hdct
b 660 root     root     86  32  1  16 i2o/hdcu
b 660 root     root     86  48  1  16 i2o/hdcv
b 660 root     root     86  64  1  16 i2o/hdcw
b 660 root     root     86  80  1  16 i2o/hdcx
b 660 root     root     86  96  1  16 i2o/hdcy
b 660 root     root     86 112  1  16 i2o/hdcz
b 660 root     root     86 128  1  16 i2o/hdda
b 660 root     root     86 144  1  16 i2o/hddb
b 660 root     root     86 160  1  16 i2o/hddc
b 660 root     root     86 176  1  16 i2o/hddd
b 660 root     root     86 192  1  16 i2o/hdde
b 660 root     root     86 208  1  16 i2o/hddf
b 660 root     root     86 224  1  16 i2o/hddg
b 660 root     root     86 240  1  16 i2o/hddh

c 660 root     root     87   0  1   8 controla%d

b 660 root     root     87   0  1  16 i2o/hddi
b 660 root     root     87  16  1  16 i2o/hddj
b 660 root     root     87  32  1  16 i2o/hddk
b 660 root     root     87  48  1  16 i2o/hddl
b 660 root     root     87  64  1  16 i2o/hddm
b 660 root     root     87  80  1  16 i2o/hddn
b 660 root     root     87  96  1  16 i2o/hddo
b 660 root     root     87 112  1  16 i2o/hddp
b 660 root     root     87 128  1  16 i2o/hddq
b 660 root     root     87 144  1  16 i2o/hddr
b 660 root     root     87 160  1  16 i2o/hdds
b 660 root     root     87 176  1  16 i2o/hddt
b 660 root     root     87 192  1  16 i2o/hddu
b 660 root     root     87 208  1  16 i2o/hddv
b 660 root     root     87 224  1  16 i2o/hddw
b 660 root     root     87 240  1  16 i2o/hddx

c 600 root     sys      88   0  1   8 comx%d

b 660 root     root     88   0  1  64 hdm
b 660 root     root     88  64  1  64 hdn

c 600 root     sys      89   0  1   8 i2c-%d

b 660 root     root     89   0  1  64 hdo
b 660 root     root     89  64  1  64 hdp

c 660 root     root     90   0  2  16 mtd%d
c 660 root     root     90   1  2  16 mtdr%d

b 660 root     root     90   0  1  64 hdq
b 660 root     root     90  64  1  64 hdr

c 660 root     root     91   0  1  16 can%d

b 660 root     root     91   0  1  64 hds
b 660 root     root     91  64  1  64 hdt

b 660 root     root     92   0  1  64 ppdd%d

c 660 root     sys      93   0  1   8 iscc%d
c 660 root     sys      93 128  1   8 isccctl%d

b 660 root     root     93   0 16   1 nftla
b 660 root     root     93  16 16  15 nftl%c a

c 660 root     sys      94   0  1   8 dcxx%d

c 600 root     sys      95   0  1   1 ipl
c 600 root     sys      95   1  1   1 ipnat
c 600 root     sys      95   2  1   1 ipstate
c 600 root     sys      95   3  1   1 ipauth

c 660 root     disk     96   0  1  16 pt%d
c 660 root     disk     96 128  1  16 npt%d

b 660 root     root     96   0  8   4 msd%d

c 600 root     sys      97   0  1   4 pg%d
c 660 root     root     98   0  1   4 comedi%d
c 660 root     daemon   99   0  1   8 parport%d
c 660 root     root    100   0  1   8 phone%d

c 660 root     root    101   0  1   1 mdspstat
c 660 root     root    101   1  1  16 mdsp%d 1

c 600 root     sys     102   0  1   4 tlk%d

c 600 root     sys     103   0  1   1 xfs0

c 660 root     uucp    105   0  1  16 ttyV%d
c 660 root     uucp    106   0  1  16 cuv%d

c 660 root     root    107   0  1   1 3dfx
c 660 root     root    108   0  1   1 ppp

c 600 root     sys     110   0  1   8 srnd%d
c 660 root     root    111   0  1   8 av%d

c 660 root     uucp    112   0  1  16 ttyM%x
c 660 root     uucp    113   0  1  16 cum%d

c 660 root     root    114   0  1  16 ise%d
c 660 root     root    114 128  1  16 isex%d

c 660 root     root    115   0  1   1 speaker

c 660 root     root    117   0  1  16 cosa0c%d
c 660 root     root    117  16  1  16 cosa1c%d

c 660 root     root    118   0  1  16 solnp%d
c 660 root     root    118 128  1  16 solnpctl%d

c 660 root     root    119   0  1  16 vnet%d

c 660 root     root    144   0  1  64 pppox%d

c 600 root     sys     145   0 64   4 sam%d_mixer
c 600 root     sys     145   1 64   4 sam%d_sequencer
c 600 root     sys     145   2 64   4 sam%d_midi00
c 600 root     sys     145   3 64   4 sam%d_dsp
c 600 root     sys     145   4 64   4 sam%d_audio
c 600 root     sys     145   6 64   4 sam%d_sndstat
c 600 root     sys     145  18 64   4 sam%d_midi01
c 600 root     sys     145  34 64   4 sam%d_midi02
c 600 root     sys     145  50 64   4 sam%d_midi03

c 660 root     root    146   0  1   8 scramnet%d
c 660 root     root    147   0  1   8 aureal%d

c 660 root     uucp    148   0  1  16 ttyT%d
c 660 root     uucp    149   0  1  16 cut%d

c 660 root     root    150   0  1  16 rtf%d

c 660 root     root    151   0  1  16 dpti%d

c 660 root     uucp    154   0  1 256 ttySR%d
c 660 root     uucp    155   0  1 256 cusr%d
c 660 root     uucp    156   0  1 256 ttySR%d 256
c 660 root     uucp    157   0  1 256 cusr%d  256

c 660 root     root    158   0  1  16 gfax%d
c 660 root     root    159   0  1  16 ixj%d
c 660 root     root    160   0  1  16 gpib%d

c 660 root     root    161   0  1  16 ircomm%d
c 660 root     root    161  16  1  16 irlpt%d

# c 660 root     disk    162   1  1 256 raw%d

c 660 root     root    163   0  1  64 bimrt%d

c 660 root     uucp    164   0  1  64 ttyCH%d
c 660 root     uucp    165   0  1  64 cuch%d

# c 660 root     root    166   0  1  16 ttyACM%d
# c 660 root     uucp    167   0  1  16 cuacm%d

c 660 root     root    168   0  1  64 ecsa%d
c 660 root     root    169   0  1  64 ecsa8-%d

c 660 root     root    170   0  1  64 megarac%d

c 660 root     uucp    171   0  1 128 ttyMX%d
c 660 root     root    171 128  1   1 moxactl
c 660 root     uucp    172   0  1 128 cumx%d

c 660 root     uucp    174   0  1  16 ttySI%d
c 660 root     uucp    175   0  1  16 cusi%d

c 660 root     root    176   0  1  16 nfastpci%d

c 660 root     root    177   0  1  16 pcilynx/aux%d
c 660 root     root    177  16  1  16 pcilynx/rom%d
c 660 root     root    177  32  1  16 pcilynx/ram%d

c 660 root     root    178   0  1  16 clanvi%d

c 660 root     root    179   0  1  16 dvxirq%d

# c 660 root     daemon  180   0  1  16 usb/lp%d
# c 666 root     sys     180  16  1  16 usb/mouse%d
# c 660 root     root    180  32  1  16 usb/ez%d
# c 660 root     root    180  48  1  16 usb/scanner%d

c 660 root     root    181   0  1  16 pcfclock%d
c 660 root     root    182   0  1  16 pethr%d

c 660 root     root    183   0  1  16 ss5136dn%d
c 660 root     root    184   0  1  16 pevss%d
c 660 root     root    186   0  1  16 obd%d

c 660 root     uucp    188   0  1  16 ttyUSB%d
c 660 root     uucp    189   0  1  16 cuusb%d

c 660 root     root    190   0  1  16 kctt%d
MAKEDEV-3.3.8/makedev.d/linux-2.4.x0100664000471600047240000015617507731332706015317 0ustar  nalinnalin# This file is written almost directly from the devices.txt file kept at
# http://www.lanana.org/docs/device-list/devices.txt, as of 16 January 2001
# Type Perms User Group Major Minor Inc Count Base
#
# USB devices have their own configuration file.
#

c $KMEM                  1   1  1   1 mem
c $KMEM                  1   2  1   1 kmem
c $ALLWRITE              1   3  1   1 null
c $KMEM                  1   4  1   1 port
c $ALLWRITE              1   5  1   1 zero
c $ROOT                  1   6  1   1 core
c $ALLWRITE              1   7  1   1 full
c $ALLREAD               1   8  1   1 random
c $ALLREAD               1   9  1   1 urandom
c $ALLREAD               1  10  1   1 vsys

b $STORAGE               1   0  1 128 ram%d
b $STORAGE               1 250  1   1 initrd

c $PTY                   2   0  1  16 ptyp%x
c $PTY                   2  16  1  16 ptyq%x
c $PTY                   2  32  1  16 ptyr%x
c $PTY                   2  48  1  16 ptys%x
c $PTY                   2  64  1  16 ptyt%x
c $PTY                   2  80  1  16 ptyu%x
c $PTY                   2  96  1  16 ptyv%x
c $PTY                   2 112  1  16 ptyw%x
c $PTY                   2 128  1  16 ptyx%x
c $PTY                   2 144  1  16 ptyy%x
c $PTY                   2 160  1  16 ptyz%x
c $PTY                   2 176  1  16 ptya%x
c $PTY                   2 192  1  16 ptyb%x
c $PTY                   2 208  1  16 ptyc%x
c $PTY                   2 224  1  16 ptyd%x
c $PTY                   2 240  1  16 ptye%x

b $FLOPPY                2   0  1   4 fd%d 0
b $FLOPPY                2 128  1   4 fd%d 4

b $FLOPPY                2   4  1   4 fd%dd360  0
b $FLOPPY                2  20  1   4 fd%dh360  0
b $FLOPPY                2  48  1   4 fd%dh410  0
b $FLOPPY                2  64  1   4 fd%dh420  0
b $FLOPPY                2  24  1   4 fd%dh720  0
b $FLOPPY                2  80  1   4 fd%dh880  0
b $FLOPPY                2   8  1   4 fd%dh1200 0
b $FLOPPY                2  40  1   4 fd%dh1440 0
b $FLOPPY                2  56  1   4 fd%dh1476 0
b $FLOPPY                2  72  1   4 fd%dh1494 0
b $FLOPPY                2  92  1   4 fd%dh1660 0

b $FLOPPY                2  12  1   4 fd%du360  0
b $FLOPPY                2  16  1   4 fd%du720  0
b $FLOPPY                2 120  1   4 fd%du800  0
b $FLOPPY                2  52  1   4 fd%du820  0
b $FLOPPY                2  68  1   4 fd%du830  0
b $FLOPPY                2  84  1   4 fd%du1040 0
b $FLOPPY                2  88  1   4 fd%du1120 0
b $FLOPPY                2  28  1   4 fd%du1440 0
b $FLOPPY                2 124  1   4 fd%du1660 0
b $FLOPPY                2  44  1   4 fd%du1680 0
b $FLOPPY                2  60  1   4 fd%du1722 0
b $FLOPPY                2  76  1   4 fd%du1743 0
b $FLOPPY                2  96  1   4 fd%du1760 0
b $FLOPPY                2 116  1   4 fd%du1840 0
b $FLOPPY                2 100  1   4 fd%du1920 0
b $FLOPPY                2  32  1   4 fd%du2880 0
b $FLOPPY                2 104  1   4 fd%du3200 0
b $FLOPPY                2 108  1   4 fd%du3520 0
b $FLOPPY                2 112  1   4 fd%du3840 0

b $FLOPPY                2 132  1   4 fd%dd360  4
b $FLOPPY                2 148  1   4 fd%dh360  4
b $FLOPPY                2 176  1   4 fd%dh410  4
b $FLOPPY                2 192  1   4 fd%dh420  4
b $FLOPPY                2 152  1   4 fd%dh720  4
b $FLOPPY                2 208  1   4 fd%dh880  4
b $FLOPPY                2 136  1   4 fd%dh1200 4
b $FLOPPY                2 168  1   4 fd%dh1440 4
b $FLOPPY                2 184  1   4 fd%dh1476 4
b $FLOPPY                2 200  1   4 fd%dh1494 4
b $FLOPPY                2 220  1   4 fd%dh1660 4

b $FLOPPY                2 140  1   4 fd%du360  4
b $FLOPPY                2 144  1   4 fd%du720  4
b $FLOPPY                2 248  1   4 fd%du800  4
b $FLOPPY                2 180  1   4 fd%du820  4
b $FLOPPY                2 196  1   4 fd%du830  4
b $FLOPPY                2 212  1   4 fd%du1040 4
b $FLOPPY                2 216  1   4 fd%du1120 4
b $FLOPPY                2 156  1   4 fd%du1440 4
b $FLOPPY                2 252  1   4 fd%du1660 4
b $FLOPPY                2 172  1   4 fd%du1680 4
b $FLOPPY                2 188  1   4 fd%du1722 4
b $FLOPPY                2 204  1   4 fd%du1743 4
b $FLOPPY                2 224  1   4 fd%du1760 4
b $FLOPPY                2 244  1   4 fd%du1840 4
b $FLOPPY                2 228  1   4 fd%du1920 4
b $FLOPPY                2 160  1   4 fd%du2880 4
b $FLOPPY                2 232  1   4 fd%du3200 4
b $FLOPPY                2 236  1   4 fd%du3520 4
b $FLOPPY                2 240  1   4 fd%du3840 4

b $FLOPPY                2   4  1   4 fd%dCompaQ 0
b $FLOPPY                2 132  1   4 fd%dCompaQ 4

c $PTY                   3   0  1  16 ttyp%x
c $PTY                   3  16  1  16 ttyq%x
c $PTY                   3  32  1  16 ttyr%x
c $PTY                   3  48  1  16 ttys%x
c $PTY                   3  64  1  16 ttyt%x
c $PTY                   3  80  1  16 ttyu%x
c $PTY                   3  96  1  16 ttyv%x
c $PTY                   3 112  1  16 ttyw%x
c $PTY                   3 128  1  16 ttyx%x
c $PTY                   3 144  1  16 ttyy%x
c $PTY                   3 160  1  16 ttyz%x
c $PTY                   3 176  1  16 ttya%x
c $PTY                   3 192  1  16 ttyb%x
c $PTY                   3 208  1  16 ttyc%x
c $PTY                   3 224  1  16 ttyd%x
c $PTY                   3 240  1  16 ttye%x

b $STORAGE               3   0  1  33 hda
b $STORAGE               3  64  1  33 hdb

l                                     systty tty0
c $TTY                   4   0  1  64 tty%d
c $SERIAL                4  64  1 192 ttyS%d

c $ALLWRITE              5   0  1   1 tty
c $CONSOLE               5   1  1   1 console
c $ALLWRITE              5   2  1   1 ptmx
c $SERIAL                5  64  1 192 cua%d

c $PRINTER               6   0  1   4 lp%d

c $VCSA                  7   0  1  64 vcs
c $VCSA                  7 128  1  64 vcsa

b $STORAGE               7   0  1  16 loop%d

b $STORAGE               8   0  1  16 sda
b $STORAGE               8  16  1  16 sdb
b $STORAGE               8  32  1  16 sdc
b $STORAGE               8  48  1  16 sdd
b $STORAGE               8  64  1  16 sde
b $STORAGE               8  80  1  16 sdf
b $STORAGE               8  96  1  16 sdg
b $STORAGE               8 112  1  16 sdh
b $STORAGE               8 128  1  16 sdi
b $STORAGE               8 144  1  16 sdj
b $STORAGE               8 160  1  16 sdk
b $STORAGE               8 176  1  16 sdl
b $STORAGE               8 192  1  16 sdm
b $STORAGE               8 208  1  16 sdn
b $STORAGE               8 224  1  16 sdo
b $STORAGE               8 240  1  16 sdp

c $STORAGE               9   0  1  32 st%d
c $STORAGE               9  32  1  32 st%dl
c $STORAGE               9  64  1  32 st%dm
c $STORAGE               9  96  1  32 st%da
c $STORAGE               9 128  1  32 nst%d
c $STORAGE               9 160  1  32 nst%dl
c $STORAGE               9 192  1  32 nst%dm
c $STORAGE               9 224  1  32 nst%da

b $STORAGE               9   0  1  32 md%d

c $CONSOLE              10   0  1   1 logibm
c $CONSOLE              10   1  1   1 psaux
c $CONSOLE              10   2  1   1 inportbm
c $CONSOLE              10   3  1   1 atibm
c $CONSOLE              10   4  1   1 jbm
c $CONSOLE              10   4  1   1 amigamouse
c $CONSOLE              10   5  1   1 atarimouse
c $CONSOLE              10   6  1   1 sunmouse
c $CONSOLE              10   7  1   1 amigamouse1
c $CONSOLE              10   8  1   1 smouse
c $CONSOLE              10   9  1   1 pc110pad
c $CONSOLE              10  10  1   1 adbmouse
c $CONSOLE              10  11  1   1 vrtpanel

# Where did 12 go?

c $CONSOLE              10  13  1   1 vpcmouse
c $CONSOLE              10  14  1   1 touchscreen/ucb1x00
c $CONSOLE              10  15  1   1 touchscreen/mk712

c $CONSOLE              10 128  1   1 beep
c $ROOT                 10 129  1   1 modreq
c $ROOT                 10 130  1   1 watchdog
c $ROOT                 10 131  1   1 temperature
c $ROOT                 10 132  1   1 hwtrap
c $ROOT                 10 133  1   1 exttrp
c $ROOT                 10 134  1   1 apm_bios
c $ALLREAD              10 135  1   1 rtc

# Where did 136, 137, and 138 go?

c $ROOT                 10 139  1   1 openprom
c $ROOT                 10 140  1   1 relay8
c $ROOT                 10 141  1   1 relay16
c $ROOT                 10 142  1   1 msr
c $ROOT                 10 143  1   1 pciconf
c $ROOT                 10 144  1   1 nvram
c $CONSOLE              10 145  1   1 hfmodem
c $CONSOLE              10 146  1   1 graphics
c $CONSOLE              10 147  1   1 opengl
c $CONSOLE              10 148  1   1 gfx
c $CONSOLE              10 149  1   1 input/mouse
c $CONSOLE              10 150  1   1 input/keyboard
c $CONSOLE              10 151  1   1 led
c $ROOT                 10 152  1   1 kpoll
c $ROOT                 10 153  1   1 mergemem
c $CONSOLE              10 154  1   1 pmu
c $SERIAL               10 155  1   1 isictl
c $ROOT                 10 156  1   1 lcd
c $ROOT                 10 157  1   1 ac
c $ROOT                 10 158  1   1 nwbutton
c $ROOT                 10 159  1   1 nwdebug
c $ROOT                 10 160  1   1 nwflash
c $ROOT                 10 161  1   1 userdma
c $ROOT                 10 162  1   1 smbus
c $CONSOLE              10 163  1   1 lik
c $ROOT                 10 164  1   1 ipmo
c $ROOT                 10 165  1   1 vmmon
c $ROOT                 10 166  1   1 i2o/ctl
c $SERIAL               10 167  1   1 specialix_sxctl
c $SERIAL               10 168  1   1 tcldrv
c $SERIAL               10 169  1   1 specialix_rioctl
c $ROOT                 10 170  1   1 thinkpad/thinkpad
c $ROOT                 10 171  1   1 srripc
c $ROOT                 10 172  1   1 usemaclone
c $ROOT                 10 173  1   1 ipmikcs
c $ROOT                 10 174  1   1 uctrl
c $ALLREAD              10 175  1   1 agpgart
c $ALLREAD              10 176  1   1 gtrsc
c $SERIAL               10 177  1   1 cbm
c $ROOT                 10 178  1   1 jsflash
c $ROOT                 10 179  1   1 xsvc
c $CONSOLE              10 180  1   1 vrbuttons
c $ROOT                 10 181  1   1 toshiba
c $ROOT                 10 182  1   1 perfctr
c $ROOT                 10 183  1   1 hwrng

# Replaced with per-cpu paths (see redhat).
#c $ROOT                 10 184  1   1 cpu/microcode

# Where did 185 go?

c $ROOT                 10 186  1   1 atomicps
c $ROOT                 10 187  1   1 irnet
c $ROOT                 10 188  1   1 smbusbios
c $ROOT                 10 189  1   1 ussp_ctl
c $ROOT                 10 190  1   1 crash
c $ROOT                 10 191  1   1 pcl181
c $ROOT                 10 192  1   1 nas_xbus
c $ROOT                 10 193  1   1 d7s
c $ROOT                 10 194  1   1 zkshim
c $CONSOLE              10 195  1   1 elographics/e2201

# Where did 196 and 197 go?

c $ROOT                 10 198  1   1 sexec
c $CONSOLE              10 199  1   1 scanners/cuecat
c $ROOT                 10 200  1   1 net/tun
c $ROOT                 10 201  1   1 button/gulpb

# Where did 202 and 203 go?

c $CONSOLE              10 204  1   1 video/em8300
c $CONSOLE              10 205  1   1 video/em8300_mv
c $CONSOLE              10 206  1   1 video/em8300_ma
c $CONSOLE              10 207  1   1 video/em8300_sp
c $ROOT                 10 208  1   1 compaq/cpqphpc
c $ROOT                 10 209  1   1 compaq/cpqrid
c $ROOT                 10 210  1   1 impi/bt
c $ROOT                 10 211  1   1 impi/smic
c $ROOT                 10 212  1   1 watchdogs/0
c $ROOT                 10 213  1   1 watchdogs/1
c $ROOT                 10 214  1   1 watchdogs/2
c $ROOT                 10 215  1   1 watchdogs/3
c $ROOT                 10 216  1   1 fujitsu/apanel
c $ROOT                 10 217  1   1 ni/natmotn
c $ROOT                 10 218  1   1 kchuid
c $ROOT                 10 219  1   1 modems/mwave
c $ROOT                 10 220  1   1 mptctl
c $ROOT                 10 221  1   1 mvista/hssdsi
c $ROOT                 10 222  1   1 mvista/hasi
c $ROOT                 10 223  1   1 systrace
c $ROOT                 10 224  1   1 tpm
c $ROOT                 10 225  1   1 pps

# SPARC only
c $CONSOLE              11   0  1   1 kbd
# PA-RISC only
# c $SERIAL               11   0  1   4 ttyB%d
b $STORAGE              11   0  1  32 scd%d

c $STORAGE              12   2  1   1 ntpqic11
c $STORAGE              12   3  1   1 tpqic11
c $STORAGE              12   4  1   1 ntpqic24
c $STORAGE              12   5  1   1 tpqic24
c $STORAGE              12   6  1   1 ntpqic120
c $STORAGE              12   7  1   1 tpqic120
c $STORAGE              12   8  1   1 ntpqic150
c $STORAGE              12   9  1   1 tpqic150

b $STORAGE              12   0  1   8 dos_cd%d

c $CONSOLE              13   0  1  32 input/js%d
c $CONSOLE              13  32  1  31 input/mouse%d
c $CONSOLE              13  63  1   1 input/mice
c $CONSOLE              13  64  1  32 input/event%d

b $STORAGE              13   0  1  64 xda
b $STORAGE              13  64  1  64 xdb

c $CONSOLE              14   0  1   1 mixer
c $CONSOLE              14   1  1   1 sequencer
c $CONSOLE              14   2  1   1 midi00
c $CONSOLE              14   3  1   1 dsp
c $CONSOLE              14   4  1   1 audio

# Where did 5 go?

c $CONSOLE              14   6  1   1 sndstat
c $CONSOLE              14   7  1   1 audioctl
c $CONSOLE              14   8  1   1 sequencer2

c $CONSOLE              14  16  1   1 mixer1
c $CONSOLE              14  17  1   1 patmgr0
c $CONSOLE              14  18  1   1 midi01
c $CONSOLE              14  19  1   1 dsp1
c $CONSOLE              14  20  1   1 audio1

c $CONSOLE              14  33  1   1 patmgr1
c $CONSOLE              14  34  1   1 midi02
c $CONSOLE              14  50  1   1 midi03

b $STORAGE              14   0  1  17 dos_hda
b $STORAGE              14  64  1  17 dos_hdb
b $STORAGE              14 128  1  17 dos_hdc
b $STORAGE              14 192  1  17 dos_hdd

l                                     js0 input/js0
l                                     js1 input/js1
l                                     js2 input/js2
l                                     js3 input/js3

# Replaced with symlinks to input core joystick devices (see usb).
#c $CONSOLE              15   0  1 128 js%d
#c $CONSOLE              15 128  1 128 djs%d

b $STORAGE              15   0  1   1 sonycd

c $CONSOLE              16   0  1   1 gs4500
b $STORAGE              16   0  1   1 gscd

c $SERIAL               17   0  1  16 ttyH%d
b $STORAGE              17   0  1   1 optcd

c $SERIAL               18   0  1  16 cuh%d
b $STORAGE              18   0  1   1 sjcd

c $SERIAL               19   0  1  33 ttyC%d
b $STORAGE              19   0  1   8 double%d
b $STORAGE              19 128  1   8 cdouble%d

c $SERIAL               20   0  1  32 cub%d
b $STORAGE              20   0  1   1 hitcd

c $STORAGE              21   0  1  32 sg%d
b $STORAGE              21   0  1  64 mfma
b $STORAGE              21  64  1  64 mfmb

c $SERIAL               22   0  1  32 ttyD%d
b $STORAGE              22   0  1  33 hdc
b $STORAGE              22  64  1  33 hdd

c $SERIAL               23   0  1  32 cud%d
b $STORAGE              23   0  1   1 mcd

c $SERIAL               24   0  1 256 ttyE%d
b $STORAGE              24   0  1   1 cdu535

c $SERIAL               25   0  1 256 cue%d
b $STORAGE              25   0  1   4 sbpcd%d 0

c $CONSOLE              26   0  1   1 wvisfgrab
b $STORAGE              26   0  1   4 sbpcd%d 4

c $STORAGE              27   0  1   4 qft%d
c $STORAGE              27   4  1   4 nqft%d
c $STORAGE              27  16  1   4 zqft%d
c $STORAGE              27  20  1   4 nzqft%d
c $STORAGE              27  32  1   4 rawqft%d
c $STORAGE              27  36  1   4 nrawqft%d
b $STORAGE              27   0  1   4 sbpcd%d 8

c $ROOT                 28   0  1   4 staliomem%d
c $PRINTER              28   0  1   4 slm%d
b $STORAGE              28   0  1   4 sbpcd%d 12

# This next set's commented out because it conflicts with the Apple Desktop
# Bus driver, which appears to be the more correct of the two.
# b $STORAGE              28   0  1  16 ada
# b $STORAGE              28  16  1  16 adb
# b $STORAGE              28  32  1  16 adc
# b $STORAGE              28  48  1  16 add
# b $STORAGE              28  64  1  16 ade
# b $STORAGE              28  80  1  16 adf
# b $STORAGE              28  96  1  16 adg
# b $STORAGE              28 112  1  16 adh
# b $STORAGE              28 128  1  16 adi
# b $STORAGE              28 144  1  16 adj
# b $STORAGE              28 160  1  16 adk
# b $STORAGE              28 176  1  16 adl
# b $STORAGE              28 192  1  16 adm
# b $STORAGE              28 208  1  16 adn
# b $STORAGE              28 224  1  16 ado
# b $STORAGE              28 240  1  16 adp

c $CONSOLE              29   0  1  32 fb%d
b $STORAGE              29   0  1   1 aztcd

c $ROOT                 30   0  1   1 socksys
c $ROOT                 30   1  1   1 spx
c $ROOT                 30  32  1   1 inet/ip
c $ROOT                 30  33  1   1 inet/icmp
c $ROOT                 30  34  1   1 inet/ggp
c $ROOT                 30  35  1   1 inet/ipip
c $ROOT                 30  36  1   1 inet/tcp
c $ROOT                 30  37  1   1 inet/egp
c $ROOT                 30  38  1   1 inet/pup
c $ROOT                 30  39  1   1 inet/udp
c $ROOT                 30  40  1   1 inet/idp
c $ROOT                 30  41  1   1 inet/rawip
l                                     ip    inet/ip
l                                     icmp  inet/icmp
l                                     ggp   inet/ggp
l                                     ipip  inet/ipip
l                                     tcp   inet/tcp
l                                     egp   inet/egp
l                                     pup   inet/pup
l                                     udp   inet/udp
l                                     idp   inet/idp
l                                     rawip inet/rawip
l                                     inet/arp udp
l                                     inet/rip udp
l                                     nfsd socksys
l                                     X0R null

b $STORAGE              30   0  1   1 cm205cd

c $CONSOLE              31   0  1   1 mpu401data
c $CONSOLE              31   1  1   1 mpu401stat
b $STORAGE              31   0  1   8 rom%d
b $STORAGE              31   8  1   8 rrom%d
b $STORAGE              31  16  1   8 flash%d
b $STORAGE              31  24  1   8 rflash%d

c $SERIAL               32   0  1  16 ttyX%d
b $STORAGE              32   0  1   1 cm206cd

c $SERIAL               33   0  1  16 cux%d
b $STORAGE              33   0  1  33 hde
b $STORAGE              33  64  1  33 hdf

c $ROOT                 34   0  1  16 scc%d
b $STORAGE              34   0  1  33 hdg
b $STORAGE              34  64  1  33 hdh

c $CONSOLE              35   0  1   4 midi%d
c $CONSOLE              35  64  1   4 rmidi%d
c $CONSOLE              35 128  1   4 smpte%d
b $STORAGE              35   0  1   1 slram

c $ROOT                 36   0  1   1 route
c $ROOT                 36   1  1   1 skip
c $ROOT                 36   2  1   1 fwmonitor
c $ROOT                 36  16  1  16 tap%d
b $STORAGE              36   0  1  64 eda
b $STORAGE              36  64  1  64 edb

c $STORAGE              37   0  1 128 ht%d
c $STORAGE              37 128  1 128 nht%d
b $STORAGE              37   0  1   1 z2ram

c $ROOT                 38   0  1  16 mlanai%d

c $ROOT                 39   0  1  16 ml16pa-a%d
c $ROOT                 39  16  1   1 ml16pa-d
c $ROOT                 39  17  1   3 ml16pa-c%d
c $ROOT                 39  32  1  16 ml16pb-a%d
c $ROOT                 39  48  1   1 ml16pb-d
c $ROOT                 39  49  1   3 ml16pb-c%d

c $CONSOLE              40   0  1   1 mmetfgrab

# Obsolete (see devices.txt).
#b $ROOT                 40   0  1  16 eza

c $ROOT                 41   0  1   1 yamm
b $STORAGE              41   0  1   1 bpcd

# Stay away from major 42!  Don't add any entries which use it!  I mean it!

c $SERIAL               43   0  1  64 ttyI%d
b $STORAGE              43   0  1 128 nb%d

c $SERIAL               44   0  1  64 cui%d
b $STORAGE              44   0  1  16 ftla
b $STORAGE              44  16  1  16 ftlb
b $STORAGE              44  32  1  16 ftlc
b $STORAGE              44  48  1  16 ftld
b $STORAGE              44  64  1  16 ftle
b $STORAGE              44  80  1  16 ftlf
b $STORAGE              44  96  1  16 ftlg
b $STORAGE              44 112  1  16 ftlh
b $STORAGE              44 128  1  16 ftli
b $STORAGE              44 144  1  16 ftlj
b $STORAGE              44 160  1  16 ftlk
b $STORAGE              44 176  1  16 ftll
b $STORAGE              44 192  1  16 ftlm
b $STORAGE              44 208  1  16 ftln
b $STORAGE              44 224  1  16 ftlo
b $STORAGE              44 240  1  16 ftlp

c $ROOT                 45   0  1  64 isdn%d
c $ROOT                 45  64  1  64 isdnctrl%d
c $ROOT                 45 128  1  64 ippp%d
c $ROOT                 45 255  1   1 isdninfo
b $STORAGE              45   0  1  16 pda
b $STORAGE              45  16  1  16 pdb
b $STORAGE              45  32  1  16 pdc
b $STORAGE              45  48  1  16 pdd

c $SERIAL               46   0  1  16 ttyR%d
b $STORAGE              46   0  1   4 pcd%d

c $SERIAL               47   0  1  16 cur%d
b $STORAGE              47   0  1   4 pf%d

c $SERIAL               48   0  1  16 ttyL%d
c $SERIAL               49   0  1  16 cul%d

c $SERIAL               51   0  1  16 bc%d

c $ROOT                 52   0  1   4 dcbri%d

c $ROOT                 53   0  1   3 pd_bdm%d
c $ROOT                 53   3  1   3 icd_bdm%d

c $SERIAL               54   0  1   3 holter%d

c $ROOT                 55   0  1   1 dsp56k

c $ROOT                 56   0  1   1 adb
b $STORAGE              56   0  1  33 hdi
b $STORAGE              56  64  1  33 hdj

c $SERIAL               57   0  1  16 ttyP%d
b $STORAGE              57   0  1  33 hdk
b $STORAGE              57  64  1  33 hdl

c $SERIAL               58   0  1  16 cup%d

c $ROOT                 59   0  1   1 firewall

# Conflicts with parallel-port disks (see devices.txt).
#b $STORAGE              59   0  1   8 pda%d
#b $STORAGE              59   0  1   8 rpda%d

# Here there be dragons.

c $ROOT                 64   0  1   1 enskip
b $STORAGE              64   0  1   1 scramdisk/master
b $STORAGE              64   1  1 254 scramdisk/%d

c $ROOT                 65   0  1   4 plink%d
c $ROOT                 65  64  1   4 rplink%d
c $ROOT                 65 128  1   4 plink%dd
c $ROOT                 65 192  1   4 rplink%dd
b $STORAGE              65   0  1  16 sdq
b $STORAGE              65  16  1  16 sdr
b $STORAGE              65  32  1  16 sds
b $STORAGE              65  48  1  16 sdt
b $STORAGE              65  64  1  16 sdu
b $STORAGE              65  80  1  16 sdv
b $STORAGE              65  96  1  16 sdw
b $STORAGE              65 112  1  16 sdx
b $STORAGE              65 128  1  16 sdy
b $STORAGE              65 144  1  16 sdz
b $STORAGE              65 160  1  16 sdaa
b $STORAGE              65 176  1  16 sdab
b $STORAGE              65 192  1  16 sdac
b $STORAGE              65 208  1  16 sdad
b $STORAGE              65 224  1  16 sdae
b $STORAGE              65 240  1  16 sdaf

c $ROOT                 66   0  1  16 yppcpci%d
b $STORAGE              66   0  1  16 sdag
b $STORAGE              66  16  1  16 sdah
b $STORAGE              66  32  1  16 sdai
b $STORAGE              66  48  1  16 sdaj
b $STORAGE              66  64  1  16 sdak
b $STORAGE              66  80  1  16 sdal
b $STORAGE              66  96  1  16 sdam
b $STORAGE              66 112  1  16 sdan
b $STORAGE              66 128  1  16 sdao
b $STORAGE              66 144  1  16 sdap
b $STORAGE              66 160  1  16 sdaq
b $STORAGE              66 176  1  16 sdar
b $STORAGE              66 192  1  16 sdas
b $STORAGE              66 208  1  16 sdat
b $STORAGE              66 224  1  16 sdau
b $STORAGE              66 240  1  16 sdav

c $STORAGE              67   0  1   1 cfs0
b $STORAGE              67   0  1  16 sdaw
b $STORAGE              67  16  1  16 sdax
b $STORAGE              67  32  1  16 sday
b $STORAGE              67  48  1  16 sdaz
b $STORAGE              67  64  1  16 sdba
b $STORAGE              67  80  1  16 sdbb
b $STORAGE              67  96  1  16 sdbc
b $STORAGE              67 112  1  16 sdbd
b $STORAGE              67 128  1  16 sdbe
b $STORAGE              67 144  1  16 sdbf
b $STORAGE              67 160  1  16 sdbg
b $STORAGE              67 176  1  16 sdbh
b $STORAGE              67 192  1  16 sdbi
b $STORAGE              67 208  1  16 sdbj
b $STORAGE              67 224  1  16 sdbk
b $STORAGE              67 240  1  16 sdbl

c $ROOT                 68   0  1   1 capi20
c $ROOT                 68   1  1  20 capi20.%02d
b $STORAGE              68   0  1  16 sdbm
b $STORAGE              68  16  1  16 sdbn
b $STORAGE              68  32  1  16 sdbo
b $STORAGE              68  48  1  16 sdbp
b $STORAGE              68  64  1  16 sdbq
b $STORAGE              68  80  1  16 sdbr
b $STORAGE              68  96  1  16 sdbs
b $STORAGE              68 112  1  16 sdbt
b $STORAGE              68 128  1  16 sdbu
b $STORAGE              68 144  1  16 sdbv
b $STORAGE              68 160  1  16 sdbw
b $STORAGE              68 176  1  16 sdbx
b $STORAGE              68 192  1  16 sdby
b $STORAGE              68 208  1  16 sdbz
b $STORAGE              68 224  1  16 sdca
b $STORAGE              68 240  1  16 sdcb

c $ROOT                 69   0  1   1 ma16
b $STORAGE              69   0  1  16 sdcc
b $STORAGE              69  16  1  16 sdcd
b $STORAGE              69  32  1  16 sdce
b $STORAGE              69  48  1  16 sdcf
b $STORAGE              69  64  1  16 sdcg
b $STORAGE              69  80  1  16 sdch
b $STORAGE              69  96  1  16 sdci
b $STORAGE              69 112  1  16 sdcj
b $STORAGE              69 128  1  16 sdck
b $STORAGE              69 144  1  16 sdcl
b $STORAGE              69 160  1  16 sdcm
b $STORAGE              69 176  1  16 sdcn
b $STORAGE              69 192  1  16 sdco
b $STORAGE              69 208  1  16 sdcp
b $STORAGE              69 224  1  16 sdcq
b $STORAGE              69 240  1  16 sdcr

c $ROOT                 70   0  1   1 apscfg
c $ROOT                 70   1  1   1 apsauth
c $ROOT                 70   2  1   1 apslog
c $ROOT                 70   3  1   1 apsdbg
c $ROOT                 70  64  1   1 apsisdn
c $ROOT                 70  65  1   1 apsasync
c $ROOT                 70 128  1   1 apsmon
b $STORAGE              70   0  1  16 sdcs
b $STORAGE              70  16  1  16 sdct
b $STORAGE              70  32  1  16 sdcu
b $STORAGE              70  48  1  16 sdcv
b $STORAGE              70  64  1  16 sdcw
b $STORAGE              70  80  1  16 sdcx
b $STORAGE              70  96  1  16 sdcy
b $STORAGE              70 112  1  16 sdcz
b $STORAGE              70 128  1  16 sdda
b $STORAGE              70 144  1  16 sddb
b $STORAGE              70 160  1  16 sddc
b $STORAGE              70 176  1  16 sddd
b $STORAGE              70 192  1  16 sdde
b $STORAGE              70 208  1  16 sddf
b $STORAGE              70 224  1  16 sddg
b $STORAGE              70 240  1  16 sddh

c $SERIAL               71   0  1 256 ttyF%d
b $STORAGE              71   0  1  16 sddi
b $STORAGE              71  16  1  16 sddj
b $STORAGE              71  32  1  16 sddk
b $STORAGE              71  48  1  16 sddl
b $STORAGE              71  64  1  16 sddm
b $STORAGE              71  80  1  16 sddn
b $STORAGE              71  96  1  16 sddo
b $STORAGE              71 112  1  16 sddp
b $STORAGE              71 128  1  16 sddq
b $STORAGE              71 144  1  16 sddr
b $STORAGE              71 160  1  16 sdds
b $STORAGE              71 176  1  16 sddt
b $STORAGE              71 192  1  16 sddu
b $STORAGE              71 208  1  16 sddv
b $STORAGE              71 224  1  16 sddw
b $STORAGE              71 240  1  16 sddx

c $SERIAL               72   0  1 256 cuf%d

c $ROOT                 73   0  4   4 ip2ipl%d
c $ROOT                 73   1  4   4 ip2stat%d

c $ROOT                 74   0  1  16 SCI/%d

c $SERIAL               75   0  1  16 ttyW%d

c $SERIAL               76   0  1  16 cuw%d

c $ALLREAD              77   0  1   1 qng

# Conflict with isicom driver (see devices.txt).
#c $SERIAL               78   0  1  16 ttyM%x
#c $SERIAL               79   0  1  16 cum%d

c $CONSOLE              80   0  1   1 at200
b $STORAGE              80   0  1  16 i2o/hda
b $STORAGE              80  16  1  16 i2o/hdb
b $STORAGE              80  32  1  16 i2o/hdc
b $STORAGE              80  48  1  16 i2o/hdd
b $STORAGE              80  64  1  16 i2o/hde
b $STORAGE              80  80  1  16 i2o/hdf
b $STORAGE              80  96  1  16 i2o/hdg
b $STORAGE              80 112  1  16 i2o/hdh
b $STORAGE              80 128  1  16 i2o/hdi
b $STORAGE              80 144  1  16 i2o/hdj
b $STORAGE              80 160  1  16 i2o/hdk
b $STORAGE              80 176  1  16 i2o/hdl
b $STORAGE              80 192  1  16 i2o/hdm
b $STORAGE              80 208  1  16 i2o/hdn
b $STORAGE              80 224  1  16 i2o/hdo
b $STORAGE              80 240  1  16 i2o/hdp

c $CONSOLE              81   0  1  64 video%d
c $CONSOLE              81  64  1  64 radio%d
c $CONSOLE              81 192  1  32 vtx%d
c $CONSOLE              81 224  1  32 vbi%d

b $STORAGE              81   0  1  16 i2o/hdq
b $STORAGE              81  16  1  16 i2o/hdr
b $STORAGE              81  32  1  16 i2o/hds
b $STORAGE              81  48  1  16 i2o/hdt
b $STORAGE              81  64  1  16 i2o/hdu
b $STORAGE              81  80  1  16 i2o/hdv
b $STORAGE              81  96  1  16 i2o/hdw
b $STORAGE              81 112  1  16 i2o/hdx
b $STORAGE              81 128  1  16 i2o/hdy
b $STORAGE              81 144  1  16 i2o/hdz
b $STORAGE              81 160  1  16 i2o/hdaa
b $STORAGE              81 176  1  16 i2o/hdab
b $STORAGE              81 192  1  16 i2o/hdac
b $STORAGE              81 208  1  16 i2o/hdad
b $STORAGE              81 224  1  16 i2o/hdae
b $STORAGE              81 240  1  16 i2o/hdaf

c $CONSOLE              82   0  1   4 winradio%d

b $STORAGE              82   0  1  16 i2o/hdag
b $STORAGE              82  16  1  16 i2o/hdah
b $STORAGE              82  32  1  16 i2o/hdai
b $STORAGE              82  48  1  16 i2o/hdaj
b $STORAGE              82  64  1  16 i2o/hdak
b $STORAGE              82  80  1  16 i2o/hdal
b $STORAGE              82  96  1  16 i2o/hdam
b $STORAGE              82 112  1  16 i2o/hdan
b $STORAGE              82 128  1  16 i2o/hdao
b $STORAGE              82 144  1  16 i2o/hdap
b $STORAGE              82 160  1  16 i2o/hdaq
b $STORAGE              82 176  1  16 i2o/hdar
b $STORAGE              82 192  1  16 i2o/hdas
b $STORAGE              82 208  1  16 i2o/hdat
b $STORAGE              82 224  1  16 i2o/hdau
b $STORAGE              82 240  1  16 i2o/hdav

c $CONSOLE              83   0  1   1 vtx
c $CONSOLE              83  16  1   1 vttuner

b $STORAGE              83   0  1  16 i2o/hdaw
b $STORAGE              83  16  1  16 i2o/hdax
b $STORAGE              83  32  1  16 i2o/hday
b $STORAGE              83  48  1  16 i2o/hdaz
b $STORAGE              83  64  1  16 i2o/hdba
b $STORAGE              83  80  1  16 i2o/hdbb
b $STORAGE              83  96  1  16 i2o/hdbc
b $STORAGE              83 112  1  16 i2o/hdbd
b $STORAGE              83 128  1  16 i2o/hdbe
b $STORAGE              83 144  1  16 i2o/hdbf
b $STORAGE              83 160  1  16 i2o/hdbg
b $STORAGE              83 176  1  16 i2o/hdbh
b $STORAGE              83 192  1  16 i2o/hdbi
b $STORAGE              83 208  1  16 i2o/hdbj
b $STORAGE              83 224  1  16 i2o/hdbk
b $STORAGE              83 240  1  16 i2o/hdbl

c $ROOT                 84   0  1   2 ihcp%d

b $STORAGE              84   0  1  16 i2o/hdbm
b $STORAGE              84  16  1  16 i2o/hdbn
b $STORAGE              84  32  1  16 i2o/hdbo
b $STORAGE              84  48  1  16 i2o/hdbp
b $STORAGE              84  64  1  16 i2o/hdbq
b $STORAGE              84  80  1  16 i2o/hdbr
b $STORAGE              84  96  1  16 i2o/hdbs
b $STORAGE              84 112  1  16 i2o/hdbt
b $STORAGE              84 128  1  16 i2o/hdbu
b $STORAGE              84 144  1  16 i2o/hdbv
b $STORAGE              84 160  1  16 i2o/hdbw
b $STORAGE              84 176  1  16 i2o/hdbx
b $STORAGE              84 192  1  16 i2o/hdby
b $STORAGE              84 208  1  16 i2o/hdbz
b $STORAGE              84 224  1  16 i2o/hdca
b $STORAGE              84 240  1  16 i2o/hdcb

c $ROOT                 85   0  1   1 shmiq
c $ROOT                 85   1  1   8 qcntl%d

b $STORAGE              85   0  1  16 i2o/hdcc
b $STORAGE              85  16  1  16 i2o/hdcd
b $STORAGE              85  32  1  16 i2o/hdce
b $STORAGE              85  48  1  16 i2o/hdcf
b $STORAGE              85  64  1  16 i2o/hdcg
b $STORAGE              85  80  1  16 i2o/hdch
b $STORAGE              85  96  1  16 i2o/hdci
b $STORAGE              85 112  1  16 i2o/hdcj
b $STORAGE              85 128  1  16 i2o/hdck
b $STORAGE              85 144  1  16 i2o/hdcl
b $STORAGE              85 160  1  16 i2o/hdcm
b $STORAGE              85 176  1  16 i2o/hdcn
b $STORAGE              85 192  1  16 i2o/hdco
b $STORAGE              85 208  1  16 i2o/hdcp
b $STORAGE              85 2