It is accomplished ...

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
ejakowatz
2002-07-09 12:24:59 +00:00
commit 52a3801208
2025 changed files with 472889 additions and 0 deletions
+181
View File
@@ -0,0 +1,181 @@
<html>
<header>
<title>Maintaining Binary Compatibility</title>
</header>
<body>
<h1>Binary Compatibility in 3 Easy Steps!<hr></h1>
<h2>An Introduction</h2>
In the early days of the OpenBeOS project, a debate raged concerning one of the projects
primary goals: maintaining binary compatibility with BeOS R5. The idea was that the
only way an effort to rewrite BeOS would be successful was if folks could continue
running the apps they already had. Certainly, a lot of software available for BeOS is
open source or actively maintained -- these apps could just be recompiled if necessary.
Others -- PostMaster, gobe's Productive suite and a few other crucial apps -- weren't
likely to get rebuilt, either because the original author had stopped maintainance
without being kind enough to release the source, or because it just wouldn't be
commercially feasible.<p>
Some said that we were crazy; that it couldn't be done. Thankfully, cooler heads
prevailed and we're well on our way to a binary compatible clone of R5.<p>
"But wait!" you cry. "How did the cooler heads which prevailed know that the holy grail
of binary compatibility was achievable?" I'm so glad you asked! Keeping reading and be
enlightened, Grasshopper.<p>
<h2>The Issues</h2>
There are three basic issues that have to be addressed to ensure binary compatibility:
<ul>
<li>
<b>Names must be identical</b><br>
This includes class and structure names as well as public, protected and global
function and variable names.
</li>
<li>
<b>Object sizes must be identical</b><br>
Classes must contain the same number of bytes of data; global variables must
be the same size. Maybe BGlobalVar should've been an <code>int32</code>
instead of an <code>int16</code>, but we're stuck with it now.
</li>
<li>
<b>Virtual function table layout must be identical</b><br>
The most cryptic and confusing aspect of maintaining binary compatibility.
The issue essentially boils down to this: for any given class, there must
be the same number of virtual functions, declared in the same order as the
original.
</li>
</ul>
<h2>The Nitty Gritty</h2>
"Good grief!" you say. "How on earth do I keep all this stuff straight?" Ah,
Grasshopper, it is easier that you might imagine. Just follow these steps, and you
should be binary compatible in no time!
<ol>
<li>
<b>Make a copy of the appropriate Be header file</b><br>
This is now your header file. You may need to change a thing or two, but what
you can (or will need to) change is quite limited, and discussed below.
</li>
<li>
<b>Implement public, protected and virtual functions</b><br>
In the course of doing this, you may discover that there are some private
non-virtual function declarations that you just don't use. Feel free to axe
them! Since they're private, nobody using the class will miss them, and
because they're not virtual, they don't effect the vtable layout. Conversely,
if you find a need to add some private, non-virtual functions, go right ahead
(for the very same reasons).
</li>
<li>
<b>Make sure you don't change the number of bytes used for data</b><br>
There are two situations that can make this seem difficult. First, there
may be data members that you don't use in your reimplementation. You can
just leave them (safe, but a little messy) or you can add the extra members'
bytes to the class's "unused" data array. An example will make this clear.<br>
Let's say we have a class BFoo:<br>
<code>
<pre>
class BFoo {
public:
BFoo();
void SomeFunc();
private:
int32 fBar;
char fZig;
int32 fQux;
int32 fUnused[2];
};
</pre>
</code>
The Be engineers that originally wrote this BFoo purposely added some data
padding in the form of an array of 2 <code>int32</code>s (they did this with
most classes in the API). Now let's suppose in your implementation, you
really didn't need <code>fQux</code>. You can add <code>fQux</code>'s bytes
into <code>fUnused</code>:<br>
<code>
<pre>
class BFoo
{
...
private:
int32 fBar;
char fZig;
int32 fUnused[3];
};
</pre>
</code>
Nothing could be easier! An additional twist that should be noted is that
data member order must also be preserved. In much the same way as existing
apps will "look" for virtual functions in a specific place in the vtable,
so will they "look" for data members in a specific place in an object.<br>
"But what if I don't need <code>fZig</code>, either?" you wonder. "It's only
one byte, not four like an <code>int32</code>!" Have no fear! Just rename it
"<code>fUnusedChar</code>" and be done with it.<p>
The second situation that can make preserving object size tricky is if there
aren't <i>enough</i> bytes of data available. Building on our cheesy BFoo
example, let's suppose that rather than getting rid of <code>fQux</code> and
<code>fZig</code>, you actually needed to <i>add</i> another 4
<code>int32</code>s worth of data: <code>fNewData1</code> through
<code>fNewData4</code>. The original implementation of BFoo has two extra
<code>int32</code>s which we can use, but that leaves us two <code>int32</code>s
short. What to do? The easiest thing to do is create a data structure to hold
your new data and convert one of the <code>fUnused</code> items into a pointer
to that structure:
<code>
<pre>
// Foo.h
struct _BFooData_;
class BFoo
{
public:
BFoo();
~BFoo();
void SomeFunc();
private:
int32 fBar;
char fZig;
_BFooData_* fNewData;
int32 fUnused[1];
};
// Foo.cpp
struct _BFooData_
{
int32 fNewData1;
int32 fNewData2;
int32 fNewData3;
int32 fNewData4;
};
BFoo::BFoo()
{
fNewData = new _BFooData_;
}
BFoo::~BFoo()
{
delete fNewData;
}
</pre>
</code>
Voila! More data without making the class bigger. Notice the added
destructor; make sure you're cleaning up your new (dynamically allocated) data.
</li>
</ol>
And there you have it: Binary Compatibility in 3 Easy Steps!<br>
Questions, comments, or corrections? Please let
<a href="mailto:[email protected]">me</a> know!<br>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
+140
View File
@@ -0,0 +1,140 @@
<html>
<Title>Interface Kit Team Process</Title>
<body>
<h1>Interface Kit Team Process</h1>
<p>
This paper deals with the set of requirements for reimplementing any portion of the BeOS
covered by the Interface Kit team's charter; namely, the Interface Kit, the Application
Kit, the app_server, and related preferences applets. &nbsp; This team's resposibilities
may broaden later to include more areas of the OS which are related (the input_server
comes to mind as a possibility). &nbsp; Since the mandate of the group covers such a
large and public (from a 3rd party developer's perspective) portion of BeOS -- a portion
that is central to the user and developer experience of BeOS -- it is vital that our work
be done in a scrupulously documented and tested fashion. &nbsp; This paper lays out the
process which, when adhered to, aims to ensure this high standard of documentation and
testability.
</p><p>
First, a definition of "module" as it pertains to this paper.
<p>
<b>Module:</b>
A function, class, kit, application or related set of functions, classes, kits or
applications is refered to as a "module" in this paper, the implication being that
there can be modules within modules. &nbsp; A module is any specifiable and testable
entity -- which may or may not rely on other modules to accomplish its functionality.
</p><p>
<h2>
Process Requirements
<hr align="left" width="25%">
</h2>
Each module in this project shall have the following items:
<ul>
<li>Complete interface specification. &nbsp; For kits, this will mostly come
from the BeBook, but in many cases the specification will have to elaborate
on what the BeBook provides or even be created entirely (app_server internals
are a good example).</li>
<li>Complete use case specification. &nbsp; For those not familiar with use cases,
they consist of the following:
<ul>
<li>A list of ways in which a module is expected to be used</li>
<li>Sublists of assumptions/prerequisites for each of those cases. &nbsp;
This should include items such as state of an object instance at the
time of method invocation, the state of parameters passed to functions,
etc.</li>
<li>Sublists of error conditions and handling for each case where
assumptions/prerequisites are not properly met. &nbsp; This list should
not attempt to be all inclusive: &nbsp; circumstances that do not
directly bear upon the assumptions/prerequisites do not need to be
considered unless clearly necessary.</li>
</ul></li>
<li>A set of unit tests which verify that the module performs correctly in expected
use cases as well as under error conditions as described in the use case
specification.</li>
<li>A plain-english discussion of how the module implements its functionality: &nbsp;
what algorithms are to be used, what other modules are relied upon, the general
design rationale, execution flow, etc.</li>
<li>The actual reimplementation.</li>
</ul>
Each of the above items is to be completed roughly in the order listed. &nbsp; In other
words, a given module should have a complete interface specification, etc., before it is
reimplemented. &nbsp; Prototyping is encouraged, of course. &nbsp; For existing APIs, the
recommended course is to write the interface spec, use case spec and unit tests to the
API. &nbsp; Unit tests, in particular, should perform as expected when run against the
existing API. &nbsp; When they do not, changes may need to be made to the specifications.
&nbsp; Our goal is to reimplement the APIs as they are, not necessarily as they're
documented -- and then ensure that the docs accurately reflect the reimplementation.
&nbsp; Thorough testing of the existing implementation will show us where the
documentation is wrong, misleading or absent, thereby helping to ensure that our
reimplementation is functionaly identical to the existing one.
<p>
<a href="http://www.xprogramming.com/ftp/TestingFramework/CppUnit/CppUnit15.zip">
CppTest</a>
is the test framework we will be using. &nbsp; By using this framework for all our unit
tests, we can easily build large test suites which will verify the codebase in a single
executed run. &nbsp; An excellent short discussion of the value of unit tests is here:<br>
<a href="http://www.extremeprogramming.org/rules/unittests.html">
http://www.extremeprogramming.org/rules/unittests.html</a>
<h2>
A Suggestion
<hr align="left" width="25%">
</h2>
Although the interface specification for each module should be completed first, I have a
suggestion for how to proceed from there which should make the remainder of the process
less boring. &nbsp; Rather than following the interface specification with a full set of
use cases followed by a full set of tests, a more productive and enjoyable way to go is
to take each module in turn, write one of the use cases/error conditions for it and
immediately write the test for that use case/error condition. &nbsp; This will break up
the tedious process of specifying all the use cases and error conditions with a bit of
coding -- not implementation code, but code nonetheless.
<h2>
Some Final Thoughts
<hr align="left" width="25%">
</h2>
This process is a very rigorous approach to take. &nbsp; Given that our goal is to produce
the most stable, robust and professional desktop operating system available, this sort of
thoroughness is justifiable and necessary. &nbsp; Our understanding of the system will be
greatly increased and the task of coming up to speed on the system will be made much
easier for outsiders and newcomers to the project.
<p>
This approach is also not the most "fun": &nbsp; sitting down and hacking out code has the
attraction of instant gratification that design work does not. &nbsp; It is important to
understand, however, that proper design work done up front makes the task of
implementation easier, the chore of integration much less onerous and testing and
code verification a snap. &nbsp; Provided we do not get locked in "analysis paralysis"
and attack the design work as vigorously as the coding work, the entire project will
actually move more quickly -- usually quite a bit more quickly -- than if we had simply
started coding. &nbsp; Thrown away versions of the codebase should be just that:
&nbsp; quick prototypes intended to be disposable, rather than full-blown implementation
attempts which fail or are mysterious blackboxes because we don't really understand the
module. &nbsp; Following this process makes it far more likely that when we sit down to
do a module implementation, the first try will be the last (bug fixes not withstanding,
of course ;).
</p><p>
To ensure the process is followed and we produce the highest quality code we can, code
will not be accepted for release until all of the process items are covered. &nbsp; If
this seems like a hardline stance to take, remember: &nbsp; every single app which
utilizes the Application and Interface Kits relies on our code to be rock solid --
totally predictable and completely reliable. &nbsp; Let's strive to be engineers, not
h4X0rz.
</p>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
+391
View File
@@ -0,0 +1,391 @@
<HTML>
<!-- $Id: UnitTestingInfo.html,v 1.1 2002/07/09 12:24:30 ejakowatz Exp $ -->
<HEAD>
<TITLE>Unit Testing Information</TITLE>
</HEAD>
<BODY BGCOLOR="white" LINK="#000067" VLINK="#000067" ALINK="#0000FF">
<FONT FACE="Verdana,Arial,Helvetica,sans-serif" SIZE="-1">
<H1>Unit Testing Information:</H1>
<P>This document describes the "why's" and "how's" of unit testing for the AppKit team of the
OpenBeOS project. Although it is intended for the AppKit team, there is no reason other teams
couldn't use this information to develop a similar unit testing strategy.</P>
<P>The document has the following sections:</P>
<OL>
<LI><A HREF="#what">What is unit testing?</A></LI>
<LI><A HREF="#why">Why is unit testing important?</A></LI>
<LI><A HREF="#when">When should I write my unit tests?</A></LI>
<LI><A HREF="#whattests">What kinds of tests should be in a unit test?</A></LI>
<LI><A HREF="#testframework">What framework is being used to do unit testing for the AppKit?</A></LI>
<LI><A HREF="#frameworkmods">What AppKit specific modifications have been made to this framework?</A></LI>
<LI><A HREF="#futuremods">What framework modifications might be required in the future?</A></LI>
<LI><A HREF="#buildingtests">How do I build the framework and current tests for the AppKit?</A></LI>
<LI><A HREF="#runningtests">How do I run tests?</A></LI>
<LI><A HREF="#writingtests">How do I write tests for my component?</A></LI>
<LI><A HREF="#exampletests">Are there example tests to base mine on?</A></LI>
<LI><A HREF="#threadedtests">How do I write a test with multiple threads?</A></LI>
</OL>
<A NAME="what"></A><H2>What is unit testing?</H2>
<P>Unit testing is the process of showing that a part of a software system works as far as the
requirements created for that part of the system. Unit testing is best if it has the following
characteristics:</P>
<UL>
<LI>The software component is tested in isolation with as little interaction with other software
components as possible.</LI>
<LI>The software component is tested using automated tools so that unit tests can be run with
every build of the software if required.</LI>
<LI>All requirements of the software component are tested as part of the unit tests.</LI>
</UL>
<P>Unit testing is not the only type of testing but is definitely a very important part of any
testing strategy. Following unit testing, software should go through "integration testing" to
show that the components work as expected when put together.</P>
<A NAME="why"></A><H2>Why is unit testing important?</H2>
<P>A basic concept of software engineering is that the cost of fixing a bug goes up by a factor
of 2-10x (depending on the source of the information) the later in the development process it is
found. Unit testing is critical to finding implementation bugs within a particular component as
quickly as possible.</P>
<P>Unit testing will also help to find requirements problems also. If you write the requirements
(or use cases) for your component from the BeBook, hopefully the BeBook and your use cases will
match the actual Be implementation. A good way to confirm that the BeBook documentation matches
Be's implementation is to write your unit tests and run them against the original Be code.</P>
<P>Unit tests will also continue to be maintained and run in the future also. As the mailing
lists obviously show, many people are looking forward to OpenBeOS post-R1 when new features
will be introduced above and beyond BeOS R5. These unit tests will be critical to ensuring that
any new feature or even just a bug fix doesn't break existing functionality.</P>
<P>Speaking of bug fixes, consider adding unit tests for any bugs you identify that slipped
through your original unit test suite. This will ensure that this bug or a similar one is not
re-introduced in the future.</P>
<P>Finally, unit testing is not the be all, end all of testing. As mentioned above, integration
testing must be done to show that software components work together. If all unit tests cover
all requirements and have run successfully against all components, then a failure has to be
due to a bug in the interaction of two or more known working software components.</P>
<A NAME="when"></A><H2>When should I write my unit tests?</H2></LI>
<P>As the AppKit process document describes the recommended order for implementing a component
is:</P>
<OL>
<LI>Write an interface specification</LI>
<LI>Write the use case specifications</LI>
<LI>Write the unit tests</LI>
<LI>Write an implementation plan</LI>
<LI>Write the code</LI>
</OL>
<P>Please see the AppKit process document for more details about the entire sequence. The unit
test are to be written once the use cases are written and before any implementation work is
done. The use cases must be done because they determine what the tests will be. You need to
write as many tests are required so that all use cases for that component are tested. The use
cases should be detailed enough that you can write your unit tests from them.</P>
<P>The unit tests are to be done before implementation for a very good reason. You should be able
to run these unit tests against the Be implementation and confirm that they all pass. If they do
not pass, then either there is a bug in the unit test itself or you have found a difference
between your use cases and the actual implementation. Even if your use cases match the BeBook,
if that is not how the actual Be implementation works, we must match the current implementation and
not the BeBook. You should go back and modify the use case. Change the use case so that it
matches Be's implementation and consider adding a note indicating this doesn't match the
BeBook.</P>
<P>Imagine if you completed the implementation and then wrote and ran the unit tests. If you run
the tests against your implementation and Be's implementation, you will notice the test passes
for your code but fails on Be's. At this point, you will have to change the implementation, change
the unit test and change the use case which is more work that if you write the unit tests before
the implementation. Worse, if you only ran the unit tests against your implementation and not
Be's, you may not notice the problem at all.</P>
<A NAME="whattest"></A><H2>What kinds of tests should be in a unit test?</H2>
<P>The unit tests you write should cover all the functionality of your software module. That
means your unit tests should include:</P>
<UL>
<LI>All standard expected functionality of the software component</LI>
<LI>All error conditions handled by the software component</LI>
<LI>Interaction with software components which cannot be decoupled from the target software
component</LI>
<LI>Concurrency tests to show that a software component which is expected to be thread safe (most
things are under BeOS) is safe and free from deadlocks.</LI>
</UL>
<A NAME="testframework"></A><H2>What framework is being used to do unit testing for the AppKit?</H2>
<P>The AppKit team has chosen to use CppUnit version 1.5 as the basis of all of our unit tests.
This framework provides very useful features and ensures that all unit tests for AppKit code
are consistent and can be executed from a single environment.</P>
<P>There are two key components to the framework. First, there is a library called libCppUnit.so
which provides all the C++ classes for defining your own testcases. Secondly, there is an
executable called "TestRunner" which is capable of executing a set of testcases.</P>
<P>For more information on CppUnit, please refer to
<A HREF="http://cppunit.sourceforge.net/">this website</A>
<A NAME="frameworkmods"></A><H2>What AppKit specific modifications have been made to this framework?</H2>
<P>The following are the modifications that have been introduced into the CppUnit v1.5
framework:</P>
<UL>
<LI>A makefile has been added for the library and the TestRunner.</LI>
<LI>Some "bugs" in CppUnit v1.5 which lead to it not compiling under BeOS v5.</LI>
<LI>The TestRunner has been modified to support BeOS based addons. Each test which you can
select from the TestRunner is found in the "add-ons" directory at runtime. The original
TestRunner required you to change the TestRunner when new tests were added to it.</LI>
<LI>Changed the output from TestRunner. The output includes a name of the test being run and
a run time for the test in microseconds.</LI>
<LI>Changed the arguments of the assert functions in the TestCase class from std::string to
const char *'s due to apparent concurrency problems with std::string under BeOS when testing
threaded tests.</LI>
<LI>Added locking to the TestResults class so that multiple threads can safely add result
information at the same time for a single test.</LI>
<LI>The ThreadedTestCaller class was written to allow us to write tests which contain multiple
threads. This is an important class because many BeOS components are thread safe and we need
to confirm that the OpenBeOS implementation is also thread safe.</LI>
</UL>
<P>This is the list of the important modifications done to CppUnit v1.5 at the time this document
is being written. For the latest information about modifications to CppUnit, check the code
which can be found in the OpenBeOS CVS repository.</P>
<A NAME="futuremods"></A><H2>What framework modifications might be required in the future?</H2>
<P>This framework will have to evolve as our needs grow. The main issues I think we need to
solve are:</P>
<UL>
<LI>The format of the test name is an encoded string representing the class definition of the
test class from gcc. It is not a very readable format but given that the test class is often
a template class and you would like different names for different instances of the template,
this seemed the best compromise. Suggestions welcome.</LI>
<LI>The threaded test support added into CppUnit forces you to specify the entry point for each
thread in your test. If you are doing a test with a BLooper or a BWindow, these classes start
a thread of their own. This thread will not be started through the standard entry point so
doing "assert's" from one of these threads will not work. Perhaps we need TestBLooper and
TestBWindow classes which will work with the assert's.</LI>
</UL>
<P>If you find you need some other features, feel free to add them to CppUnit.</P>
<A NAME="buildingtests"></A><H2>How do I build the framework and current tests for the AppKit?</H2>
<P>As of writing this document, you can build the framework and all the current AppKit tests
by performing the following steps:</P>
<OL>
<LI>Checkout the "app_kit" sources or the entire repository from the OpenBeOS CVS repository.
There is information at the OpenBeOS site about how to access the CVS repository.</LI>
<LI>In a terminal, "cd" into the "app_kit" directory in the CVS files you checked out.</LI>
<LI>Type "make".</LI>
</OL>
<P>Note that the build system for OpenBeOS is moving to jam so these steps may become obsolete.
When you the make has finished, you should find the following files:</P>
<UL>
<LI><CODE>app_kit/test/CppUnit/TestRunner</CODE> - this is the executable to use to execute
tests.</LI>
<LI><CODE>app_kit/test/CppUnit/lib/libCppUnit.so</CODE> - this is CppUnit library which your tests
must link against.</LI>
<LI><CODE>app_kit/test/CppUnit/lib/libopenbeos.so</CODE> - this is library which contains OpenBeOS
implementation of some Be classes (usually found in libbe.so, called libopenbeos.so to avoid a name
clash at runtime).</LI>
<LI><CODE>app_kit/test/add-ons/BAutolockTests</CODE> - this is the addon which contains the tests
which are run against the Be and OpenBeOS implementation of BAutolock.</LI>
<LI><CODE>app_kit/test/add-ons/BLockerTests</CODE> - this is the addon which contains the tests
which are run against the Be and OpenBeOS implementation of BLocker.</LI>
<LI><CODE>app_kit/test/add-ons/BMessageQueueTests</CODE> - this is the addon which contains the tests
which are run against the Be and OpenBeOS implementation of BMessageQueue.</LI>
</UL>
<P>These are the key files which ensure that the tests can be run.</P>
<A NAME="runningtests"></A><H2>How do I run tests?</H2>
<P>You have a few different options for how you run a test or a series of tests. Before you start
however, you must build the code as describe <A HREF="#buildingtests">in this section</A>. Once
it is built, you can run tests any of these ways:</P>
<UL>
<LI>Run "make test" from the app_kit directory. This will lead to all of the tests defined in
app_kit/test/add-ons directory to be run.</LI>
<LI>From the "app_kit/test" directory, execute the command "CppUnit/TestRunner -all". This will
lead to all of the tests defined in the app_kit/test/add-ons directory to be run and is the same
as what happens in the "make" example above. However, recompile any code that has changed in the
process.</LI>
<LI>From the "app_kit/test" directory, execute the command "CppUnit/TestRunner &lt;TestName&gt;"
where &lt;TestName&gt; is one of the addons found in the "app_kit/test/add-ons" directory. Only
the tests defined in that add-on will be run.</LI>
</UL>
<A NAME="writingtests"></A><H2>How do I write tests for my component?</H2>
<P>The first step to writing your tests is to develop a plan for how you will test the
functionality. For ideas of the kinds of tests you may want to consider, you should reference
<A HREF="#whattests">this section</A>.</P>
<P>Once you know the kinds of tests you want, you need to:</P>
<UL>
<LI><P>For every test you want, define a class which derives from the "TestCase" class in the
CppUnit framework.</P></LI>
<LI><P>Within each test class you define, create a "void setUp(void)" and "void tearDown(void)"
member function if required. If before executing your test, you need to perform some actions,
put those actions in the "setUp()" member. If you need to cleanup after your test, put those
actions in the "tearDown()" member.</P></LI>
<LI><P>Within each test class you define, create a member function which takes "void" and
returns "void". Within this member function, write the code to execute the test. Whenever you
want to ensure that some condition is true during your test, add a line within the member function
that looks like "assert(condition)". For example, if the variable "result" must have the value
B_OK at a particular point in your test, you should add a line which reads
"assert(result = B_OK)".</P></LI>
<LI><P>Create a constructor for all of your test classes that takes a "std::string name" argument
and pass that onto the TestCase parent class. Add whatever actions you need to take in the
constructor.</P></LI>
<LI><P>Create a destructor for all of your test classes and take whatever actions are
appropriate.</P></LI>
<LI><P>Within each test class you define, create a member with the signature
"static Test *suite(void)". For a simple test where only one test needs to be run for this class,
the contents of this member should look like:</P>
<PRE>
return(new TestCaller&lt;ClassName&gt;("", &amp;ClassName::MemberName));
</PRE>
<P>Replace "ClassName" with the name of your test class and "MemberName" with the name
of the member function you defined your test in. If you need to define more than one test to run
from this class, refer to instructions below on how to use the TestSuite class of CppUnit. If you
are creating a threaded test, refer to <A HREF="#threadedtests">this section</A>.</P></LI>
<LI><P>Create one ".cpp" file for defining the "addonTestFunc()" function. This function must
exist in global scope within your test addon. The contents of this ".cpp" file will look something
like:</P>
<PRE>
#include "TestAddon.h"
Test *addonTestFunc(void)
{
TestSuite *testSuite = new TestSuite("&lt;TestSuiteName&gt;");
testSuite-&gt;addTest(&lt;ClassName1&gt;::suite());
testSuite-&gt;addTest(&lt;ClassName2&gt;::suite());
/* etc */
return(testSuite);
}
</PRE>
<P>In the above example, replace &lt;TestSuiteName&gt; with an appropriate name for the group of
tests and &lt;ClassName1&gt; and &lt;ClassName2&gt; with the names of the test classes you have
defined.</P></LI>
<LI><P>Create a build system around a BeIDE project, Makefile or preferrably a jam file which
builds all the necessary code you have written into an addon.</P></LI>
<LI><P>Put this addon into the app_kit/test/add-ons directory and follow the above instructions
for how to run your tests.</P></LI>
</UL>
<A NAME="exampletests"></A><H2>Are there example tests to base mine on?</H2>
<P>There are example tests which you can find in the following directories:</P>
<UL>
<LI><CODE>app_kit/test/lib/application/BMessageQueue</CODE></LI>
<LI><CODE>app_kit/test/lib/support/BAutolock</CODE></LI>
<LI><CODE>app_kit/test/lib/support/BLocker</CODE></LI>
</UL>
<P>There are some things done in these tests which make things a bit more complex, but you may
want to do similar things:</P>
<UL>
<LI>Most tests use a ThreadedTestCaller class even in some situations when there aren't actually
more than one thread in the test.</LI>
<LI>All tests are defined as a template class. The test class is a template of the class to test
(if that makes sense to you). For example, to test both the Be and OpenBeOS BLocker and not
end up with a symbol conflict, the OpenBeOS implementation of BLocker is actually in a namespace
called "OpenBeOS". So, the tests must be run against the classes "::BLocker" and
"OpenBeOS::BLocker". The easiest way to do this was to make the class to be tested a template
and define it for both "::BLocker" and "OpenBeOS::BLocker".</LI>
</UL>
<P>Even with the complexity, I think this code provides a pretty good example of how to write
your tests.</P>
<A NAME="threadedtests"></A><H2>How do I write a test with multiple threads?</H2>
<P>If you have a test which you want to define that requires more than one thread of execution
(most likely a concurrency test of you code), you need to use the ThreadedTestCaller class.
The steps which differ from the above description on how to write a test case are:</P>
<UL>
<LI><P>In your test class, define a member function for each thread you will be starting. All of
these member functions must take "void" and return "void". If all the threads in your test
perform the exact same actions, it is OK to just define one member function. Usually in the
tests I have written, I have called these member functions "TestThread1()", "TestThread2()",
etc.</P></LI>
<LI><P>If your "static Test *suite()" function for your test class, you must return a
ThreadedTestCaller. Imagine that the test class name is "MyTestClass" and you want two threads
which run member functions "TestThread1()" and "TestThread2()". That code would look like:</P>
<PRE>
Test *MyTestClass::suite(void)
{
MyTestClass *theTest = new MyTestClass("");
ThreadedTestCaller&lt;MyTestClass&gt; *threadedTest = new TreadedTestCaller&lt;MyTestClass&gt;("", theTest);
threadedTest-&gt;addThread(":Thread1", &amp;MyTestClass::TestThread1);
threadedTest-&gt;addThread(":Thread2", &amp;MyTestClass::TestThread2);
return(threadedTest);
}
</PRE>
<P>If you need to, you can put a number of ThreadedTestCaller instances into a TestSuite and return
them in the suite() member function. Examples of this can be found in the BLocker and
BMessageQueue test examples.</P></LI>
</UL>
<P>Otherwise the steps are the same as for other tests. The code gets much more complex if you
define your test classes as templates as the examples do.</P>
</FONT>
</BODY>
</HTML>
Binary file not shown.

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1003 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

+43
View File
@@ -0,0 +1,43 @@
<html>
<head>
<title>Interface Kit Team Central</title>
</head>
<body>
<h1>Welcome to Interface Kit Team Central!</h1>
<p>
This is the IK Team's public face, where OpenBeOS folk and intrepid members of the
BeOS community can find such goodies as:
<ul>
<li>The IK Team <a href="IK_Process.html">Process</a></li>
<li>The IK Team <a href="schedule/index.html">Schedule</a>, including:
<ul>
<li><a href="schedule/index.html#CurrentStatus">Current Status</a></li>
<li>Project Milestones</li>
</ul>
</li>
<li>IK Team <a href="schedule/assignments.html">assignments</a></li>
<li>A tongue-in-cheek paper on
<a href="BinCompat.html">Maintaining Binary Compatibility</a>
</li>
<li>An article on <a href="UnitTestingInfo.html">unit testing</a> by Jeremy Rand
</li>
</ul>
With more sure to come.
<br>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,71 @@
<html>
<title>Schedule Rationale</title>
<body>
<h1>Schedule Rationale</h1>
Below is an informal discussion of the rationale behind the Interface Kit team's
behemoth schedule. Various details may not reflect the current form of the schedule,
but the basic gist is what's really important here.
<br>
<hr>
<p>
First, let me head off the suggestion that we formally split into 3 or 4 stand-alone
projects: &nbsp; the Interface Kit, Application Kit and app_server are completely
dependent on one another in a way that no other set of system components is. Each
without the others can accomplish almost *nothing*; I think the existence of Integration
highlights this fact.
</p><p>
Each milestone listed has a number of tasks associated with it; these need to be listed
and the time for each estimated. These tasks should be as fine grained as possible.
Taking BView as an example, I would expect each method on BView to have its own entry
under milestones 1, 2, 3, 4 and 8 with entries added as necessary to milestones 18 to
22. "Why so detailed?" you say. I'm glad you asked. ;)
</p><p>
First off, the finer the schedule's granularity, the more realistic estimate you have for
the project as a whole. Asked to implement BView, one might be tempted to say "Oh, about
3 weeks," whereas an estimate of the time needed for each method might yield a total of
two to three times that. While the more realistic overall estimate may be more depressing
initially, being able to hit goals on or near the estimated date is much better for
morale in the long run than constantly being behind because all the estimates were too
low. Trust me on this, I've worked on *way* too many projects that went south because of
scheduling that was too broad -- usually because the project manager doesn't want to
"distress" the client by making them pay for the time to schedule correctly. Or design
correctly, but that's a different rant. =)
</p><p>
Second, a fine-grained schedule helps to ensure that nothing gets missed. You might
think it would be hard to forget to implement a BView method, but if you don't expressly
schedule for that method, there will be no interface, use case or technical specifications
or unit tests to fail because the method isn't doing anything. In fact, we might not
notice the missing functionality until some app that uses it dies a horrible death and
we have to figure out why.
</p><p>
Third, it helps us figure out what functionality is dependent on what -- which helps us
schedule our tasks in a logical sequence.
</p><p>
Fourth, it makes it much easier for someone that doesn't have a lot of time available or
much experience to pick something that they can tackle and know that they will be making
a meaningful contribution. It also makes it easier for us to keep track of who is doing
what on large items like BView: instead of saying "there's a bunch of stuff on BView
that needs doing," we can say "BView::StrokeEllipse() needs to be implemented" and know
that a specific person is responsible for that deliverable.
</p><p>
Fifth, as daunting as a detailed schedule looks like out of the gate, tasks are getting
completed *constantly* and it's very satisfying to see progress get made on a regular
basis. Ideally, one would like to be able to check on the progress each week and find
several items completed since the last time it was checked.
</p>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,165 @@
<html>
<head>
<title>Application Kit Milestones</title>
</head>
<body>
<h1>Application Kit Milestones<hr></h1>
<ol>
<li>
Interface specs completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="4" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="196" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="right">2%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Use cases completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="4" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="196" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">2%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Unit tests completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="4" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="196" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">2%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Design discussions completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="4" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="196" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">2%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
<a href="Messaging.html">Messaging</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="38" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="162" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">19%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
<li>
<a href="BHandler.html">BHandler</a> complete
<li>
<a href="BLooper.html">BLooper</a> complete
<li>
<a href="Roster.html">Roster</a> complete
<li>
<a href="Clipboard.html">Clipboard</a> complete
<li>
<a href="BCursor.html">BCursor</a> complete
<li>
<a href="ScriptingSupport.html">Scripting Support</a> complete
</li>
<li>
Alpha
</li>
<li>
Beta 1
</li>
<li>
Beta 2
</li>
<li>
Release Candidate 1
</li>
<li>
1.0!
</li>
</ol>
<!-- Not implemented yet
See the complete list of <a href="ApplicationKitTasks.html">Application Kit tasks</a>.
<br>
-->
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,305 @@
<html>
<head>
<title>BCursor Tasks</title>
</head>
<body>
<h1>BCursor Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BCursor
</td>
<!-- owner -->
<td width="25%">
Gabe Yoder
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BCursor Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BCursor(const void* cursorData);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BCursor(BMessage* data);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BCursor();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t Archive(BMessage* into, bool deep = true) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
static BArchivable* Instantiate(BMessage* data);
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,930 @@
<html>
<head>
<title>BHandler Tasks</title>
</head>
<body>
<h1>BHandler Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BHandler
</td>
<!-- owner -->
<td width="25%">
Erik Jaesler
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BHandler Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BHandler(const char* name = NULL);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BHandler(BMessage* data);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BHandler();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
static BArchivable* Instantiate(BMessage* data);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t Archive(BMessage* data, bool deep = true) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual void MessageReceived(BMessage* message);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BLooper* Looper() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void SetName(const char* name);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
const char* Name() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual void SetNextHandler(BHandler* handler);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BHandler* NextHandler() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual void AddFilter(BMessageFilter* filter);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual bool RemoveFilter(BMessageFilter* filter);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual void SetFilterList(BList* filters);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BList* FilterList();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool LockLooper();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t LockLooperWithTimeout(bigtime_t timeout);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void UnlockLooper();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual BHandler* ResolveSpecifier(BMessage* msg, int32 index, BMessage* specifier, int32 form, const char* property);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t GetSupportedSuites(BMessage* data);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StartWatching(BMessenger, uint32 what);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StartWatchingAll(BMessenger);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StopWatching(BMessenger, uint32 what);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StopWatchingAll(BMessenger);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StartWatching(BHandler* , uint32 what);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StartWatchingAll(BHandler* );
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StopWatching(BHandler* , uint32 what);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StopWatchingAll(BHandler* );
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual void SendNotices(uint32 what, const BMessage* = 0);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool IsWatched() const;
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,555 @@
<html>
<head>
<title>Clipboard Tasks</title>
</head>
<body>
<h1>Clipboard Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BClipboard
</td>
<!-- owner -->
<td width="25%">
Gabe Yoder
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BClipboard Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BClipboard(const char* name, bool transient = false);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BClipboard();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
const char* Name() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
uint32 LocalCount() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
uint32 SystemCount() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StartWatching(BMessenger target);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StopWatching(BMessenger target);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool Lock();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void Unlock();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool IsLocked() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Clear();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Commit();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Revert();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BMessenger DataSource() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BMessage* Data() const;
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,955 @@
<html>
<head>
<title>Roster Tasks</title>
</head>
<body>
<h1>Roster Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BRoster
</td>
<!-- owner -->
<td width="25%">
Joe Banafato
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BRoster Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BRoster();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
~BRoster();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool IsRunning(const char* mime_sig) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool IsRunning(entry_ref* ref) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
team_id TeamFor(const char* mime_sig) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
team_id TeamFor(entry_ref* ref) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void GetAppList(BList* team_id_list) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void GetAppList(const char* sig, BList* team_id_list) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t GetAppInfo(const char* sig, app_info* info) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t GetAppInfo(entry_ref* ref, app_info* info) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t GetRunningAppInfo(team_id team, app_info* info) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t GetActiveAppInfo(app_info* info) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t FindApp(const char* mime_type, entry_ref* app) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t FindApp(entry_ref* ref, entry_ref* app) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Broadcast(BMessage* msg) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Broadcast(BMessage* msg, BMessenger reply_to) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StartWatching(BMessenger target, uint32 event_mask = B_REQUEST_LAUNCHED | B_REQUEST_QUIT) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t StopWatching(BMessenger target) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t ActivateApp(team_id team) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Launch(const char* mime_type, BMessage* initial_msgs = NULL, team_id* app_team = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Launch(const char* mime_type, BList* message_list, team_id* app_team = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Launch(const char* mime_type, int argc, char** args, team_id* app_team = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Launch(const entry_ref* ref, const BMessage* initial_message = NULL, team_id* app_team = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Launch(const entry_ref* ref, const BList* message_list, team_id* app_team = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t Launch(const entry_ref* ref, int argc, const char* const* args, team_id* app_team = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void GetRecentDocuments(BMessage* refList, int32 maxCount, const char* ofType = NULL, const char* openedByAppSig = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void GetRecentDocuments(BMessage* refList, int32 maxCount, const char* ofTypeList[], int32 ofTypeListCount, const char* openedByAppSig = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void GetRecentFolders(BMessage* refList, int32 maxCount, const char* openedByAppSig = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void GetRecentApps(BMessage* refList, int32 maxCount) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void AddToRecentDocuments(const entry_ref* doc, const char* appSig = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void AddToRecentFolders(const entry_ref* folder,const char* appSig = NULL) const;
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,580 @@
<html>
<head>
<title>Scripting Support Tasks</title>
</head>
<body>
<h1>Scripting Support Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BPropertyInfo
</td>
<!-- owner -->
<td width="25%">
Jeremy Rand
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BPropertyInfo Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BPropertyInfo(property_info* p = NULL, value_info* ci = NULL, bool free_on_delete = false);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BPropertyInfo();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual int32 FindMatch(BMessage* msg, int32 index, BMessage* spec, int32 form, const char* prop, void* data = NULL) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual bool IsFixedSize() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual type_code TypeCode() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ssize_t FlattenedSize() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t Flatten(void* buffer, ssize_t size) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual bool AllowsTypeCode(type_code code) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t Unflatten(type_code c, const void* buf, ssize_t s);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
const property_info* Properties() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
const value_info* Values() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
int32 CountProperties() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
int32 CountValues() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void PrintToStream() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
static bool FindCommand(uint32, int32, property_info* );
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
static bool FindSpecifier(uint32, property_info* );
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,789 @@
<html>
<head>
<title>Interface Kit Team Assignments</title>
</head>
<body>
<h1>
Interface Kit Team Assignments and Open Tasks
<hr>
</h1>
<h2>
Assignments:
</h2>
<table>
<tr>
<td>
Erik Jaesler
</td>
</tr>
<tr>
<td>
</td>
<td>
BMessageFilter
</td>
</tr>
<tr>
<td>
</td>
<td>
BHandler
</td>
</tr>
<tr>
<td>
</td>
<td>
BLooper
</td>
</tr>
<tr>
<td>
</td>
<td>
BAlert
</td>
</tr>
<tr>
<td>
</td>
<td>
BArchivable
</td>
</tr>
<tr>
<td>
</td>
<td>
BArchivable
</td>
</tr>
<tr>
<td>
</td>
<td>
BApplication
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Gabe Yoder
</td>
</tr>
<tr>
<td>
</td>
<td>
BClipboard
</td>
</tr>
<tr>
<td>
</td>
<td>
BCursor
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Graham Gilmore
</td>
</tr>
<tr>
<td>
</td>
<td>
BBlockCache
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Graham Macdonald
</td>
</tr>
<tr>
<td>
</td>
<td>
BPictureButton
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Greg Gelfond
</td>
</tr>
<tr>
<td>
</td>
<td>
BPoint
</td>
</tr>
<tr>
<td>
</td>
<td>
BShape
</td>
</tr>
<tr>
<td>
</td>
<td>
BStringItem
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Issac Yonemoto
</td>
</tr>
<tr>
<td>
</td>
<td>
BRect
</td>
</tr>
<tr>
<td>
</td>
<td>
BRegion
</td>
</tr>
<tr>
<td>
</td>
<td>
BList
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Jeremy Rand
</td>
</tr>
<tr>
<td>
</td>
<td>
BMessageQueue
</td>
</tr>
<tr>
<td>
</td>
<td>
BPropertyInfo
</td>
</tr>
<tr>
<td>
</td>
<td>
BDeskbar
</td>
</tr>
<tr>
<td>
</td>
<td>
BAutoLock
</td>
</tr>
<tr>
<td>
</td>
<td>
BLocker
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Joe Banafato
</td>
</tr>
<tr>
<td>
</td>
<td>
BRoster
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Justin Gasper
</td>
</tr>
<tr>
<td>
</td>
<td>
BMenu
</td>
</tr>
<tr>
<td>
</td>
<td>
BMenuBar
</td>
</tr>
<tr>
<td>
</td>
<td>
BMenuItem
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Marc Flerackers
</td>
</tr>
<tr>
<td>
</td>
<td>
BControl
</td>
</tr>
<tr>
<td>
</td>
<td>
BButton
</td>
</tr>
<tr>
<td>
</td>
<td>
BCheckBox
</td>
</tr>
<tr>
<td>
</td>
<td>
BRadioButton
</td>
</tr>
<tr>
<td>
</td>
<td>
BTab
</td>
</tr>
<tr>
<td>
</td>
<td>
BTabView
</td>
</tr>
<tr>
<td>
</td>
<td>
BBox
</td>
</tr>
<tr>
<td>
</td>
<td>
BStatusBar
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Staffan Hellstrom
</td>
</tr>
<tr>
<td>
</td>
<td>
BPolygon
</td>
</tr>
<tr>
<td>
</td>
<td>
BSlider
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Steve Vallee
</td>
</tr>
<tr>
<td>
</td>
<td>
BDataIO
</td>
</tr>
<tr>
<td>
</td>
<td>
BMallocIO
</td>
</tr>
<tr>
<td>
</td>
<td>
BMemoryIO
</td>
</tr>
<tr>
<td>
</td>
<td>
BPositionIO
</td>
</tr>
<tr>
<td>
</td>
<td>
Misc
</td>
</tr>
<tr>
<td>
</td>
<td>
BString Utility
</td>
</tr>
<tr>
<td>
</td>
<td>
BString
</td>
</tr>
<tr>
<td>
</td>
<td>
BStopWatch
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Ulrich Wimboeck
</td>
</tr>
<tr>
<td>
</td>
<td>
BListItem
</td>
</tr>
<tr>
<td>
</td>
<td>
BListView
</td>
</tr>
<tr>
<td>
</td>
<td>
BOutlineListView
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
William Bull
</td>
</tr>
<tr>
<td>
</td>
<td>
BMessage
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Xavier Castellan
</td>
</tr>
<tr>
<td>
</td>
<td>
BBitmap
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
</table>
<h2>
Open Tasks:
</h2>
<table>
<tr>
<td>
Application Kit
</td>
</tr>
<tr>
<td>
</td>
<td>
BInvoker
</td>
</tr>
<tr>
<td>
</td>
<td>
BMessageRunner
</td>
</tr>
<tr>
<td>
</td>
<td>
BMessenger
</td>
</tr>
<tr>
<td>
</td>
<td>
BMessenger Support
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Integration
</td>
</tr>
<tr>
<td>
</td>
<td>
BWindow
</td>
</tr>
<tr>
<td>
</td>
<td>
BView
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
<tr>
<td>
Interface Kit
</td>
</tr>
<tr>
<td>
</td>
<td>
BPicture
</td>
</tr>
<tr>
<td>
</td>
<td>
BScreen
</td>
</tr>
<tr>
<td>
</td>
<td>
BShapeIterator
</td>
</tr>
<tr>
<td>
</td>
<td>
Screen Support
</td>
</tr>
<tr>
<td>
</td>
<td>
BFont
</td>
</tr>
<tr>
<td>
</td>
<td>
Font Support
</td>
</tr>
<tr>
<td>
</td>
<td>
BColorControl
</td>
</tr>
<tr>
<td>
</td>
<td>
BStringView
</td>
</tr>
<tr>
<td>
</td>
<td>
BScrollBar
</td>
</tr>
<tr>
<td>
</td>
<td>
BScrollView
</td>
</tr>
<tr>
<td>
</td>
<td>
Scrollbar Config
</td>
</tr>
<tr>
<td>
</td>
<td>
BSeparatorItem
</td>
</tr>
<tr>
<td>
</td>
<td>
BMenuField
</td>
</tr>
<tr>
<td>
</td>
<td>
BPopUpMenu
</td>
</tr>
<tr>
<td>
</td>
<td>
Menu Config
</td>
</tr>
<tr>
<td>
</td>
<td>
BTextView
</td>
</tr>
<tr>
<td>
</td>
<td>
BTextControl
</td>
</tr>
<tr>
<td>
</td>
<td>
unicode_block
</td>
</tr>
<tr>
<td>
</td>
<td>
Deskbar Support
</td>
</tr>
<tr>
<td>
</td>
<td>
Mouse Config
</td>
</tr>
<tr>
<td>
</td>
<td>
Workspace Support
</td>
</tr>
<tr>
<td>
</td>
<td>
Keyboard Config
</td>
</tr>
<tr>
<td>
</td>
<td>
UI Color Info
</td>
</tr>
<tr>
<td>
</td>
<td>
Miscellaneous
</td>
</tr>
<tr>
<td>
</td>
<td>
BDragger
</td>
</tr>
<tr>
<td>
</td>
<td>
BShelf
</td>
</tr>
<tr>
<td>
</td>
<td>
BChannelControl
</td>
</tr>
<tr>
<td>
</td>
<td>
BChannelSlider
</td>
</tr>
<tr>
<td>
</td>
<td>
BMultiChannelControl
</td>
</tr>
<tr>
<td>
</td>
<td>
BOptionControl
</td>
</tr>
<tr>
<td>
</td>
<td>
BOptionPopUp
</td>
</tr>
<tr>
<td height="15" colspan="2"></td>
</tr>
</table>
<br>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
+147
View File
@@ -0,0 +1,147 @@
<html>
<head>
<title>Interface Kit Team Schedule</title>
</head>
<body>
<h1>Interface Kit Team Schedule<hr></h1>
<p>
Here is the schedule for the Interface Kit Team. To help organize our work,
tasks have been broken into 4 general areas:
<ul>
<li><a href="ApplicationKit/ApplicationKitMilestones.html">Application Kit</a></li>
<li><a href="InterfaceKit/InterfaceKitMilestones.html">Interface Kit</a></li>
<li><a href="Integration/IntegrationMilestones.html">Integration</a></li>
<li><a href="SupportKit/SupportKitMilestones.html">Support Kit</a></li>
</ul>
</p><p>
Organizationally, it's best to consider these as separate projects within the
scope of the IK Team's charter. As such, core contributors should pick a
project and stick with it -- it will make things a lot easier to keep track of,
and losing track of stuff would be a bad thing. =)
</p><p>
DarkWyrm is the technical lead for the app_server; he has done an enormous amount
of research and he is currently in the best position to lead the effort.
</p><p>
Erik Jakowatz will continue in his capacity as overall project lead, as well as
being directly involved in Integration as technical lead.
</p><p>
A word of warning: this schedule is downright huge because of the sheer number of
items to be completed. There is a paper available in which the rationale behind the
schedule is <a href="Discussion.html">discussed</a>.
</p>
<hr>
<h2><a name="CurrentStatus"></a>Current Status</h2>
Here are some fuzzy indicators of what progress the team has made base on the number of
outstanding tasks completed. No warranty is made concerning the accuracy of these
graphs. =)
<br><br>
<!-- And here we go into table madness! -->
<table cellspacing="0">
<!-- sub-project header -->
<tr>
<td colspan="3" align="left"><strong>Overall</strong></td>
</tr>
<!-- progress graph -->
<tr>
<table cellspacing="0">
<tr>
<!-- how much is done -->
<td width="24" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="176" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">12%</td>
</tr>
</table>
</tr>
<!-- sub-project header -->
<tr>
<td colspan="3" align="left"><strong><br><br>Application Kit</strong></td>
</tr>
<!-- progress graph -->
<tr>
<table cellspacing="0">
<tr>
<!-- how much is done -->
<td width="4" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="196" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">2%</td>
</tr>
</table>
</tr>
<!-- sub-project header -->
<tr>
<td colspan="3" align="left"><strong><br><br>Interface Kit</strong></td>
</tr>
<!-- progress graph -->
<tr>
<table cellspacing="0">
<tr>
<!-- how much is done -->
<td width="8" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="192" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">4%</td>
</tr>
</table>
</tr>
<!-- sub-project header -->
<tr>
<td colspan="3" align="left"><strong><br><br>Integration</strong></td>
</tr>
<!-- progress graph -->
<tr>
<table cellspacing="0">
<tr>
<!-- how much is done -->
<td width="50" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="150" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">25%</td>
</tr>
</table>
</tr>
<!-- sub-project header -->
<tr>
<td colspan="3" align="left"><strong><br><br>Support Kit</strong></td>
</tr>
<!-- progress graph -->
<tr>
<table cellspacing="0">
<tr>
<!-- how much is done -->
<td width="40" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="160" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">20%</td>
</tr>
</table>
</tr>
</table>
<br>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,513 @@
<html>
<head>
<title>BArchivable Tasks</title>
</head>
<body>
<h1>BArchivable Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BArchivable
</td>
<!-- owner -->
<td width="25%">
Erik Jaesler
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BArchivable
</td>
<!-- owner -->
<td width="25%">
Erik Jaesler
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BArchivable Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BArchivable();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BArchivable(BMessage* from);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
~BArchivable();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t Archive(BMessage* into, bool deep = true) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
static BArchivable* Instantiate(BMessage* from);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t Perform(perform_code d, void* arg); ???
</td>
</tr>
<!-- Functions header -->
<tr>
<td colspan="7"><center><strong>BArchivable Functions</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BArchivable* instantiate_object(BMessage* from, image_id* id);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BArchivable* instantiate_object(BMessage* from);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool validate_instantiation(BMessage* from, const char* class_name);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
instantiation_func find_instantiation_func(const char* class_name, const char* sig);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
instantiation_func find_instantiation_func(const char* class_name);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
instantiation_func find_instantiation_func(BMessage* archive_data);
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,156 @@
<html>
<head>
<title>Integration Milestones</title>
</head>
<body>
<h1>Integration Milestones<hr></h1>
<ol>
<li>
Interface specs completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="50" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="150" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="right">25%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Use cases completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="50" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="150" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">25%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Unit tests completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="50" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="150" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">25%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Design discussions completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="50" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="150" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">25%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
<a href="BArchivable.html">BArchivable</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="200" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="0" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">100%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
<li>
<a href="BApplication.html">BApplication</a> complete
<li>
<a href="BWindow.html">BWindow</a> complete
<li>
<a href="BView.html">BView</a> complete
</li>
<li>
Alpha
</li>
<li>
Beta 1
</li>
<li>
Beta 2
</li>
<li>
Release Candidate 1
</li>
<li>
1.0!
</li>
</ol>
<!-- Not implemented yet
See the complete list of <a href="IntegrationTasks.html">Integration tasks</a>.
<br>
-->
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,195 @@
<html>
<head>
<title>Interface Kit Milestones</title>
</head>
<body>
<h1>Interface Kit Milestones<hr></h1>
<ol>
<li>
Interface specs completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="6" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="194" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="right">3%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Use cases completed for all classes, functions, structs
</li>
<li>
Unit tests completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="4" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="196" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">2%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Design discussions completed for all classes, functions, structs
</li>
<li>
<a href="Group1Support.html">Group 1 Support</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="50" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="150" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">25%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
<li>
<a href="Group2Support.html">Group 2 Support</a> complete
<li>
<a href="Group3Support.html">Group 3 Support</a> complete
<li>
<a href="ControlWidgets.html">Control Widgets</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="16" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="184" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">8%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
<li>
<a href="Non-ControlWidgets.html">Non-Control Widgets</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="26" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="174" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">13%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
<li>
<a href="ScrollingSupport.html">Scrolling Support</a> complete
<li>
<a href="MenuingSupport.html">Menuing Support</a> complete
<li>
<a href="ListViewSupport.html">ListView Support</a> complete
<li>
<a href="TextViewSupport.html">TextView Support</a> complete
<li>
<a href="Miscellaneous.html">Miscellaneous</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="8" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="192" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">4%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
<li>
<a href="ReplicantSupport.html">Replicant Support</a> complete
<li>
<a href="AdvancedControlWidgets.html">Advanced Control Widgets</a> complete
</li>
<li>
Alpha
</li>
<li>
Beta 1
</li>
<li>
Beta 2
</li>
<li>
Release Candidate 1
</li>
<li>
1.0!
</li>
</ol>
<!-- Not implemented yet
See the complete list of <a href="InterfaceKitTasks.html">Interface Kit tasks</a>.
<br>
-->
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,339 @@
<html>
<head>
<title>BStopWatch Tasks</title>
</head>
<body>
<h1>BStopWatch Tasks<hr></h1>
<!-- master table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task</strong></th>
<th><strong>Owner</strong></th>
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>Class BStopWatch</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BStopWatch(const char *name, bool silent = false);
</td>
<!-- owner -->
<td>
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BStopWatch();
</td>
<!-- owner -->
<td>
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void Suspend();
</td>
<!-- owner -->
<td>
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void Resume();
</td>
<!-- owner -->
<td>
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bigtime_t Lap();
</td>
<!-- owner -->
<td>
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bigtime_t ElapsedTime() const;
</td>
<!-- owner -->
<td>
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void Reset();
</td>
<!-- owner -->
<td>
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
const char* Name() const;
</td>
<!-- owner -->
<td>
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>Hosted by:</small><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002 OpenBeOS Project</small>
</center>
</body>
</html>
@@ -0,0 +1,904 @@
<html>
<head>
<title>IO Tasks</title>
</head>
<body>
<h1>IO Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BDataIO
</td>
<!-- owner -->
<td width="25%">
Steve Vallee
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BMallocIO
</td>
<!-- owner -->
<td width="25%">
Steve Vallee
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BMemoryIO
</td>
<!-- owner -->
<td width="25%">
Steve Vallee
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BPositionIO
</td>
<!-- owner -->
<td width="25%">
Steve Vallee
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BDataIO Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BDataIO
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BDataIO();
</td>
</tr>
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BMallocIO Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BMallocIO();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BMallocIO();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ssize_t ReadAt(off_t pos, void *buffer, size_t size);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ssize_t WriteAt(off_t pos, const void *buffer, size_t size);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual off_t Seek(off_t pos, uint32 seek_mode);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual off_t Position() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t SetSize(off_t size);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void SetBlockSize(size_t blocksize);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
const void* Buffer() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
size_t BufferLength() const;
</td>
</tr>
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BMemoryIO Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BMemoryIO(void *p, size_t len);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BMemoryIO(const void *p, size_t len);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BMemoryIO();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ssize_t ReadAt(off_t pos, void *buffer, size_t size);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ssize_t WriteAt(off_t pos, const void *buffer, size_t size);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual off_t Seek(off_t pos, uint32 seek_mode);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual off_t Position() const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t SetSize(off_t size);
</td>
</tr>
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BPositionIO Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BPositionIO();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BPositionIO();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ssize_t Read(void *buffer, size_t size);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ssize_t Write(const void *buffer, size_t size);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual status_t SetSize(off_t size);
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,168 @@
<html>
<head>
<title>Support Kit Milestones</title>
</head>
<body>
<h1>Support Kit Milestones<hr></h1>
<ol>
<li>
Interface specs completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="32" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="168" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="right">16%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Use cases completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="32" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="168" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">16%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Unit tests completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="32" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="168" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">16%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Design discussions completed for all classes, functions, structs
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="32" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="168" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">16%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
<a href="IO.html">IO</a> complete
<li>
<a href="Utilities.html">Utilities</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="6" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="194" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">3%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
<li>
<a href="Synchronization.html">Synchronization</a> complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="120" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="80" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">60%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
</li>
<li>
Alpha
</li>
<li>
Beta 1
</li>
<li>
Beta 2
</li>
<li>
Release Candidate 1
</li>
<li>
1.0!
</li>
</ol>
<!-- Not implemented yet
See the complete list of <a href="SupportKitTasks.html">Support Kit tasks</a>.
<br>
-->
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,688 @@
<html>
<head>
<title>Synchronization Tasks</title>
</head>
<body>
<h1>Synchronization Tasks<hr></h1>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BAutoLock
</td>
<!-- owner -->
<td width="25%">
Jeremy Rand
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
BLocker
</td>
<!-- owner -->
<td width="25%">
Jeremy Rand
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BAutoLock Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BAutolock(BLocker *lock);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BAutolock(BLocker &lock);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BAutolock(BLooper *looper);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
~BAutolock();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/blank-20.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool IsLocked();
</td>
</tr>
<!-- Class header -->
<tr>
<td colspan="7"><center><strong>BLocker Class</strong></center></td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BLocker();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BLocker(const char *name);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BLocker(bool benaphore_style);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BLocker(const char *name, bool benaphore_style);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
BLocker(const char *name, bool benaphore_style, bool);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
virtual ~BLocker();
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool Lock(void);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
status_t LockWithTimeout(bigtime_t timeout);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
void Unlock(void);
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
thread_id LockingThread(void) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
bool IsLocked(void) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
int32 CountLocks(void) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
int32 CountLockRequests(void) const;
</td>
</tr>
<tr>
<td>
<table>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
../../images/Check.gif
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
sem_id Sem(void) const;
</td>
</tr>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,83 @@
<html>
<head>
<title>Interface Kit Team Assignments</title>
</head>
<body>
<h1>
Interface Kit Team Assignments and Open Tasks
<hr>
</h1>
<h2>
Assignments:
</h2>
<table>
<scripting>
@for_each engineer in $Assignments.engineers
<tr>
<td>
$engineer.name
</td>
</tr>
@for_each etask in $engineer.tasks
<tr>
<td>
</td>
<td>
$etask.str
</td>
</tr>
@end
<tr>
<td height="15" colspan="2"></td>
</tr>
@end
</scripting>
</table>
<h2>
Open Tasks:
</h2>
<table>
<scripting>
@for_each section in $Assignments.sections
<tr>
<td>
$section.name
</td>
</tr>
@for_each stask in $section.tasks
<tr>
<td>
</td>
<td>
$stask.str
</td>
</tr>
@end
<tr>
<td height="15" colspan="2"></td>
</tr>
@end
</scripting>
</table>
<br>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,167 @@
<html>
<head>
<scripting>
<title>$GROUP.name Milestones</title>
</scripting>
</head>
<body>
<scripting>
<h1>$GROUP.name Milestones<hr></h1>
</scripting>
<ol>
<li>
Interface specs completed for all classes, functions, structs
<scripting>
@if $GROUP.ispec_complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="$GROUP.ispec_table_complete" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="$GROUP.ispec_table_incomplete" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="right">$GROUP.ispec_complete%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
@end
</scripting>
</li>
<li>
Use cases completed for all classes, functions, structs
<scripting>
@if $GROUP.cases_complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="$GROUP.cases_table_complete" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="$GROUP.cases_table_incomplete" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">$GROUP.cases_complete%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
@end
</scripting>
</li>
<li>
Unit tests completed for all classes, functions, structs
<scripting>
@if $GROUP.tests_complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="$GROUP.tests_table_complete" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="$GROUP.tests_table_incomplete" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">$GROUP.tests_complete%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
@end
</scripting>
</li>
<li>
Design discussions completed for all classes, functions, structs
<scripting>
@if $GROUP.tspec_complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="$GROUP.tspec_table_complete" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="$GROUP.tspec_table_incomplete" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">$GROUP.tspec_complete%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
@end
</scripting>
</li>
<scripting>
@for_each milestone in $GROUP.milestones
<li>
<a href="$milestone.short_name##.html">$milestone.name</a>$milestone.note complete
@if $milestone.complete
<!-- Copy this table to each item when work begins on it -->
<!-- progress graph -->
<table cellspacing="0">
<tr>
<!-- spacer -->
<td width=10"></td>
<!-- how much is done -->
<td width="$milestone.table_complete" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="$milestone.table_incomplete" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="35" align="right">$milestone.complete%</td>
</tr>
</table>
<br><br>
<!-- end progress graph -->
@end
@end
</li>
</scripting>
<li>
Alpha
</li>
<li>
Beta 1
</li>
<li>
Beta 2
</li>
<li>
Release Candidate 1
</li>
<li>
1.0!
</li>
</ol>
<!-- Not implemented yet
<scripting>
See the complete list of <a href="$GROUP.short_name##Tasks.html">$GROUP.name tasks</a>.
</scripting>
<br>
-->
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,100 @@
<html>
<head>
<title>Interface Kit Team Schedule</title>
</head>
<body>
<h1>Interface Kit Team Schedule<hr></h1>
<p>
Here is the schedule for the Interface Kit Team. To help organize our work,
tasks have been broken into 4 general areas:
<ul>
<scripting>
@for_each group in $GROUPS
<li><a href="$group.short_name/$group.short_name##Milestones.html">$group.name</a>$group.note</li>
@end
</scripting>
</ul>
</p><p>
Organizationally, it's best to consider these as separate projects within the
scope of the IK Team's charter. As such, core contributors should pick a
project and stick with it -- it will make things a lot easier to keep track of,
and losing track of stuff would be a bad thing. =)
</p><p>
DarkWyrm is the technical lead for the app_server; he has done an enormous amount
of research and he is currently in the best position to lead the effort.
</p><p>
Erik Jakowatz will continue in his capacity as overall project lead, as well as
being directly involved in Integration as technical lead.
</p><p>
A word of warning: this schedule is downright huge because of the sheer number of
items to be completed. There is a paper available in which the rationale behind the
schedule is <a href="Discussion.html">discussed</a>.
</p>
<hr>
<h2><a name="CurrentStatus"></a>Current Status</h2>
Here are some fuzzy indicators of what progress the team has made base on the number of
outstanding tasks completed. No warranty is made concerning the accuracy of these
graphs. =)
<br><br>
<!-- And here we go into table madness! -->
<table cellspacing="0">
<!-- sub-project header -->
<tr>
<td colspan="3" align="left"><strong>Overall</strong></td>
</tr>
<!-- progress graph -->
<tr>
<table cellspacing="0">
<tr>
<!-- how much is done -->
<scripting>
<td width="$GROUPS.table_complete" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="$GROUPS.table_incomplete" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">$GROUPS.complete%</td>
</scripting>
</tr>
</table>
</tr>
<scripting>
@for_each group in $GROUPS
<!-- sub-project header -->
<tr>
<td colspan="3" align="left"><strong><br><br>$group.name</strong></td>
</tr>
<!-- progress graph -->
<tr>
<table cellspacing="0">
<tr>
<!-- how much is done -->
<td width="$group.table_complete" bgcolor="blue" align="left"></td>
<!-- how much is left -->
<td width="$group.table_incomplete" bgcolor="red" align="right"></td>
<!-- the above two translated into a percentage -->
<td width="25" align="center">$group.complete%</td>
</tr>
</table>
</tr>
@end
</scripting>
</table>
<br>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,29 @@
<html>
<head>
<scripting>
<title>$GROUP.name Tasks</title>
</scripting>
<head>
<body>
<scripting>
<h1>$GROUP.name Tasks<hr></h1>
@for_each milestone in $GROUP.milestones
<a href="$milestone.short_name##Tasks.html">$milestone.name</a><br>
@end
</scripting>
<hr>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>
@@ -0,0 +1,254 @@
<html>
<head>
<scripting>
<title>$MILESTONE.name Tasks</title>
</head>
<body>
<h1>$MILESTONE.name Tasks<hr></h1>
</scripting>
<!-- summary table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th><strong>Task Summary</strong></th>
<th><strong>Owner</strong></th>
<scripting>
@for_each s in $MILESTONE
<tr>
<td>
<table>
<td><img src="
@if $s.is_ispec_complete
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
@if $s.is_cases_complete
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
@if $s.is_tests_complete
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
@if $s.is_tspec_complete
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
@if $s.is_impl_complete
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td width="100%">
$s.name
</td>
<!-- owner -->
<td width="25%">
$s.owner
</td>
</tr>
@end
</scripting>
</table>
<br>
<br>
<br>
<br>
<br>
<!-- detail table -->
<table border>
<!-- table column headers -->
<th>
<table>
<td>
<a href="#legend">
<img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/User.gif" width="22" height="22" alt="Use Cases" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec" border="0">
</a>
</td>
<td>
<a href="#legend">
<img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation" border="0">
</a>
</td>
</table>
</th>
<th width="100%"><strong>Task Details</strong></th>
<!-- <th><strong>Owner</strong></th> -->
<scripting>
@for_each s in $MILESTONE
<!-- $s.type header -->
<tr>
<td colspan="7"><center><strong>$s.name $s.type</strong></center></td>
</tr>
@for_each t in $s.tasks
<tr>
<td>
<table>
<td><img src="
@if $t.ispec
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Functional Spec"></td>
<td><img src="
@if $t.cases
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Use Cases"></td>
<td><img src="
@if $t.tests
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Unit Tests"></td>
<td><img src="
@if $t.tspec
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Technical Spec"></td>
<td><img src="
@if $t.impl
../../images/Check.gif
@else
../../images/blank-20.gif
@end
" width="22" height="22" alt="Implementation"></td>
</table>
</td>
<!-- task -->
<td>
$t.name
</td>
</tr>
@end
@end
</scripting>
</table>
<br><br>
<hr>
<br><br>
<!-- legend table -->
<a name="legend">
<table border>
<tr>
<td align="center"><strong>Legend</strong></td>
</tr>
<tr>
<td>
<table>
<tr>
<td><img src="../../images/DocumentDraw.gif" width="22" height="22" alt="Functional Spec"></td>
<td>Functional Spec</td>
</tr>
<tr>
<td><img src="../../images/User.gif" width="22" height="22" alt="Use Cases"></td>
<td>Use Cases</td>
</tr>
<tr>
<td><img src="../../images/Help.gif" width="22" height="22" alt="Unit Tests"></td>
<td>Unit Tests</td>
</tr>
<tr>
<td><img src="../../images/Hammer.gif" width="22" height="22" alt="Technical Spec"></td>
<td>Technical Spec</td>
</tr>
<tr>
<td><img src="../../images/GoalFlag.gif" width="22" height="22" alt="Implementation"></td>
<td>Implementation</td>
</tr>
<tr>
<td><img src="../../images/Check.gif" width="22" height="22" alt="Completed"></td>
<td>Completed</td>
</tr>
</table>
</td>
</tr>
</table>
</a>
<br>
<!-- The obligatory SourceForge plug -->
<center>
<small>The OpenBeOS project is hosted by:</small><br><br>
<a href="http://sourceforge.net">
<img src="http://sourceforge.net/sflogo.php?group_id=33869&type=1" width="88" height="31" border="0" alt="SourceForge Logo">
</a>
<p>
<small>Copyright &copy; 2001-2002
<a href="http://www.openbeos.org">OpenBeOS</a> Project</small>
</center>
</body>
</html>