From 1017295b425a7ca899ece52594cf2e571cdbd0aa Mon Sep 17 00:00:00 2001 From: raster Date: Tue, 3 Dec 2002 00:26:34 +0000 Subject: [PATCH] and toss in all the doc stuff... still need to document the data munging calls though... git-svn-id: http://svn.enlightenment.org/svn/e/trunk/e17/libs/eet@6470 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- Doxyfile | 993 ++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile.am | 14 +- configure.in | 10 +- doc/eet.css | 55 +++ doc/foot.html | 2 + doc/head.html | 16 + doc/img/eet.png | Bin 0 -> 15400 bytes doc/img/eet_big.png | Bin 0 -> 45257 bytes doc/img/eet_small.png | Bin 0 -> 3504 bytes eet.c.in | 22 ++ gendoc | 10 + src/lib/Eet.h | 161 +++++--- 12 files changed, 1233 insertions(+), 50 deletions(-) create mode 100644 Doxyfile create mode 100644 doc/eet.css create mode 100644 doc/foot.html create mode 100644 doc/head.html create mode 100644 doc/img/eet.png create mode 100644 doc/img/eet_big.png create mode 100644 doc/img/eet_small.png create mode 100644 eet.c.in create mode 100755 gendoc diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..81faf7c --- /dev/null +++ b/Doxyfile @@ -0,0 +1,993 @@ +# Doxyfile 1.2.18 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# General configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = Eet + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en +# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, +# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these class will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = YES + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. It is allowed to use relative paths in the argument list. + +STRIP_FROM_PATH = + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower case letters. If set to YES upper case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# users are adviced to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explict @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# reimplements. + +INHERIT_DOCS = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 2 + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consist of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = eet.c + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = doc/img + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. + +INPUT_FILTER = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = doc/head.html + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = doc/foot.html + +# The HTML_STYLESHEET tag can be used to specify a user defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet + +HTML_STYLESHEET = doc/eet.css + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output dir. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non empty doxygen will try to run +# the html help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the Html help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, +# or Internet explorer 4.0+). Note that for large projects the tree generation +# can take a very long time. In such cases it is better to disable this feature. +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimised for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assigments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_XML = NO + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = NO + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tagfiles. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superceded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yield more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermedate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::addtions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO + +# The CGI_NAME tag should be the name of the CGI script that +# starts the search engine (doxysearch) with the correct parameters. +# A script with this name will be generated by doxygen. + +CGI_NAME = search.cgi + +# The CGI_URL tag should be the absolute URL to the directory where the +# cgi binaries are located. See the documentation of your http daemon for +# details. + +CGI_URL = + +# The DOC_URL tag should be the absolute URL to the directory where the +# documentation is located. If left blank the absolute path to the +# documentation, with file:// prepended to it, will be used. + +DOC_URL = + +# The DOC_ABSPATH tag should be the absolute path to the directory where the +# documentation is located. If left blank the directory on the local machine +# will be used. + +DOC_ABSPATH = + +# The BIN_ABSPATH tag must point to the directory where the doxysearch binary +# is installed. + +BIN_ABSPATH = /usr/bin/ + +# The EXT_DOC_PATHS tag can be used to specify one or more paths to +# documentation generated for other projects. This allows doxysearch to search +# the documentation for these projects as well. + +EXT_DOC_PATHS = diff --git a/Makefile.am b/Makefile.am index 7e766de..2e9d893 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,10 +1,18 @@ ## Process this file with automake to produce Makefile.in -SUBDIRS = src +SUBDIRS = src doc MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess \ config.h.in config.sub configure install-sh \ ltconfig ltmain.sh missing mkinstalldirs \ - stamp-h.in + stamp-h.in eet_docs.tar eet_docs.tar.gz eet.c -EXTRA_DIST = README AUTHORS COPYING eet.spec +dist-hook: + ./gendoc; \ + tar cvf eet_docs.tar doc; \ + rm -f eet_docs.tar.gz; \ + gzip -9 eet_docs.tar; \ + +bin_SCRIPTS = eet-config + +EXTRA_DIST = README AUTHORS COPYING eet.spec eet.c.in gendoc Doxyfile eet_docs.tar.gz diff --git a/configure.in b/configure.in index a391da6..669d546 100644 --- a/configure.in +++ b/configure.in @@ -70,6 +70,12 @@ packagesrcdir=`cd $srcdir && pwd` AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") AC_OUTPUT([ -Makefile src/Makefile src/lib/Makefile src/bin/Makefile +Makefile +src/Makefile +src/lib/Makefile +src/bin/Makefile +eet-config +],[ +chmod +x eet-config +touch eet_docs.tar.gz ]) - diff --git a/doc/eet.css b/doc/eet.css new file mode 100644 index 0000000..1b37f90 --- /dev/null +++ b/doc/eet.css @@ -0,0 +1,55 @@ +H1 { text-align: center; color: #333333} +CAPTION { font-weight: bold } +A:link { text-decoration: none; color: #444444; } +A:visited { text-decoration: none; color: #666666; } +A:hover { text-decoration: none; color: #ffffff; } +A.qindex { text-decoration: none; } +A.qindexRef { text-decoration: none; } +A.el { text-decoration: none; color: #555555; } +A.elRef { text-decoration: none; color: #555555; } +A.code { text-decoration: none; font-weight: normal; color: #555555; } +A.codeRef { text-decoration: none; font-weight: normal; color: #555555; } +DL.el { margin-left: -1cm } +DIV.fragment { width: 100%; border: none; background-color: #dddddd } +DIV.ah { background-color: black; color: #eeeeee; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #aaaaaa; color: #000088; } +TD.mdname1 { color: #880000; } +TD.mdname { color: #880000; width: 600px; } +DIV.groupHeader { margin-left: 10px; margin-top: 10px; margin-bottom: 10px; font-weight: bold } +DIV.groupText { margin-left: 10px; font-style: italic; font-size: smaller } +BODY { + background: #999999; + color: #222222; + font-family: times; +} +TD.indexkey { + background-color: #99aaaa; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} +TD.indexvalue { + background-color: #aa99aa; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} +span.keyword { color: #008000 } +span.keywordtype { color: #604020 } +span.keywordflow { color: #e08000 } +span.comment { color: #800000 } +span.preprocessor { color: #806020 } +span.stringliteral { color: #002080 } +span.charliteral { color: #008080 } diff --git a/doc/foot.html b/doc/foot.html new file mode 100644 index 0000000..308b1d0 --- /dev/null +++ b/doc/foot.html @@ -0,0 +1,2 @@ + + diff --git a/doc/head.html b/doc/head.html new file mode 100644 index 0000000..041a313 --- /dev/null +++ b/doc/head.html @@ -0,0 +1,16 @@ + + + + +$title + + + + + + + + + + +
EE : E : T
diff --git a/doc/img/eet.png b/doc/img/eet.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd829fc471ce2e2d028c58aca18366a25a11736 GIT binary patch literal 15400 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�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 e?bmkw*#7|g6dhus6FDIO0000 +@date 2000-2002 + +@section intro What is Eet? + +Eet is a small library for encodeing, decoding, sotring and retrieving data. + +@todo Complete documentation of API + +*/ diff --git a/gendoc b/gendoc new file mode 100755 index 0000000..9f28bd8 --- /dev/null +++ b/gendoc @@ -0,0 +1,10 @@ +#!/bin/sh +cp ./eet.c.in ./eet.c +cat ./src/lib/Eet.h >> ./eet.c +for I in `find ./src/lib -name "*.c" -print`; do + cat $I >> ./evas.c +done +rm -rf ./doc/html ./doc/latex ./doc/man +doxygen +cp doc/img/eet_small.png doc/html/eet_small.png +exit 0 diff --git a/src/lib/Eet.h b/src/lib/Eet.h index 57e231f..655a107 100644 --- a/src/lib/Eet.h +++ b/src/lib/Eet.h @@ -60,9 +60,11 @@ extern "C" { /***************************************************************************/ - /* eet_open - Open an eet file on disk, and returns a handle to it. - * @file: The file path to the eet file. eg: "/tmp/file.eet". - * @mode: The mode for opening. Either EET_FILE_MODE_READ or EET_FILE_MODE_WRITE, but not both. + /** + * Open an eet file on disk, and returns a handle to it. + * @param file The file path to the eet file. eg: "/tmp/file.eet". + * @param mode The mode for opening. Either EET_FILE_MODE_READ or EET_FILE_MODE_WRITE, but not both. + * @return An opened eet file handle. * * This function will open an exiting eet file for reading, and build * the directory table in memory and return a handle to the file, if it @@ -75,8 +77,9 @@ extern "C" { * writing or a memory error occurs, NULL is returned. */ Eet_File *eet_open (char *file, Eet_File_Mode mode); - /* eet_close - Close an eet file handle and flush and writes pending. - * @ef: A valid eet file handle. + /** + * Close an eet file handle and flush and writes pending. + * @param ef A valid eet file handle. * * This function will flush any pending writes to disk if the eet file * was opened for write, and free all data associated with the file handle @@ -85,10 +88,12 @@ extern "C" { * If the eet file handle is not valid nothing will be done. */ void eet_close (Eet_File *ef); - /* eet_read - Read a specified entry from an eet file and return data - * @ef: A valid eet file handle opened for reading. - * @name: Name of the entry. eg: "/base/file_i_want". - * @size_ret: Number of bytes read from entry and returned. + /** + * Read a specified entry from an eet file and return data + * @param ef A valid eet file handle opened for reading. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param size_ret Number of bytes read from entry and returned. + * @return The data stored in that entry in the eet file. * * This function finds an entry in the eet file that is stored under the * name specified, and returns that data, decompressed, if successfule. @@ -101,12 +106,14 @@ extern "C" { * filled with 0. */ void *eet_read (Eet_File *ef, char *name, int *size_ret); - /* eet_write - Write a specified entry to an eet file handle - * @ef: A valid eet file handle opened for writing. - * @name: Name of the entry. eg: "/base/file_i_want". - * @data: Pointer to the data to be stored. - * @size: Length in bytes in the data to be stored. - * @compress: Compression flags (1 == compress, 0 = don't compress). + /** + * Write a specified entry to an eet file handle + * @param ef A valid eet file handle opened for writing. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param data Pointer to the data to be stored. + * @param size Length in bytes in the data to be stored. + * @param compress Compression flags (1 == compress, 0 = don't compress). + * @retrun Success or failure of the write. * * This function will write the specified chunk of data to the eet file * and return 1 on success. 0 will be returned on failure. @@ -123,10 +130,12 @@ extern "C" { * closed though). */ int eet_write (Eet_File *ef, char *name, void *data, int size, int compress); - /* eet_list - List all entries in eet file matching shell glob. - * @ef: A valid eet file handle. - * @glob: A shell glob to match against. - * @count_ret: number of entries foudn to match. + /** + * List all entries in eet file matching shell glob. + * @param ef A valid eet file handle. + * @param glob A shell glob to match against. + * @param count_ret Number of entries foudn to match. + * @return Pointer to an array of strings. * * This function will list all entries in the eet file matching the * supplied shell glob and return an allocated list of their names, if @@ -151,16 +160,18 @@ extern "C" { char **eet_list (Eet_File *ef, char *glob, int *count_ret); /***************************************************************************/ - - /* eet_data_image_read - Read image data from the named key in the eet file. - * @ef: A valid eet file handle opened for reading. - * @name: Name of the entry. eg: "/base/file_i_want". - * @w: A pointer to the int to hold the width in pixels. - * @h: A pointer to the int to hold the height in pixels. - * @alpha: A pointer to the int to hold the alpha flag. - * @compress: A pointer to the int to hold the compression amount. - * @quality: A pointer to the int to hold the quality amount. - * @lossy: A pointer to the int to hold the lossiness flag. + + /** + * Read image data from the named key in the eet file. + * @param ef A valid eet file handle opened for reading. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param w A pointer to the int to hold the width in pixels. + * @param h A pointer to the int to hold the height in pixels. + * @param alpha A pointer to the int to hold the alpha flag. + * @param compress A pointer to the int to hold the compression amount. + * @param quality A pointer to the int to hold the quality amount. + * @param lossy A pointer to the int to hold the lossiness flag. + * @return The image pixel data decoded * * This function reads an image from an eet file stored under the named * key in the eet file and return a pointer to the decompressed pixel data. @@ -184,18 +195,20 @@ extern "C" { * values may not contain any sensible data. */ void *eet_data_image_read(Eet_File *ef, char *name, int *w, int *h, int *alpha, int *compress, int *quality, int *lossy); - /* eet_data_image_write - Write image data to the named key in an eet file. - * @ef: A valid eet file handle opened for writing. - * @name: Name of the entry. eg: "/base/file_i_want". - * @data: A pointer to the image pixel data. - * @w: The width of the image in pixels. - * @h: The height of the image in pixels. - * @alpha: The alpha channel flag. - * @compress: The compression amount. - * @quality: The quality encoding amount. - * @lossy: The lossiness flag. + /** + * Write image data to the named key in an eet file. + * @param ef A valid eet file handle opened for writing. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param data A pointer to the image pixel data. + * @param w The width of the image in pixels. + * @param h The height of the image in pixels. + * @param alpha The alpha channel flag. + * @param compress The compression amount. + * @param quality The quality encoding amount. + * @param lossy The lossiness flag. + * @return Success if the data was encoded and written or not. * - * This function dates image pixel data and encodes it in an eet file + * This function takes image pixel data and encodes it in an eet file * stored under the supplied name key, and returns how many bytes were * actually written to encode the image data. * @@ -213,16 +226,74 @@ extern "C" { * to encode the image data, or on failure it returns 0. */ int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, int compress, int quality, int lossy); - - /* To Be Documented + /** + * Decode Image data into pixel data. + * @param data The encoded pixel data. + * @param size The size, in bytes, of the encoded pixel data. + * @param w A pointer to the int to hold the width in pixels. + * @param h A pointer to the int to hold the height in pixels. + * @param alpha A pointer to the int to hold the alpha flag. + * @param compress A pointer to the int to hold the compression amount. + * @param quality A pointer to the int to hold the quality amount. + * @param lossy A pointer to the int to hold the lossiness flag. + * @return The image pixel data decoded * + * This function takes encoded pixel data and decodes it into raw RGBA + * pixels on success. + * + * The other parameters of the image (width, height etc.) are placed into + * the values pointed to (they must be supplied). The pixel data is a linear + * array of pixels starting from the top-left of the image scanning row by + * row from left to right. Each piel is a 32bit value, with the high byte + * being the alpha channel, the next being red, then green, and the low byte + * being blue. The width and height are measured in pixels and will be + * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes + * that the alpha channel is not used. 1 denoties that it is significant. + * Compress is fiulled with the compression value/amount the image was + * stored with. The quality value si fileld with the quality encoding of + * the image file (0 - 100). The lossy flags is either 0 or 1 as to if + * the image was encoded lossily or not. + * + * On success the function returns a pointer to the image data decoded. The + * calling application is responsible for calling free() on the image data + * when it is done with it. On failure NULL is returned and the parameter + * values may not contain any sensible data. */ - void *eet_data_image_encode(void *data, int *size_ret, int w, int h, int alpha, int compress, int quality, int lossy); void *eet_data_image_decode(void *data, int size, int *w, int *h, int *alpha, int *compress, int *quality, int *lossy); + /** + * Encode image data for sotrage or transmission. + * @param data A pointer to the image pixel data. + * @param size_ret A pointer to an int to hold the size of the returned data. + * @param w The width of the image in pixels. + * @param h The height of the image in pixels. + * @param alpha The alpha channel flag. + * @param compress The compression amount. + * @param quality The quality encoding amount. + * @param lossy The lossiness flag. + * @return The encoded image data. + * + * This function stakes image pixel data and encodes it with compression and + * possible loss of quality (as a trade off for size) for sotrage or + * transmision to another system. + * + * The data expected is the same format as returned by eet_data_image_read. + * If this is not the case wierd things may happen. Width and height must + * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning + * the alpha values are not useful and 1 meaning they are). Compress can + * be from 0 to 9 (0 meaning no compression, 9 meaning full compression). + * This is only used if the image is not lossily encoded. Quality is used on + * lossy compression and shoudl be a value from 0 to 100. The lossy flag + * can be 0 or 1. 0 means encode losslessly and 1 means to encode with + * image quality loss (but then have a much smaller encoding). + * + * On success this function returns a pointer to the encoded data that you + * can free with free() wehn no longer needed. + */ + void *eet_data_image_encode(void *data, int *size_ret, int w, int h, int alpha, int compress, int quality, int lossy); /***************************************************************************/ - /* To Be Documented - * + /* + * To Be Documented */ Eet_Data_Descriptor *eet_data_descriptor_new(char *name, int size, void *(*func_list_next) (void *l), void *(*func_list_append) (void *l, void *d), void *(*func_list_data) (void *l), void (*func_hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt), void *(*func_hash_add) (void *h, const char *k, void *d)); void eet_data_descriptor_free(Eet_Data_Descriptor *edd); -- 2.7.4