[comp.sys.amiga] IFF archive proposal

ain@j.cc.purdue.edu (Patrick White) (01/15/88)

   Bryan Ford has been bouncing an IFF archive idea he had off of me for the
last few weeks.  We finally decided to post it to get a wider base of opinions
(and also because I don't know much about IFF formats).
   So, following this blurb is the proposal he sent me.  Please send your
comments to Bryan (FATQW@USU.bitnet) as I'm just commenting on it like
everybody else... if you can't get mail through to him, you can send it to
me and I'll forward it.

   I'm posting this because we have not figured out how Bryan can post from
bitnet yet -- any pointers would be greatly appreciated.

   Thanks.

Pat White (ain@j.cc.purdue.edu | patwhite@purccvm)

========================================

   There are two sections in this document.  The first one describes the
ARC form, and the second describes the FLST form.  Note that a FLST form
does not necessarily need to be included in an ARC form, but the multifile
and subdirectory capabilities are lost.
    It is the unlimited nesting capability of the IFF format that makes
this file format possible.  Thanks EA!
    An archive file is made up of zero or more ARC chunks, with FLST chunks
as their "children."  In other words, the ARC chunks are the tree and
branches, while the FLST chunks are the "leaves".

FORM ARC - Archive.
   The ARC form is a form for collecting more than one file into one file.
It can also specify subdirectories to be created before it is unarced, and
it can contain nested FORM ARCs as well as FLSTs.
   Following is a description of the various chunks that may appear
withing an ARC.
   SBDR - Subdirectory.  This chunk contains a string of characters
terminated by a null, specifying a subdirectory for this ARC to be unarced
into.  If the specified subdirectory does not already exist, the unarcing
program will create it in the current directory (or the directory that a
parent ARC was unarced into).  Note that for languages that require a
length byte followed by the string, the chunk length minus one may be used
as the length.  This is because of the extra zero required at the end.
   ANAM - Archiver name.  This contains a null-terminated string telling
the name of the program that created this archive.  This chunk, if included
at all, should only be included in the top-level ARC chunk.
   FORM ARC - A child ARC.  This is useful for "sub-archives" which, when
unarced, go into various directories automatically.  A child ARC doesn't
necessarily need a SBDR chunk, but it makes little sense otherwise.
   FORM FLST - File chunks.  These chunks contain the actual files which
make up the archive.  They are not necessary for an archive, and in some
cases this may be useful.  For one example, maybe an archive wants to create
several subdirectories which contain files, but no files in the root.  As
another example, you may want a child ARC to be completely empty except for
a SBDR chunk - for example a "saved games" directory without any saved
games.  In other words, this may be useful for just creating directories to
be used later, but not put any files in it.

FORM FLST - File
   These forms contain files.  Each may contain several chunks described
below.
   NAME - Filename.  This chunk contains a filename terminated with a null
byte.  This is a filename which the file will go into.  This is a required
chunk.  There is still a limit to the length of the filename - 2,147,483,648
characters to be exact.  You should not need filenames longer than this.
This was a major issue about the old ARC program which is dealt with here.
   LEN - Length.  This is a required chunk which contains one longword of
data - the actual (uncompressed) size of the file.  This may be useful for
unarcing programs to check the free space on the disk before they start to
write a long file.
   SECT - Sections.  This chunk is not required, and if omitted, its
default value is 1.  It contains one word of data: the number of sections,
and thus number of compression chunks, in the file.  This came out of an
idea from Pat White (ain@j.cc.purdue.edu).  It allows files to be split up,
so if part of a file is munged, the rest of the file may be salvaged.  For
example, if an archiving program detects that it is archiving an IFF file
of some kind,  it checks to see what the top chunk is.  If it's a FORM or a
LIST, it gets compressed with simply one section, and no SECT chunk is
written.  However, if the top chunk is a CAT, then the archiving program
break up the file into multiple compression chunks, and include a SECT
chunk with the number of compression chunks.  Each compression chunk will
contain one of the chunks in the CAT, and an unarchiver can rebuild the
structure by CATing all the compression chunks together.  If one is bad,
the rest will get CATted, so the user can still get part of the file back.
This would be good for multipage documents.  For example, if one page gets
munged, the unarchiving program would restore the other pages.
   CRC - CRC check.  This chunk was modified from its original definition
to accomodate multiple program sections.  The chunk contains as many words
of data as there are sections in the file - one CRC for each section.  If
there are too many CRC words, an unarchiver will ignore the rest.  If there
are too few, the unarchiver will check only the sections with CRCs
supplied.  If there is no CRC chunks, no checking will be done.
   This LEVL - Multilevel marker.  This chunk contains one word of data -
the number of compression levels in the main chunk.  For example, an
archiver may detect that a certain file would be much better off if it was
crunched and then squeezed.  This chunk, if included, indicates the number
of levels in the main chunk.  If it is a 1, then the main chunk simply
contains the file.  If it is a two, then the main chunk contains another
chunk, indicating the same or a different compression method.  Normally
only one or two levels will be necessary, and usually only one.  However,
for text files, packing and then crunching may be the best compression
method.
   The following chunks are the main data chunks - they must appear below
the chunks listed above, and there must be one and only one in the file
(although a main chunk may contain another one).
   STOR - Storage without compression.  This is usually used for very small
files which would not gain anything in compression.  The chunk's data is an
exact duplicate of what will go into the file.  Although other main chunks
within STOR's are allowed, there is no reason - files should normally have
one or more nested compression chunks, or a STOR if the file can't be
compressed.
   PACK - Packing.  This format consists of a series of bytes with
replications packed down to one.  The format is simple: the bytes in the
PACK chunk exactly duplicate those in uncompressed file, except where there
are three or more of the same bytes in a row.  In this case, the format is
the byte which repeats, then a hex 90, then the number of extra bytes.  A
hex 90 followed by a zero denotes the value of hex 90 in the stream.  For
example, if the text is "ABCCCCDEF", then the packed format would be
"ABC<90H><3>DEF".Notice that the value after the 90H is one less than the
number of duplicate bytes actually in the file.  In other words, this means
"put 3 MORE C's here".  Note that this is not the same as the packing
algorithm used in the older ARC file.
   CRNC - Crunching.  As of yet, I don't have the docs for this format, but
as soon as I get them, I'll include them here.
   SQEZ - Squeezing.  Ditto.
   SQSH - Squashing.  This one is controversial.  It is used in PKARC for
the IBM PC, but hasn't yet made it to the Amiga.  Tell me what you think of
including it.  It will make archiving programs larger, but whether to
include it or not depends on whether it will get used very often.  Voice
your feelings.
   When better compression algorithms come out, they may be added to the
FORM ARC.  However, these will NOT be upward compatible - programs which use
them will not be compatible with programs which don't.
   One final note: there is no requirement to sort archived files in any
way, although archivers may want to sort them for the user's sake.
   Although this document is not copyrighted or anything, please don't
redistribute it very much.  This is because it's only a draft, and it will
probably get changed, and we want EVERYONE to have the same thing.
   Please feel free to email suggestions for this file.  Oh, and if someone
has the docs on crunching and squeezing, please email them to me.  Thanks.

                             History

  date         author                      changes
-------- ------------------ ---------------------------------------------
  ????       Bryan Ford     Created this file
01/08/88     Bryan Ford     Added ANAM and SECT, changed CRC chunk

                              THE END

        Bryan Ford           +-----------------------------------------+
Snail:  1790 East 1400 North | A computer does what you tell it to do, |
        Logan, UT 84321      | not what you want it to do.             |
Bitnet: FATQW@USU            +------ Murphy's Law Calendar, 1986 ------+

farren@gethen.UUCP (Michael J. Farren) (01/16/88)

In article <6173@j.cc.purdue.edu> ain@j.cc.purdue.edu (Patrick White) writes:
>
>FORM ARC - Archive.
>   The ARC form is a form for collecting more than one file into one file.
>It can also specify subdirectories to be created before it is unarced, and
>it can contain nested FORM ARCs as well as FLSTs.

  Subdirectories should probably always be handled as nested ARCs, as
  that will allow the de-arcing utility to determine whether or not to
  un-arc them.  There are times when you don't want to unarc all sub-
  directories, but need finer control.

>   SBDR - Subdirectory.  This chunk contains a string of characters 
>terminated by a null, specifying a subdirectory for this ARC to be unarced
>into.  If the specified subdirectory does not already exist, the unarcing
>program will create it in the current directory (or the directory that a
>parent ARC was unarced into).

  Again, should be OPTIONAL.  You might want to unarc into your current
  subdirectory, regardless of where the file originally came from.

>   ANAM - Archiver name.  This contains a null-terminated string telling
>the name of the program that created this archive.  This chunk, if included
>at all, should only be included in the top-level ARC chunk.

  Not necessary if you agree on archival formats ahead of time.  Why 
  would you want to (or ever need to) know the name of the program that
  created an archive, if the archive were in a standard format?

>   This LEVL - Multilevel marker.  This chunk contains one word of data -
>the number of compression levels in the main chunk.  For example, an
>archiver may detect that a certain file would be much better off if it was
>crunched and then squeezed.

  Almost never needed, and the overhead involved in figuring out that
  multiple levels of compression could result in some savings will,
  very likely, overwhelm the advantages of doing the multi-compression.
  I would tend to reject this as an unnecessary complication, with
  little reward.

>   PACK - Packing.
>   CRNC - Crunching.
>   SQEZ - Squeezing.
>   SQSH - Squashing.

  Instead of this, how about one: FRMT, which would contain one byte
  indicating the packing algorithm used to compress the file chunk,
  immediately followed by the file data in compressed form, perhaps
  called DATA or BODY or whatever works.  This would allow future
  expansion more easily.

Basically, I think this is a real nifty idea.  One thing to keep in mind
is the many methods of compression out there.  There's run-length encoding,
which is the method currently used for ILBM compressed images.  There's
Huffman encoding, commonly called 'Squeezing'.  And there's Lempel-Zev
encoding, which is what is used for Crunching and Squashing, in all of
its different bitlength flavors (12-bit LZ encoding, for example, is the
basic encoding scheme used for Crunching, while Squashing is the same
encoding scheme, only 13 bits instead of 12).  This is why I recommend
the FRMT chunk, since this will allow the use of an arbitrary number of
different schemes, if you like, and will also allow future expansion of
the encoding schemes without requiring you to think of separate names
for each of them.  (ARC, by the way, uses eight different schemes
internally).

Also, it should be the province of the program which creates the ARC
to choose which schemes it prefers.  There are several special purpose
applications which might always prefer one type of encoding over the
other, and this should be allowed.  I can see two types of programs
coming out of this: those that are specially designed to manipulate
archives, and those that just use them as they see fit.  Neat idea.

-- 
Michael J. Farren             | "INVESTIGATE your point of view, don't just 
{ucbvax, uunet, hoptoad}!     | dogmatize it!  Reflect on it and re-evaluate
        unisoft!gethen!farren | it.  You may want to change your mind someday."
gethen!farren@lll-winken.llnl.gov ----- Tom Reingold, from alt.flame 

rsb584@leah.Albany.Edu ( Raymond S Brand) (01/18/88)

>    ANAM - Archiver name.  This contains a null-terminated string telling
> the name of the program that created this archive.  This chunk, if included
> at all, should only be included in the top-level ARC chunk.

Why is ANAM needed at all?

>    NAME - Filename.  This chunk contains a filename terminated with a null
> byte.  This is a filename which the file will go into.  This is a required
> chunk.  There is still a limit to the length of the filename - 2,147,483,648
> characters to be exact.  You should not need filenames longer than this.
> This was a major issue about the old ARC program which is dealt with here.

31 bits is rather large, don't you think 15 or even 7 is enough? Names should
be limited to containing ASCII characters in the range 20h to 7Eh with the
responsibility of checking that a name is acceptable for the system it is 
being extracted to being in the archive extracter (think about other systems
that could benifit from the new archive format).

>    CRC - CRC check.  This chunk was modified from its original definition
> to accomodate multiple program sections.  The chunk contains as many words
> of data as there are sections in the file - one CRC for each section.  If
> there are too many CRC words, an unarchiver will ignore the rest.  If there
> are too few, the unarchiver will check only the sections with CRCs
> supplied.  If there is no CRC chunks, no checking will be done.


CRCs are easy enough to do that they should be considered mandatory. Too many
or too few should be considered an ERROR.

>    This LEVL - Multilevel marker.  This chunk contains one word of data -
> the number of compression levels in the main chunk.  For example, an
> archiver may detect that a certain file would be much better off if it was
> crunched and then squeezed.  This chunk, if included, indicates the number
> of levels in the main chunk.  If it is a 1, then the main chunk simply
> contains the file.  If it is a two, then the main chunk contains another
> chunk, indicating the same or a different compression method.  Normally
> only one or two levels will be necessary, and usually only one.  However,
> for text files, packing and then crunching may be the best compression
> method.

The need for this escapes me. Almost all compression methods do run length
encoding as a part of higher level methods. 

>    CRNC - Crunching.  As of yet, I don't have the docs for this format, but
> as soon as I get them, I'll include them here.


ARC Crunch is 12 bit Lemple-Zev with run length encoding a a prestep.

>    SQEZ - Squeezing.  Ditto.

ARC Squeeze is Huffman encoding with run length encoding as a prestep.

>    SQSH - Squashing.  This one is controversial.  It is used in PKARC for
> the IBM PC, but hasn't yet made it to the Amiga.  Tell me what you think of
> including it.  It will make archiving programs larger, but whether to
> include it or not depends on whether it will get used very often.  Voice
> your feelings.

I believe that Squash is a 13 bit Lemple-Zev encoding using a different hash
function than the one used in Crush (don't quote me on this one).

Typically the benifit of Squash over Crush is only a few percent, usually on
large files only. 

>    One final note: there is no requirement to sort archived files in any
> way, although archivers may want to sort them for the user's sake.

Sorting makes it easier for the user and the archiving program (the program
doesn't need to search the entire archive looking for a preexisting entry
named GAME to add an entry name GAME, etc.).

>    Although this document is not copyrighted or anything, please don't
> redistribute it very much.  This is because it's only a draft, and it will
> probably get changed, and we want EVERYONE to have the same thing.

When you say everyone, this also means MS-DOG users (sysops) also, who is doing
that version?

>    Please feel free to email suggestions for this file.  Oh, and if someone
> has the docs on crunching and squeezing, please email them to me.  Thanks.

There really are no docs crunching other than the source. The method used is
derived from the unix compress utility. Squeezing is Huffman encoding and is
very straight forward.
> 
>                              History
> 
>   date         author                      changes
> -------- ------------------ ---------------------------------------------
>   ????       Bryan Ford     Created this file
> 01/08/88     Bryan Ford     Added ANAM and SECT, changed CRC chunk
> 
>                               THE END
> 
>         Bryan Ford           +-----------------------------------------+
> Snail:  1790 East 1400 North | A computer does what you tell it to do, |
>         Logan, UT 84321      | not what you want it to do.             |
> Bitnet: FATQW@USU            +------ Murphy's Law Calendar, 1986 ------+

Raymond S. Brand               Fido: 141/255  1-518-489-8968
                               Mail: ihnp4!sun!sunbow!beowulf!rsbx
                                     uunet!steinmetz!beowulf!rsbx
                               Snail: 3A Pinehurst Ave. Albany NY 12203
                               Voice: 1-518-482-8798

FATQW@USU.BITNET (01/18/88)

From: fatqw@usu.bitnet (Bryan Ford)
Newsgroups: comp.sys.amiga
Subject: Re: IFF archive proposal
References: <589@gethen.UUCP> <6173@j.cc.purdue.edu>
Organization: Absolutely None, Inc.

(Sorry I may have not explained things well...I'm not the best explainer!)

In article <589@gethen.UUCP> farren@gethen.UUCP (Michael J. Farren) writes:
>In article <6173@j.cc.purdue.edu> ain@j.cc.purdue.edu (Patrick White) writes:
>>
>>FORM ARC - Archive.
>>   The ARC form is a form for collecting more than one file into one file.
>>It can also specify subdirectories to be created before it is unarced, and
>>it can contain nested FORM ARCs as well as FLSTs.
>
>Subdirectories should probably always be handled as nested ARCs, as
>that will allow the de-arcing utility to determine whether or not to
>un-arc them.  There are times when you don't want to unarc all sub-
>directories, but need finer control.

That's exactly what I was saying - sorry if it's unclear.  I'll try and
revise the document.  Do you think it should be a requirement that all
nested FORM ARCs have SBDR chunks?  I think that would be quite reasonable,
since I can think of no instance where a nested ARC would NOT be a sub-
directory.

>>   SBDR - Subdirectory.  This chunk contains a string of characters
>>terminated by a null, specifying a subdirectory for this ARC to be unarced
>>into.  If the specified subdirectory does not already exist, the unarcing
>>program will create it in the current directory (or the directory that a
>>parent ARC was unarced into).
>
>Again, should be OPTIONAL.  You might want to unarc into your current
>subdirectory, regardless of where the file originally came from.

I agree.  However, overriding the SBDR chunk is the unarchiver's job.  If
it has the option, it may be considered a "better" unarchiver.  In other
words, that would just be another feature of "good" unarchivers.

Also, remember that the top ARC chunk does not need to have a SBDR chunk.
If it does, the whole archive will be unarced into this subdirectory and
it will be used as a root for the rest.  (Unless overridden, see above.)
If it doesn't have an SBDR chunk, it will use the specified directory, or
the current directory.

>>   ANAM - Archiver name.  This contains a null-terminated string telling
>>the name of the program that created this archive.  This chunk, if included
>>at all, should only be included in the top-level ARC chunk.
>
>Not necessary if you agree on archival formats ahead of time.  Why
>would you want to (or even need to) know the name of the program that
>created the archive, if the archive were in a standard format?

This would be only for the user's information.  For example, a user gets
an archive somewhere and finds that it doesn't work.  He checks, and finds
out that it didn't get munged in the mail, or on disk, or anything.  Then
he calls up his archiver, with the -Info option or whatever.  It shows the
name of the program that created this junky archive.  He posts it on Usenet,
saying, "Beware of this archiver: it's not compatible with the rest!"  In
other words, probably no archiving program would EVER want to look at this
chunk, except to display it to the user.

Anyway, if an archiver doesn't write one of these, so what?  If an unarchiver
can't handle these, so what?  That's what IFF is all about!

>>   This LEVL - Multilevel marker.  This chunk contains one word of data -
>>the number of compression levels in the main chunk.  For example, an
>>archiver may detect that a certain file would be much better off if it was
>>crunched and then squeezed.
>
>Almost never needed, and the overhead involved in figuring out that
>multiple levels of compression could result in some savings will,
>very likely, overwhelm the advantages of doing the multi-compression.
>I would tend to reject this as an unnecessary complication, with
>little reward.

For now, you're right.  I though of that, and it WOULD be much more than
it's worth...NOW.  That's the thing.  It's there, so even if it doesn't
get used now, it's there if someone wants to use it later.  For example,
if processor speed mega-mupples (a far-off offshoot of doubles, tripples,
etc.), and you want to CRAM a disk with stuff, it might be practical.
Especially if you're about to go somewhere and leave your computer on a
while.  Anyway, I agree - not right now, but it's there, if needed.

>>   PACK - Packing.
>>   CRNC - Crunching.
>>   SQEZ - Squeezing.
>>   SQSH - Squashing.
     STOR - Storing.  Don't forget this one!  The best!
>
>Instead of this how about one: FRMT, which would contain one byte
>indicating the packing algorithm used to compress the file chunk,
>called DATA or BODY or whatever works.  This would allow future
>expansion more easily.

Maybe.  However, I have to disagree with the one-byte thing.  That's why
EA used four-byte chunk names - to avoid collisions.  For example, if we
define 0-5 as the standard formats, and then somebody else comes along,
creates another format, how will he select a number?  Have to send it to
whoever's in charge of this thing and get a number?  That's another goal
of IFF: to keep production schedules on time.  At least we should use four
bytes, just like any ordinary IFF identifier.

Basically, what you're saying, is that for each program section, stick in
a FRMT chunk instead of one of the others, and then right after the size,
stick in a byte, which is what you want, or a longword, which is what I
want, telling the compression format.  Sounds great!  And it will have
much less of a chance of name collisions.  For example, one archiver puts
in a chunk just to accelerate the unarchiving process of its unarchiver,
and another ARC producer creates a separate compression algorithm with the
same name...not so neat.  This way, they would be two separate things,
so if there's a ABCD chunk in the FLST form, and one of the program
segments is encoded in an ABCD encoding algorithm.  As it is, there'd be
lots of problems.  Not this way.  Thanks for the idea!

>Also, it should be the province of the program which creates the ARC
>to choose which schemes it prefers.

YES!  This is all archiver and unarchiver dependent.  For example, to get
things started, I might create a teeny weensy archiver which doesn't handle
subdirectories or anything complex, and just support packing!  Sort of a
dumb program, but it would still create files compatible with more advanced
archivers.

Also, what about a password protection thing?  It could be a PSWD chunk in
either the FLST or ARC forms.  However, it wouldn't contain ANY data.  I've
found that the best password protection mechanisms are the ones that don't
store the password in the file.  If the user enters the wrong password, it
still unarcs the file ok, but the file is totally garbage.  In other words,
the contents of the file would depend on the correct password being entered.
The PSWD chunk would only tell the archiver that the user will need to enter
a password for this file/directory.  Whether the correct password is entered
or not, it would still un-ARC, but as totally garbage.  In this way, the
encoding could be VERY simple.  For example, the first byte of the file is
added, ignoring overflow, with the first byte of the password, etc.  When
the password comes to the end, it wraps around to the front.  Although simple,
it would be IMPOSSIBLE to break without knowing the password!

Thanks for your ideas!  Anybody else?


                                    Bryan

       Bryan Ford                  ///// A computer does what \\\\\
Snail: 1790 East 1400 North       ///// you tell it to do, not \\\\\
       Logan, UT 84321        \\\XX///  what you want it to do. \\\XX///
Email: USU@FATQW.BITNET        \XXXX/ Murphy's Law Calender 1986 \XXXX/

peter@nuchat.UUCP (Peter da Silva) (01/21/88)

In article <6173@j.cc.purdue.edu>, ain@j.cc.purdue.edu (Patrick White) writes:
>    Bryan Ford has been bouncing an IFF archive idea he had off of me for the
> last few weeks.  We finally decided to post it to get a wider base of opinions
> (and also because I don't know much about IFF formats).

> FORM ARC - Archive.

>    SBDR - Subdirectory.  This chunk contains a string of characters
>    ANAM - Archiver name.  This contains a null-terminated string telling
>    FORM ARC - A child ARC.  This is useful for "sub-archives" which, when
>    FORM FLST - File chunks.  These chunks contain the actual files which

What's wrong with putting a group of files into a CAT? That will also allow
smart IFF readers that dive into CATs and LISTs to use these guys unchanged.

Then you can do global compression on the resulting file. Global compression
is easier and more efficient than local compression.

Then you can add a "FORM FILE" or "FORM DIR " (I like mnemonic names, don't
you?) containing chunks like "FIB " (the FileInfoBlock for the file).

By putting the FIB in there you automatically get the name, date, protection,
and so on.

(sample pseudo IFFCheck output)
CAT  nnnn FILE
..FORM nnnn ILBM
...BMHD nnnn
...BODY nnnn
..FORM nnnn FILE
...FIB  nnnn
...FDAT nnnn
..FORM nnnn DIR
...FIB  nnnn
...FORM nnnn FILE
....FIB  nnnn
....FDAT nnnn
-- 
-- a clone of Peter (have you hugged your wolf today) da Silva  `-_-'
-- normally  ...!hoptoad!academ!uhnix1!sugar!peter                U
-- Disclaimer: These aren't mere opinions... these are *values*.

bryce@hoser.berkeley.edu (Bryce Nesbitt) (01/21/88)

If you are going to create an Amiga specific archiver, go all the
way... support icons.  Have an "AICN"  (Amiga ICoN) chunk.  This
would be a DiskObject structure loaded via the:

		GetDiskObject(name);

Call.  The icons would be put back with:

		PutDiskObject(name,DiskObject);



Other comments:

1> "Oh, no!  Not another incompatible archive format!"
2> Too complex.  The same thing could be done with *much* simpler
   data structures.  Simplify.  Combine all the needed info for each
   file into one or two chunks.
   Forget the multiple pass-compression... Lempel-Ziv already takes care
   of that (to any degree worth bothering about).
   Just include the "number of bits" of compression for Lempel-Ziv
   encoded files. 
3> Make it easy to just click on a bunch of icons/drawers and 
   compress/combine them.

|\ /|  . Ack! (NAK, SOH, EOT)
{o O} . bryce@hoser.berkeley.EDU -or- ucbvax!hoser!bryce (or try "cogsci")
 (")
  U	"As an engineer, I only set the value of a product... not the cost."
	-Bryce Nesbitt

ralph@mit-atrp.UUCP (Ralph L. Vinciguerra) (01/21/88)

Exactly Bryce !
If a new archive format is getting designed please make it icon compatible.
Thus many of the new (and not so new, like me) Amiga users can finally
deal with archive data without having to hand bash icons about.
It makes sense, for consistancy. It also makes sense to include a disabling
option for those who don't like icons and the workbench. Everyone gets what
they need.

john13@garfield.UUCP (John Russell) (01/22/88)

In article <22697@ucbvax.BERKELEY.EDU> bryce@hoser.berkeley.edu (Bryce Nesbitt) writes:
>3> Make it easy to just click on a bunch of icons/drawers and 
>   compress/combine them.

I know everyone always says to do this, but the only (supported) way is at
program startup. Not in some interactive fashion, where the program keeps
running and you click on various icons after selecting some option in your
own program, such as "compress using scheme A", "update this file in the
archive", etc.

Are there any concrete ideas on this topic aside from suggestions to C-A to
make it possible at some time in the future?

Right now it ought to be easily possible to determine which icons are
selected by examining the gadget list of the Workbench backdrop window. This
might require dragging icons onto the main WB window from inside their
subdirectories though.

To build such functions into 1.X, why not have workbench (the program) create
a public port with nodes strung from it detailing what icons are currently
present in the system, what their status is (eg selected or not), and any
other relevant info.

Workbench doesn't do anything similar to this now does it? I've never looked
to see if it makes any information accessible to programs not necessarily
started by clicking on an icon.

John
-- 
"Am I dreaming, or was there a show on this weekend called 'Jimmy the Greek:
 Live at the Apollo'?"
					-- David Letterman

dpvc@ur-tut.UUCP (Davide P. Cervone) (01/30/88)

In article <4419@garfield.UUCP> john13@garfield.UUCP (John Russell) writes:
>Right now it ought to be easily possible to determine which icons are
>selected by examining the gadget list of the Workbench backdrop window. This
>might require dragging icons onto the main WB window from inside their
>subdirectories though.

Nice idea, John, but unfortunately, WB does not use standard gadgets.  If you
look at the WB backdrop window's gadget list, you'll see it's NULL (use SB or
something).  I wanted to do that when I wrote wIconify (still not posted 
in comp.binaries.amiga, but I did get a confirmation letter), but WB must
be doing it's icon detection itself.  I assume this was because gadget's
with masks were not available under V1.0.

Davide P. Cervone
dpvc@tut.cc.rochester.edu

PS, my offer still stands to mail wIconify to interested people until it
comes out in comp.binaries.amiga