Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #26648

Re: packed structs

From JohnF <john@please.see.sig.for.email.com>
Newsgroups comp.lang.c
Subject Re: packed structs
Date 2012-09-24 11:04 +0000
Organization PANIX Public Access Internet and UNIX, NYC
Message-ID <k3peo6$quh$1@reader1.panix.com> (permalink)
References (3 earlier) <k3ne96$bja$1@dont-email.me> <k3o5mb$1ib$1@reader1.panix.com> <0.6562e3f0e92d8c6a2354.20120924015911BST.871uhs2q3k.fsf@bsb.me.uk> <k3oi08$14i$1@reader1.panix.com> <k3p8jm$vl5$1@dont-email.me>

Show all headers | View raw


BartC <bc@freeuk.com> wrote:
> "JohnF" <john@please.see.sig.for.email.com> wrote
>> Ben Bacarisse <ben.usenet@bsb.me.uk> wrote:
> 
>>> The main departure from pack/unpack is the lack of support for
>>> alternative byte orderings.  As a result, I'm not sure it's all that
>>> close to either familiar "model".
> 
>>   It was primarily smemf()'s general idea I wanted to get across
>> by posting that comment block. Obviously, any shortcomings
>> in the specific functional details can be corrected and coded.
>> Of course, when I originally posted those comments, I wasn't
>> yet aware of python/perl pack and unpack. In that case, I could
>> have gotten across the general idea just by mentioning those.
> 
> Actually this seems a much better idea to me now, than it did at first ...
> if you forget about the purpose of using it in place of C's packed structs.
> 
> It's just an alternative, possibly simpler way of writing to a binary stream 
> than trying to use -printf() functions, or sequences of function calls. And 
> presumably to read from them too.
> 
> But you didn't explain clearly how it would be used. In the GIF example,
> presumably you'd have an *unpacked* struct representing the header
> information, which allows the program to access fields, now properly
> aligned, using the conventional forms of 'p.a' or 'p->a'.

Well, you'd use it however you liked. But for my gif situation,
I'd envisioned >>doing away with structs entirely<<, packed or not.
The smemf >>format string totally replaces<< the need for any struct.
And, of course, I prototyped that for myself, i.e., wrote some
pseudocode using the as-yet-uncompleted smemf, just to make sure
that idea seems to work.
    You can see exhaustively complete comments about the gif block
formats at forkosh.com/gifsave89.html by clicking the Listing link
along the left-hand side under "Related Pages", and scrolling down
to line#493 for the GIFIMAGEDESCRIP struct. My "pseudocode" for that
is just one smemf statement that totally replaces the struct,

nbitsinbuffer =  /* whitespace in smemf format string is ignored */
    smemf(buffer, " 2C %x  "   /* Image Descriptor identifier is hex 2C */
                  "    %2ld"   /* 2-byte little-endian word for X-pos */
                  "    %2ld"   /* 2-byte little-endian word for Top */
                  "    %2ld"   /* 2-byte little-endian word for Width */
                  "    %2ld"   /* 2-byte little-endian word for Height */
    /* following is the "Packed" Byte consisting of five bit fields */
                  "    %3b "   /* 3-bits #colorbits */
                  "  0 %2b "   /* 2-bits "reserved bits" */
                  "  0 %1b "   /* 1-bit  local colortable sort flag */
                  "  0 %1b "   /* 1-bit  interlace flag */
                  "    %1b ",  /* 1-bit  local colortable flag */
    col0,row0, ncols,nrows, ncolorbits, (colortable==NULL?0:1) );

And smemf() returns the size, in #bits, of the buffer it constructs.
That would usually be a multiple of 8, in which case you can just
fwrite(buffer,etc), or do whatever you want with it.

> smem() (and it's -scanf() counterpart) would simply be used to write to the
> proper packed form, or to read from it.
> So they are not a plug-in replacement for '#pragma pack()'.

-- 
John Forkosh  ( mailto:  j@f.com  where j=john and f=forkosh )

Back to comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-22 01:54 +0000
  Re: packed structs Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-09-21 23:22 -0400
    Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-22 06:37 +0000
      Re: packed structs "BartC" <bc@freeuk.com> - 2012-09-22 13:47 +0100
        Re: packed structs Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-09-22 14:00 +0100
        Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-22 15:42 +0000
      Re: packed structs Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-09-22 09:13 -0400
      Re: packed structs Johann Klammer <klammerj@NOSPAM.a1.net> - 2012-09-23 03:10 +0200
        Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-23 02:10 +0000
      Re: packed structs Stephen Sprunk <stephen@sprunk.org> - 2012-09-23 11:44 -0500
        Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-23 23:23 +0000
          Re: packed structs Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-09-24 01:59 +0100
            Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-24 02:54 +0000
              Re: packed structs Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-09-24 04:38 +0100
                Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-24 04:07 +0000
                Re: packed structs Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-09-24 12:16 +0100
                Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-24 11:45 +0000
              Re: packed structs "BartC" <bc@freeuk.com> - 2012-09-24 10:18 +0100
                Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-24 11:04 +0000
                Re: packed structs Stephen Sprunk <stephen@sprunk.org> - 2012-09-30 14:21 -0500
                Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-10-01 07:34 +0000
          Re: packed structs Stephen Sprunk <stephen@sprunk.org> - 2012-09-30 13:52 -0500
    Re: packed structs Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-09-22 01:31 -0700
      Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-22 08:53 +0000
        Re: packed structs Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-09-22 14:17 +0000
          Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-22 15:33 +0000
            Re: packed structs Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-09-22 20:43 +0000
            Re: packed structs "BartC" <bc@freeuk.com> - 2012-09-22 22:52 +0100
          Re: packed structs Keith Thompson <kst-u@mib.org> - 2012-09-22 13:47 -0700
            Re: packed structs JohnF <john@forkosh.com.com> - 2012-09-23 00:19 +0000
              Re: packed structs Ian Collins <ian-news@hotmail.com> - 2012-09-23 13:32 +1200
                Re: packed structs JohnF <john@please.see.sig.for.email.com> - 2012-09-23 02:16 +0000
        Re: packed structs Ian Collins <ian-news@hotmail.com> - 2012-09-23 10:33 +1200
          Re: packed structs Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-09-23 01:38 -0700
  Re: packed structs The Great Firewall of China Blue <chine.bleu@yahoo.com> - 2012-09-21 21:29 -0700

csiph-web