$_IOC_NRBITS = 8; $_IOC_TYPEBITS = 8; $_IOC_SIZEBITS = 14; $_IOC_DIRBITS = 2; $_IOC_NRMASK = ((1 << $_IOC_NRBITS)-1); $_IOC_TYPEMASK = ((1 << $_IOC_TYPEBITS)-1); $_IOC_SIZEMASK = ((1 << $_IOC_SIZEBITS)-1); $_IOC_DIRMASK = ((1 << $_IOC_DIRBITS)-1); $_IOC_NRSHIFT = 0; $_IOC_TYPESHIFT = ($_IOC_NRSHIFT+$_IOC_NRBITS); $_IOC_SIZESHIFT = ($_IOC_TYPESHIFT+$_IOC_TYPEBITS); $_IOC_DIRSHIFT = ($_IOC_SIZESHIFT+$_IOC_SIZEBITS); sub _IOC { local ($dir,$type,$nr,$size) = @_; ((($dir) << $_IOC_DIRSHIFT) | ((ord($type)) << $_IOC_TYPESHIFT) | (($nr) << $_IOC_NRSHIFT) | (($size) << $_IOC_SIZESHIFT)); } sub EMCTL_IOCTL_INIT { _IOC(0,'C',0,8 );} sub EMCTL_IOCTL_READREG { _IOC(3,'C',1,12);} sub EMCTL_IOCTL_WRITEREG { _IOC(1,'C',2,12); } sub EMCTL_IOCTL_GETSTATUS { _IOC(2,'C',3,shift)} sub EMCTL_IOCTL_SETBCS { _IOC(1,'C',4,12) } sub EMCTL_IOCTL_SETASPECTRATIO { _IOC(1,'C',5,4) } sub em8300_open { open(EMDEV,"