#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <stdint.h>

#include <asm/ioctl.h>
#include <linux/types.h>

#include "ioctldefs.h"
#include <linux/atmioc.h>

struct ioctlent {
	const char*	header;
	const char*	name;
	unsigned long	code;
};

struct ioctlent ioctls[] = {
#include "ioctls.h"
};

int nioctls = sizeof(ioctls) / sizeof(ioctls[0]);

int compare(const void* a, const void* b) {
	unsigned long code1 = ((struct ioctlent *) a)->code;
	unsigned long code2 = ((struct ioctlent *) b)->code;
	const char *name1 = ((struct ioctlent *) a)->name;
	const char *name2 = ((struct ioctlent *) b)->name;
	return (code1 > code2) ? 1 : (code1 < code2) ? -1 : strcmp(name1, name2);
}

int main(int argc, char** argv) {
	int i;

	/* ioctl_lookup() only looks at the NR and TYPE bits atm. */
	for (i = 0; i < nioctls; i++)
		ioctls[i].code &= (_IOC_NRMASK << _IOC_NRSHIFT) |
				  (_IOC_TYPEMASK << _IOC_TYPESHIFT);

	qsort(ioctls, nioctls, sizeof(ioctls[0]), compare);
	puts("\t/* Generated by ioctlsort */");
	for (i = 0; i < nioctls; i++)
		if (i == 0 || ioctls[i].code != ioctls[i-1].code ||
		    strcmp(ioctls[i].name, ioctls[i-1].name))
			printf("\t{\"%s\",\t\"%s\",\t%#06lx},\n",
				ioctls[i].header, ioctls[i].name, ioctls[i].code);

	return 0;
}
