BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
use My::Web;
-require "CGI";
-use project::captive::doc::Macros;
+require CGI;
+BEGIN { Wuse 'project::captive::doc::Macros'; }
-My::Web->init(
+project::captive::doc::Macros->init(
"__PACKAGE__"=>__PACKAGE__,
"title"=>'Captive NTFS Developer Documentation: Components',
- "head_css"=>$doc_Macros_head_css,
+ "rel_prev"=>'Architecture.html.pl',
+ "rel_next"=>'Reverse.html.pl',
);
-My::Web->heading();
print <<"HERE";
non-persistent memory buffering of all the possible write requests.</p>
<span class="constant">sandbox commit buffer</span> is involved only in the
- case @{[ a_href '#sandbox','sandboxing feature' ]} is active. It will
+ case @{[ a_href 'Details.html.pl#sandbox','sandboxing feature' ]} is active. It will
buffer any writes to the device during the sandbox run to prevent
filesystem damage if the driver would fail in the meantime. If the
filesystem gets finally successfully unmounted this sandbox buffer can be
Now we need to transparently
@{[ captive_srcfile 'src/libcaptive/sandbox/sandbox.idl','connect' ]}
the device interface of <span class="type">GIOChannel</span> type through
- @{[ a_href '#sandbox','CORBA/ORBit' ]} to the sandboxed slave.
+ @{[ a_href 'Details.html.pl#sandbox','CORBA/ORBit' ]} to the sandboxed slave.
<p>Such device is still only a UNIX style GLib <span
class="type">GIOChannel</span> type at this point. As we need to supply it
<p>The filesystem driver is called by the core W32 kernel implementation of
<span class="constant">libcaptive</span> in
- @{[ a_href '#synchronous','synchronous way' ]} in single-shot manner instead of
+ @{[ a_href 'Details.html.pl#synchronous','synchronous way' ]} in single-shot manner instead of
the several reentrancies while waiting for the disk I/O completions as can
be seen in the original
<span class="productname">Microsoft Windows NT</span>.
<a href="#client_interface_customapp">a custom application accessing
the W32 filesystem driver</a>.</p>
- <p>@{[ a_href '#sandbox','CORBA/ORBit' ]} hits us again – we need to
+ <p>@{[ a_href 'Details.html.pl#sandbox','CORBA/ORBit' ]} hits us again – we need to
@{[ captive_srcfile 'src/libcaptive/sandbox/sandbox.idl','translate' ]}
the @{[ a_href '#client_interface','custom filesystem API interface' ]}
out of the sandboxed slave to the UNIX space.</p>
<a name="demultiplexing_master">demultiplexing single API operations</a>
to multiple its connected sandbox slaves in transparent way
as each of them handles
- @{[ a_href '#mounted_one','just one filesystem device' ]}.</p>
+ @{[ a_href 'Details.html.pl#mounted_one','just one filesystem device' ]}.</p>
<p>The rest of the story is not much special for this project since this is
a common UNIX problem how to offer user space implemented UNIX filesystem
needs multiple operating threads (each UNIX kernel operation needs
one free lufsd slot/thread to not to fail immediately).
As <span class="constant">libcaptive</span> is
- @{[ a_href '#synchronous','single-threaded' ]} all the operations
+ @{[ a_href 'Details.html.pl#synchronous','single-threaded' ]} all the operations
get always synchronized by
<span class="constant">liblufs-captivefs</span>
before their pass over to <span class="constant">libcaptive</span>.</p>
HERE
-My::Web->footer();
+project::captive::doc::Macros->footer();