[comp.sys.amiga.programmer] An Amiga Conversion Facility

m0154@tnc.UUCP (GUY GARNETT) (04/11/91)

[First of all, I would like to apologise for two things: the length
of this post (if you don't want to read a lot about a file-format
conversion standard, hit "n" now), and the length of time it has
taken to prepare it.  The former is a direct consequence of the
complexity of the topic, and my own propensity for words.  The latter
is due to many things, including the flu ...]
 
           A Conversion Utility for the Amiga (Part 1 of ?)
            (A modest proposal from "Wildstar"; 150 lines)
              - this document is freely distributable -
 
(1) Background
 
  Reason:  Current Amiga data exchange is based on IFF files. 
Although this system works very well for bitmap data (thanks to IFF
ILBM), and performs adequately for animation (IFF ANIM), and sound
(IFF SMUS and IFF 8SVX), there are few other widely recognised data
interchange formats.  "Multimedia" and "Desktop Video" (the things
the Amiga does best) as well as more conventional "Productivity"
applications (like word processors, spreadsheets, and databases)
would benefit from the ability to exchange data in a wider variety of
formats.
 
  Method:  A "universal conversion utility" would allow an
applications program to convert any applicable data into a format
that it could utilize.  This conversion facility could use external
modules to convert data to any applicable standard formats.  By
carefully selecting a limited number of standard formats,
applications programs could get maximum use from "foreign" data.
 
  Design Criteria:  A practical conversion utility must meet several
neeeds.  It should be relatively easy for the user to install in his
or her computer system (about as easy as installing a harddrive or
Arexx, and preferably much easier).  It must be easy for an
applications programmer to incorporate in a new application, and
should not be too difficult to retrofit into an existing one (about
as easy as supporting ARexx would be about right).  It should be
extensible (so that new formats can be supported without requiring a
redesign or complete re-implementation of the entire system); a
modular system would be nice (so that new formats are supported by
attaching "modules" to an established conversion system).  Finally,
the entire thing should be designed using shared libraries to reduce
the total size of the conversion facility.
 
(2) Definitions
 
  Amiga Internal Format == Any data format which is defined by the
Amiga hardware or system software.  Examples include Intuition
Images, Screen bitmaps, audio data, and sprite data.
  External Bitmaps == Any external format (see below) which contains
bitmap data; for example, IFF ILBM, any of the various 24-bit file
formats, TIFF, MacPaint, and many other graphics storage formats fall
into this category.
  Client == An application program which uses the conversion facility
to perform some operation.  Operations are typically conversions, but
could also be format recognition, or anything else supported by the
conversion facility (for example, "Hot Links").
  Conversion Facility == The complete "system" of conversion modules,
the conversion host, and supporting message ports, files, etc.  We
are trying to create a specification for this conversion facility.
  Convertor == An executable program which acts as a mediator between
modules and clients.  The convertor runs as a process and is
typically started by the system startup-seqence.
  External Format == Any data format defined by any applications
program; there are, of course, thousands of external formats running
around in the world today.  For example, database files, structured
drawings, IFF files, and postscript programs are all examples of
external formats.
  Format Identifier == An arbitrary text string which is used to
identify external and standard formats.  Formats which are identified
by the same string are assumed to be the same format.  The creator or
owner of the format should try to pick a meaningful (and unlikely to
be accidentally duplicated) identifier.  For example, a good
identifier would be "SillyWords-Doc-V1", but "WPFile" would be bad.
  Module == An executable program which can be called upon to perform
data conversions from a specific set of source formats to a specific
set of target formats.  Each module runs as a process, and is
typically started by the convertor as needed.
  Originator == An application program which created the source data
in question.  Originators may also be clients.  The exact originator
of an external format is not important (except for "Hot Links") to
the conversion facility, as long as the format can be recognised.
  Source == Arbitrary data, to be converted to the target format.  It
is presumed that most conversions be from source data in an external
format to target data in a standard format, but source data can be
any any format recognised as valid by a conversion module.
  Standard Format == A data format defined as being "supported" by
the conversion facility as a target.  The definition of the
conversion facility should include references to (or should directly
include) the definitions of each of the standard formats.
  Target == Arbitrary data, converted from the source format.  It is
presumed that most conversions will be to target data in a standard
format from source data in an external format, but target data can be
in any format recognised as a valid target by a conversion module.
  Text Format == Any file which contains textual information.  It may
be in the form of "vanilla" ASCII, which contains the text characters
and virtually nothing else to any of a number of rich text formats
(which contain formatting information in addition to the tex
titelf).  An IFF text format exists, but has been largely unused.
  2D Structured Format == A structured drawing contains a coded
representation of each object (point, line, arc, etc) in the drawing.
Structured drawing programs (like ProDraw), drafting applications,
etc. all produce 2D Structured data.  There is an applicable IFF
standard, DR2D (it is presently supported by 
  3D Structured Format == A structured drawing of a three dimensional
object.  Although some CAD programs may produce 3D objects, most
Amiga 3D objects are created by object modelling packages (like Turbo
Silver, LightWave, and Caligari).  There is no IFF standard for 3D
structured objects.
 
3) Overall Design
 
  Theory:  Applications communicate with the convertor via standard
messages.  The convertor searches for, loads, and issues commands to,
modules necessary to satisfy the client request.  The convertor and
its modules also communicate via standard messages.  When the
conversion has ended, the convertor notifys the client, and the
transaction is ended.
 
  Startup:  At system startup, the convertor is executed; it should
check for other copies of itself (most easily done by searching for
its own message ports), and then initialize.  Initialization includes
creating two public message ports, "ConvClientPort", and
"ConvModulePort". It should also register with the system low memory
server (the ASDG Low-Memory Server comes to mind here) if one is
present.  The conversion facility is now ready to process conversion
requests.
 
  A Request:  Conversion requests are Exec messages (but see the IPC
item below) sent to "ConvClientPort".  Each message would contain
details about the conversion requested (a source block, a source
format block, a target block, a target format block, a parameter
block, and a result block) and the name of a message port to which
the results should be sent.  The convertor would search (using the
logical device CONVMOD:) for a conversion module capable of fufilling
the request.
 
  Results:  If at least one module can be found, it is asked to
perform the conversion (if more than one are found, the one with the
highest version number is used; if both have the same version number,
the modules are assumed to be identical, and one is selected
arbitrarily).  When the conversion is complete (or ended due to an
error), the convertor sends a message to the client.  The same
message format can be used.  The target block would contain the ouput
data (if any), and the result block would contain conversion result
information (to indicate "sucessful conversion", "unknown source
format", "unknown target format", "out of memory", etc.).
 
[to be continued ...]
Wildstar

m0154@tnc.UUCP (GUY GARNETT) (04/11/91)

[if you don't want to to read this long thing, hit "n" now!]
 
           A Conversion Utility for the Amiga (Part 2 of ?)
            (A modest proposal from "Wildstar"; 200 lines)
              - this document is freely distributable -
 
4) Details
 
  Application Interface:  A client application communicates with the
conversion facility via standard Exec messages (but see the
discussion of IPC, below).  In order to make conversion requests, the
application will need a message port with a unique name.  Each
request is a separate message, and is sent to the convertor client
message port "ConvClientPort".  The convertor will copy the request
into its queue, and reply the message (which can then be freed or
re-used as needed).  When the requested function has completed, the
convertor will verify that the client's message port still exists,
and if so, it will send a results message.  The client should reply
this message as soon as it is done with it.  If the client message
port does not exist, the convertor will assume that the client has
exited, and will discard the results.
 
  Possible Requests: A client can request several functions of the
convertor.  The client could request a data conversion (convert this
data from a format to another format; for example, from IFFILBM to
EPSF), recognition (for example, is this valid IFFILBM data?),
identification (what is this data?), cancellation (cancel all pending
requests), convertor status (list clients, requests queued, in
progress, and completed, and other information), module status (list
modules, source and target formats, and lock status), lock a module
(ensure that a given module is loaded and stays loaded), and unlock a
module (remove a module lock).  The last four request types can be
used to implement a monitor for the conversion utility, or by
applications to manage the convertor.
 
5) More Details
 
  Module Functions:  Modules need to implement a number of control
functions in order to operate properly within the conversion
facility.  All modules must implement a status function (which
returns information about the current status ofthe module), a cancel
function (which cancels the current operation, if any), and an exit
function (which requests that the module exit, if possible).
  Each module can optionally implement functions for some or all of
the following data operations: convert (sorce data format to target
data format; it is assumed that this is the primary function of most
modules), recognise (a data format; determines whether or not the
data is in a specfied format), and identify (determines the format of
data whose format is unknown).  It is not necessary to implement all
(or even implement any) of the operations for a module to function
properly (but a module which implements no operations is unlikely to
be used).  The convertor will request only one operation at a time
from each module (multiple requests will be queued internally by the
convertor) to simplify module logic.
 
  Module Installation:  Modules are program (tool) files, stored in a
logical device CONVMOD:.  Any legal file name is a legal module name,
although it is suggested that it be mnemonic for the function of the
module (like "PS-to-IFF").  It is also suggested that they be
provided with icon (.info file) for two reasons:  Ease of
installation by the end user (just drag this icon into your
"Conversions" drawer) and to provide the convertor with additional
information.
 
  Tool Types:  If an icon is present for a given module, the tool
types can be used to provide the convertor with information about the
capabilities of the module.  The following tool types could be used:
VERSION (to specify the version of this module for the user's
reference; for example, VERSION=1.10), SOURCE (to specify the source
formats that this module can translate, multiple formats can be
separated by a vertical bar character; for example,
SOURCE=IFFILBM|IMAGE|BITMAP), TARGET (to specify the target formats
produced by this module; for example, TARGET=POSTSCRIPT|EPSF), and
FUNCTION string (to specify the data operation functions supported by
the module; for example, FUNCTION=CONVERT|RECOGNISE).  Other tool
types should be ignored by the convertor.
 
  Module Initialization:  When a module is executed, it should
initialize itself, and create a message port for receiving requests. 
This port should have a unique name (multiple copies of a given
module can be loaded, and if so, a mechanism should be provided to
generate unique names).  When it is ready to begin receiving function
requests, it should send a message to the convertor module, via its
module message port "ConvModulePort".  The message should contain the
module's name (the name of a message port to which the convertor can
send module requests), and version, source, target, and function
information (as above).  If the information provided by scanning the
tool types differs from the module's startup message, the convertor
should assume that the tool types are incorrect for this module. This
may result in the convertor sending an immediate termination request
to the module, and continuing its module search.  The convertor will
copy information from this startup message, and will reply it as soon
as possible, so that it can be freed or reused.
 
  Request Interface:  The convertor will request operations by the
module with exec messages.  Each message will request a module
function, and should be replied as soon as the convertor has copied
the pertinent information.  The convertor ensures that no more
request messages will be sent until the current one is replied.  When
the operation is complete, the convertor should send another message
to "ConvModulePort" with the results.  If "ConvModulePort" should
dissappear (it shouldn't) the module would be perfectly justified in
assuming that everyone else left and didn't tell it (discard the
results and terminate the module).  The convertor will maintain an
internal queue of pending requests for a given module (and may load
multiple copies of a given module, if the situation warrants). 
However, each module should periodically check its message port while
processing a request.  The convertor may request that the module
terminate, cancel the current request, or provide status information.
 
6) Still More Details
 
  Convertor:  The convertor itself should be started before any
modules are executed (if it is not, and a client program "manually"
starts some modules, the convertor may not be aware of those modules,
and may load additional copies, wasting memory).  The convertor
maintains two message ports, "ConvClientPort" (for receiving requests
by client modules) and "ConvModulePort" (for receiving startup
messages and result messages from modules).
 
  Internals:  The convertor should maintain a list of all currently
loaded modules, their capabilities, and their current status.  It
should also maintain queues of requests destined for those modules, a
list of currently-known clients, and a list of pending requests
(pending a startup message from a module, that is).  The convertor is
responsible for starting and terminating modules (so that it can
implement the module lock and unlock features).  The convertor may
optionally use this information to manage its memory usage by
terminating currently unused modules (and to retain unused modules
which are likely to be needed again).  The convertor may also cache
information (gleaned from tool types, or from prior executions of the
module) about modules which are not currently loaded, if provision is
made for invalidating or updating this data (for example, when the
user installs a new module in the middle ofa session).
 
  Requests:  Requests from clients are queued at the convertor's
client message port, and are processed in the order that they are
received from that port.  Therefore, it may be possible to use the
message priority can be used to implement a "rush" processing scheme.
(most clients should use a priority of 0, so that requests are
processed in first-in, first-out order).  As each request is
received, it becomes the current request, the client information is
added or updated in the client list, and the convertor searches for a
module to perform the request.
 
  Loading Modules:  When a module is loaded, the current request
(which, by definition, caused that module to be loaded), the search
status for that request, and related status information is placed on
a pending list.  The module will (hopefully) load and execute,
sending a startup message to the convertor's module message port.  As
startup messages are received, the module is added to the convertor's
module status lists, and the pending list is searched for the request
(or requests) which caused the module to be loaded.  If the convertor
determines that startup messages have been received from all modules
which have been requested, any pending requests are released to
continue with the search process.
 
  Searching:  When searching for a module to fufil a client request,
the convertor should use a four-phase search.  The search is
complete when a module which can fufil the current request (as
determined by that modules startup message) has been loaded.
  First, the convertor examines its list of currently-loaded modules. 
If one of them can fufil the current request, it is queued for
processing by that module.  If another request is on the pending list
(waiting for a module to load), the current request is also placed on
the pending list.  If neither of these conditions is true, the search
continues with the next step.
  Second, it should examine the tool types of all modules which have
icons.  Any modules whose tool types indicate that they can fufil the
current request are loaded.  If the module's startup message does not
confirm that it can fufil the request, the search continues (with
this step, or if all icons have been searched, with the next step).
  Third, modules without icons are loaded, one by one (with the
request being placed on the pending list each time).  If no modules
can be found to satisfy the request, the search proceeds the next
step.
  Fourth, modules with icons, but that were not loaded in the second
setp, are loaded (with the current request being placed on the
pending list each time).  If no modules can be found to satisfy the
request, the search fails (no module is available to convert  the
requested data).  This step is also optional, it can be selected by a
conversion facility option (perhaps by a switch on the convertor at
startup time).  If the fourth step is not enabled, then the search
ends after the third step.
  To avoid heavy disk and memory demands, as well as excessive
conversion time, it is recommended that all modules have an
assoicated icon file.
 
  Module Management:  It is quite possible for modules to be loaded
for wich there is no current need (either as a result of the search
process, or because it has no more requests to process).  Each time
the convertor loads a module, it should also check the list of
currently loaded modules.  If there are any which have never had a
request, it should terminate them (it is likely that they are the
result of a failed search).  The convertor should also consider
unloading modules which have been used in the past, but are currently
idle.
 
[to be continued ...]
Wildstar

m0154@tnc.UUCP (GUY GARNETT) (04/11/91)

[if you don't want to to read this long thing, hit "n" now!]
 
           A Conversion Utility for the Amiga (Part 3 of 3)
            (A modest proposal from "Wildstar"; 141 lines)
              - this document is freely distributable -
 
7) Additional Items
 
  IPC:  From what I have read on the net, IPC seems well suited to
this scheme; however, I do not know enough about it to tell for
sure.  In any case, a library of functions for constructing, routing,
and parsing messages will be needed.  If someone (perhaps the author)
who knows a lot about IPC can comment on this, I would appreciate it.
 
  ARexx:  It should be possible to define the message formats so that
it is compatible with ARexx's RexxMsg system.  This would have the
advantages that ARexx macros could act as conversion clients, and
would allow the use of some (relatively) well-known message passing
and argument parsing routines.  The disadvantage is that the scheme
would require users to own either AmigaOS v2, or ARexx itself.  I
would prefer that the conversion facility operate reliably under
either operating system.  Comments anyone?
 
  Dynamic Linking:  The standard Exec message passing facilities seem
to be adequate to the task.  I feel that dynamic linking would not
add sufficient functionality to be worth the trouble.
 
  Amiga "Quickdraw":  Rather than define a new rendering standard, I
would prefer that the conversion facility be generic and extensible. 
I feel that a new rendering standard would not add sufficient
functionality to be worth the trouble at this time.  However, in the
future it may be necessary or desirable to define new standard
formats to improve the utility of the conversions facility.
 
  Hot Links:  I have not specifically addressed "Hot Links" in
conjunction with the conversion facility.  While this would be a very
good feature to add to it, I am not completely sure how difficult it
would be.  However, it is a topic well worth discussion, and could
concievable be added to the conversion facility at some later time (I
can already imagine one way that it could be done, see below).
  To me, the term "Hot Link" implies that two (or more) applications
are co-operatively sharing data.  For example, a client DTP package
might have, embedded in the current document, a drawing created by a
paint package (the originator of that data).  If "hot links" were
used, the originator could be invoked to edit the drawing. 
Periodically (like when the user saved his changes) the originator
would notify the client (or clients) of the changes, and they would
update accordingly (without the user having to take any additional
action).
  I can imagine adding code to a convertor module to manage such hot
links, through an additional message port (perhaps named for the
format being linked).  For this reason, the ability was added for an
application to request that certain modules be loaded without
performing any conversions.
 
  Distribution and Ownership:  The specifications for the conversion
facility should be placed in the public domain.  In this way,
programmers could write modules, and even new versions of the
convertor (and supporting library) with confidence.  At least one
version of the convertor should be made freely distributable (or
included by Commodore on an operating system distribution) so that it
is available to all Amiga users.  Modules will probably be written as
(or as part of) commercial products, in addition to any that are made
freely-distributable.
  It seems to me (and I admit, I could be naive here) that by making
modules which support some proprietary format available to all, the
value of the application which produces files in that format will be
increased.  Because more people would be able to use those files in
other projects, they would be more likely to purchase the
application.  Conversely, any application which included conversion
modules with its distribution would be more valuable too, because
purchasers would know that it could then exchange data with their
other applications.
 
  Standard Formats:  A small set of standard formats will help reduce
the number and complexity of modules; but a large number of standard
formats will increase the utility of the conversion facility.  To
this end, a relatively small number of standard formats should be
selected, with an eye toward general utility.  The set should
probably include at least one format from each of the following
categories: Amiga Internal Representations, External Bitmaps, Text,
2D Structured Drawings, and 3D Structured Drawings.  Other categories
like Animation, Sound, and Composite Formats (formats which contain
members from more than one of the other categories) should be
considered.  My current thoughts on the standard formats include:
  Amiga Internal: Intuition Image, and rendering through a RastPort
(probably supplied by the client).  Size, Scaling, and Palette should
be able to be specified by the client, or allowed to default. Modules
should support as many of the Amiga display modes as possible.
  External Bitmaps:  IFF ILBM (including HAM, EHB, and possibly some
form of IFF 24-bit).  Rendering to these formats is probably not a
lot of additional trouble, after writing a module which can handle
the Amiga internal formats.  What about adding a module interface to
some of the existing bitmap conversion programs?
  Text: "Vanilla" ASCII text, and some form of enhanced text (will
the IFF FTXT formt work for this, or should we use one of the many
"standards" available for borrowing, like DCA/RFT?).
  2D Structured: There is a relatively new IFF DR2D standard for
structured graphics on the Amiga.  I suggest we support it. 
Additional suggestions include PostScript (encapsulated or not?),
HPGL (HP Graphics Language; used in HP Plotters), and HP PCL (HP
Printer Control Language; used in HP laser printers).
  3D Structured: As far as I know, there is no standard here.  How
about suggestions, or should we try an convince Syndesis to release a
version of their 3D conversion utility with a module interface?
 
 
8) Toward a Specification
 
The following items need additional work, clarification, or
discussion before a formal specification can be generated.
  ** The list of standard formats needs to be agreed upon, and all of
the relevant specifications should be collected (and, if necessary,
referenced or included in the convertor specification).
  ** Further work on the message format must be done, most
importantly, to decide between a "convertor-specific" format, the IPC
format, or the ARexx format (see the IPC and ARexx items above).
  ** The exact set of functions and results used by each section of
the conversion facility need to be specified.  I have noted the kind
of information which needs to be passed, but have not specified the
interfaces.
 
I expect (and hope) to generate a lot of response with this post, and
would like to offer the following guidelines:  If your response will
serve as an item for further discussion, post it to the newsgroup, so
that everyone who is interested can comment on it.  Comments which
you want considered for the specification can be emailed to me, if
you would perfer to save bandwidth.  Flames can be sent to /dev/null
or to NIL: (as the case may be), or if you must mail them to me
rather than posting them on the net.
 
9) Disclaimers
 
My boss doesn't know I'm doing this.  Any trademarks mentioned here
belong to their owners (suprise!) and no infringement was intended.
Any resemblance to an actual document, living or dead, is purely the
result of a fever (blame it on the flu virus).  SillyWords is a new
product of WackyWares, "Your VaporWare Headquarters", the publisher
of the highly acclaimed "RSN Project Manager".
 
Wildstar

peterk@cbmger.UUCP (Peter Kittel GERMANY) (04/11/91)

In article <790@tnc.UUCP> m0154@tnc.UUCP (GUY GARNETT) writes:
>
>(1) Background
> 
>  Reason:  Current Amiga data exchange is based on IFF files. 
>Although this system works very well for bitmap data (thanks to IFF
>ILBM), and performs adequately for animation (IFF ANIM), and sound
>(IFF SMUS and IFF 8SVX), there are few other widely recognised data
>interchange formats.  "Multimedia" and "Desktop Video" (the things
>the Amiga does best) as well as more conventional "Productivity"
>applications (like word processors, spreadsheets, and databases)
>would benefit from the ability to exchange data in a wider variety of
>formats.

You sure should look a little deeper into the IFF definition! Then
you would learn that there are sure possibilities inside IFF to provide
the features you desire, see for CATs and LISTs, for example.

Though I very much appreciate this effort to get a powerful conversion
machinery, I strongly wish that this hopefully will NOT lead into
inventing dozens of new "standards"! This should NOT be encouraged,
as I got a little of an impression in part 2. I bet that nearly all
of these desired formats can easily be satisfied with IFF or at least 
in a way to expand the IFF definition in the proper IFF manner.

We should take all efforts to keep IFF *THE* interchange format.
It has already paid in the past, and should even more in future.
It already spreads to the PC world and I heard rumors that Microsoft
jumps on this waggon, too (though they are said to call it different?).

If you stick to IFF, we could even consider to involve good-ole
Clipboard in this project. Clipboard is until now sort of a sleeping
beauty, but perhaps its concept could be used with advantage here.

Aside from this, I wish good luck for this project.

-- 
Best regards, Dr. Peter Kittel  // E-Mail to  \\  Only my personal opinions... 
Commodore Frankfurt, Germany  \X/ {uunet|pyramid|rutgers}!cbmvax!cbmger!peterk

m0154@tnc.UUCP (GUY GARNETT) (04/15/91)

In article <1098@cbmger.UUCP> peterk@cbmger.UUCP (Peter Kittel GERMANY) writes:
>In article <790@tnc.UUCP> m0154@tnc.UUCP (GUY GARNETT) writes:
>>
>>  Reason:  Current Amiga data exchange is based on IFF files. 
>>Although this system works very well for bitmap data (thanks to IFF
>>ILBM), and performs adequately for animation (IFF ANIM), and sound
>>(IFF SMUS and IFF 8SVX), there are few other widely recognised data
>>interchange formats.  "Multimedia" and "Desktop Video" (the things
>>the Amiga does best) as well as more conventional "Productivity"
>>applications (like word processors, spreadsheets, and databases)
>>would benefit from the ability to exchange data in a wider variety of
>>formats.
>
>You sure should look a little deeper into the IFF definition! Then
>you would learn that there are sure possibilities inside IFF to provide
>the features you desire, see for CATs and LISTs, for example.
>
>Though I very much appreciate this effort to get a powerful conversion
>machinery, I strongly wish that this hopefully will NOT lead into
>inventing dozens of new "standards"! This should NOT be encouraged,
>as I got a little of an impression in part 2. I bet that nearly all
>of these desired formats can easily be satisfied with IFF or at least 
>in a way to expand the IFF definition in the proper IFF manner.
>
>Best regards, Dr. Peter Kittel  // E-Mail to  \\  Only my personal opinions... 
>Commodore Frankfurt, Germany  \X/ {uunet|pyramid|rutgers}!cbmvax!cbmger!peterk


I know about the IFF standard; it is a very flexable and capable
framework for implementing just about any type of data format.  I am
not trying to introduce any new "standards"; I'm simply trying to make
best use of the ones we already have.

If programs like ProWrite, AegisDraw, ProDraw, MaxiPlan, Scribble,
Microfliche Filer, Superbase, etc ... would save all of their data in
IFF files, the conversion facility would not be needed.  Instead, each
of these applications (and many others) define their own data storage
formats.  And usually, these formats are not well explained (if at
all) for other programs to yse.  What I am trying to do do is provide
a way go get each of these "proprietary" formats (I am calling them
external formats in the formal document) into something which is a
recognised, useful Amiga "standard" format for that kind of data (this
includes IFF formats, of course, and probably some non-iff standards
as well ...).


What the conversion facility is trying to provide is a common ground
where (with only a little extra effort on the part of the applications
programmer) these proprietary data formats can be converted to the
appropriate Amiga standards.  With the conversion facility, a paint
program could (for example) import any graphic file (including
ProDraw, CAD drawings, and other formats) by requesting that the
conversion facility turn it into IFF ILBM).  Similarly, a DTP program
could print just about anything to a PostScript printer by requesting
that the conversion faciliy translate it to PostScript (from whatever,
let's say CAD drawings, IFF pictures, ProDraw pictures, etc ..).  It
could print the same thing to a Preferences-supported dot-matrix
printer by requesting conversions to an internal bitmap.

IFF will be very important to the conversion facility; however, I feel
that other "standard" formats will be required, too.

Wildstar

perry@madnix.UUCP (Perry Kivolowitz) (04/16/91)

In article <791@tnc.UUCP> m0154@tnc.UUCP (GUY GARNETT) writes:
>           A Conversion Utility for the Amiga (Part 2 of ?)
>            (A modest proposal from "Wildstar"; 200 lines)

This is all very nice. But it has already been done. Why do it
again?


-- 
Perry Kivolowitz, ASDG Inc. ``We look for things. Things that make us go.''
	UUCP:  {harvard|rutgers|ucbvax}!uwvax!astroatc!nicmad!madnix!perry
	CIS:   76004,1765 PLINK: pk-asdg

kent@swrinde.nde.swri.edu (Kent D. Polk) (04/18/91)

In article <1813@madnix.UUCP> perry@madnix.UUCP (Perry Kivolowitz) writes:
>In article <791@tnc.UUCP> m0154@tnc.UUCP (GUY GARNETT) writes:
>>           A Conversion Utility for the Amiga (Part 2 of ?)
>>            (A modest proposal from "Wildstar"; 200 lines)
>
>This is all very nice. But it has already been done. Why do it
>again?

Where does it exist? What exists that allows me to programmatically
pass a pointer, etc. to a bitmap in a message & get an encapsulated
Postscript file as a result?  Or a set of DR2D commands & get it
rendered, or get the Postscript output of an IFF bitmap file?  And have
the server automatically loaded and purged when no longer needed?

I need an extensible client/server mechanism like this & I sure haven't
seen it anywhere. Remember the recent "Renderer" thread? I see it and
this "A Conversion Utility for the Amiga" to be the same thing, as they
address the same problems.

If you talking about "The Art Department", I agree that TAD is an
excellent program, but I sure don't see it performing the types of
rendering/conversion functions that is being discussed here.

I brought up this concept about 2 years ago specifically with regard to
rendering 'devices'. My mailbox was flooded with messages explaining to
me that there is absolutely no need for this type of thing on the Amiga
so I shut up and listened. I still disagree, and I still need these
types of operations since they still don't exist.

In the meantime, I developed a pseudo-generic event oriented data
acquisition system which, for once in my 14-year professional career,
allowed me to write an extensible set of programs to perform
acquisition and filter operations ONCE (Ok, maybe twice :^).  No more
writing massively duplicated programs for every blasted test I had to
run!

It's like going shopping now. "Let's see, I need a Tek 2430 sampler
here, two of those plot windows here and there, a gating function
there, a real fft over here, a Hamming window here, a envelope function
there, a time shift based on the gate threshold over yon. Also want to
save the results after that fft and when it's all done. There, off we
go. Hmmm, that's interesting, I wonder what channel 1 would sound like
with a different set of gates than the fft was done on? Ok, another
gate function at the end here and that Play routine. Very
Interesting!!"

Each of the filter operations is (usually) a tiny little program which
only has to handle the specific function for which it was designed. It
was also designed around PPIPC (Fish disks) which made the messaging
and server loading mechanism almost trivial and extremely fast.

------------------------------------

Now, I want to extend this mechanism to allow for a whole list of
things which I need to accomplish. Renders, converters, etc. accessed
from within my small, self-contained processes.  I need "Real" Modular
Programming, not just modular at link time...

What would it look like?  A configuration where you would list your
available servers. This could be a server to do about anything you
wanted on the Amiga. A program needs a service performed on its data? A
simple message... a server gets loaded if not already...  Results.
(BTW, PIPC provides the mechanism for this stuff already - just have to
write the servers and the final config routine).

I guess what I am saying is that I want a different way of computing
and am trying to do something about it. I also think it would be nice
and quite convenient if others decided to do the same, but I have found
that I think a bit unconventionally, so it is usually only after I have
finished needing something that others discover its' significance :^(

BTW Perry, This wasn't personally directed to you. I just don't want to
see this concept thrown away. I also don't think it will necessarily
compete with TAD. I don't work with pictures & don't need a picture
conversion utility, but I do need data rendering & output capabilities.

Why don't we all go take another look at PPIPC and open minds a little?

Thanks,
=====================================================================
Kent Polk - Southwest Research Institute - kent@swrinde.nde.swri.edu
 "What will happen to our memory now that we can keep it on paper?"
=====================================================================

hill@evax.arl.utexas.edu (Adam Hill) (04/19/91)

In article <1813@madnix.UUCP> perry@madnix.UUCP (Perry Kivolowitz) writes:
>In article <791@tnc.UUCP> m0154@tnc.UUCP (GUY GARNETT) writes:
>>           A Conversion Utility for the Amiga (Part 2 of ?)
>>            (A modest proposal from "Wildstar"; 200 lines)
>
>This is all very nice. But it has already been done. Why do it
>again?
   
    But Perry, the current implementations of this type of program is
neither PD nor are there specs for TADPRO modules. I see this type of
program to be very useful for the average person that can pay the
bucks for a commercial program.

    I see this as a very programmable "engine: for automatic file
conversion. I could write a front end in let's say CanDo! that would
display IFF pics. Now the program could redily display ANY picture
type if there exists a conversion module to port to IFF. Or as a
simple PD version of xxxPRO. We might not have 4Cast RIP modules or
even TARGA ones, but we could do IFF types, Postscript and FTXT.

   There will prolly be some "special" cases. For POSTSCRIPT we could
use Adrian Aaylwards POST.library and for DCTV we could use the
DCTV.library that was just put up on BIX. And perhaps at a later date
we could adapt it to support "Active regions" in the new graphically
oriented version of EMACS that is being worked on.

  PD software seems to me to be the most satisfying form of artistic
expression ......


>Perry Kivolowitz, ASDG Inc. ``We look for things. Things that make us go.''



-- 
 adam hill --  hill@evax.uta.edu        ASOCC - University of Texas at UTA
     I programmed for three days          Make Up Your Own Mind.. AMIGA!
     And heard no human voices.              Amiga... Multimedia NOW!  
     But the hard disk sang. - TZoP              Born To Run SVR4