diff options
Diffstat (limited to 'system/doc/top')
23 files changed, 2093 insertions, 0 deletions
diff --git a/system/doc/top/Makefile b/system/doc/top/Makefile new file mode 100644 index 0000000000..08fe265336 --- /dev/null +++ b/system/doc/top/Makefile @@ -0,0 +1,242 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1999-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# +# +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include $(ERL_TOP)/erts/vsn.mk + +APPLICATION=otp-system-documentation + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/doc + +GIF_FILES = + +INFO_FILES = ../../README ../../COPYRIGHT PR.template + +TOPDOCDIR=. + +TOP_HTML_GEN_FILES = \ + $(HTMLDIR)/incompatible.html \ + $(HTMLDIR)/highlights.html + +TOP_HTML_FILES = \ + $(TOP_HTML_GEN_FILES) + +include ../installation_guide/xmlfiles.mk +include ../system_principles/xmlfiles.mk +include ../embedded/xmlfiles.mk +include ../getting_started/xmlfiles.mk +include ../reference_manual/xmlfiles.mk +include ../programming_examples/xmlfiles.mk +include ../efficiency_guide/xmlfiles.mk +include ../tutorial/xmlfiles.mk +include ../design_principles/xmlfiles.mk +include ../oam/xmlfiles.mk + +XML_FILES = \ + $(INST_GUIDE_CHAPTER_FILES:%=../installation_guide/%) \ + $(SYSTEM_PRINCIPLES_CHAPTER_FILES:%=../system_principles/%) \ + $(EMBEDDED_CHAPTER_FILES:%=../embedded/%) \ + $(GETTING_STARTED_CHAPTER_FILES:%=../getting_started/%) \ + $(REF_MAN_CHAPTER_FILES:%=../reference_manual/%) \ + $(PROG_EX_CHAPTER_FILES:%=../programming_examples/%) \ + $(EFF_GUIDE_CHAPTER_FILES:%=../efficiency_guide/%) \ + $(TUTORIAL_CHAPTER_FILES:%=../tutorial/%) \ + $(DESIGN_PRINCIPLES_CHAPTER_FILES:%=../design_principles/%) \ + $(OAM_CHAPTER_FILES:%=../oam/%) \ + ../installation_guide/part.xml \ + ../system_principles/part.xml \ + ../embedded/part.xml \ + ../getting_started/part.xml \ + ../reference_manual/part.xml \ + ../programming_examples/part.xml \ + ../efficiency_guide/part.xml \ + ../tutorial/part.xml \ + ../design_principles/part.xml \ + ../oam/part.xml + +BOOK_FILES = book.xml + +HTMLDIR= ../html +PDFREFDIR= pdf + +TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf +TOPDOC=true + +#-------------------------------------------------------------------------- +# We generate the index page from the installed system. This make +# it important that this is done last. The file index.html.src +# is used as a template for the resulting page. + +EBIN = ebin + +INDEX_SCRIPT = $(EBIN)/erl_html_tools.$(EMULATOR) +INDEX_SRC = src/erl_html_tools.erl +INDEX_FILES = \ + $(HTMLDIR)/index.html \ + $(HTMLDIR)/applications.html + +JAVASCRIPT = $(HTMLDIR)/js/erlresolvelinks.js +JAVASCRIPT_BUILD_SCRIPT = $(EBIN)/erlresolvelinks.$(EMULATOR) +JAVASCRIPT_BUILD_SCRIPT_SRC = src/erlresolvelinks.erl + +MAN_INDEX_SCRIPT = $(ERL_TOP)/system/doc/top/bin/otp_man_index +MAN_INDEX = $(HTMLDIR)/man_index.html + +GLOSSARY = $(HTMLDIR)/glossary.html +GLOSSARY_SRC = $(ERL_TOP)/system/internal_tools/doctools/src/glossary.erl +GLOSSARY_SCRIPT = $(EBIN)/glossary.$(EMULATOR) + +#-------------------------------------------------------------------------- + +$(INDEX_SCRIPT): $(INDEX_SRC) + $(ERLC) -o$(EBIN) +warn_unused_vars $< + +# We don't list toc_*.html as targets because we don't know +$(HTMLDIR)/index.html: $(INDEX_SCRIPT) +ifneq ($(INSTALLROOT),) + echo "Generating index $@" + $(ERL) -noshell -pa $(EBIN) -s erl_html_tools top_index $(INSTALLROOT) \ + $(HTMLDIR) $(SYSTEM_VSN) -s erlang halt +else + @echo "INSTALLROOT unset, no indexes built." +endif + +#-------------------------------------------------------------------------- + +$(JAVASCRIPT_BUILD_SCRIPT): $(JAVASCRIPT_BUILD_SCRIPT_SRC) + $(ERLC) -o$(EBIN) +warn_unused_vars $< + +$(JAVASCRIPT): $(JAVASCRIPT_BUILD_SCRIPT) +ifneq ($(INSTALLROOT),) + echo "Generating javascript for resolving HTML links" + erl -noshell -pa $(EBIN) -s erlresolvelinks make $(INSTALLROOT) \ + . -s erlang halt + mkdir $(HTMLDIR)/js + mv erlresolvelinks.js $(JAVASCRIPT) # not portable !!! +else + @echo "INSTALLROOT unset, no javascript generated." +endif + +#-------------------------------------------------------------------------- + +$(MAN_INDEX): $(MAN_INDEX_SCRIPT) +ifneq ($(INSTALLROOT),) + echo "Generating index $@" + (cd $(INSTALLROOT); perl $< ) > $@ +else + @echo "INSTALLROOT unset, no manual index built." +endif +#-------------------------------------------------------------------------- + +$(HTMLDIR)/highlights.html: highlights.xml + date=`date +"%B %e %Y"`; \ + $(XSLTPROC) --output $(@) --stringparam docgen "$(DOCGEN)" --stringparam topdocdir "$(TOPDOCDIR)" \ + --stringparam pdfdir "$(PDFREFDIR)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" \ + --stringparam appver "$(VSN)" -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_html_entities \ + $(DOCGEN)/priv/xsl/db_html.xsl $< + + +$(HTMLDIR)/incompatible.html: incompatible.xml + date=`date +"%B %e %Y"`; \ + $(XSLTPROC) --output $(@) --stringparam docgen "$(DOCGEN)" --stringparam topdocdir "$(TOPDOCDIR)" \ + --stringparam pdfdir "$(PDFREFDIR)" --stringparam gendate "$$date" --stringparam appname "$(APPLICATION)" \ + --stringparam appver "$(VSN)" -path $(DOCGEN)/priv/docbuilder_dtd -path $(DOCGEN)/priv/dtd_html_entities \ + $(DOCGEN)/priv/xsl/db_html.xsl $< + +#-------------------------------------------------------------------------- + +$(GLOSSARY_SCRIPT): $(GLOSSARY_SRC) + $(ERLC) -o$(EBIN) $(GLOSSARY_SRC) + +$(GLOSSARY): $(GLOSSARY_SCRIPT) + $(ERL) -noshell -pa $(EBIN) \ + -s glossary make ../definitions/term.defs -s erlang halt > \ + $(GLOSSARY) + +#-------------------------------------------------------------------------- + +PR.template: PR.template.src $(ERL_TOP)/erts/vsn.mk + sed -e 's;%VSN%;$(VSN);' \ + -e 's;%SYSTEM_VSN%;$(SYSTEM_VSN);' \ + $< > $@ + +# ---------------------------------------------------- +# FLAGS +# ---------------------------------------------------- +XML_FLAGS += +DVIPS_FLAGS += + +# ---------------------------------------------------- +# Targets +# ---------------------------------------------------- + + +docs: pdf html $(INFO_FILES) + +local_docs: PDFREFDIR=../pdf + +$(TOP_PDF_FILE): $(XML_FILES) + +pdf: $(TOP_PDF_FILE) + +html: $(INDEX_FILES) $(TOP_HTML_FILES) \ + $(MAN_INDEX) $(JAVASCRIPT) + +debug opt: + +clean: + rm -rf ../html/js + rm -f PR.template + rm -f $(INDEX_FILES) $(TOP_HTML_FILES) $(MAN_INDEX) + rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) + rm -f $(INDEX_SCRIPT) $(GLOSSARY_SCRIPT) \ + $(JAVASCRIPT_BUILD_SCRIPT) + rm -f erl_crash.dump errs core *~ + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + + +release_docs_spec: docs + $(INSTALL_DIR) $(RELEASE_PATH) + $(INSTALL_DATA) $(INFO_FILES) $(RELEASE_PATH) + $(INSTALL_DIR) $(RELSYSDIR) + $(INSTALL_DIR) $(RELSYSDIR)/pdf + $(INSTALL_DATA) \ + $(TOP_PDF_FILE) $(RELSYSDIR)/pdf +#$(TOP_HTML_FILES) +ifneq ($(INSTALLROOT),) + $(INSTALL_DATA) $(INDEX_FILES) $(MAN_INDEX) $(TOP_HTML_FILES) $(RELSYSDIR) + $(INSTALL_DIR) $(RELSYSDIR)/js + $(INSTALL_DATA) \ + $(JAVASCRIPT) $(RELSYSDIR)/js +endif + + +release_spec: diff --git a/system/doc/top/PR.template.src b/system/doc/top/PR.template.src new file mode 100644 index 0000000000..fb593053d9 --- /dev/null +++ b/system/doc/top/PR.template.src @@ -0,0 +1,20 @@ +>Submitter-Id: <Your id> +>Originator: <Your name> +>Organization: <The name of your company> +>Confidential: <[yes | no ] (one line)> +>Synopsis: <synopsis of the problem (one line)> +>Severity: < [non-critical | serious | critical ] (one line)> +>Priority: < [ low | medium | high ] (one line)> +>Category: <product, component or concept name> +>Class: < [ sw-bug | doc-bug | change-request | support ] (one line)> +>Release: <Release version, e.g. OTP %SYSTEM_VSN%, Erlang %VSN%> +>Environment: + <machine, os, target, libraries (multiple lines)> +>Description: + <precise description of the problem (multiple lines)> +>How-To-Repeat: + <code/input/activities to reproduce the problem (multiple lines) +>Fix: + <How to correct or work around the problem, if known + (multiple lines)> + diff --git a/system/doc/top/bin/otp_man_index b/system/doc/top/bin/otp_man_index new file mode 120000 index 0000000000..bb913b25df --- /dev/null +++ b/system/doc/top/bin/otp_man_index @@ -0,0 +1 @@ +../../../../internal_tools/integration/scripts/otp_man_index
\ No newline at end of file diff --git a/system/doc/top/book.xml b/system/doc/top/book.xml new file mode 100644 index 0000000000..96f39b0b83 --- /dev/null +++ b/system/doc/top/book.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE book SYSTEM "book.dtd"> + +<book xmlns:xi="http://www.w3.org/2001/XInclude"> + <header titlestyle="normal"> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Erlang/OTP System Documentation</title> + <prepared>OTP Team</prepared> + <docno></docno> + <date>2009-08-21</date> + <rev>A</rev> + <file>book.xml</file> + </header> + <insidecover> + </insidecover> + <pagetext></pagetext> + <preamble> + <contents level="2"></contents> + </preamble> + <parts lift="no"> + <xi:include href="../installation_guide/part.xml"/> + <xi:include href="../system_principles/part.xml"/> + <xi:include href="../embedded/part.xml"/> + <xi:include href="../getting_started/part.xml"/> + <xi:include href="../reference_manual/part.xml"/> + <xi:include href="../programming_examples/part.xml"/> + <xi:include href="../efficiency_guide/part.xml"/> + <xi:include href="../tutorial/part.xml"/> + <xi:include href="../design_principles/part.xml"/> + <xi:include href="../oam/part.xml"/> + </parts> + <listofterms></listofterms> + <index></index> +</book> + diff --git a/system/doc/top/ebin/.gitignore b/system/doc/top/ebin/.gitignore new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/system/doc/top/ebin/.gitignore diff --git a/system/doc/top/highlights.xml b/system/doc/top/highlights.xml new file mode 100644 index 0000000000..a30742aed6 --- /dev/null +++ b/system/doc/top/highlights.xml @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2006</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Highlights</title> + <prepared></prepared> + <docno></docno> + <date></date> + <rev>A</rev> + <file>highlights.xml</file> + </header> + <p>This document lists some highlights of Erlang 5.7/OTP R13A + (unpatched), compared to the previous version Erlang 5.6/OTP R12B, + with focus on things not already released as R12B patches.</p> + <p>Note: This document was compiled at the time when R13A was released + and does not list any features introduced in R13 patches.</p> + + <section> + <title>Erlang Language and Run-time System</title> + <section> + <title>Multi-core and SMP performance improvements</title> + <p> + There SMP performance is significantly improved and will + allow most applications to scale much better on systems with many + cores or processors. Listed below are some of the most important improvements: + </p> + <list type="bulleted"> + <item> + <p> + The runtime system with SMP support now uses <em>multiple, + scheduler specific run queues</em>, instead of one globally shared + run queue. + </p> + <p> + The lock protecting the shared run queue was heavily + contended, and the shared run queue also caused Erlang + processes to randomly migrate between schedulers with + negative cache effects as a result. + </p> + <p> + With the current scheduler specific run queue solution, lock + contention due to run queue protection has been reduced, and + Erlang processes are only migrated when needed to balance the + load between the schedulers. The reduced amount of migration + also reduce lock contention on locks protecting the scheduler + specific instances of the erts internal memory allocators. + </p> + <p> + The scheduler specific run queues are also a necessity for a + lot of future planned NUMA (Non-Uniform Memory Access) + specific optimizations. + </p> + </item> + <item> + <p> + Message passing has been further optimized for parallell execution. + This makes parallell sending to one common receiver much more efficient. + </p> + </item> + <item> + <p> + Scheduler threads can now be bound to logical processors on newer + Linux ans Solaris systems. + </p> + </item> + </list> + </section> + <section> + <title>Unicode support</title> + <p> + Support for Unicode is implemented as described in EEP10. + Formatting and reading of unicode data both from terminals + and files is supported by the <c>io</c> and <c>io_lib</c> modules. + Files + can be opened in modes with automatic translation to and from + different unicode formats. The module 'unicode' contains + functions for conversion between external and internal + unicode formats and the re module has support for unicode + data. There is also language syntax for specifying string and + character data beyond the ISO-latin-1 range. + </p> + </section> + + <section> + <title>New BIF's</title> + <p> + The BIFs <c>atom_to_binary/2</c>, <c>binary_to_atom/2</c> and + <c>binary_to_existing_atom/2</c> have been added. + </p> + </section> + + <section> + <title>Independent Erlang clusters on the same host</title> + <p> + Nodes belonging to different independent clusters can now + co-exist on the same host with the help of a new + environment variable setting <c>ERL_EPMD_PORT</c>. + The environment variable is used by Erl_interface and J_interface + as well. + </p> + </section> + </section> + + <section> + <title>New Applications</title> + + <section> + <title>Reltool</title> + + <p> + Reltool is a release management tool. + It analyses a given Erlang/OTP installation and determines + various dependencies between applications. + The graphical frontend depicts the dependencies and enables + interactive customization of a target system. + The backend provides a batch interface for generation of + customized target systems. + The application is still somewhat limited and should be regarded + as experimental in this release. The intention is that this + application will be a valuable tool for making both traditional + Erlang target systems as well as standalone components in Erlang. + </p> + </section> + + <section> + <title>WxErlang</title> + <p> + wxErlang is an Erlang binding to the WxWidgets GUI library which + provides support for cross platform GUI applications. + wxErlang is still in beta status and the intention is that it shall + replace GS in a later stage. The Erlang debugger is also shipped in + a wxErlang version. + </p> + </section> + + + </section> + + <section> + <title>New features in Existing Applications</title> + + <section> + <title>Common_test</title> + + <p> + A support client module for SSH and SFTP, <c>ct_ssh</c>, has + been introduced. + </p> + <p> + Test case groups have been introduced. With this feature + it's possible to execute groups (possibly nested) + of test cases. + </p> + <p> + A group definition contains a name tag, a list of + properties and a list of test cases (including possible + nested group definitions). The properties make it possible + to execute test cases in parallel, in sequence and in + shuffled order. It is also possible to repeat test cases + according to different criteria. + </p> + </section> + + + <section> + <title>Dialyzer</title> + <p> + The analysis now accepts <em>opaque type declarations</em> and + detects + violations of opaqueness of terms of such types. Starting + with R13, many Erlang/OTP standard libraries (array, dict, + digraph, ets, gb_sets, gb_trees, queue, and sets) contain + opaque type declarations of their main data types. Dialyzer + will spit out warnings in code that explicitly depends on the + structure of these terms. + </p> + <p> + Added support for handling UTF segments in bitstreams and for + detecting obvious type errors in these segments. Warning: + This code is not terribly tested though since there are very + few Erlang programs which use Unicode-based binaries - not + surprising since this is a new language feature of R13. + </p> + <p> + Strengthened the discrepancy identification when testing for + equality and matching between terms of different types. This + detects more bugs in code. + </p> + <p> + See the Dialyzer documentation and release notes for even more + enhancements. + </p> + </section> + + <section> + <title>SSL</title> + <p> + The "new_ssl" implementation is significantly improved and should be + near product status now. + The new SSL is implemented in pure Erlang except for + the crypto routines that are implemented in the crypto driver which + is an interface to libcrypto from OpenSSL. + </p> + </section> + + <section> + <title>STDLIB</title> + + <p>The Erlang scanner has been augmented as to return white-space, + comments and exact location of tokens. + This means that the scanner can easily be used in tools such as editors, + pretty printers, syntax highlighters etc. + where it is important to be able recreate the original source document. + </p> + </section> + + </section> +</chapter> + diff --git a/system/doc/top/incompatible.xml b/system/doc/top/incompatible.xml new file mode 100644 index 0000000000..ce9522725b --- /dev/null +++ b/system/doc/top/incompatible.xml @@ -0,0 +1,383 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2006</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Potential Incompatibilities</title> + <prepared></prepared> + <docno></docno> + <date></date> + <rev></rev> + <file>incompatible.xml</file> + </header> + <p>This document contains a list of potential incompatibilities + between Erlang 5.7/OTP R12A and Erl 5.6.5/OTP R12B-5, + and is an extract from the release notes for the respective applications.</p> + + <section> + <title>compiler</title> + <list type="bulleted"> + <item> + <p> + The undocumented, unsupported, and deprecated guard BIF + <c>is_constant/1</c> has been removed.</p> + <p> + *** INCOMPATIBILITY with R12B ***</p> + <p> + Own Id: OTP-7673</p> + </item> + <item> + <p>The short-circuit operators <c>andalso</c> and + <c>orelse</c> no longer guarantees that their second + argument is either <c>true</c> or <c>false</c>. As a + consequence, <c>andalso</c>/<c>orelse</c> are now + tail-recursive.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7748</p> + </item> + <item> + <p>The compiler will refuse to a compile file where the + module name in the file differs from the output file + name.</p> + <p>When compiling using <c>erlc</c>, the current working + directory will no be included in the code path (unless + explicitly added using "-pa .").</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7793</p> + </item> + <item> + <p>If a module contains an exported function with the + same name as an auto-imported BIF (such as + <c>length/1</c>), any calls to the BIF must have an + explicit <c>erlang:</c> prefix, or there will be a + compilation error (such calls would only generate a + warning in previous releases).</p> + <p>(The reason for the change is to avoid breaking code + in a future major release, R14 or R15, in which we plan + to make calls without a module prefix always call the + local function in the same module even if there is an + auto-imported BIF with the same name.)</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7873</p> + </item> + </list> + </section> + + <section> + <title>Erts</title> + <list type="bulleted"> + <item> + <p>Support for Unicode is implemented as described in + EEP10. Formatting and reading of unicode data both from + terminals and files is supported by the io and io_lib + modules. Files can be opened in modes with automatic + translation to and from different unicode formats. The + module 'unicode' contains functions for conversion + between external and internal unicode formats and the re + module has support for unicode data. There is also + language syntax for specifying string and character data + beyond the ISO-latin-1 range.</p> + <p>The interactive shell will support input and output of + unicode characters when the terminal and operating system + supports it.</p> + <p>Please see the EEP and the io/io_lib manual pages as + well as the stdlib users guide for details.</p> + <p><em>I/O-protocol incompatibilities:</em></p> + <p>The io_protocol between io_Server and client is + updated to handle protocol data in unicode formats. The + updated protocol is now documented. The specification + resides in the stdlib <em>users manual</em>, which is a + new part of the manual.</p> + <p><em>io module incompatibilities:</em></p> + <p>The io:put_chars, io:get_chars and io:get_line all + handle and return unicode data. In the case where + binaries can be provided (as to io:put_chars), they shall + be encoded in UTF-8. When binaries are returned (as by + io:get_line/get_chars when the io_server is set in + <em>binary mode</em>) the returned data is also + <em>always</em> encoded as UTF-8. The file module however + still returns byte-oriented data, why file:read can be + used instead of io:get_chars to read binary data in + ISO-latin-1.</p> + <p><em>io_lib module incompatibilities:</em></p> + <p>io_lib:format can, given new format directives (i.e + "~ts" and "~tc"), return lists containing integers larger + than 255. </p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7648 Aux Id: OTP-7580 OTP-7514 OTP-7494 + OTP-7443 OTP-7181 EEP10 EEP11 </p> + </item> + <item> + <p> + The undocumented, unsupported, and deprecated guard BIF + <c>is_constant/1</c> has been removed.</p> + <p> + *** INCOMPATIBILITY with R12B ***</p> + <p> + Own Id: OTP-7673</p> + </item> + <item> + <p>The short-circuit operators <c>andalso</c> and + <c>orelse</c> no longer guarantees that their second + argument is either <c>true</c> or <c>false</c>. As a + consequence, <c>andalso</c>/<c>orelse</c> are now + tail-recursive.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7748</p> + </item> + <item> + <p>The compiler will refuse to a compile file where the + module name in the file differs from the output file + name.</p> + <p>When compiling using <c>erlc</c>, the current working + directory will no be included in the code path (unless + explicitly added using "-pa .").</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7793</p> + </item> + <item> + <p>The deprecated functions <c>erlang:fault/1</c>, + <c>erlang:fault/2</c>, and <c>file:rawopen/2</c> have + been removed.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7812</p> + </item> + <item> + <p>The escape sequences <c>\x</c> and <c>\{</c> have been + assigned new interpretations (they used to return the + ASCII code for <c>x</c> and <c>{</c> respectively). One + or more octal characters inside curly brackets after a + leading backslash is from now on an alternative to the + existing syntax <c>\NNN</c>, but can also be used for + codes greater than 255. In a similar fashion, one or more + hexadecimal characters can be put inside curly brackets + after a leading <c>\x</c>. Furthermore, the escape + sequences <c>\xH</c> and <c>\xHH</c>, where N is a + hexadecimal character, can be used for codes less than + 256.</p> + <p>NOTE: These new escape sequences are still considered + experimental and may be changed in the R13B release.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7855</p> + </item> + </list> + </section> + + <section> + <title>Inets</title> + <list type="bulleted"> + <item> + <p> + [httpc] - The inets http client will now use persistent + connections without pipelining as default and if a + pipeline timeout is set it will pipeline the requests on + the persistent connections.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7463</p> + </item> + </list> + </section> + + <section> + <title>Jinterface</title> + <list> + <item> + <p> + A number of fixes and improvements from the ErlIDE group; + Vlad Dumitrescu and Jakob Cederlund: JDK 1.5 is now a + minimal requirement for building Jinterface. New method: + OtpEpmd.lookupNames. OtpErlangList is now iterable. + Non-proper lists are now allowed - you have to test if a + list is proper or not. Non-proper lists can also be + created. New methods: isProper, getHead, getTail and + getNthTail. The get tail methods creates a sublist object + that re-uses the original list. OtpErlangPid is now + Comparable. Empty atoms can now be constructed, a missing + feature pointed out by Sebastien Boisgerault on + erlang-questions.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7832</p> + </item> + </list> + </section> + + <section> + <title>Kernel</title> + <list type="bulleted"> + <item> + <p>The deprecated functions <c>erlang:fault/1</c>, + <c>erlang:fault/2</c>, and <c>file:rawopen/2</c> have + been removed.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7812</p> + </item> + </list> + </section> + + <section> + <title>SSH</title> + <list type="bulleted"> + <item> + <p> + Ssh timeouts will now behave as expected i.e. defaults to + infinity. Only the user of the ssh application can know of + a reasonable timeout value for their application.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7807</p> + </item> + <item> + <p> + Added the message {ssh_channel_up, ChannelId, + ConnectionManager} that shall be handled by the channel + callback handle_msg/2. This makes the function + handle_msg/2 a mandatory function for ssh channels + implementations which it was not in ssh-1.1.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7828</p> + </item> + </list> + </section> + + <section> + <title>STDLIB</title> + <list type="bulleted"> + <item> + <p>The functions <c>lists:seq/1,2</c> return the empty + list in a few cases when they used to generate an + exception, for example <c>lists:seq(1, 0)</c>. See + lists(3) for details. (Thanks to Richard O'Keefe.)</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7230</p> + </item> + <item> + <p>Support for Unicode is implemented as described in + EEP10. Formatting and reading of unicode data both from + terminals and files is supported by the io and io_lib + modules. Files can be opened in modes with automatic + translation to and from different unicode formats. The + module 'unicode' contains functions for conversion + between external and internal unicode formats and the re + module has support for unicode data. There is also + language syntax for specifying string and character data + beyond the ISO-latin-1 range.</p> + <p>The interactive shell will support input and output of + unicode characters when the terminal and operating system + supports it.</p> + <p>Please see the EEP and the io/io_lib manual pages as + well as the stdlib users guide for details.</p> + <p><em>I/O-protocol incompatibilities:</em></p> + <p>The io_protocol between io_Server and client is + updated to handle protocol data in unicode formats. The + updated protocol is now documented. The specification + resides in the stdlib <em>users manual</em>, which is a + new part of the manual.</p> + <p><em>io module incompatibilities:</em></p> + <p>The io:put_chars, io:get_chars and io:get_line all + handle and return unicode data. In the case where + binaries can be provided (as to io:put_chars), they shall + be encoded in UTF-8. When binaries are returned (as by + io:get_line/get_chars when the io_server is set in + <em>binary mode</em>) the returned data is also + <em>always</em> encoded as UTF-8. The file module however + still returns byte-oriented data, why file:read can be + used instead of io:get_chars to read binary data in + ISO-latin-1.</p> + <p><em>io_lib module incompatibilities:</em></p> + <p>io_lib:format can, given new format directives (i.e + "~ts" and "~tc"), return lists containing integers larger + than 255. </p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7648 Aux Id: OTP-7580 OTP-7514 OTP-7494 + OTP-7443 OTP-7181 EEP10 EEP11 </p> + </item> + <item> + <p> + <c>filelib:fold_files/5</c> now uses the <c>re</c> module + instead of the <c>regexp</c> module for regular + expression matching. In practice, this change will not be + a problem for most regular expressions used for + <c>filelib:fold_files/5</c>. (The major difference in + regular expression is that parenthesis and curly brackets + is treated as literal characters by <c>regexp</c> but as + special characters by <c>re</c>; fortunately, those + characters are rarely used in filenames.)</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7819</p> + </item> + <item> + <p> + <c>digraph:new(Type)</c> will now cause a <c>badarg</c> + exception if <c>Type</c> is not a valid type. Similarly, + <c>digraph_utils:subgraph/2,3</c> will now cause a + <c>badarg</c> if the arguments are invalid. (Those + functions used to return error tuples if something was + wrong.)</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7824</p> + </item> + <item> + <p>The argument passed to <c>random:uniform/1</c> must + now be an integer (as stated in the documentation). In + previous releases, a floating point number was also + allowed.</p> + <p> + *** POTENTIAL INCOMPATIBILITY ***</p> + <p> + Own Id: OTP-7827</p> + </item> + </list> + </section> +</chapter> + diff --git a/system/doc/top/print.html b/system/doc/top/print.html new file mode 100644 index 0000000000..b562d0e9bc --- /dev/null +++ b/system/doc/top/print.html @@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!-- This document was generated using DocBuilder-0.9.8.1 --> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>Erlang/OTP Documentation for Printing</title> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> + <style type="text/css"> +<!-- + body { font-family: Verdana, Arial, Helvetica, sans-serif } + span.bold_code { font-family: courier;font-weight: bold} + span.code { font-family: courier;font-weight: normal} +--> + </style> +</head> + +<body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" + alink="#ff0000"> + +<center> +<a href="http://www.ericsson.com/technology/opensource/erlang"> + <img alt="Ericsson AB" BORDER=0 SRC="pics/min_head.gif"> +</a> +<br> + +<font size="-1"> + [<a href="index.html">Up</a> | + <a href="http://www.ericsson.com/technology/opensource/erlang">Ericsson AB</a>] +</font> +<br/> + +<p> +<font size="+3">Documentation for Printing</font><br/> +</p> +</center> + +<p> + +You can get this documentation preformated for printing in PDF +format from the +<a href="http://www.erlang.org/doc.html"> + Erlang/OTP documentation page +</a>. Here you can find links to documentation for the latest release as well as for older releases. + +<!-- ------------------------- footer ------------------------- --> +<p> +<center> +<hr/> +<font size="-1"> + Copyright © 1991-2008 + <a href="http://www.ericsson.com/technology/opensource/erlang">Ericsson AB</a> +</font> +</center> +</body> +</html> diff --git a/system/doc/top/src/erl_html_tools.erl b/system/doc/top/src/erl_html_tools.erl new file mode 120000 index 0000000000..35a199b08d --- /dev/null +++ b/system/doc/top/src/erl_html_tools.erl @@ -0,0 +1 @@ +../../../../internal_tools/integration/scripts/make_index/erl_html_tools.erl
\ No newline at end of file diff --git a/system/doc/top/src/erlresolvelinks.erl b/system/doc/top/src/erlresolvelinks.erl new file mode 120000 index 0000000000..8d277ad17a --- /dev/null +++ b/system/doc/top/src/erlresolvelinks.erl @@ -0,0 +1 @@ +../../../../internal_tools/integration/scripts/resolve_links/erlresolvelinks.erl
\ No newline at end of file diff --git a/system/doc/top/src/permuted_index.erl b/system/doc/top/src/permuted_index.erl new file mode 120000 index 0000000000..e65338a517 --- /dev/null +++ b/system/doc/top/src/permuted_index.erl @@ -0,0 +1 @@ +../../../../internal_tools/integration/scripts/make_index/permuted_index.erl
\ No newline at end of file diff --git a/system/doc/top/templates/applications.html.src b/system/doc/top/templates/applications.html.src new file mode 100644 index 0000000000..0251d39b28 --- /dev/null +++ b/system/doc/top/templates/applications.html.src @@ -0,0 +1,34 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <title>Erlang/OTP #version#</title> + <style type="text/css"> +<!-- + BODY { background: white } + + BODY { font-family: Verdana, Arial, Helvetica, sans-serif } + TH { font-family: Verdana, Arial, Helvetica, sans-serif } + TD { font-family: Verdana, Arial, Helvetica, sans-serif } + P { font-family: Verdana, Arial, Helvetica, sans-serif } + + .header { background: #222; color: #fff } + .app { background: #ccc } + + a.anum:link { color: green; text-decoration: none } + a.anum:active { color: green; text-decoration: none } + a.anum:visited { color: green; text-decoration: none } + + a:link { text-decoration: none } + a:active { text-decoration: none } + a:visited { text-decoration: none } +--> + </style> +</head> + +<body bgcolor=white text="#000000" link="#0000ff" vlink="#ff00ff" + alink="#ff0000"> +<center> +#groups# +</center> +</body> +</html> diff --git a/system/doc/top/templates/erlang.gif b/system/doc/top/templates/erlang.gif Binary files differnew file mode 100644 index 0000000000..91fd4b9647 --- /dev/null +++ b/system/doc/top/templates/erlang.gif diff --git a/system/doc/top/templates/first.html.src b/system/doc/top/templates/first.html.src new file mode 100644 index 0000000000..edef1c0e5c --- /dev/null +++ b/system/doc/top/templates/first.html.src @@ -0,0 +1,104 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <title>Erlang/OTP #release# Documentation</title> + <style type="text/css"> +<!-- + BODY { background: white } + + BODY { font-family: Verdana, Arial, Helvetica, sans-serif } + TH { font-family: Verdana, Arial, Helvetica, sans-serif } + TD { font-family: Verdana, Arial, Helvetica, sans-serif } + P { font-family: Verdana, Arial, Helvetica, sans-serif } + + .header { background: #222; color: #fff } + .app { background: #ccc } +--> + </style> +</head> +<body bgcolor=white text="#000000" link="#0000ff" vlink="#ff00ff" + alink="#ff0000"> +<center> +<p> +<font size="+1">Welcome to Erlang/OTP, a complete<br> +development environment<br> +for concurrent programming.</font> +</p> +</center> +<br> +<br> +<br> +<p><b> +<font size"+1"> +Some hints that may get you started faster +</font> +</b></p> + +<ul> + +<li>In addition the the documentation here Erlang is described in the book +<a href="http://www.pragprog.com/titles/jaerlang" target="_top">"Programming Erlang"</a>, ISBN 978-1-934356-00-5 which we really recommend as a start.<br/ > +The complete language is also described in the <a href="reference_manual/part_frame.html" target="_top">Erlang Reference Manual</a>. An Erlang tutorial can be found in <a href="getting_started/part_frame.html" target="_top">Getting Started With Erlang</a>. +</li> +<li>Erlang/OTP is divided into a number of OTP <a +href="applications.html">applications</a>. An application normally contains +Erlang <a href="man_index.html">modules</a>. Some OTP applications, +such as the C interface <em>Erl_Interface</em>, are written in other languages and have no Erlang +modules. + +<p> +Note that functions that are not imported or prefixed with a module +name belong to the module +<a href="#kernel#/erlang.html" target="_top">erlang</a> +(in the <em>Kernel</em> application). +</p> +<p> +<li>On a Unix system you can view the manual pages from the command +line using +<pre> + % erl -man <module> +</pre> +<p> + +<li> You can of course use any editor you like to write Erlang +programs, but if you use Emacs there exists editing support such as +indentation, syntax highlighting, electric commands, module name +verification, comment support including paragraph filling, skeletons, +tags support and more. See the <a href="#tools#/index.html" +target="_top">Tools</a> application for details. +<p> +There is also an +<a href="http://erlide.sourceforge.net" target="_top"> +Erlang plugin (ErlIde) for Eclipse</a> if you prefer a more graphical +environment. ErlIde is under development and should at the time +of writing this be quite stable and useful. +<li>When developing with Erlang/OTP you usually test your programs +from the interactive shell (see <a href="getting_started/part_frame.html" +target="_top">Getting Started With Erlang</a>) where you can call individual +functions. There is also a number of tools available, such as the graphical <a +href="#debugger#/index.html" target="_top">Debugger</a>, the process +manager <a href="#pman#/index.html" target="_top">Pman</a> and table +viewer <a href="#tv#/index.html" target="_top">TV</a>. +<p> Also note that there are some shell features like history list +(control-p and control-n), inline editing (emacs key bindings) and +module and function name completion (tab) if the module is loaded. +<p> + +<li>OpenSource users can ask questions +and share experiences on the <a href="http://www.erlang.org/faq.html" +target="_top">Erlang questions mailing list</a>. <p> + +<li>Before asking a question you can browse the <a +href="http://www.erlang.org/pipermail/erlang-questions/" +target="_top">mailing list archive</a> and read the <a +href="http://www.erlang.org/faq/faq.html" target="_top">Frequently +Asked Questions</a>. <p> + +<li>Additional information and links of interest for Erlang programmers can be found on the Erlang Open Source site +<a href="http://www.erlang.org/" target="_top">http://www.erlang.org</a>. +<p> + +</ul> + +</body> +</html> diff --git a/system/doc/top/templates/flip_closed.gif b/system/doc/top/templates/flip_closed.gif Binary files differnew file mode 100755 index 0000000000..9a27c7c25d --- /dev/null +++ b/system/doc/top/templates/flip_closed.gif diff --git a/system/doc/top/templates/flip_google.gif b/system/doc/top/templates/flip_google.gif Binary files differnew file mode 100755 index 0000000000..3f0543c2bb --- /dev/null +++ b/system/doc/top/templates/flip_google.gif diff --git a/system/doc/top/templates/flip_open.gif b/system/doc/top/templates/flip_open.gif Binary files differnew file mode 100755 index 0000000000..9dda60e73a --- /dev/null +++ b/system/doc/top/templates/flip_open.gif diff --git a/system/doc/top/templates/flip_static.gif b/system/doc/top/templates/flip_static.gif Binary files differnew file mode 100755 index 0000000000..2b3ddb5382 --- /dev/null +++ b/system/doc/top/templates/flip_static.gif diff --git a/system/doc/top/templates/flipmenu.js b/system/doc/top/templates/flipmenu.js new file mode 100755 index 0000000000..92a5a58a06 --- /dev/null +++ b/system/doc/top/templates/flipmenu.js @@ -0,0 +1,342 @@ +// ######################################################################
+
+// ## flipMenu 5.0.0 (c) J. Reijers
+// ## Last modifications: 23 March 2007
+
+// ######################################################################
+
+// ## Degree of indentation from the left.
+ flipIndentation = "5px";
+
+// ## Padding inbetween menu items.
+ flipVerticalPadding = "4px";
+
+// ## Margin between the left of the browser and the menu.
+ flipLeftMargin = "16px";
+
+// ## Margin between the top of the browser and the menu.
+ flipTopMargin = "10px";
+
+// ## Allow multiple menus to fold out without closing all the other open ones.
+ flipOpenMultipleMenus = false;
+
+// ## Preserve the current state of the menu (requires cookies).
+ flipSaveMenuState = true;
+
+// ## Use custom images for bullets
+ flipImages = true;
+
+// ## Images to use (specify full path)
+ flipImg_open = "flip_open.gif";
+ flipImg_closed = "flip_closed.gif";
+ flipImg_static = "flip_static.gif";
+
+// ## Initialise all flipMenus onload
+ flipInitOnLoad = true;
+
+// ## Message to display in status bar while loading
+ flipLoadingMessage = "Loading...";
+
+// ######################################################################
+
+function alterSize(someSize, alterAmount) {
+ someSize = String(someSize);
+ var tmpNr = parseFloat(someSize.replace(/\D/g, ""));
+ var tmpChar = someSize.replace(/\d/g, "");
+ return isNaN(tmpNr) ? someSize : ((tmpNr + alterAmount) + tmpChar);
+}
+
+isIE = (String(navigator.appVersion).indexOf("MSIE") > -1);
+if (!isIE) flipIndentation = alterSize(flipIndentation, -16);
+if (!isIE) flipLeftMargin = alterSize(flipLeftMargin, -16);
+
+document.write(
+ "<style type=\"text/css\">" +
+
+ "ul.flipMenu { margin-top: " + flipTopMargin + "; margin-left: " + flipLeftMargin + "; " + (flipImages ? "" : "list-style-type: none;") + " }" +
+ "ul.flipMenu ul, ul.flipMenu li { padding-top: " + flipVerticalPadding + "; margin-left: " + flipIndentation + "; margin-right: 0px; " + (flipImages ? "" : "list-style-type: none;") + " }" +
+
+ "li.flipFolderOpen { cursor: pointer; " + (flipImages ? "list-style-image: url(" + flipImg_open + ");" : "") + " }" +
+ "li.flipFolderClosed { cursor: pointer; " + (flipImages ? "list-style-image: url(" + flipImg_closed + ");" : "") + " }" +
+
+ "</style>"
+);
+
+if (flipImages) {
+ aFlipPreloads = [];
+ aFlipPreloads[0] = new Image;
+ aFlipPreloads[0].src = flipImg_open;
+ aFlipPreloads[1] = new Image;
+ aFlipPreloads[1].src = flipImg_closed;
+ aFlipPreloads[2] = new Image;
+ aFlipPreloads[2].src = flipImg_static;
+}
+
+function addEvent(someObj, someEvent, someFunction) {
+ if (someObj.addEventListener) { someObj.addEventListener(someEvent, someFunction, true); return true; } else if (someObj.attachEvent) return someObj.attachEvent("on" + someEvent, someFunction); else return false;
+}
+
+function openCloseFlip(theItem, newSetting, openParents) {
+ if (theItem.flipID) {
+ if (openParents) {
+ var tmpItem = theItem;
+ while (tmpItem.parentElement || tmpItem.parentNode) {
+ tmpItem = (tmpItem.parentElement) ? tmpItem.parentElement : tmpItem.parentNode;
+ openCloseFlip(tmpItem, newSetting);
+ }
+ }
+ if ((theItem.className == "flipFolderOpen" && newSetting == "closed") || (theItem.className == "flipFolderClosed" && newSetting == "open")) {
+ if (!theItem.childrenInitialised) {
+ for (var j = 0; j < theItem.childNodes.length; j++) if (theItem.childNodes[j].nodeName == "UL" && !theItem.childNodes[j].initialised) initFlip(theItem.childNodes[j]);
+ theItem.childrenInitialised = true;
+ }
+ theItem.getElementsByTagName("UL")[0].style.display = (newSetting == "open") ? "" : "none";
+ theItem.className = newSetting == "open" ? "flipFolderOpen" : "flipFolderClosed";
+ }
+ }
+}
+
+function openFlip(theItem, openParents) {
+ openCloseFlip(theItem, "open", openParents);
+}
+
+function closeFlip(theItem, closeParents) {
+ openCloseFlip(theItem, "closed", closeParents);
+}
+
+function toggleFlip(theElement) {
+ if (theElement.flipID) {
+ var theItem = theElement;
+ var isContained = true;
+ } else {
+ if (theElement && theElement.button > 0) return false;
+ var theItem = (isIE) ? event.srcElement : theElement.target;
+
+ var isContained = false;
+ if (theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed") isContained = true; else while (theItem.parentElement || theItem.parentNode) {
+ if (theItem.className == "flipStatic" || theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed") {
+ isContained = (theItem.className == "flipFolderOpen" || theItem.className == "flipFolderClosed");
+ break;
+ }
+ theItem = (theItem.parentElement) ? theItem.parentElement : theItem.parentNode;
+ }
+ }
+
+ var toOpenFlip = (isContained && theItem.className == "flipFolderClosed");
+
+ if (!flipOpenMultipleMenus && (toOpenFlip || theItem.className == "flipStatic")) {
+ if (theItem.parentElement || theItem.parentNode) {
+ var parentUL = (theItem.parentElement) ? theItem.parentElement : theItem.parentNode;
+ for (var i = 0; i < parentUL.childNodes.length; i++) closeFlip(parentUL.childNodes[i]);
+ }
+ }
+
+ if (isContained) {
+ if (toOpenFlip) openFlip(theItem); else closeFlip(theItem);
+ }
+}
+
+function setAllFlips(startElement, newSetting) {
+ if (typeof startElement == "undefined") var startElement = document;
+ if (typeof newSetting == "undefined") var newSetting = "closed";
+
+ var aUL = startElement.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) {
+ var parentFlip = aUL[i].parentElement ? aUL[i].parentElement : aUL[i].parentNode;
+ openCloseFlip(parentFlip, newSetting);
+ }
+}
+
+function openAllFlips(startElement) {
+ setAllFlips(startElement, "open");
+}
+
+function closeAllFlips(startElement) {
+ setAllFlips(startElement, "closed");
+}
+
+function initFlip(startElement) {
+ if (!document.createElement) return false;
+
+ if (!startElement || !startElement.nodeName) {
+ var aUL = document.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) {
+ if (flipLoadingMessage != "") window.status = flipLoadingMessage + " " + parseInt((i / (aUL.length - 1)) * 100, 10) + "%";
+ var curUL = aUL[i];
+ if (curUL.className == "flipMenu") {
+ initFlip(curUL);
+
+ // ## Fix text selecting problem in Mozilla
+ curUL.onselectstart = new Function("return false");
+ curUL.onmousedown = new Function("return false");
+ curUL.onclick = new Function("return true");
+ }
+ }
+
+ if (flipSaveMenuState) loadMenuState();
+
+ if (flipLoadingMessage != "") window.status = "";
+ return true;
+ }
+
+ if (startElement.className == "flipMenu") startElement.style.display = "";
+
+ if (!startElement.childNodes || startElement.childNodes.length == 0) return false;
+
+ if (typeof flipIDCur == "undefined") flipIDCur = 0;
+ if (!startElement.initialised) {
+ var aUL = startElement.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) aUL[i].style.display = "none";
+ }
+
+ for (var i = 0; i < startElement.childNodes.length; i++) {
+ var curNode = startElement.childNodes[i];
+ if (curNode.nodeName == "LI") {
+ flipIDCur++;
+ curNode.flipID = flipIDCur;
+
+ var nodeHasChildren = curNode.getElementsByTagName("UL").length > 0;
+ if (nodeHasChildren) {
+ if (flipImages && curNode.flipClosed) curNode.style.listStyleImage = "url(" + curNode.flipClosed + ")";
+
+ if (curNode.className == null || curNode.className == "") curNode.className = "flipFolderClosed";
+ } else {
+ curNode.className = "flipStatic";
+ if (flipImages && !curNode.style.listStyleImage) {
+ if (!curNode.flipStatic) curNode.flipStatic = flipImg_static;
+ curNode.style.listStyleImage = "url(" + curNode.flipStatic + ")";
+ }
+ }
+
+ if (!curNode.flipOpen) curNode.flipOpen = flipImg_open;
+ if (!curNode.flipClosed) curNode.flipClosed = flipImg_closed;
+
+ if (curNode.flipIsOpen) openFlip(curNode);
+ }
+ }
+
+ startElement.initialised = true;
+}
+
+function rootOfFlip(flipID, startElement) {
+
+ function containsFlip(startElement, flipID) {
+ var flipFound = false;
+ var i = 0;
+ while (i < startElement.childNodes.length && !flipFound) {
+ var curNode = startElement.childNodes[i];
+ flipFound = (curNode.flipID == flipID) ? true : containsFlip(curNode, flipID);
+ i++;
+ }
+ return flipFound;
+ }
+
+ var rootFlip = null;
+
+ if (!startElement || !startElement.nodeName) {
+ var aUL = document.getElementsByTagName("UL");
+ var i = 0;
+ while (rootFlip == null && i < aUL.length) {
+ var curUL = aUL[i];
+ if (curUL.nodeName == "UL" && curUL.className == "flipMenu") rootFlip = rootOfFlip(flipID, curUL);
+ i++;
+ }
+ return rootFlip;
+ }
+
+ if (startElement.childNodes) for (var i = 0; i < startElement.childNodes.length; i++) {
+ var curNode = startElement.childNodes[i];
+ if (curNode.flipID == flipID || containsFlip(curNode, flipID)) rootFlip = curNode;
+ }
+
+ return rootFlip;
+}
+
+function getCookie(cookieName) {
+ var allCookies = document.cookie;
+ var indexStr = allCookies.indexOf(cookieName + "=");
+ if (indexStr == -1) return "";
+ indexStr = allCookies.indexOf("=", indexStr) + 1;
+ var endStr = allCookies.indexOf(";", indexStr);
+ if (endStr == -1) endStr = allCookies.length;
+ return unescape(allCookies.substring(indexStr, endStr));
+}
+
+function inArray(someID, someArray) {
+ for (var i = 0; i < someArray.length; i++) if (someArray[i] == someID) return true;
+ return false;
+}
+
+function getMenuState(startElement) {
+ if (!startElement.childNodes || startElement.childNodes.length == 0) return "";
+
+ var openItems = "";
+ var aUL = startElement.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) {
+ var curNode = aUL[i];
+ var parentFlip = (curNode.parentElement) ? curNode.parentElement : curNode.parentNode;
+ if (curNode.style.display == "" && parentFlip.flipID) openItems += " " + parentFlip.flipID;
+ }
+ return openItems;
+}
+
+function putMenuState(startElement) {
+ if (!startElement.childNodes || startElement.childNodes.length == 0) return false;
+
+ var aUL = startElement.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) {
+ var curNode = aUL[i];
+ var parentFlip = (curNode.parentElement) ? curNode.parentElement : curNode.parentNode;
+ if (inArray(parentFlip.flipID, aOpenItems)) {
+ openFlip(parentFlip);
+ if (typeof prevFlipRoot == "undefined") {
+ var testRoot = rootOfFlip(parentFlip.flipID);
+ if (testRoot.flipID == parentFlip.flipID) prevFlipRoot = testRoot;
+ }
+ }
+ }
+}
+
+function saveMenuState() {
+ if (flipSaveMenuState) {
+ var aUL = document.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) {
+ var curUL = aUL[i];
+ var curID = curUL.id ? curUL.id : i;
+ if (curUL.className == "flipMenu") document.cookie = cookiePrefix + curID + "=" + getMenuState(curUL) + ";";
+ }
+ }
+}
+
+function loadMenuState() {
+ var aUL = document.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) {
+ var curUL = aUL[i];
+ var curID = curUL.id ? curUL.id : i;
+ if (curUL.className == "flipMenu") {
+ var savedState = String(getCookie(cookiePrefix + curID));
+ if (savedState != "") {
+ aOpenItems = savedState.split(" ");
+ putMenuState(curUL);
+ }
+ }
+ }
+
+ addEvent(window, "unload", saveMenuState);
+}
+
+function clearMenuState(flipMenuID) {
+ if (typeof flipMenuID == "undefined") {
+ var aUL = document.getElementsByTagName("UL");
+ for (var i = 0; i < aUL.length; i++) {
+ var curUL = aUL[i];
+ var curID = curUL.id ? curUL.id : i;
+ if (curUL.className == "flipMenu") document.cookie = cookiePrefix + curID + "=;";
+ }
+ } else document.cookie = cookiePrefix + flipMenuID + "=;";
+}
+
+cookiePrefix = document.location.pathname + "_";
+
+addEvent(document, "click", toggleFlip);
+if (flipInitOnLoad) addEvent(window, "load", initFlip);
diff --git a/system/doc/top/templates/index.html.src b/system/doc/top/templates/index.html.src new file mode 100644 index 0000000000..935bb11c80 --- /dev/null +++ b/system/doc/top/templates/index.html.src @@ -0,0 +1,180 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<!-- +%CopyrightBegin% + +Copyright Ericsson AB 2001-2009. All Rights Reserved. + +The contents of this file are subject to the Erlang Public License, +Version 1.1, (the "License"); you may not use this file except in +compliance with the License. You should have received a copy of the +Erlang Public License along with this software. If not, it can be +retrieved online at http://www.erlang.org/. + +Software distributed under the License is distributed on an "AS IS" +basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +the License for the specific language governing rights and limitations +under the License. + +%CopyrightEnd% +--> + +<html> +<head> + <link rel="stylesheet" href="otp_doc.css" type="text/css"/> + <title>Erlang/OTP #release#</title> + +<script id="js" type="text/javascript" language="JavaScript" src="js/flipmenu/flipmenu.js"> + +</script> +</head> + +<body bgcolor=white text="#000000" link="#0000ff" vlink="#ff00ff" + alink="#ff0000"> + +<div id="container"> +<div id="leftnav"> +<div class="innertube"> +<img alt="Erlang logo" src="erlang-logo.png"/ > +<!-- small><a href="glossary.html">Glossary</a> |--> +<small><a href="applications.html">Applications</a><br> +<a href="man_index.html">Modules</a></small> +<p/> +<small><a href="highlights.html">Release highlights</a><br> +<a href="incompatible.html">Potential incompatibilities</a><br> +</small> +<br> +<a href="javascript:openAllFlips()">Expand All</a><br> +<a href="javascript:closeAllFlips()">Contract All</a> +<p/> + +<ul class="flipMenu"> +<li>Erlang/OTP System Documentation +<ul> +<li><a href="installation_guide/users_guide.html">Installation Guide</a></li> +<li><a href="system_principles/users_guide.html">System Principles</a></li> +<li><a href="embedded/users_guide.html">Embedded System</a></li> +<li><a href="getting_started/users_guide.html">Getting Started</a></li> +<li><a href="reference_manual/users_guide.html">Erlang Reference Manual</a></li> +<li><a href="programming_examples/users_guide.html">Programming Examples</a></li> +<li><a href="efficiency_guide/users_guide.html">Efficiency Guide</a></li> +<li><a href="tutorial/users_guide.html">Interoperability Tutorial</a></li> +<li><a href="design_principles/users_guide.html">Design Principles</a></li> +<li><a href="oam/users_guide.html">OAM Principles</a></li> +</ul> +</li> + +#applinks# +</ul> + +</div> +</div> + + +<div id="content"> +<div class="innertube"> +<center> +<font size="+1"><b>Erlang/OTP #release#</b></font><br> +</center> +<center> +<p> +<font size="+1">Welcome to Erlang/OTP, a complete<br> +development environment<br> +for concurrent programming.</font> +</p> +</center> +<br> +<br> +<br> +<p><b> +<font size="+1"> +Some hints that may get you started faster +</font> +</b></p> + +<ul> + +<li> +The complete Erlang language is described in the +<a href="reference_manual/users_guide.html">Erlang Reference Manual</a>. +An Erlang tutorial can be found in +<a href="getting_started/users_guide.html"> +Getting Started With Erlang</a>. +<p> +In addition to the documentation here Erlang is described in several recent books like: +</p> +<ul> +<li> +<a href="http://oreilly.com/catalog/9780596518189">"Erlang Programming"</a> from O'Reilly. +</li> +<li> +<a href="http://www.pragprog.com/titles/jaerlang">"Programming Erlang"</a> from Pragmatic. +</li> +</ul> +<p> +These books are highly recommended as a start for learning Erlang. +</p> +</li> +<li>Erlang/OTP is divided into a number of OTP <a +href="applications.html">applications</a>. An application normally contains +Erlang <a href="man_index.html">modules</a>. Some OTP applications, +such as the C interface <em>erl_interface</em>, are written in other languages and have no Erlang +modules. + +<p> +<li>On a Unix system you can view the manual pages from the command +line using +<pre> + % erl -man <module> +</pre> +<p> + +<li> You can of course use any editor you like to write Erlang +programs, but if you use Emacs there exists editing support such as +indentation, syntax highlighting, electric commands, module name +verification, comment support including paragraph filling, skeletons, +tags support and more. See the <a href="#tools#/index.html"> +Tools</a> application for details. +<p> +There is also an +<a href="http://erlide.sourceforge.net"> +Erlang plugin (ErlIDE) for Eclipse</a> if you prefer a more graphical +environment. ErlIDE is under active development with new features in almost every release. +<li>When developing with Erlang/OTP you usually test your programs +from the interactive shell (see <a href="getting_started/users_guide.html"> +Getting Started With Erlang</a>) where you can call individual +functions. There is also a number of tools available, such as the graphical <a +href="#debugger#/index.html" >Debugger</a>, the process +manager <a href="#pman#/index.html" >Pman</a> and table +viewer <a href="#tv#/index.html">TV</a>. +<p> Also note that there are some shell features like history list +(control-p and control-n), in line editing (Emacs key bindings) and +module and function name completion (tab) if the module is loaded. +<p> + +<li>OpenSource users can ask questions +and share experiences on the <a href="http://www.erlang.org/faq.html"> +Erlang questions mailing list</a>. <p> + +<li>Before asking a question you can browse the <a +href="http://www.erlang.org/pipermail/erlang-questions/"> +mailing list archive</a> and read the <a +href="http://www.erlang.org/faq/faq.html" >Frequently +Asked Questions</a>. <p> + +<li>Additional information and links of interest for Erlang programmers can be found on the Erlang Open Source site +<a href="http://www.erlang.org/">http://www.erlang.org</a>. +<p> + +</ul> + +<center> +<small> +Copyright © 1999-2009 +<a href="http://www.ericsson.com">Ericsson AB</a> +</small> +</center> +</div> +</div> +</div> +</body> +</html> diff --git a/system/doc/top/templates/otp_top.css b/system/doc/top/templates/otp_top.css new file mode 100644 index 0000000000..1c6d27bd8d --- /dev/null +++ b/system/doc/top/templates/otp_top.css @@ -0,0 +1,53 @@ + BODY { background: white } + + BODY { font-family: Verdana, Arial, Helvetica, sans-serif } + TH { font-family: Verdana, Arial, Helvetica, sans-serif } + TD { font-family: Verdana, Arial, Helvetica, sans-serif } + P { font-family: Verdana, Arial, Helvetica, sans-serif } + + .header { background: #222; color: #fff } + .top { background: #efe } + .otp { background: #efe } + .erlang { background: #ffe } + .otp2 { background: #efe } + .app { background: #ffe } + + a:link { color: blue; text-decoration: none } + a:active { color: blue; text-decoration: none } + a:visited { color: blue; text-decoration: none } + body { + margin: 0; + padding: 0; + border: 0; + overflow: scroll; + height: 100%; + max-height: 100% + } + #container { + width: 100%; + margin: 10px auto; + background-color: #fff; + } + #leftnav { + float: left; + width: 200px; + margin: 0; + padding: 1em; + } + #content { + margin-left: 220px; /* set left value to WidthOfFrameDiv */ + border-left: 1px solid red; + } + + .innertube { + margin: 15px; /* Magins for inner DIV inside each DIV (to provide padding) */ + } + + * html body{ /* IE6 hack */ + padding: 0 0 0 200px; /* Set value to (0 0 0 WidthOfFrameDiv)*/ + } + * html #maincontent{ /* IE6 hack*/ + height: 100%; + width: 100%; + } + diff --git a/system/doc/top/templates/system.html.src b/system/doc/top/templates/system.html.src new file mode 100644 index 0000000000..761bc96ed0 --- /dev/null +++ b/system/doc/top/templates/system.html.src @@ -0,0 +1,281 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <title>Erlang/OTP #release#</title> + <style type="text/css"> +<!-- + BODY { background: white } + + BODY { font-family: Verdana, Arial, Helvetica, sans-serif } + TH { font-family: Verdana, Arial, Helvetica, sans-serif } + TD { font-family: Verdana, Arial, Helvetica, sans-serif } + P { font-family: Verdana, Arial, Helvetica, sans-serif } + + .header { background: #222; color: #fff } + .app { background: #ccc } + + a.anum:link { color: green; text-decoration: none } + a.anum:active { color: green; text-decoration: none } + a.anum:visited { color: green; text-decoration: none } + + a:link { text-decoration: none } + a:active { text-decoration: none } + a:visited { text-decoration: none } +--> + </style> +</head> + +<body bgcolor=white text="#000000" link="#0000ff" vlink="#ff00ff" + alink="#ff0000"> +<center> +<table border=0 width="90%" cellspacing=3 cellpadding=5> + + <tr> + <td colspan=2 class=header> + <font size="+1"><b>General</b></font> + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="system_architecture_intro/part_frame.html" target="_top" + name=system_architecture_intro> + Introduction + </a> + </td> + <td align=right valign=top width=50> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +About Erlang, OTP, Erlang/OTP and this documentation + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="installation_guide/part_frame.html" target="_top" + name=installation_guide> + Installation Guide + </a> + </td> + <td align=right valign=top width=50> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +The Erlang/OTP Installation Guide + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="system_principles/part_frame.html" target="_top" + name=system_principles> + System Principles + </a> + </td> + <td align=right valign=top width=20> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +Starting, stopping and configuring the Erlang runtime system + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="embedded/part_frame.html" target="_top" name=embedded> + Embedded System + </a> + </td> + <td align=right valign=top width=50> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +Erlang in an Embedded System + </td> + </tr> + + <tr> + <td colspan=2><font size=1> </font></td> + </tr> + +<!-- ====================================================================== --> + + <tr> + <td colspan=2 class=header> + <font size="+1"><b>Programming in Erlang</b></font> + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="reference_manual/part_frame.html" target="_top" name=reference_manual> + Erlang Reference Manual + </a> + </td> + <td align=right valign=top width=50> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +Description of data types, language constructs and more + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="getting_started/part_frame.html" target="_top" name=getting_started> + Getting Started + </a> + </td> + <td align=right valign=top width=50> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +Getting started with Erlang + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="programming_examples/part_frame.html" target="_top" name=programming_examples> + Programming Examples + </a> + </td> + <td align=right valign=top width=50> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +Examples of using records, funs, list comprehensions and the bit syntax + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="efficiency_guide/part_frame.html" target="_top" name=efficiency_guide>Efficiency Guide</a> + </td> + <td align=right valign=top width=20> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +Learn how to write efficient programs in Erlang + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="tutorial/part_frame.html" target="_top" name=tutorial>Interoperability Tutorial</a> + </td> + <td align=right valign=top width=20> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +About interoperating with programs written in other programming languages + </td> + </tr> + + <tr> + <td colspan=2><font size=1> </font></td> + </tr> + +<!-- ====================================================================== --> + + <tr> + <td colspan=2 class=header> + <font size="+1"><b>Working with OTP</b></font> + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="design_principles/part_frame.html" target="_top" + name=design_principles> + Design Principles + </a> + </td> + <td align=right valign=top width=20> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +Structure your programs with applications, supervisors and generic behaviors (gen_server, gen_event and gen_fsm). +Also use the built in error logger. + </td> + </tr> + + <tr class=app> + <td align=left valign=top> + <table border=0 width="100%" cellspacing=0 cellpadding=0> + <tr class=app> + <td align=left valign=top> + <a href="oam/part_frame.html" target="_top" name=oam>OAM Principles</a> + </td> + <td align=right valign=top width=20> + </td> + </tr> + </table> + </td> + <td align=left valign=top> +OTP Operation and Management Principles + </td> + </tr> + + <tr> + <td colspan=2><font size=1> </font></td> + </tr> + +</table> + +</center> +</body> +</html> + + diff --git a/system/doc/top/templates/toc_.html.src b/system/doc/top/templates/toc_.html.src new file mode 100644 index 0000000000..5e79bc0ac8 --- /dev/null +++ b/system/doc/top/templates/toc_.html.src @@ -0,0 +1,105 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> + <title>Erlang/OTP #release#</title> + <style type="text/css"> +<!-- + BODY { background: white } + + BODY { font-family: Verdana, Arial, Helvetica, sans-serif } + TH { font-family: Verdana, Arial, Helvetica, sans-serif } + TD { font-family: Verdana, Arial, Helvetica, sans-serif } + P { font-family: Verdana, Arial, Helvetica, sans-serif } + + .header { background: #222; color: #fff } + .top { background: #efe } + .otp { background: #efe } + .erlang { background: #ffe } + .otp2 { background: #efe } + .app { background: #ffe } + + a:link { color: blue; text-decoration: none } + a:active { color: blue; text-decoration: none } + a:visited { color: blue; text-decoration: none } +--> + </style> +</head> + +<body bgcolor=white text="#000000" link="#0000ff" vlink="#ff00ff" + alink="#ff0000"> +<center> +<font size="+1"><b>Erlang/OTP #release#</b></font><br> +</center> + +<div class=top> +<small><a href="glossary.html" target=body>Glossary</a> | +<a href="man_index.html" target=body>Modules</a> | +<a href="permuted_index/pidxa.html" target=body>Index</a></small> +<p> +<small><a href="highlights.html" target=body>Release highlights</a><br> +<a href="incompatible.html" target=body>Potential incompatibilities</a> +</small> +</div> + +<p> +<div class=otp> +Erlang/OTP +<br> +·<small><a href="installation_guide/part_frame.html" target="_top" + name=installation_guide>Installation Guide</a></small> + +<br> +·<small><a href="system_principles/part_frame.html" target="_top" + name=system_principles>System Principles</a></small> + +<br> +·<small><a href="embedded/part_frame.html" target="_top" name=embedded>Embedded System</a></small> + +</div> + +<p> +<div class=erlang> +Erlang Programming +<br> +·<small><a href="getting_started/part_frame.html" target="_top" name=getting_started>Getting +Started</a></small> + +<br> +·<small><a href="reference_manual/part_frame.html" target="_top" name=reference_manual>Erlang +Reference Manual</a></small> + +<br> +·<small><a href="programming_examples/part_frame.html" target="_top" name=programming_examples>Programming +Examples</a></small> + +<br> +·<small><a href="efficiency_guide/part_frame.html" target="_top" name=efficiency_guide>Efficiency Guide</a></small> + +<br> +·<small><a href="tutorial/part_frame.html" target="_top" name=tutorial>Interoperability Tutorial</a></small> +</div> + +<p> +<div class=otp2> +Working with OTP +<br> +·<small><a href="design_principles/part_frame.html" target="_top" + name=design_principles>Design Principles</a> +</small> + +<br> +·<small><a href="oam/part_frame.html" target="_top" name=oam>OAM Principles</a></small> + +</div> + +<p> +<div class=app> +Applications +<small>#applinks#</small> +</div> + +<p> +<a href="http://www.erlang.se/" target=body>http://www.erlang.se</a> + +</body> +</html> |