[comp.lang.perl] Where art thou $sizeof{}?

poage@sunny.ucdavis.edu (Tom Poage) (08/15/90)

I've been playing with `makelib' to get a number of .h files
for various ioctl's.  Now, terminal control works fine from the Berkeley
universe point-of-view, i.e., ioctl.pl, but the System V-type
makelib-generated termios.h is nearly useless.

(As you might have guessed, I live--err, operate--in a dual
universe [read SunOS].)

The header termios.h has:

    eval 'sub TCGETS {&_IOR("T", 8, \'struct termios\');}';
    eval 'sub TCSETS {&_IOW("T", 9, \'struct termios\');}';

and another included file, ioccom.h, has:

    eval 'sub IOCPARM_MASK {0xff;}';
    eval 'sub IOC_OUT {0x40000000;}';
    eval 'sub IOC_IN {0x80000000;}';
    eval 'sub _IOR {
        local($x,$y,$t) = @_;
        eval "(&IOC_OUT|(($sizeof{$t} & &IOCPARM_MASK)<<16)|(ord(\'$x\')<<8)|$y)";
    }';
    eval 'sub _IOW {
        local($x,$y,$t) = @_;
        eval "(&IOC_IN|(($sizeof{$t} & &IOCPARM_MASK)<<16)|(ord(\'$x\')<<8)|$y)";
    }';

Unfortunately, the associative array `sizeof' is nowhere to be found.

Is it supposed to be?

Calling TCGETS and TCSETS, among others, leads to

    Inappropriate ioctl for device at ...

The work-around seems to be fairly simple:

	do 'sys/termios.h';
	$termios_t = "LLLLCC" . &NCCS; # struct termios.
	$sizeof{'struct termios'} = length(pack($termios_t,()));
	# do your ioctl's here.

My questions, if you haven't already guessed them:

	Why isn't array `sizeof' defined anywhere?
	Is it supposed to be user-defined?
	Should `makelib' be smart enough to extract struct information?

Honorable mention of the special array `sizeof' in the manual might
be indicated.

Oh, BTW...

	$Header: perly.c,v 3.0.1.5 90/03/27 16:20:57 lwall Locked $
	Patch level: 18
	...

Tom.
-- 
Tom Poage, Clinical Engineering
Universiy of California, Davis, Medical Center, Sacramento, CA
poage@sunny.ucdavis.edu  {...,ucbvax,uunet}!ucdavis!sunny!poage

poage@sunny.ucdavis.edu (Tom Poage) (08/15/90)

Oops!  I answered my own question.  Reference to %sizeof is in
the recent patches (19 I think).

Tom.
-- 
Tom Poage, Clinical Engineering
Universiy of California, Davis, Medical Center, Sacramento, CA
poage@sunny.ucdavis.edu  {...,ucbvax,uunet}!ucdavis!sunny!poage