USE CASES FOR NG LIBISOFS
=========================

3.1 General Operations
======================

3.1.1 Creation of a new image
-----------------------------

Desc: Creation of a new ISO image from files on the local filesystem
Phases:
	- User creates a new image context
	- User get the root (empty) of the image
	- User adds files to the image root (see 3.2.)
	- User sets the options for the the new image (extension to use...)
	- User gets a burn_source to write the image.
	- The burn_source can be used by libburn to write the new image.

3.1.2 Image growing (multisession)
----------------------------------

Desc: An existing image can be grown with new files. New content is added
      incrementally. Suitable for multisession. Growing support for
      overwritteable media.
Phases:
	- Uses reads an existing image to get the image context.
	- User get the root of the image
	- User modifies the image tree (see 3.2.)
	- User sets the options for the the new image (extension to use...)
	  A required option will be the nwa for the image.
	  Optionally it can pass a pointer to a 64K buffer, that will be filled
	  with suitable volume descriptors to be used with overwrieable media.
	- User gets a burn_source to write the image.
	- The burn_source can be used by libburn to write an image that should be
	  appended to the previous image.


3.1.3 Image modification
------------------------

Desc: Creation of a new image from the contents of a previous image.
Phases:
	- Uses reads an existing image to get the image context.
	- User get the root of the image
	- User modifies the image tree (see 3.2.)
	- User sets the options for the the new image (extension to use...)
	- User gets a burn_source to write the image.
	- The burn_source can be used by libburn to write the image to another
	  device or file.

3.2 Tree operations
===================

3.2.1 Addition of contents
--------------------------

	All addition operations take a parent dir. The functions check that the
	node name is unique among all children. Image context options determine
	what to do if a file with such name already exist.

	3.2.1.1 Directories
	--------------------
		- Creation of new directories in image, given a parent dir. and a name.
		  Attributes are initialized to default values
		- Addition of a dir from the filesystem, given a parent. 
		  Dir contents are not added. Name and other attributes taken from 
		  the dir on filesystem
		- Recursive addition of a dir, given a parent. Directory contents are
		  recursivelly added to image.

	3.2.1.2 Regular files
	----------------------
		- Addition of a local filesystem file. Name, attributes and contents to
		  be written taken from the filesystem file.
		- Addition of files from the previous image. Files are automatically
		  added to the tree when the image is read. Name and attrbs taken from
		  previous image. When the image has no RR extensions, unavailable atts
		  are initialized to default values. The contents are only written to
		  img if we choose image modification.
		- Addition of filtered files. Name and atts taken from the local 
		  filesystem. A filter (see 3.3) is applied to the file contents before
		  written to image.
		- Addition of splitted files. Like local filesystem files, but the file
		  is splitted in several files on a given size. Suitable for big (> 2GB)
		  files. Name of the splitted files automatically generated.

	3.2.1.3 Symbolic links
	----------------------

		Simbolic links are only written to image if RR extensions are enabled.

		- Addition of a simbolic link from local filesystem. Name, atts and 
		  dest of a path are taken from the simbolic link.
		- Addition of new link on image to a path. Name and dest specified, 
		  the destination is specified as a path. Attributes initialized to
		  default values.
		- Addition of new link on image to another node. Name and dest 
		  specified, the dest is set to a node previously added to image.
		  When written, the destination path is computed as the relative path
		  from the link to the destination node. Attributes initialized to
		  default values.

	3.2.1.4 Special files (block devices, fifos...)
	-----------------------------------------------

		Special files are only written to image if RR extensions are enabled.

		- Addition of special files from filesystem.
		- Creation of new special files on image.
		  

3.2.2 Modification of contents
------------------------------

	3.2.2.1 Deletion of nodes
	-------------------------

		- Any node can be deleted. When a dir is remove, all its contents
		  are also removed.

	3.2.2.2 Move
	------------

		- Any node can be move to another dir..

	3.2.2.3 Rename
	--------------

		- You can change the name of any node

	3.2.2.4 Change of POSIX attributes
	----------------------------------

		- Following POSIX atts can be changed: owner (uid/gid), permissions,
		  timestamps.

3.2.3 Bootable information
--------------------------

	- Addition of a boot image to a volume. 
		- In most cases, the catalog and the boot image itself is added to the
		  iso tree. 
		- Alternatively, user can select to add a hidden images, i.e., images 
		  that don't appear in the iso tree.
	- Modification of boot image attributes:
		- bootable flag
		- load segment
		- load size
	- Automatic patching of isolinux images. User needs to set whether to apply
	  this.
	- Reading of El-Torito info from multisession images. Modification of its
	  attributes.
	- Removing of El-Torito images


3.2.4 Other operations
----------------------

	3.2.4.1 Set file sort weight 
	-----------------------------

		- Any file can have a sort weight, that will determine the order in
		  which the files are written to image

	3.2.4.2 Hidding of nodes
	------------------------
		
		- Files can be hidden in the RR or Joliet tree


3.3 Filters
===========

	[TODO]

	Support for:
		- compression filter
		- encryption filter
		- external process filter