hide random home http://www.wam.umd.edu/~walrus/Product-Info.html (Amiga Plus Extra No. 5/97, 05/1997)

The Product-Info Specification v8

Foreword

A rough framework of the requirements, which eventually became the Product-Info Specification , was originally started by Fred Fish and his brother Richard. Basing my work upon their original efforts, and then relying on their feedback as well as feedback from a number of other people, the Product-Info Specification was born. It is meant to address the following basic issues:

  1. A text-only format makes it possible to easily create and modify these files without special software. This makes them portable between computer systems, easily transmitted, and more resilient to minor damage,

  2. Aside from defining characteristics for some specifically named fields, the files are freely extensible by users to suit their individual requirements; in addition, the ordering of fields is (almost) completely irrelevant,

Table of Contents

Main text of the Product-Info Specification
Fields defined by the Product-Info Specification
Starter file for a .Product-Info file of your own
Common errors when creating a Product-Info file

The Product-Info Specification was designed by me (Udo Schuermann) with much feedback from Fred Fish. Fred has repeatedly said that I'm too modest to take the credit for this work. Maybe I am, but without his initiative to get me going and his feedback to help polish it, the Product-Info Specification would not have come to be what it is, either. So, I guess it is a bit of a joint effort.


Product-Info Specification: Text

---------------------------------------------------------------------------
Product-Info Specification
Version 8
March 23, 1996
---------------------------------------------------------------------------

PURPOSE

A 'Product-Info' should accompany every released product: software, images, animation, sound, etc. The purpose of a 'Product-Info' is to describe a product in a way that is reasonably complete so that a customer can perform searches on a collection of 'Product-Info' files (records) with a reasonable expectation of locating desired products or excluding undesired ones. The structure of the data is designed so that a search can be defined with some certainty of its "correctness."

By providing a well-written 'Product-Info' with your product, you assure yourself of maximum potential exposure to customers who are looking to fill a need that your product might fill.

AUDIENCE

This document is aimed both at the developer of a product who needs to write an effective and complete Product-Info, as well as at the customer who stands a better chance of locating satisfactory products without having to wade through an inordinate amount of irrelevant products, if she understands what a Product-Info offers.

If you are not a developer, you may want to skip down to the EXPORTING AND IMPORTING DATA and the STANDARD FIELDS sections.

COPYRIGHT

The 'Product-Info' specification is free of copyrights and is freely distributable and available for use by any individual or organization that honors the basic ideas of this document: to provide a fairly concise and relatively burden-free description for a product.

AUTHORSHIP

The 'Product-Info' specification was designed by Udo Schuermann (email <walrus@wam.umd.edu>) with initial design criteria and much feedback offered by Fred Fish (email <fnf@ninemoons.com>) and Richard Fish (email <rjf@ninemoons.com>) Support for 'Product-Info' files was first offered in the form of my product "KingFisher Release 2", which is available on Aminet, nearly all of the Fish CD-ROMs for the Amiga, and from the KingFisher home page on the World Wide Web: http://www.wam.umd.edu/~walrus/KingFisher.html

STORAGE

A 'Product-Info' is a set of information stored in a file with your project. There are three standard filenames which you can use (the quotes are not part of the name):
  1. "Product-Info"
  2. ".Product-Info" (note the leading period)
  3. "project.pi" ("project" would be replaced by your project's name; example: "KingFisher.pi" or "DiskSalv.pi" or "VT.pi")

The file must conform to the following rules:
  1. The file may begin with comment line, but is not required to do so. A comment is either a blank line (one that has no text, no blank spaces, no tabs) or a line beginning with a `'#' (hash) symbol. Any combination of these will be ignored at the BEGINNING of the file.

  2. The first field (following the optional comments) in the 'Product-Info' must be "name"; Fields are identified by a Field Identifier and followed by their contents. Field contents are ended when another field is encountered or by the end of file.

  3. Field Identifier begins with a "." (dot, period) as the first character on a line, immediately followed by the name of the field. The "name" field is identified by ".name"; The name of the field is separated from the field contents by a white space. White space is a blank, a tab, or a new- line. It is recommended to use a newline, rather than space or tab. A field name cannot contain white space, obviously.

  4. The contents of the field may span one or more physical lines in the file. Some fields ignore anything past the first newline; others will ignore newlines and treat them as if they were a normal blank space; other fields require newlines to separate sub-components from each other. It is the purpose of the file you are currently reading to tell you the meaning of each of the defined fields.

  5. A collection of fields (beginning with the "name" field) represents a Product-Info record. A record is terminated by the end of file, by the presence of a blank line containing a ^N (control-N) symbol, or by the presence of another "name" field. Thus, a 'Product-Info' may store information for more than a single project, although this practice is in general not encouraged. This feature is used, however, for the construction of variant-record-size databases such as used by KingFisher, but these are not a distribution format that go along with a project. That's the difference.

  6. Field names and field contents should use the ISO Latin 1 character set which is the default of the World Wide Web and also the standard of the Amiga computer. The character ^N (ctrl-n) is reserved as a separator between disks in a database of collected records, should this be a desirable feature.

  7. If, in the contents of a field, a physical line of text begins with a period (such as ".guide files are provided...") then the period should have a "\" symbol added before the period, as in "\.guide files are provided..." to prevent the line to be interpreted as a new field ("GUIDE") with the contents starting as "files are provided..." In general, it is permitted to "escape" a period in this manner anywhere in a field's contents.

  8. A backslash ("\") is represented by placing \\ in the contents of a field. This permits special layout control sequences to be introduced through the \ key, much like the "\." suppresses the interpretation of a line-leading period as the introducer for a field name.

  9. Field name identifiers are not case sensitive.

FUTURE EXTENSIONS

The 'Product-Info' format was designed with future extensibility in mind. Being a text-only format, it lends itself to alteration with any editor of your preference. Its method of defining fields permits it to be adjusted and expanded to meet future requirements, and it is not tied to any particular implementation to facilitate searching.

RECENT ADDITIONS

The following fields have been added since the widely spread v6 of the 'Product-Info' specification: "aminet-dir", "aminet-file", "url", "keywords", and "execute"; some other fields have suffered some slight modifications: "author", "reference", and "installsize" with the aim to bring the fields in line with original intent. Also added or changed: \> \< \N \# sequences in field contents.

KINGFISHER'S IMPLEMENTATION

I believe it useful to provide the following information specific to KingFisher's implementation of 'Product-Info' support, as the databases and software are widely available on CD-ROM. The Product-Info Specification is in no other way tied to KingFisher.
  1. A KingFisher database is described by a .kfdb file, whose (textual) contents describes the filenames containing the actual database records, the files used for indexing these database files, as well as some other, less vital information.

  2. A database consists of zero or more records spread over one or more files and is indexed by a single (primary) index file. Although KingFisher supports the format of (and is shipped with) the original KingFisher 1 database, it does not support adding such records to an existing database: The new format has a header to identify and distinguish the new format. The header is 8 characters (KF20DATA) plus a newline character. Index files are similarly identified by a KF20INDX header plus other information.

  3. Records collected from 'Product-Info' files and stored into a database are stripped of their comments to preserve space.

  4. As index files may become corrupted or lost, a special marker symbol is inserted on a line by itself between disks. This permits KingFisher to keep track of the disk on which a given item is stored and recover this information effortlessly if the index needs to be rebuilt. KingFisher 1 used a blank line between 2-line records; KingFisher 2 uses a line with a single ^N (ctrl-n) symbol on it.

  5. A record begins with a "name" field and continues until another "name" field is encountered.

  6. The efficient storage of variable-size records brings with it the problem of very costly insert and removal algorithms. KingFisher offers only truncation and append methods for this reason.

  7. If a text file being imported (appended) to a database does not begin with a "name" field (nor comments) but the first line is less than 30 characters long, KingFisher will try to parse the file looking for a "name" field anyway, even though DATA TRANSPORT MARKERS (see next section, "Exporting and Importing Data") should have been used. This is a non- standard extension on this specification to facilitate support for the old KingFisher 1 database format.

This ends the section on KingFisher's implementation of the 'Product-Info' standard.

EXPORTING AND IMPORTING DATA

To enable effortless and error-free methods for export and import of 'Product-Info' records, it is required to enclose records with DATA TRANSPORT MARKERS. These markers are NOT REQUIRED INSIDE OF 'PRODUCT-INFO' FILES; they are used only when unrelated text (and comments) surrounds a 'Product-Info' file!

Multiple DATA TRANSPORT MARKERS may be used in a single text, so that each 'Product-Info' record is enclosed; or one pair of these markers may enclose multiple, consecutive 'Product-Info' records:

EXAMPLE: The following examples are to be read as complete files between the lines that look like this: ---------------

Example 1: A file containing text in addition to the database record.
----------------------------------------
Hello, Joe.  Here is the description of that weird game
I was telling you about.  See if you can figure out how
to win this.  Good luck!

.BEGIN-FISH-DESCRIPTION
.name
MonkeyCommand
.author
KingKong Industries
.description
Lure the love struck monster ape back to his island.
Tools include Fay Wray's torn nightgown, a Fokker
airplane (you get to pilot it), a compass and a map.
\.png image support lets you paint your own airplane
decals.
.END-FISH-DESCRIPTION	
----------------------------------------

Example 2: A file containing nothing but two database records. Notice that the DATA TRANSPORT MARKERS are omitted in this case, as they are unnecessary. It would not hurt to place them there, however!
----------------------------------------
.name
MonkeyCommand
.author
KingKong Industries
.description
Lure the love struck monster ape back to his island.
Tools include Fay Wray's torn nightgown, a Fokker
airplane (you get to pilot it), a compass and a map.
\.png image support lets you paint your own airplane
decals.
.name
MonkeyCommand II
.author
KingKong Industries
.description
Keep the captured ape from assaulting the defenses
of the prison that was erected at the conclusion of
MonkeyCommand I. The game consists of coordinating
the actions of four native tribal leaders and their
vassals in repairing the damage done by the enraged
monster ape as it tries to escape and revenge itself
on whoever won the original MonkeyCommand.
----------------------------------------

Example 3: A file containing two database records interspersed with extraneous text. The records are protected by DATA TRANSPORT MARKERS
----------------------------------------
Hi Tom,

Remember that monkey game you told my about?

.BEGIN-FISH-DESCRIPTION
.name
MonkeyCommand
.author
KingKong Industries
.description
Lure the love struck monster ape back to his island.
Tools include Fay Wray's torn nightgown, a Fokker
airplane (you get to pilot it), a compass and a map.
\.png image support lets you paint your own airplane
decals.
.END-FISH-DESCRIPTION

Well, seems that one wasn't enough and they released
another one. We'll have to figure out how to finally
beat the first one, it seems, before they let us play
the next. Maybe we can look through the binary to find
that code phrase. Here's the text:

.BEGIN-FISH-DESCRIPTION
.name
MonkeyCommand II
.author
KingKong Industries
.description
Keep the captured ape from assaulting the defenses
of the prison that was erected at the conclusion of
MonkeyCommand I. The game consists of coordinating
the actions of four native tribal leaders and their
vassals in repairing the damage done by the enraged
monster ape as it tries to escape and revenge itself
on whoever won the original MonkeyCommand.
.restriction
You need the secret code from the first MonkeyCommand
which you can only get if you won that game.
.END-FISH-DESCRIPTION

(=:Joe:=)
----------------------------------------

NOTE: When copying data to the Clipboard, KingFisher supplies these markers for you!

Product-Info Specification: Fields

STANDARD FIELDS

The following are standard fields. Their meaning is fixed, although sometimes open to interpretation. Nothing forces you to obey these rules, but the closer you adhere to them, the more successful a search will be that relies on these rules.
  1. If a field does not apply, or you have no data to supply, leave it out. You may provide a blank field, but this will have the same effect.

  2. Pay attention to the FORMAT, which describes if a field is a single line field (ignores 2nd and further lines) or if it will flow its contents (ignoring YOUR newlines) or if it has any other constraints.

  3. The only absolutely required field must also be the first field in any 'Product-Info': "name"
===========================================================================
.name (absolutely required; must also be the first field)
	Purpose:	The program's popular name. This is sometimes an
			abbreviated version of the "fullname"
	Format:		1 line only
	Example:	KingFisher
	Example:	HomeBase VI
	Example:	BLAZEMONGER
	Example:	AIBB
	Example:	gcc

.fullname (optional)
	Purpose:	The full (or complete) name of the program if it
			differs from the "name"; omit this field if you
			would merely duplicate "name"
	Format:		1 line only
	Example:	Amiga Intuition Based Benchmarks
	Example:	GNU C Compiler

.short (optional, but recommended)
	Purpose:	A one-line description, preferably not exceeding
			40 characters in length, à la Aminet. A single-
			glance to the program's purpose.
	Format:		1 line, best not to exceed 40 characters
	Example:	Software catalog/search/maintenance tool
	Example:	Full featured C/C++ package; CLI only
	Example:	230db sound, mind-reading, killer game

.type
	Purpose:	Categorize the package; multiple keywords permitted,
			but adhere as closely as possible to the list given
			at the end of this document. Wild variations will
			reduce the value of this field.
	Format:		One or more lines, but best not to exceed a single
			word or two.
	Example:	database
	Example:	animation player
	Example:	animation tool
	Example:	spreadsheet
	Example:	communications
	Example:	display commodity
	Example:	mouse commodity
	
.description
	Purpose:	A full-text description of your package, containing
			anything that is NOT ALREADY available through the
			other fields (above and below.) The reader should
			gain a good understanding what your program can and
			cannot do. If you mention other (similar) software,
			please add these also to the "reference" field.
				Please note that this field FLOWS text and
			is not designed for fixed-pitch ASCII graphics or
			other flash. If you need to insert a newline, do so
			with the "\n" sequence (backslash followed by a
			lowercase "n"); newline characters are treated as
			blanks. See the section on FORMATTING below!
	Format:		Free form: Any number of lines, treated as a single
			stream of text and formatted according to embedded
			formatting symbols (see FORMATTING below.)
	Notes:		The text should be readable regardless of the font
			that is used in its display, and regardless of the
			line width available (resizable window vs. printer)

.version
	Purpose:	The program's version number; please note that this
			should follow the standard guidelines for versions,
			as obeyed by most (but sadly not all, not even all
			system software):
				37.1 < 37.17 < 37.39 < 37.100 < 37.170
			The following are all vastly different versions:
				37.1  37.10  37.100  37.1000
	Format:		One line only: MAJOR.MINOR
	Example:	37.100
	Notes:		Nothing requires you to maintain your versions this
			way, but you should be aware that some software may
			make use of this field by searching for a release
			that has reached, for example, at least version 2
			(perhaps as a requirement that said software has
			been maintained by its author beyond some initial
			release 1); if your program's version is "v940205"
			then this would simply count as version 0 and could
			be missed.

.date
	Purpose:	The program's official release date. NOT the date
			when it made it into the database.
	Format:		year.month.day
	Example:	1993.09.27
	Example:	1996.01.01
	Notes:		The format was chosen to make it easily sortable.
			Note the use of leading zeros in month and day, and
			the complete year (with century.)

.author
	Purpose:	Any and all authors who have a part in the program.
	Format:		Any number of lines, each name should be placed on
			its own line.
	Example:	Joe R. User
			Tea Rexx
	Example:	J. Jones
			Random Hacker
			Bone Head
	Notes:		Addresses matching these authors should be placed
			into the .address field, one after the other, and
			in the correct order to produce a 1-to-1 relation.

.address (optional)
	Purpose:	Describe a full postal address of the author(s),
			to be used when it becomes necessary or desirable
			to contact the author by snailmail. Do not specify
			the author's name, as this already appears in the
			"author" field.
	Format:		Multiple lines. Formatting symbols are not used, as
			physical newlines are respected.
	Example:	7022 Hanover Parkway, Apt. C2
			Greenbelt, MD 20770-2049
			USA

.email (optional)
	Purpose:	Full electronic mail address
	Format:		Multiple lines, each having a 1-to-1 relation with
			the "author" field; more than one email address may
			appear on a line, separated by blank space (the
			preferred way) or by commas.
	Example:	walrus@wam.umd.edu
	Example:	walrus@wam.umd.edu walrus@sprintmail.com

.url (optional)
	Purpose:	Universal Resource Locator, usually for ftp sites
			or World Wide Web support/home pages.
	Format:		One or more lines, each on a 1-to-1 relation with
			the "author" field. More than one URL (Universal
			Resource Locator) may appear on a single line.
	Example:	http://www.wam.umd.edu/~walrus/KingFisher.html
	Example:	ftp://nowhere.com/Bogus.png

.keywords (optional)
	Purpose:	List as few or as many keywords as necessary to sum
			up the major features of this package. It is
			recommended to keep this entry to 10 keywords or
			less, but no definitive limit will be enforced. The
			idea with this field is to help construct a memory-
			resident quick index for systems that can afford to
			maintain a large amount of data in RAM.
	Format:		One or more lines; keywords or keyphrases separated
			by white space (space, tab, or newline.)
	Example:	fish disks
			library maintenance			
			search expressions
			product-info

.restrictions (optional)
	Purpose:	If your software has any restrictions placed upon
			it, list them here, in detail. You should indicate
			if your package has been made dysfunctional (such
			as would be the case with a demo package.) If the
			program will not run on anything less than a 68020
			CPU, you should list this here, to.
	Format:		Free form (see "description")
	Example:	Demo version has SAVE and PRINT disabled.
	Example:	Documentation available only in German.
	Example:	Disables video DMA while playing samples.
	Notes:		List actual restrictions here, not minimum system
			requirements.

.requirements (optional)
	Purpose:	List minimum requirements for your program. These
			should give the reader enough information to
			determine if the software is likely to run on his/
			her system. Be sure to specify operating system,
			(hard)disk requirements, non-standard libraries
			(such as MUI) and whether or not some or all of
			these required libraries are included in the
			distribution.
	Format:		Free form (see "description")
	Example:	68020, 68030, or 68040 CPU; 3M free RAM; 18M disk
			space; at least 640×480 display capabilities and
			16 colors or better.
	Example:	Requires WB2.1 (V38)
	Example:	Requires 1024×768 (or larger) displays.
	Example:	Works only with 4096-channel, 230db BLAZETHUNDER
			audio board.
	Example:	Requires MUI (Magic User Interface) version 10.

.reference (optional)
	Purpose:	List the full path to software in some way related
			to this package. This may include previous versions
			of your package or similar packages. The path is a
			volume:path/ or volume:path/archive
	Format:		2 lines per reference: the first is the path with
			trailing slash (if you do not give the slash then
			the name of an archive is assumed); the second line
			is the version number.
	Example:	FishROM-0002:Productivity/Databases/HomeBase VI/
			417.0
			FishROM-0001:Productivity/Databases/HomeBase VI/
			415.12

.distribution (optional)
	Purpose:	Describe the distribution and ownership status of
			this software. Please see below for a list of the
			most common (and recommended) terms.
	Format:		1 line
	Example:	shareware
	Example:	commercial demo

.price (optional)
	Purpose:	If your package is available for a fee, describe
			this price here. it is strongly recommended that
			the first currency is expressed in US dollars to
			provide a common base unit for prices. If your
			package is freely available and has no price
			attached, then omit this field.
	Format:		Free form but best adhere to examples.
	Example:	$50(US), DM75

.installsize (optional)
	Purpose:	The minimum and maximum sizes of the package as it
			is installed. The minimum size should give an
			indication of how much disk space is required for
			an absolute minimal installation. If the reader has
			less diskspace than that, the program is likely not
			to be able to function at all. The maximum is the
			absolute highest amount of diskspace that the
			package is likely to consume when all portions are
			installed (including optional tutorials, demo files,
			etc.)
	Format:		One or more lines; only the first line has a fixed
			format, the rest are free-form.
	Example:	220K - 2400K
			Most of the database files can be kept on floppy
			disks, so valuable hard disk space is not wasted.
	Example:	18K
	Example:	38K - 500K
			Lots of documentation and example scripts make up
			the bulk of this installation.
	Notes:		It is recommended that sizes are scaled to kilo-
			bytes to maintain a uniform scale, rather than
			expressing them in bytes or megabytes. Always add
			a size quantifier (K=kilobyte=1024bytes, M=megabyte,
			T=terabyte, etc.)

.exectype (optional)
	Purpose:	Describe the type of executable(s) that make up
			your program. Most packages are probably compiled
			C, but some may be shell or ARexx scripts, BASIC,
			AMOS, or otherwise interpreted. The reason for this
			is that some packages are known to cause problems
			on some systems, or the customer is looking for
			something "better" than interpreted BASIC and would
			like to know this before "wasting" time locating,
			downloading, and installing the package.
	Format:		Free form (see "description")
	Example:	Compiled C
	Example:	AmigaBASIC

.source (optional)
	Purpose:	Describe what source code is available as part of
			your package. If source is not available, then omit
			this field. How large is the source? What compiler,
			translator, or interpreter is required? It might be
			good to give an idea of the version of the compiler
			that is required.
	Format:		Free form (see "description")
	Example:	SAS/C 6.56, Manx, DICE source (750K) available for
			$15(US); some old SAS/C 5.10b sources (30K) included
			free.
	Example:	Limited C source examples (15K) included
	Example:	All source plus custom libraries: 12M

.construction
	Purpose:	Describe the types of languages used to create this
			program and the methods used to build the final
			executable. If possible, include the compiler
			versions and possibly important options, such as
			optimization for various CPUs (it is possible to
			optimize somewhat for a 68040 without sacrificing
			68000 compatibility.)
	Format:		Free form (see "description")
	Example:	SAS/C++ 6.56 with speed optimizations weighed for
			the 68040 CPU (68040 not required, however.)
	Example:	AdaEd
	Example:	Handcrafted assembly
	Example:	Fortran with self-made compiler.
	Example:	AMOS

.tested (optional)
	Purpose:	Give an indication of which configurations have
			served as test environments. If the software
			operates without problems with non-standard system
			enhancements, this would be a good place to mention
			them.
	Format:		Free form (see "description")
	Example:	A500(512K Chip, 0K Fast, 1 Floppy), A2000(1M Chip,
			2M Fast, 40M HD, 1 Floppy); not tested on 68020+
			CPUs.
	Example:	A1000, A500, A600, A2000, A2000/30, A3000, A1200,
			A4000/30, A4000/40 with various amounts of Chip
			and Fast RAM, with and without MMU or FPU. Found
			to be free of Enforcer hits and able to work with
			virtual memory products; compatible with Retina,
			EGS/Spectrum, and Picasso software. Also tested
			under V33 through V40 system software.
	Example:	CPU: 68000, 68020, 68030, 68040 (68060 unknown);
			Kickstart V37, V38, V39, V40; Video/Graphics: PAL,
			NTSC, Picasso II (Village Tronic and CyberGraphX),
			GVP EGS Spectrum (others unknown); Tested with
			system enhancements such as GigaMem 3.12, VMM 3.2,
			Enforcer 37.62, Executive 1.30, IPrefs2Fast 0.9b,
			OpaqueMove 1.0, KingCON 1.3.

.run (optional)
	Purpose:	Specifies how to start the program.
	Format:		visible=type,command
			where 'visible' would be what the user would see
			and select; 'type' is either 'CLI' or 'WB' (the
			system interface) and 'command' is the program to
			execute. The 'CLI' version may include parameters,
			including I/O redirection, as this string is passed
			directly to the System() call.
	Example:	HomeBase VI=WB,HomeBase VI
			HomeBase VI=CLI,ExecuteMe.HB6
			HomeBase VI Fixer=CLI,ExecuteMe.HB6Fixer
			KingFisher=CLI,KingFisher
	Example:	FishTub=WB,ExecuteMe
	Notes:		As this item may be dangerous to the unsuspecting
			user, it has not been implemented by KingFisher and
			is not likely to be implemented.

.execute (optional)
	Purpose:	An 'execute' script. This entry has been added by
			Fred Fish; the script views the documentation,
			installs the software, or merely runs the program.
	Format:		A shell script, line by line.
	Notes:		It is not recommended that this entry be supplied
			by you, as Fred Fish may simply replace it with a
			version of his own.

.docs (optional)
	Purpose:	List all documentation files associated with your
			package. Do not specify the files if they are not
			available as-is; if they are only located within an
			archive, omit them.
	Format:		1 line per file, do not include the path as this
			is provided by the "stored-in" field.
	Example:	HomeBase.guide
			HomeBase.dvi
			HomeBase.doc

.described-by (optional)
	Purpose:	Who created the description ('Product-Info' file)
			for this project.
	Format:		Free form (should include an electronic mail
			address too, if available.)
	Example:	Fred Fish <fnf@amigalib.com>
	Example:	Udo Schuermann <walrus@wam.umd.edu>

.submittal (optional)
	Purpose:	Who submitted to package to Fred (or else how the
			package came to be on the reference disk.)
	Format:		Free form (usually one line)
	Example:	Submitted on disk directly by the author.
	Example:	Downloaded from wuarchive.wustl.edu in pub/aminet/util/misc

.stored-in
	Purpose:	Specifies where and especially HOW the package is
			stored. This field should specify EITHER the name
			of a directory (ending with a ':' or a '/') OR the
			name of a file. In the case of an archive, the name
			should reflect that with the appropriate extension
			(.lha .zip .gz .Z etc.)
	Format:		One or more lines
	Example:	FF1000:d501-1000/Disk950/Enforcer/
			FF1000:d501-1000/Disk950/Enforcer/Enforcer
			FF1000:BBS/d501-1000/Disk950/Enforcer/Enforcer.lha
	Notes:		This field is usually generated by the disk creator
			software, not by the submitter of the package, as
			the final location on the disk may not be controlled
			by the submitter of the Product-Info.

.path (obsolete)

.aminet-dir (optional)
	Purpose:	The path (WITHOUT trailing '/') where this package
			is available on the global Aminet.
	Format:		One line; must NOT end with a '/'
	Example:	biz/dbase
	Example:	gfx/edit
	Notes:		Together with aminet-file, this entry can be used
			to construct the complete path to this package on
			Aminet or Aminet CD-ROMs.

.aminet-file (optional)
	Purpose:	The name of the package (archive) as stored on
			Aminet.
	Example:	KingFisher220.lha
	Example:	VanGogh.lha
	Notes:		Together with aminet-dir, this entry can be used
			to construct the complete path to this package on
			Aminet.
===========================================================================

Starter .Product-Info

INSTRUCTIONS: Using MultiView/AmigaGuide or your Browser's SAVE AS command, write this page to a file. Call it .Product-Info. Fill in what you need based on the description of Fields given in the previous section. Not all fields are required, and some may need special formatting.

Ship the resulting file with your product!

Acceptable names for the file (in increasing order of desirability) are:

	.Product-Info
	Product-Info
	myproject.pi

Suggested keywords for the TYPE field:

	Action Game		Animation		Animation Player
	Animation Tool		Archiver		CLI Tool
	Communications		Compiler		Compression
	Database		Disk Tool		Display Commodity
	Drawing			Image Conversion	Image Processing
	Library			Mouse Commodity		Music Composition
	OS Utility		Painting		Picture
	Printing		Sound Analysis		Sound Editing
	Sound Playing		Spreadsheet		Strategy Game
	Text			Text Editing		Text Viewer
	Thinking Game		Word Processing		Workbench Tool

Keywords for the DISTRIBUTION field:

	Commercial	Commercial software is owned and distributed
			through licenses. It costs money to individual
			end-users and is not freely distributable.
			SUCH PIECES SHOULD NOT APPEAR ON DISKS THAT ARE
			MEANT FOR FREELY DISTRIBUTABLE SOFTWARE!

	Commercial Demo		Represents a demonstration of a commercial
			package. As such, commercial demos are freely
			distributable and may have limitations as
			described in the .limitations field.

	Shareware	Such software is owned and copyrights are
			held by the author(s). The software may be
			distributed freely, but not sold for profit,
			of course. Shareware often specifies a limit
			of some time after which you are requested or
			required to register the software (i.e. pay
			for it.) This provides you with the means to
			evaluate the software thoroughly before paying
			for it.

	Freeware	Such software is owned and copyrights are
			held by the author(s). The software may be
			distributed freely, but not sold for profit,
			which would mean the software is no longer
			FREEware. No payments are required for such
			software.

	Public Domain	Software labeled PD (Public Domain) belongs to
			the public, i.e. ANYONE. Some people release
			their software into the public domain with the
			mistaken idea that they can continue to own
			and control the program. Not so. Software
			that is labeled Public Domain (or said by the
			author to be released into the public domain)
			truly belongs to anyone and everyone. It is
			quite legal for someone to take such a program
			and sell it for profit as is. Likewise, it
			it perfectly acceptable to modify public domain
			software to build a better product (or whatever)
			out of it and then sell it for profit.

	GNU Public License	The terms and conditions of this license
			are long and not easily reproduced here. Suffice
			to say that software released under the GNU Public
			License cannot be sold for profit and must be
			distributed with source code. They are not
			public domain, however.

Common Errors with Product-Info files

By far the most common error made when creating a Product-Info file is formatting the .description field (and some others) as if the text was always displayed...
  1. with a fixed-pitch font, instead of a proportional font,
  2. with a physical end-of-line characters preserved as newlines
BOTH OF THESE ASSUMPTIONS ARE WRONG AND WILL LEAD TO BADLY FORMATTED TEXT!!

Unless specifically stated in the Field Definitions, a field's contents flow without regard for your newline characters, unless you specify a newline as a \n symbol where you want KingFisher to begin a new line. In fact, newlines, tabs, and spaces are all treated as blank characters, and multiple such blanks are treated as no more than a single blank!

If you require a portion of a field's data to be treated exactly as you specify it, you must force verbatim mode on with the \# symbol. Do not forget to turn back to flow mode with another \#. Verbatim mode overrides the flow mode feature of filling text within the margins, although word wrapping will still be performed. If the display window is too narrw for your verbatim text, the result will be a mess. Likewise, if you format your text for a fixed pitch font, you will likely produce a mess in anyone's window who is using a proportional font! Tabs and indents may help in that case, but overriding flow mode with \# is recommended only as a last resort.

To proof-read the appearance of your Product-Info files, use the "VIEW/Product-Info file" menu command. Resize KingFisher's window when you view your file to assure that your creation does not rely on a specific font and window width!


walrus@wam.umd.edu
22 Aug 1996.