modperl bootstrap
authorshort <>
Fri, 26 Sep 2003 08:26:17 +0000 (08:26 +0000)
committershort <>
Fri, 26 Sep 2003 08:26:17 +0000 (08:26 +0000)
228 files changed:
.htaccess
CV.html.pl [moved from project/Islet/index.html.pl with 73% similarity]
Makefile-head.am
Makefile.am
WebConfig.pm
autogen.pl
configure.ac [moved from configure.in with 88% similarity]
dia-w.sh.in [new file with mode: 0755]
have_js.js.pl [new file with mode: 0755]
index.html.pl [deleted file]
project/.htaccess [deleted file]
project/FordFulk/Index.html.pl [moved from project/FordFulk/index.html.pl with 74% similarity]
project/FordFulk/ListItem.pm
project/FordFulk/Makefile.am
project/Heat/Index.html.pl [moved from project/Heat/index.html.pl with 74% similarity]
project/Heat/ListItem.pm
project/Heat/Makefile.am
project/Index.html.pl [moved from project/list.cgi.pl with 87% similarity]
project/Islet/Index.html.pl [new file with mode: 0755]
project/Islet/ListItem.pm
project/Islet/Makefile.am
project/Makefile.am
project/Nokia61/Index.html.pl [moved from project/Nokia61/index.html.pl with 71% similarity]
project/Nokia61/ListItem.pm
project/Nokia61/Makefile.am
project/badblock_guess/Index.html.pl [moved from project/badblock_guess/index.html.pl with 78% similarity]
project/badblock_guess/ListItem.pm
project/badblock_guess/Makefile.am
project/captive/Index.html.pl [new file with mode: 0755]
project/captive/ListItem.pm [new file with mode: 0755]
project/captive/Makefile.am [new file with mode: 0644]
project/captive/Preview.html.pl [moved from project/pipebuf/index.html.pl with 73% similarity]
project/captive/Resources.html.pl [new file with mode: 0755]
project/captive/Thanks.html.pl [new file with mode: 0755]
project/captive/apiref/.htaccess [new file with mode: 0644]
project/captive/apiref/Makefile.am [new file with mode: 0644]
project/captive/apiref/captive-apiref-calltype-reactos.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-init.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-ldr-exports.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-ldr.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-macros.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-mm.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-ps-reactos.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-rtl-file.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-signal.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-storage.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-unicode-reactos.html [new file with mode: 0644]
project/captive/apiref/captive-apiref-unicode.html [new file with mode: 0644]
project/captive/apiref/ch01.html [new file with mode: 0644]
project/captive/apiref/home.png [new file with mode: 0644]
project/captive/apiref/index.html [new file with mode: 0644]
project/captive/apiref/left.png [new file with mode: 0644]
project/captive/apiref/right.png [new file with mode: 0644]
project/captive/apiref/up.png [new file with mode: 0644]
project/captive/dist/captive-0.9-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-0.9-0.src.rpm [new file with mode: 0644]
project/captive/dist/captive-0.9-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/captive-0.9-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-0.9.tar.gz [new file with mode: 0644]
project/captive/dist/captive-debuginfo-0.9-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-install-0.9-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-install-0.9-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/captive-install-0.9-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-install_0.9_i386.deb [new file with mode: 0644]
project/captive/dist/captive-lufs-0.9-0.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-lufs-0.9-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/captive-lufs-0.9-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/captive-lufs_0.9_i386.deb [new file with mode: 0644]
project/captive/dist/captive_0.9.dsc [new file with mode: 0644]
project/captive/dist/captive_0.9.tar.gz [new file with mode: 0644]
project/captive/dist/captive_0.9_i386.changes [new file with mode: 0644]
project/captive/dist/captive_0.9_i386.deb [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.dsc [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.changes [new file with mode: 0644]
project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb [new file with mode: 0644]
project/captive/dist/lufs-0.9.6-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/lufs-0.9.6-1captive1.src.rpm [new file with mode: 0644]
project/captive/dist/lufs-0.9.6-1captive1mdk91.i586.rpm [new file with mode: 0644]
project/captive/dist/lufs-0.9.6captive1.tar.gz [new file with mode: 0644]
project/captive/dist/lufs-debuginfo-0.9.6-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive1.dsc [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive1.tar.gz [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive1_i386.changes [new file with mode: 0644]
project/captive/dist/lufs_0.9.6captive1_i386.deb [new file with mode: 0644]
project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-200309071734captive1.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb [new file with mode: 0644]
project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-1.0-0.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-1.0-0.src.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-1.0.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0-0.i386.rpm [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0.dsc [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0_i386.changes [new file with mode: 0644]
project/captive/dist/ntfsprogs-gnomevfs_1.0_i386.deb [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1.dsc [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1.tar.gz [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1_i386.changes [new file with mode: 0644]
project/captive/dist/ntfsprogs_200309071734captive1_i386.deb [new file with mode: 0644]
project/captive/doc/Index.html.pl [new file with mode: 0755]
project/captive/doc/Makefile.am [new file with mode: 0644]
project/captive/doc/arch-W32.png [new file with mode: 0644]
project/captive/doc/arch-W32.sxd [new file with mode: 0644]
project/captive/doc/arch-W32s.png [new file with mode: 0644]
project/captive/doc/arch-captive.sxd [new file with mode: 0644]
project/captive/doc/dia/Makefile.am [new file with mode: 0644]
project/captive/doc/dia/parent-connector.dia [new file with mode: 0644]
project/captive/doc/fig/Makefile.am [new file with mode: 0644]
project/captive/doc/fig/architecture.fig [new file with mode: 0644]
project/captive/doc/fig/calltype_cdecl.fig [new file with mode: 0644]
project/captive/doc/fig/calltype_fastcall.fig [new file with mode: 0644]
project/captive/doc/fig/calltype_stdcall.fig [new file with mode: 0644]
project/captive/doc/fig/functype_native_fromunix.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_native_fromw32.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_pass_fromunix.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_pass_fromw32.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_wrap_fromunix.fig [new file with mode: 0644]
project/captive/doc/fig/functype_patched_wrap_fromw32.fig [new file with mode: 0644]
project/captive/doc/fig/functype_unpatched_native_fromw32.fig [new file with mode: 0644]
project/captive/doc/fig/sandbox.fig [new file with mode: 0644]
project/captive/doc/ratio.png [new file with mode: 0644]
project/captive/doc/ratio.sxi [new file with mode: 0644]
project/checkstatic/Index.html.pl [new file with mode: 0755]
project/checkstatic/ListItem.pm
project/checkstatic/Makefile.am
project/cvsbranchdiff/Index.html.pl [moved from project/cvsbranchdiff/index.html.pl with 71% similarity]
project/cvsbranchdiff/ListItem.pm
project/cvsbranchdiff/Makefile.am
project/cvsutil/Index.html.pl [moved from project/cvsutil/index.html.pl with 72% similarity]
project/cvsutil/ListItem.pm
project/cvsutil/Makefile.am
project/d1xnet/Index.html.pl [moved from project/d1xnet/index.html.pl with 72% similarity]
project/d1xnet/ListItem.pm
project/d1xnet/Makefile.am
project/doswatch/Index.html.pl [moved from project/doswatch/index.html.pl with 72% similarity]
project/doswatch/ListItem.pm
project/doswatch/Makefile.am
project/fixhtml/Index.html.pl [moved from project/fixhtml/index.html.pl with 72% similarity]
project/fixhtml/ListItem.pm
project/fixhtml/Makefile.am
project/ircon/Index.html.pl [moved from project/ircon/index.html.pl with 87% similarity]
project/ircon/ListItem.pm
project/ircon/Makefile.am
project/kix/Index.html.pl [moved from project/kix/index.html.pl with 72% similarity]
project/kix/ListItem.pm
project/kix/Makefile.am
project/kware/Index.html.pl [moved from project/kware/index.html.pl with 72% similarity]
project/kware/ListItem.pm
project/kware/Makefile.am
project/line9k/Index.html.pl [moved from project/line9k/index.html.pl with 76% similarity]
project/line9k/ListItem.pm
project/line9k/Makefile.am
project/mdsms/Index.html.pl [moved from project/mdsms/index.html.pl with 72% similarity]
project/mdsms/ListItem.pm
project/mdsms/Makefile.am
project/mod_auth_tacacs/Index.html.pl [moved from project/mod_auth_tacacs/index.html.pl with 71% similarity]
project/mod_auth_tacacs/ListItem.pm
project/mod_auth_tacacs/Makefile.am
project/mot2as/Index.html.pl [moved from project/mot2as/index.html.pl with 72% similarity]
project/mot2as/ListItem.pm
project/mot2as/Makefile.am
project/netstat/Index.html.pl [moved from project/netstat/index.html.pl with 81% similarity]
project/netstat/ListItem.pm
project/netstat/Makefile.am
project/oslik/Index.html.pl [moved from project/oslik/index.html.pl with 74% similarity]
project/oslik/ListItem.pm
project/oslik/Makefile.am
project/patchd2/Index.html.pl [moved from project/patchd2/index.html.pl with 72% similarity]
project/patchd2/ListItem.pm
project/patchd2/Makefile.am
project/pipebuf/Index.html.pl [new file with mode: 0755]
project/pipebuf/ListItem.pm
project/pipebuf/Makefile.am
project/ppp9k/Index.html.pl [moved from project/ppp9k/index.html.pl with 72% similarity]
project/ppp9k/ListItem.pm
project/ppp9k/Makefile.am
project/redirector_ad/Index.html.pl [moved from project/redirector_ad/index.html.pl with 71% similarity]
project/redirector_ad/ListItem.pm
project/redirector_ad/Makefile.am
project/smbfs/Index.html.pl [moved from project/smbfs/index.html.pl with 72% similarity]
project/smbfs/ListItem.pm
project/smbfs/Makefile.am
project/sshpatch/Index.html.pl [moved from project/sshpatch/index.html.pl with 82% similarity]
project/sshpatch/ListItem.pm
project/sshpatch/Makefile.am
project/step/Index.html.pl [moved from project/step/index.html.pl with 72% similarity]
project/step/ListItem.pm
project/step/Makefile.am
project/surprise/Index.html.pl [moved from project/surprise/index.html.pl with 70% similarity]
project/surprise/ListItem.pm
project/surprise/Makefile.am
project/surprise/surprise-gnome-0.gif [deleted file]
project/surprise/surprise-gnome-0.png [new file with mode: 0644]
project/tac_plus/Index.html.pl [moved from project/tac_plus/index.html.pl with 83% similarity]
project/tac_plus/ListItem.pm
project/tac_plus/Makefile.am
project/tcp_rto/Index.html.pl [moved from project/tcp_rto/index.html.pl with 72% similarity]
project/tcp_rto/ListItem.pm
project/tcp_rto/Makefile.am
project/tcpdump/Index.html.pl [moved from project/tcpdump/index.html.pl with 81% similarity]
project/tcpdump/ListItem.pm
project/tcpdump/Makefile.am
project/timeplan/Index.html.pl [moved from project/timeplan/index.html.pl with 72% similarity]
project/timeplan/ListItem.pm
project/timeplan/Makefile.am
project/vblib/Index.html.pl [moved from project/vblib/index.html.pl with 72% similarity]
project/vblib/ListItem.pm
project/vblib/Makefile.am
project/winvnc/Index.html.pl [moved from project/winvnc/index.html.pl with 87% similarity]
project/winvnc/ListItem.pm
project/winvnc/Makefile.am
project/wllib/Index.html.pl [moved from project/wllib/index.html.pl with 72% similarity]
project/wllib/ListItem.pm
project/wllib/Makefile.am
project/xbill/Index.html.pl [moved from project/xbill/index.html.pl with 72% similarity]
project/xbill/ListItem.pm
project/xbill/Makefile.am
redirect.pl [moved from project/checkstatic/index.html.pl with 79% similarity]

index ad263f7..f815410 100644 (file)
--- a/.htaccess
+++ b/.htaccess
@@ -1,4 +1,4 @@
-DirectoryIndex index.html
+DirectoryIndex Index.html.pl
 
 AddType text/html .shtml
 AddHandler server-parsed .shtml
@@ -42,3 +42,13 @@ php_flag magic_quotes_runtime off
        RewriteEngine on
        RewriteRule ^(/home/short/www/www.jankratochvil.net/)?sw/*(.*)$ http://www.jankratochvil.net/project/ [R=301] [L]
 </Files>
+
+<IfDefine SSL>
+       <Files "*.pl">
+               RewriteEngine on
+               RewriteRule ^.*?/www[.]jankratochvil[.]net/(.*)$ http://localhost:7680/$1 [P]
+       </Files>
+</IfDefine>
+<IfDefine !SSL>
+       Options +ExecCGI
+</IfDefine>
similarity index 73%
rename from project/Islet/index.html.pl
rename to CV.html.pl
index 5ef85ab..c512858 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # 
 # $Id$
-# Main page of 'My::Project::icp'
+# Main page Perl template.
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
@@ -18,6 +18,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
 use vars qw($VERSION $CVS_ID);
 $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
@@ -25,20 +26,21 @@ $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
-use project::icp::ListItem;
+require 'CGI';
+require 'My::Project';
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::icp::ListItem,
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'CV - Jan Kratochvil',
+               "footer_ids"=>0,
                );
+My::Web->heading();
 
-print <<'HERE';
-<iframe src="Islet/" width="90%" height="500" />
-<a href="Islet/">Program on-line</a>.
-</iframe>
-HERE
 
-print '<table border="0"><tr><td align="center">'.My::Web::img("Islet.png","Applet demo screen").'</td></tr></table>'."\n";
+print "<h1>Nothing to see here, move along.</h1>\n";
+
 
 My::Web->footer();
index 4f4aa18..c3ea56a 100644 (file)
@@ -28,12 +28,21 @@ noinst_DATA=
 # Generally better behaviour but it requires GNU make. Harmless otherwise.
 .DELETE_ON_ERROR:
 
-%.html: %.html.pl $(top_srcdir)/My/Web.pm $(top_srcdir)/WebConfig.pm
-       perl -I$(top_srcdir) >$@ $<
-
 %.ppm: %.fig Makefile
        fig2dev -L ppm -S4 -b10 $< $@
 
 %.gif: %.ppm
-       ppmtogif -sort $< >$@
+       ppmtogif -quiet -sort $< >$@
+
+%.ppm: %.gif
+       giftopnm $< >$@
+
+%.png: %.ppm
+       pnmtopng $< >$@
+
+%.ppm: %.png
+       pngtopnm $< >$@
+
+%.png: %.dia $(top_srcdir)/dia-w.sh
+       $(top_srcdir)/dia-w.sh --nosplash --export $@ $<
 
index 00a170c..ec18d28 100644 (file)
@@ -19,7 +19,7 @@
 include $(top_srcdir)/Makefile-head.am
 
 AUTOMAKE_OPTIONS=foreign
-SUBDIRS=macros project
+SUBDIRS=macros My project
 ## to automatically rebuild aclocal.m4 if any of the macros in
 ## `macros/' change
 @MAINT@include macros/macros.dep
@@ -33,13 +33,15 @@ EXTRA_DIST+= \
                Makefile-head.am \
                autogen.pl \
                .vimrc \
-               ChangeLog
+               ChangeLog \
+               dia-w.sh.in
 
 MAINTAINERCLEANFILES+= \
                ChangeLog
 
 CLEANFILES+= \
-               ChangeLog.bak
+               ChangeLog.bak \
+               dia-w.sh
 
 if MAINTAINER_MODE
 ChangeLog:
@@ -52,7 +54,9 @@ ChangeLog:
 endif
 
 EXTRA_DIST+= \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl \
+       WebConfig.pm \
+       redirect.pl \
+       have_js.js.pl \
+       robots.txt \
+       CV.html.pl
index 1e5db17..a156212 100644 (file)
@@ -30,9 +30,19 @@ use vars qw(@ISA @EXPORT);
 @ISA=qw(Exporter);
 @EXPORT=qw(%WebConfig);
 
+require CGI;
+
+
 our %WebConfig=(
                "admin_mail"=>'web-www.jankratochvil.net@jankratochvil.net',
-               "viewcvs"=>map({ (!$_ ? $_ : s#^/#http://cvs.jankratochvil.net/viewcvs/energie/#); } $ENV{"SCRIPT_NAME"}),
+               "cvs_id_author"=>sub {
+                       my($name)=@_;
+                               return My::Web::a_href("http://www.jankratochvil.net/","Jan Kratochvil") if 0
+                                               || $name eq "short"
+                                               || $name eq "lace";
+                               return CGI::escapeHTML($name);
+                       },
+               "viewcvs"=>"http://cvs.jankratochvil.net/viewcvs/www/www.jankratochvil.net/",
                "title_prefix"=>"Jan Kratochvil",
                );
 
index 9355b62..7f0bc73 100755 (executable)
@@ -30,6 +30,8 @@ use AutoGen;
 use Carp qw(cluck confess);
 
 
+die if $ENV{"SERVER_SOFTWARE"};        # SECURITY: CGI misuse!
+
 AutoGen->run(
                "name"=>"www.jankratochvil.net",
                "COPYRIGHT_HOLDER"=>'Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>',
@@ -37,9 +39,15 @@ AutoGen->run(
                "clean"=>[qw(
                                ./ChangeLog.bak
                                ./INSTALL
+                               ./dia-w.sh
                                ./project/Nokia61/Nokia61
                                ./project/Nokia61/Nokia61_23.cache
+                               ./project/surprise/surprise-gnome-0.gif
+                               ./project/line9k/line9k.png
                                ./project/line9k/line9k.gif
-                               *.html
+                               ./project/captive/doc/fig/*.png
+                               ./project/captive/doc/fig/*.gif
+                               ./project/captive/doc/dia/*.png
+                               ./project/captive/doc/dia/*.gif
                                )],
                );
similarity index 88%
rename from configure.in
rename to configure.ac
index e10d54f..9f278b4 100644 (file)
@@ -20,10 +20,16 @@ AC_INIT(./Makefile-head.am)
 AM_INIT_AUTOMAKE(www.jankratochvil.net,1.0cvs)
 AM_MAINTAINER_MODE
 
+AC_PATH_PROG(PATH_XVNC,Xvnc)
+AC_PATH_PROG(PATH_BC,bc)
+AC_PATH_PROG(PATH_DIA,dia)
+
 dnl "Makefile" output files MUST have pathnames incl./excl. "./" prefix as specified!
 AC_OUTPUT([
 Makefile
+./dia-w.sh
 ./macros/Makefile
+./My/Makefile
 ./project/Makefile
 ./project/step/Makefile
 ./project/icp/Makefile
@@ -62,6 +68,11 @@ Makefile
 ./project/ppp9k/Makefile
 ./project/LaceMail/Makefile
 ./project/line9k/Makefile
+./project/captive/Makefile
+./project/captive/apiref/Makefile
+./project/captive/doc/Makefile
+./project/captive/doc/fig/Makefile
+./project/captive/doc/dia/Makefile
 ])
 
 echo done.
diff --git a/dia-w.sh.in b/dia-w.sh.in
new file mode 100755 (executable)
index 0000000..899f18c
--- /dev/null
@@ -0,0 +1,93 @@
+#! /bin/bash
+# $Id$
+# Try to run "dia" with '-e' option, Xvnc wrapping if needed.
+# Copyright (C) 2000,2003 Jan Kratochvil <project-macros@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+empty=
+if test "x@PATH_XVNC@" != "x@PATH_XVNC$empty@"
+then
+       PATH_XVNC="@PATH_XVNC@"
+fi
+if test "x@PATH_BC@" != "x@PATH_BC$empty@"
+then
+       PATH_BC="@PATH_BC@"
+fi
+if test "x@PATH_DIA@" != "x@PATH_DIA$empty@"
+then
+       PATH_DIA="@PATH_DIA@"
+else
+       PATH_DIA=dia
+fi
+
+unset xpid
+if test "x$PATH_XVNC" != "x"
+then
+       xport=$[($$%4096)+2000]
+       notdone=true
+       run=true
+       while $notdone
+       do
+               if test -r /proc/net/tcp -a "x$PATH_BC" != "x"
+               then
+                       loop=true
+                       while $loop
+                       do
+                               hex="`echo "obase=16;$[$xport+5900]"|$PATH_BC`"
+                               if grep -q ":`echo "000$hex"|tail -c5` " /proc/net/tcp
+                               then
+                                       if $run
+                                       then
+                                               xport=$[$xport+1]
+                                       else
+                                               notdone=false
+                                               loop=false
+                                       fi
+                               else
+                                       if $run
+                                       then
+                                               loop=false
+                                       else
+                                               echo -n .
+                                               sleep 1
+                                       fi
+                               fi
+                       done
+               else
+                       notdone=$run
+               fi
+               if $run
+               then
+                       export DISPLAY=":$xport"
+                       $PATH_XVNC $DISPLAY & xpid=$!
+                       run=false
+               fi
+       done
+else
+       if test "x$DISPLAY" = "x"
+       then
+               export DISPLAY=":0"
+       fi
+fi
+
+$PATH_DIA --disable-crash-dialog "$@";r=$?
+
+if test "x$xpid" != "x"
+then
+       kill $xpid
+fi
+
+exit $r
diff --git a/have_js.js.pl b/have_js.js.pl
new file mode 100755 (executable)
index 0000000..3ae375d
--- /dev/null
@@ -0,0 +1,65 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# JavaScript detection scriptlet Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+
+
+my $W=My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Homepage of Jan Kratochvil',
+               );
+# Do not: My::Web->heading();
+$W->{"r"}->send_http_header("text/javascript");
+
+# Prevent redirection of some top (referring) foreign webpage as it
+# may not pass "have_js=1" to us anyway. (for example Google cache)
+print ""
+               .'if (0'."\n"
+               ."\t\t".'|| window.location.hostname=="'.$W->{"r"}->hostname().'" && window.location.port==  80'."\n"
+               ."\t\t".'|| window.location.hostname=="'.'localhost'          .'" && window.location.port==7680)'."\n";
+print <<'HERE';
+       {
+               var searchN=window.location.search;
+               if (searchN=="" || searchN=="?")
+                       searchN="?";
+               else
+                       searchN+="&";
+               searchN+="have_js=1";
+
+               window.location.href
+                               =window.location.protocol+"//"
+                               +window.location.hostname
+                               +(window.location.port==80 ? "" : ":"+window.location.port)
+                               +window.location.pathname
+                               +window.location.hash
+                               +searchN;
+               }
+HERE
+
+# Do not: My::Web->footer();
diff --git a/index.html.pl b/index.html.pl
deleted file mode 100755 (executable)
index 2ab5986..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#! /usr/bin/perl
-# 
-# $Id$
-# Main page Perl template.
-# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
-# 
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; exactly version 2 of June 1991 is required
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
-use strict;
-use warnings;
-
-use My::Web;
-use Carp qw(cluck confess);
-
-
-My::Web->init(
-               "title"=>'Homepage of Jan Kratochvil alias Lace',
-               );
-My::Web->heading();
-
-print <<'HERE';
-<h1>Jan Kratochvil</h1>
-<hr />
-
-<h2><a href="project/">Software projects</a></h2>
-<blockquote>
-<p>List of my software projects</p>
-</blockquote>
-
-<h2><a href="http://cvs.jankratochvil.net/">ViewCVS of my CVS repository</a></h2>
-<blockquote>
-<p>My public CVSROOT; Accessible storage of all of my projects, config files, webs and more.</p>
-</blockquote>
-
-<h2>Contact</h2>
-<blockquote>
-<p>e-mail: <a href="mailto:web-www.jankratochvil.net@jankratochvil.net">web-www.jankratochvil.net@jankratochvil.net</a></p>
-</blockquote>
-
-HERE
-
-My::Web->footer();
diff --git a/project/.htaccess b/project/.htaccess
deleted file mode 100644 (file)
index 311399d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Options +ExecCGI
-DirectoryIndex list.cgi.pl index.html
similarity index 74%
rename from project/FordFulk/index.html.pl
rename to project/FordFulk/Index.html.pl
index 5134e2c..79bc547 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::FordFulk::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::FordFulk::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::FordFulk::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::FordFulk::ListItem::ListItem,
                );
 
 print <<'HERE';
index 055e13e..5e5f66e 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::FordFulk;
+package project::FordFulk::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Ford-Fulkenson Algorithm Demonstration",
                "priority"=>5,
                "download"=>"FordFulk/FordFulk.zip",
index b063480..0c1658b 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 74%
rename from project/Heat/index.html.pl
rename to project/Heat/Index.html.pl
index 4fd1ad1..61ed75e 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::Heat::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::Heat::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::Heat::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::Heat::ListItem::ListItem,
                );
 
 print <<'HERE';
index 8781cff..5440adf 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::Heat;
+package project::Heat::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Heat Distribution Simulation",
                "priority"=>5,
                "download"=>"Heat/Heat.zip",
index b25e8c7..88d647c 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 87%
rename from project/list.cgi.pl
rename to project/Index.html.pl
index eeadeef..2e42b10 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
-use lib qw(/home/short/lib/perl5/site_perl/5.6.0/i386-linux /home/short/lib/perl5/site_perl/5.6.0 /home/short/lib/perl5/site_perl/i386-linux /home/short/lib/perl5/site_perl /home/short/lib/perl5/5.6.0/i386-linux /home/short/lib/perl5/5.6.0 /home/short/lib/perl5/i386-linux /home/short/lib/perl5);
-
-use lib "../";
+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;
+require 'CGI';
+require 'My::Project';
 
 use constant ENTRIES=>"CVS/Entries";
 use constant ENTRIES_LOG=>"CVS/Entries.Log";
 
 
 My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
                "title"=>'Project List',
                );
 My::Web->heading();
@@ -45,7 +45,7 @@ my $CGI=CGI->new();
 print <<'HERE';
 <h1>Project List of <a href="mailto:web-www.jankratochvil.net@jankratochvil.net">Jan Kratochvil</a></h1>
 
-<form action="list.cgi.pl" method="get"><p>
+<form action="Index.pl" method="get"><p>
 <select name="description_opt" onchange="this.form.submit();">
 HERE
 print '<option value="0"'.(!$CGI->param("description_opt") ? ' selected="selected"' : '').'>only list</option>'."\n";
@@ -72,10 +72,10 @@ for my $ENTRIES (ENTRIES,ENTRIES_LOG) {
 
 my %item;
 for my $dir (keys(%dirs)) {
-       require "$dir/ListItem.pm";
-       my $item=eval('\%My::Project::'.$dir.'::ListItem');
-       do { warn "Broken $dir/List.pm"; next; } if !defined %$item;
-       $item{$dir}=$item;
+       require "project::${dir}::ListItem";
+       my $item=eval('\@project::'.$dir.'::ListItem::ListItem');
+       do { warn "Broken project/$dir/ListItem.pm"; next; } if !defined $item;
+       $item{$dir}={ My::Project::project_arr_to_hash(@$item) };
        }
 
 # $col{"name"}{"show"}=1
diff --git a/project/Islet/Index.html.pl b/project/Islet/Index.html.pl
new file mode 100755 (executable)
index 0000000..136fb10
--- /dev/null
@@ -0,0 +1,47 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::icp'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::icp::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+use My::Project;
+use project::icp::ListItem;
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::icp::ListItem::ListItem,
+               );
+
+print <<'HERE';
+<iframe src="Islet/" width="90%" height="500" />
+<a href="Islet/">Program on-line</a>.
+</iframe>
+HERE
+
+print '<table border="0"><tr><td align="center">'.My::Web::img("Islet","Applet demo screen").'</td></tr></table>'."\n";
+
+My::Web->footer();
index 11104f9..70570ef 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::icp;
+package project::icp::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>'<a href="http://www.stv.cz/icp/">ICP 1998</a> Competition Software',
                "priority"=>5,
                "download"=>"Islet/Islet.zip",
index 3d2c020..d71feb9 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
index 59c3e05..d6809e2 100644 (file)
@@ -55,10 +55,8 @@ SUBDIRS= \
                cvsbranchdiff   \
                ppp9k           \
                LaceMail        \
-               line9k
+               line9k          \
+               captive
 
 EXTRA_DIST+= \
-       list.cgi.pl
-
-#noinst_DATA+= \
-#      index.html
+       Index.html.pl
similarity index 71%
rename from project/Nokia61/index.html.pl
rename to project/Nokia61/Index.html.pl
index bb28341..5c938e6 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::Nokia61::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::Nokia61::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::Nokia61::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::Nokia61::ListItem::ListItem,
                );
 
+do { system 'make >&2 -s '.$_ if ! -f $_; } for ("./Nokia61");
 print <<'HERE';
 <iframe src="Nokia61.php?base=.%2F" width="90%" height="500" />
 <a href="Nokia61.php?base=.%2F">Program on-line</a>.
index 6ce277b..a8218bd 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::Nokia61;
+package project::Nokia61::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Nokia Game &quot;Rotation&quot;",
                "priority"=>7,
                "download"=>"Nokia61.c",
index ac789b1..a7798b9 100644 (file)
@@ -20,11 +20,11 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html \
-       Nokia61
+       Index.html.pl
 
 Nokia61: Nokia61.c
        gcc -Wall -ggdb3 -o $@ $<
+
+CLEANFILES+= \
+       Nokia61 \
+       Nokia61_23.cache
similarity index 78%
rename from project/badblock_guess/index.html.pl
rename to project/badblock_guess/Index.html.pl
index 2855f2c..5cd6015 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::badblock_guess::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::badblock_guess::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::badblock_guess::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::badblock_guess::ListItem::ListItem,
                );
 
 print <<'HERE';
index 1ff3438..45e3beb 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::badblock_guess;
+package project::badblock_guess::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Recovery of Data from a Damaged Disk",
                "priority"=>7,
                "download-compiled static binary"=>"badblock-guess",
index ef293ce..c759b6b 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/captive/Index.html.pl b/project/captive/Index.html.pl
new file mode 100755 (executable)
index 0000000..6620116
--- /dev/null
@@ -0,0 +1,382 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::captive'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+use My::Project;
+use project::captive::ListItem;
+
+
+my $W=My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::captive::ListItem::ListItem,
+               "head_css"=>"
+.reqpkg { font-style: italic; }
+.stuff  { font-style: italic; font-size: larger; margin-left: 20%; margin-right: 10%; }
+.re     { font-style: italic; }
+",
+               );
+
+
+print vskip("10ex")."<h1 align=\"center\">!!! DO NOT DISCLOSE - **************** !!!</h1>\n".vskip("10ex");
+
+print <<"HERE";
+<h1>The First Read/Write NTFS for Free Operating Systems</h1>
+<h1>The First Free Microsoft Windows Kernel API Emulation</h1>
+HERE
+
+my @stuff=(
+               "A lot of people claim themselves as Windows Programmers.\n"
+                               ." Now I can finally join them - I also wrote my own Microsoft Windows.",
+               "Why do they need <a href=\"http://www.winsupersite.com/reviews/winserver2k3_gold2.asp\">5000 developers</a>"
+                               ." to write Microsoft Windows when it is just One Man Show task?",
+
+
+
+               "My first Microsoft Windows program ever written? Some 'helloworld'?"
+                               ." <span class=\"quote\">hal.dll</span>.",
+               );
+
+print "<p class=\"stuff\">$_</p>\n" for (@stuff);
+print vskip "3ex";
+
+
+print <<'HERE';
+<table border="1" align="center" style="text-align: center;"><tr><th>Distribution</th>
+               <th>Installation Case #1<br />Filesystem and installer<br />(recommended)</th>
+               <th>Installation Case #2<br />Manual installation<br />(filesystem available)</th>
+               <th>Installation Case #3<br />Command-line client<br />(no filesystem access)</th></tr>
+HERE
+my %pkg=(
+               1=>[qw(captive captive-lufs captive-install lufs gnome-vfs-httpcaptive ntfsprogs ntfsprogs-gnomevfs)],
+               2=>[qw(captive captive-lufs                 lufs)],
+               3=>[qw(captive)],
+               );
+my %reqpkg=(
+               1=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt          libgnomeui)],
+               2=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt)],
+               3=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)],
+               );
+my %version=(
+               map(($_=>["0.9","0"]),qw(captive captive-lufs captive-install)),
+               "lufs"=>["0.9.6","1captive1"],
+               "gnome-vfs-httpcaptive"=>["2.3.8captive2","0"],
+               "ntfsprogs"=>["200309071734","1captive1"],
+               "ntfsprogs-gnomevfs"=>["1.0","0"],
+               );
+my %has_rh8=(map(($_=>1),qw(
+               gnome-vfs-httpcaptive
+               captive
+               captive-lufs
+               captive-install
+               )));
+my %has_mdk91=(map(($_=>1),qw(
+               gnome-vfs-httpcaptive
+               lufs
+               captive
+               captive-lufs
+               captive-install
+               )));
+my %has_devel=(map(($_=>1),qw(
+               ntfsprogs
+               )));
+my %pkg_nosrc=(map(($_=>1),qw(
+               captive-lufs
+               captive-install
+               )));
+my @dist=(
+               {
+                       "name"=>"Red Hat 9<br />Shrike i386",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       my $file="$pkg-$version_base-$version_ext.i386.rpm";
+                                       my $r=a_href "dist/$file",$file;
+                                       (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
+                                       $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Red Hat 8<br />Psyche i386",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       my $file="$pkg-$version_base-$version_ext".(!$has_rh8{$pkg} ? "" : "rh8").".i386.rpm";
+                                       my $r=a_href "dist/$file",$file;
+                                       (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
+                                       $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       if ($pkg eq "captive-install") {
+                                               for (qw(libxml2-2.5.4-1.i386.rpm libxml2-python-2.5.4-1.i386.rpm)) {
+                                                       $r.="<br />".a_href('ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/'.$_,$_)." of Red Hat 9";
+                                                       }
+                                               }
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Mandrake 9.1<br />Bamboo i586",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       my $file="$pkg-$version_base-$version_ext".(!$has_mdk91{$pkg} ? ".i386.rpm" : "mdk91.i586.rpm");
+                                       my $r=a_href "dist/$file",$file;
+                                       (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
+                                       $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Red Hat .src.rpm<br />(of 9 - Shrike)",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       return () if $pkg_nosrc{$pkg};
+                                       my $file="$pkg-$version_base-$version_ext.src.rpm";
+                                       return $file,$file;
+                               },
+                       },
+               {
+                       "name"=>"Debian GNU/Linux<br />'unstable' i386",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       $version_ext=~s/^\d+//;
+                                       my $file="${pkg}_$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext)."_i386.deb";
+                                       my $r=a_href "dist/$file",$file;
+                                       (my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/;
+                                       $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+                                       return $r;
+                               },
+                       },
+               {
+                       "name"=>"Debian GNU/Linux<br />sources",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       return () if $pkg_nosrc{$pkg};
+                                       $version_ext=~s/^\d+//;
+                                       my $file="${pkg}_$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext);
+                                       return CGI::escapeHTML($file).":"
+                                                       .' '     .a_href("dist/$file.dsc",".dsc","size"=>0)
+                                                       .'&nbsp;'.a_href("dist/$file.tar.gz",".tar.gz");
+                               },
+                       },
+               {
+                       "name"=>"Sources (.tar.gz)",
+                       "out"=>sub {
+                               my($pkg,$version_base,$version_ext)=@_;
+                                       return () if $pkg_nosrc{$pkg};
+                                       $version_ext=~s/^\d+//;
+                                       my $file="$pkg-$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext).".tar.gz";
+                                       return $file,$file;
+                               },
+                       },
+               );
+
+for my $dist (@dist) {
+       print "<tr>";
+               print "<td>".$dist->{"name"}."</td>";
+               for my $case (1,2,3) {
+                       print "<td>";
+                       print join("<br />",map({ my $pkg=$_;
+                               my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}});
+                               (!defined $text ? ($file) || () : (a_href("dist/$file",$text)));
+                               } @{$pkg{$case}}));
+                       print "</td>";
+                       }
+       print "</tr>\n";
+       }
+print <<'HERE';
+</table>
+HERE
+
+print vskip "3ex";
+
+print <<"HERE";
+<h1>Installation notes</h1>
+
+<p>You should first run <b>captive-install-acquire</b> command to check your
+available Microsoft Windows drivers versions. Now you can execute:</p>
+
+<blockquote>
+<p class="quote"># mount -t captive-ntfs /dev/hda1 /mnt/dosc</p>
+</blockquote>
+
+<h2>Package version conflicts</h2>
+
+<dl>
+
+<dt><a href="http://lufs.sourceforge.net/lufs/">lufs</a></dt>
+<dd><p><b>'captive' version required</b>: Although you may already have the
+original package installed you must replace it by the local 'captive'-marked
+version containing some 'captive'-essential fixes and extensions.</p></dd>
+
+<dt><a href="http://linux-ntfs.sourceforge.net/">ntfsprogs</a></dt>
+<dd><p><b>Original version >=200309071734 sufficient</b>:
+The package downloadable here has no code patches - you can freely use the
+original version instead.  Unfortunately the last public release is
+<b>1.7.1</b> while this project requires at least
+<a href="http://linux-ntfs.sourceforge.net/snapshots/">snapshot</a> version
+<b><a href="http://linux-ntfs.sourceforge.net/snapshots/ntfsprogs-200309071734.tar.bz2">200309071734</a></b>
+which is not packaged (.rpm/.deb) yet. Packaged versions are provided here for
+your convenience.</p></dd>
+
+</dl>
+
+
+<h2>LUFS kernel driver module</h2>
+
+<p><a href="http://lufs.sourceforge.net/lufs/">LUFS</a> (Linux Userland File
+System) needs Linux kernel module driver (<i>lufs.o</i>) compatible with your
+running Linux kernel. Binary driver is supplied already precompiled for many
+Linux kernel versions in the binary packages above (<b>.i386.rpm</b> and
+<b>_i386.deb</b> archives).</p>
+
+<p>If you cannot <b>mount</b>(8) your NTFS filesystem you should run <span
+class="quote">/usr/share/lufs/prepmod</span> to see the reasons. It is always
+recommended to upgrade to latest stable kernel supplied by your GNU/Linux
+distribution vendor. In the case you are running kernel not supported by the
+precompiled set of binary modules you should install package
+<b>kernel-source</b> (Red Hat) or <b>kernel-headers</b> (Debian) matching your
+Linux kernel version (<b>rpm&nbsp;-q&nbsp;kernel</b>) and re-run <span
+class="quote">/usr/share/lufs/prepmod</span>.</p>
+
+
+<h2>The First Free Microsoft Windows Kernel API Emulation</h2>
+
+<p>Compatibility with existing binary Microsoft Windows file system drivers was
+reached. Microsoft Windows kernel system components required by these drivers
+were analyzed and successfuly emulated in the GNU/Linux operating system.
+Project brings Microsoft Windows kernel emulation framework to support even
+other types Microsoft Windows drivers in the future.</p>
+
+<dl>
+       <dt>Emulation principle equivalent</dt>
+       <dd>
+               <p>@{[ a_href('http://www.winehq.com/','Wine Project') ]}</p>
+               <p>No code could be shared - Wine emulates only Microsoft Windows userland.
+               Filesystem drivers completely belong to Microsoft Windows kernelland.</p>
+       </dd>
+
+       <dt>Closed-source read-only-crippled @{[ '$0' ]} equivalent for Microsoft Windows</dt>
+       <dd>
+               <p>@{[ a_href('http://www.sysinternals.com/ntw2k/freeware/ntfswin98.shtml',
+                               'NTFS for Windows 98') ]}</p>
+               <p>There is a @{[ a_href('http://www.sysinternals.com/images/screenshots/ntfs98ap.gif',
+                               'diagram') ]} showing exactly the principle of Captive NTFS project.
+               There is apparently disabled read/write functionality in <i>NTFS for
+               Windows 98</i> as the same company also sells the following product sharing
+               the same codebase:</p>
+       </dd>
+
+       <dt>Closed-source read/write @{[ '$299' ]} equivalent for MS-DOS</dt>
+       <dd>
+               <p>@{[ a_href('http://www.winternals.com/products/repairandrecovery/ntfsdospro.asp',
+                               'NTFSDOS Professional') ]}</p>
+               <p>This product is the most close equivalent to Captive NTFS but it is
+               a commercial product, closed-source and it has filesystem interface only
+               for MS-DOS.</p>
+       </dd>
+
+       <dt>The only real competition: Closed-source read/write @{[ '$299' ]} equivalent</dt>
+       <dd>
+               <p>@{[ a_href('http://www.vmware.com/download/workstation.html',
+                               'VMware Workstation') ]}</p>
+               <p>Original Microsoft Windows operating system can be run inside a virtual
+               machine running under GNU/Linux and share the read-write NTFS disk by using
+               a network file sharing through a&nbsp;VMware virtual network card.</p>
+               <p>You need @{[ '$299' ]} for this product and you need to
+               give up your system security by running un<a href="#sandbox">sandbox</a>ed
+               closed-source program in your GNU/Linux.</p>
+       </dd>
+</dl>
+
+
+<h2>Security</h2>
+
+<p><b>Re: <a href="http://linux-ntfs.sourceforge.net/info/ntfs.html#7.7">7.7
+               Can't we write a wrapper for Windows' driver?</a></<b></p>
+
+<p class="re">&gt; It sounds like a great idea, to start with, but there are numerous
+problems.</p>
+
+<p><span class="re">&gt; The largest technical problem is joining the Windows
+system DLL to the Linux VFS. It could be done, but it wouldn't be pretty.</span><br />
+Yep. :-)</p>
+
+<p><span class="re">&gt; It would have to run as part of the kernel which would mean
+that if it went wrong it could crash the machine. With no source, we might not
+be able to work around the problem.</span><br />
+<a name="sandbox">Nope</a>,
+@{[ a_href('http://lufs.sourceforge.net/lufs/','Linux Userland File System (LUFS)') ]}
+moves the filesystem implementation to UNIX userland where the Microsoft
+Windows filesystem is completely unarmed by Captive jail of chroot(2),
+setuid(2) and setrlimit(2). There only remains one narrow connection to the rest of
+system (by CORBA/ORBit). The filesystem's life environment gets kill(2)ed when
+UNIX is no longer satisfied with it. Safety similiar to
+@{[ a_href('http://www.vmware.com/solutions/security.html','VMware sandbox') ]}.</p>
+
+<p><span class="re">&gt; The next major problem is compati<!--orig. text typo-->bility.
+Which version of the Windows system file would we use? Picking one would limit
+its use, making the wrapper versatile for all of them would be a programming
+nightmare.</span><br />
+Microsoft Windows NTFS filesystem driver is capable of accessing older formats
+of the filesystem. This project currently runs Microsoft Windows XP version,
+porting to Microsoft Windows 2003 Server expected. (Microsoft Windows upgrades
+NTFS disk filesystem to its own version during complete CD-ROM Microsoft
+Windows system installation - such operation is not threat this project use.)</p>
+
+<p><span class="re">&gt; And it gets worse. The legal implications of
+distributing Windows systems files would cause problems.</span><br />
+User must be careful to obey all licensing restrictions according to his
+local country laws.<br />
+<span class="re">&gt; Also the proprietary nature of the driver would mean that
+the other kernel coders would not investigate any problems if someone had used
+the NTFS wrapper.</span><br />
+It does not apply to this project due to the implemented
+<a href="#sandbox">filesystem separation</a>.</p>
+
+@{[ vskip "3ex" ]}
+
+<h1>See also</h1>
+<ul>
+       <li>@{[ a_href('Preview.html.pl','Technology Preview') ]}</li>
+       <li>@{[ a_href('doc/','Developer Documentation') ]}</li>
+       <li>@{[ a_href('apiref/','API Reference Manual') ]} (fragment)</li>
+       <li>
+               @{[ a_href('http://cvs.jankratochvil.net/viewcvs/priv/captive/','CVS repository ViewCVS') ]}
+               (@{[ a_href('http://cvs.jankratochvil.net/viewcvs/priv/reactos/?only_with_tag=captive','ReactOS branch part') ]})
+               </li>
+       <li>@{[ a_href('Thanks.html.pl','Thanks') ]}</li>
+       <li>@{[ a_href('Resources.html.pl','Related Pages') ]}</li>
+</ul>
+
+@{[ vskip "3ex" ]}
+
+<p class="stuff">
+       Why did I install Microsoft Windows and wrote such disgusting piece of code?<br />
+       I expect @{[ a_href($W->{"top_dir"}."/CV.html.pl","yet another challenging task") ]}, !
+</p>
+HERE
+
+
+My::Web->footer();
diff --git a/project/captive/ListItem.pm b/project/captive/ListItem.pm
new file mode 100755 (executable)
index 0000000..8c3bc17
--- /dev/null
@@ -0,0 +1,44 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Definition of 'My::Project::captive' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::ListItem;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+
+our @ListItem=(
+               "name"=>"Captive NTFS Filesystem",
+               "priority"=>9,
+               "summary"=>"MS-Windows NT kernel emulation",
+               "license"=>"GPL",
+               "maintenance"=>"active",
+               "language"=>"C, i386 asm, Perl",
+               "description"=>""
+                               .'<p>The implementation allows applications running under the GNU/Linux operating'
+                               .' system to access NTFS drives. File system driver compatibility with VFAT,'
+                               .' ISO9660 and EXT2 is also provided.</p>'
+                               .'<p>Project runs the original Microsoft Windows drivers to get the best'
+                               .' filesystem compatibility and safety ever reachable.</p>'
+               );
+
+1;
diff --git a/project/captive/Makefile.am b/project/captive/Makefile.am
new file mode 100644 (file)
index 0000000..3911c6c
--- /dev/null
@@ -0,0 +1,29 @@
+# $Id$
+# automake source for the Makefile of project/captive/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+SUBDIRS= \
+               doc
+
+EXTRA_DIST+= \
+               ListItem.pm \
+               Index.html.pl \
+               Thanks.html.pl \
+               Resources.html.pl \
+               Preview.html.pl
similarity index 73%
rename from project/pipebuf/index.html.pl
rename to project/captive/Preview.html.pl
index c06b103..a0856b6 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # 
 # $Id$
-# Main page of 'My::Project::pipebuf'
+# Captive project Preview page Perl template.
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
@@ -18,6 +18,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::captive::Preview;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
 use vars qw($VERSION $CVS_ID);
 $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
@@ -25,12 +26,20 @@ $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
-use project::pipebuf::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::pipebuf::ListItem,
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Technology Preview',
                );
+My::Web->heading();
+
+print "<h1>Captive NTFS Technology Preview</h1>\n";
+
+print img("doc/dia/parent-connector","Parent connector");
+
+
 
 My::Web->footer();
diff --git a/project/captive/Resources.html.pl b/project/captive/Resources.html.pl
new file mode 100755 (executable)
index 0000000..51fb5cb
--- /dev/null
@@ -0,0 +1,76 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project Resources page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Resources;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Internet Resources',
+               );
+My::Web->heading();
+
+
+print "<h1>Captive NTFS Internet Resources</h1>\n";
+print "<ul>\n";
+       my @URLs=(
+# no longer valid: 'NTFS Preinstallation and Windows XP'=>'http://www.microsoft.com/hwdev/tech/storage/ntfs-preinstallP.asp',
+                       'Linux-NTFS Project'=>'http://linux-ntfs.sourceforge.net/',
+                       'ReactOS Project'=>'http://www.reactos.com/',
+                       'Ext2 File System Driver'=>'http://sys.xiloo.com/projects/projects.htm#ext2fsd',
+                       'Wine Project'=>'http://www.winehq.com/',
+                       'Memory Support and Windows Operating Systems'=>'http://www.microsoft.com/whdc/hwdev/platform/server/PAE/PAEmem.mspx',
+                       'GnomeVFS - Filesystem Abstraction library'=>'http://developer.gnome.org/doc/API/gnome-vfs/',
+                       'Linux Userland File System (LUFS)'=>'http://lufs.sourceforge.net/lufs/',
+                       'Partition Surprise'=>'http://surprise.sourceforge.net/',
+                       'ntfsresize'=>'http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html',
+                       'NTPwd NTFS driver'=>'http://www.cgsecurity.org/ntfs.html',
+                       'Microsoft Windows XP Service Pack 1a'
+                                       =>'http://download.microsoft.com/download/9/7/6/9763833d-bd58-41e2-9911-50f64c7252a3/xpsp1a_en_x86_CHK.exe',
+                       'The NT Cache Manager Description'=>'http://www.osr.com/ntinsider/1996/cacheman.htm',
+                       'Learn About NT'."'".'s File-system Cache'=>'http://www.winntmag.com/Articles/Print.cfm?ArticleID=3864',
+                       'NT File System Developers mailing list'=>'http://www.ntfsd.org/archive/',
+                       'IDA Freeware'=>'http://www.simtel.net/pub/pd/29498.html',
+                       'Argument Passing and Naming Conventions'
+                                       =>'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_core_argument_passing_and_naming_conventions.asp',
+                       'MS-DOS FAT Filesystems Support on Linux'=>'ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/dosfstools/',
+                       'MSDN (Microsoft Developer Network) Kernel-Mode Driver Architecture: Windows DDK'
+                                       =>'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/kmhdr_6enb.asp',
+                       'GLib, Gnome Utility Library'=>'http://developer.gnome.org/doc/API/2.0/glib/',
+                       'VMware Workstation'=>'http://www.vmware.com/download/workstation.html',
+                       );
+       for (my @URLa=@URLs;@URLa;) {
+               my $text=shift @URLa;
+               my $url=shift @URLa;
+               print "\t<li>".a_href($url,CGI::escapeHTML($text))."</li>\n";
+               }
+print "</ul>\n";
+
+
+My::Web->footer();
diff --git a/project/captive/Thanks.html.pl b/project/captive/Thanks.html.pl
new file mode 100755 (executable)
index 0000000..dd0e81f
--- /dev/null
@@ -0,0 +1,84 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project Thanks page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::Thanks;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS Thanks',
+               "head_css"=>"
+.name { font-style: italic; }
+",
+               );
+My::Web->heading();
+
+print <<'HERE';
+<h1>Captive NTFS Thanks</h1>
+
+<ul>
+HERE
+
+sub name ($;$$)
+{
+my($name,$pos,$why)=@_;
+
+       my $r="<li>";
+               $r.='<span class="name">'.$name.'</span>';
+               $r.=", $pos" if $pos;
+               $r.=" - $why" if $why;
+       $r.="</li>\n";
+       return $r;
+}
+
+print name "Karel Zatoukal",a_href("http://www.sun.com/","Sun Microsystems");
+print name "Tim Boudreau",a_href("http://www.sun.com/","Sun Microsystems");
+print name a_href_cz('http://www.itpravo.cz/admin.shtml?x=45480','Jiri Cermak'),
+               a_href("http://www.bakernet.com/",'Baker &amp; McKenzie'),
+               'preflight IT law analysis';
+print name a_href('http://www.ucw.cz/~mj/','Martin "MJ" Mares');
+print name a_href("http://sys.xiloo.com/","Matt Wu"),
+               a_href("http://sys.xiloo.com/projects/projects.htm#ext2fsd","Ext2fsd")." developer","W32 tips";
+print name "Lubomir Bulej";
+print name "Tomas Bures";
+print name a_href_cz('http://www.klokan.cz/','Lukas "Klokan" Horalek'),undef(),"services hosting";
+
+print name "Steven Edwards"  ,a_href("http://www.reactos.com/","ReactOS")." developer","W32 tips";
+print name "Casper Hornstrup",a_href("http://www.reactos.com/","ReactOS")." developer","W32 tips";
+print <<'HERE';
+<li>Betatesting
+       <ul>
+       <li>?</li>
+       </ul></li>
+<li>Last but not least - greetings to Danese Cooper, Open Source Diva!</li>
+</ul>
+
+HERE
+
+My::Web->footer();
diff --git a/project/captive/apiref/.htaccess b/project/captive/apiref/.htaccess
new file mode 100644 (file)
index 0000000..717ec6f
--- /dev/null
@@ -0,0 +1 @@
+DirectoryIndex index.html
diff --git a/project/captive/apiref/Makefile.am b/project/captive/apiref/Makefile.am
new file mode 100644 (file)
index 0000000..ad8d991
--- /dev/null
@@ -0,0 +1,41 @@
+# $Id$
+# automake source for the Makefile of project/captive/ API reference doc
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+               captive-apiref-calltype-reactos.html \
+               captive-apiref-init.html \
+               captive-apiref-ldr-exports.html \
+               captive-apiref-ldr.html \
+               captive-apiref-macros.html \
+               captive-apiref-mm.html \
+               captive-apiref-ps-reactos.html \
+               captive-apiref-rtl-file.html \
+               captive-apiref-signal.html \
+               captive-apiref-storage.html \
+               captive-apiref-unicode-reactos.html \
+               captive-apiref-unicode.html \
+               captive-apiref.devhelp \
+               ch01.html \
+               index.html \
+               home.png \
+               left.png \
+               right.png \
+               up.png
+
diff --git a/project/captive/apiref/captive-apiref-calltype-reactos.html b/project/captive/apiref/captive-apiref-calltype-reactos.html
new file mode 100644 (file)
index 0000000..16f5a3e
--- /dev/null
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>calltype_reactos</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-ldr-exports.html" title="ldr_exports"><link rel="next" href="captive-apiref-signal.html" title="signal"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-ldr-exports.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-signal.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-calltype-reactos"></a><div class="titlepage"></div><div class="refnamediv"><h2>calltype_reactos</h2><p>calltype_reactos &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+#define     <a href="captive-apiref-calltype-reactos.html#CAPTIVE-CDECL-CAPS">CAPTIVE_CDECL</a>
+#define     <a href="captive-apiref-calltype-reactos.html#CAPTIVE-STDCALL-CAPS">CAPTIVE_STDCALL</a>
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="CAPTIVE-CDECL-CAPS"></a>CAPTIVE_CDECL</h3><pre class="programlisting">#define CAPTIVE_CDECL    __attribute__((__cdecl__))
+</pre><p>
+Function call type declaration for the real CDECL call type.
+As the default CDECL macro gets disabled (=NOP) during reactos sources
+compilation (and gets undefined to cause error during non-reactos sources
+compilation) you have the chance to do the real CDECL declaration
+by using <a href="captive-apiref-calltype-reactos.html#CAPTIVE-CDECL-CAPS">CAPTIVE_CDECL</a>. You must ifdef it by <tt>LIBCAPTIVE</tt> symbol as it
+is not available during standalone reactos compilation.
+</p><p>
+This macro may be needed to pass control to W32 binary code.</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-STDCALL-CAPS"></a>CAPTIVE_STDCALL</h3><pre class="programlisting">#define CAPTIVE_STDCALL  __attribute__((__stdcall__))
+</pre><p>
+Function call type declaration for the real STDCALL call type.
+As the default STDCALL macro gets disabled (=NOP) during reactos sources
+compilation (and gets undefined to cause error during non-reactos sources
+compilation) you have the chance to do the real STDCALL declaration
+by using <a href="captive-apiref-calltype-reactos.html#CAPTIVE-STDCALL-CAPS">CAPTIVE_STDCALL</a>. You must ifdef it by <tt>LIBCAPTIVE</tt> symbol as it
+is not available during standalone reactos compilation.
+</p><p>
+This macro may be needed to pass control to W32 binary code.</p><p>
+
+</p></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-ldr-exports.html"><b>&lt;&lt; ldr_exports</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-signal.html"><b>signal &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-init.html b/project/captive/apiref/captive-apiref-init.html
new file mode 100644 (file)
index 0000000..4d08a9d
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>init</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="ch01.html" title="Operation Captive"><link rel="next" href="captive-apiref-ldr.html" title="ldr"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-ldr.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-init"></a><div class="titlepage"></div><div class="refnamediv"><h2>init</h2><p>init &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gboolean    <a href="captive-apiref-init.html#captive-init">captive_init</a>                    (void);
+gboolean    <a href="captive-apiref-init.html#captive-shutdown">captive_shutdown</a>                (void);
+void        <a href="captive-apiref-init.html#captive-log-init">captive_log_init</a>                (const struct captive_options *captive_options);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-init"></a>captive_init ()</h3><pre class="programlisting">gboolean    captive_init                    (void);</pre><p>
+Expects captive_options: Parsed by captive_options_parse().
+<tt>NULL</tt> value is forbidden. Field image_iochannel <tt>NULL</tt> value is forbidden.
+</p><p>
+Initializes <tt>libcaptive</tt> and loads the specified filesystem.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if successfuly initialized.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-shutdown"></a>captive_shutdown ()</h3><pre class="programlisting">gboolean    captive_shutdown                (void);</pre><p>
+Closes down <tt>libcaptive</tt>. It should flush all pending buffers and successfuly
+close the filesystem. Variable captive_options-&gt;image_iochannel will not be set to <tt>NULL</tt>,
+you should close such channel yourself.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if successfuly shutdown.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-log-init"></a>captive_log_init ()</h3><pre class="programlisting">void        captive_log_init                (const struct captive_options *captive_options);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>captive_options</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="ch01.html"><b>&lt;&lt; Operation Captive</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-ldr.html"><b>ldr &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-ldr-exports.html b/project/captive/apiref/captive-apiref-ldr-exports.html
new file mode 100644 (file)
index 0000000..4d8e717
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldr_exports</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-storage.html" title="storage"><link rel="next" href="captive-apiref-calltype-reactos.html" title="calltype_reactos"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-storage.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-calltype-reactos.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-ldr-exports"></a><div class="titlepage"></div><div class="refnamediv"><h2>ldr_exports</h2><p>ldr_exports &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-kernel-exports">captive_kernel_exports</a>          (void);
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-kernel-patches">captive_kernel_patches</a>          (void);
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-ModuleList-add-builtin">captive_ModuleList_add_builtin</a>  (const gchar *FullName_utf8,
+                                             ...);
+gboolean    <a href="captive-apiref-ldr-exports.html#captive-ModuleList-patch">captive_ModuleList_patch</a>        (const gchar *FullName_utf8,
+                                             ...);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-kernel-exports"></a>captive_kernel_exports ()</h3><pre class="programlisting">gboolean    captive_kernel_exports          (void);</pre><p>
+Export complete libcaptive modules to reactos. It is done by *.def files used
+by dlltool(1) of Mingw32 compiler suite. We use native host OS compiler and
+we also have just a limited set of functions over reactos itself.
+We use our <a href="captive-apiref-ldr-exports.html#captive-ModuleList-add-builtin">captive_ModuleList_add_builtin</a>() to simulate PE headers exporting
+our symbols; this export simulation is invocated from this function.
+</p><p>
+This function is generated automatically from exports.captivesym file
+by captivesym.pl script.
+</p><p>
+Multiple calls of this function are forbidden. See also <a href="captive-apiref-ldr-exports.html#captive-kernel-patches">captive_kernel_patches</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the export was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-kernel-patches"></a>captive_kernel_patches ()</h3><pre class="programlisting">gboolean    captive_kernel_patches          (void);</pre><p>
+Patches W32 libraries by libcaptive functions. It is done by *.def files used
+by dlltool(1) of Mingw32 compiler suite. We use native host OS compiler and
+we also have just a limited set of functions over reactos itself.
+We use our <a href="captive-apiref-ldr-exports.html#captive-ModuleList-patch">captive_ModuleList_patch</a>() to modify existing module function
+tables generated from <a href="captive-apiref-ldr-exports.html#captive-ModuleList-add-builtin">captive_ModuleList_add_builtin</a>().
+</p><p>
+This function is generated automatically from exports.captivesym file
+by captivesym.pl script.
+</p><p>
+Multiple calls of this function are forbidden. See also <a href="captive-apiref-ldr-exports.html#captive-kernel-exports">captive_kernel_exports</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the export was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ModuleList-add-builtin"></a>captive_ModuleList_add_builtin ()</h3><pre class="programlisting">gboolean    captive_ModuleList_add_builtin  (const gchar *FullName_utf8,
+                                             ...);</pre><p>
+Adds simulated built-in module to ModuleListHead module list.
+It can be used for the functionality of reactos/ntoskrnl/ldr/loader.c/LdrInitModuleManagement().
+libcaptive does not support Ordinals - we just pretend liner (<tt>0</tt>-based)
+Ordinal numbers of the functions in given @... stdargs order.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>FullName_utf8</tt></i> :</span></td><td> String to fill in PMODULE_OBJECT-&gt;FullName.
+</td></tr><tr><td><span class="term"><i><tt>...</tt></i> :</span></td><td> (const gchar *sym_name,void *sym_val) symbol list terminated by <tt>NULL</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the module was successfuly added.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ModuleList-patch"></a>captive_ModuleList_patch ()</h3><pre class="programlisting">gboolean    captive_ModuleList_patch        (const gchar *FullName_utf8,
+                                             ...);</pre><p>
+Patches existing <i><tt>FullName_utf8</tt></i> module to use for function named sym_name
+pointer to the handler sym_val. If patchpoint is not <tt>NULL</tt> it gets assigned the original
+pointer value (used for <tt>pass</tt> keyword in exports.captivesym).
+</p><p>
+Put here 0xF4 'hlt' instead of 0xCC 'int $0x3; breakpoint'
+as 'hlt' will generate handled SIGSEGV instead of SIGTRAP which
+is used by gdb(1) during debugging.
+See also libcaptive/ps/signal.c/ sigaction_SIGSEGV().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>FullName_utf8</tt></i> :</span></td><td> String to find PMODULE_OBJECT by FullName.
+</td></tr><tr><td><span class="term"><i><tt>...</tt></i> :</span></td><td> (const gchar *sym_name,void (*sym_val)(void),struct captive_ModuleList_patchpoint *patchpoint) symbol list terminated by <tt>NULL</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the module was successfuly added.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-storage.html"><b>&lt;&lt; storage</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-calltype-reactos.html"><b>calltype_reactos &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-ldr.html b/project/captive/apiref/captive-apiref-ldr.html
new file mode 100644 (file)
index 0000000..93355b4
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldr</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-init.html" title="init"><link rel="next" href="captive-apiref-macros.html" title="macros"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-init.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-macros.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-ldr"></a><div class="titlepage"></div><div class="refnamediv"><h2>ldr</h2><p>ldr &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+NTSTATUS    <a href="captive-apiref-ldr.html#captive-LdrpLoadAndCallImage">captive_LdrpLoadAndCallImage</a>    (PMODULE_OBJECT *ModuleObjectp,
+                                             struct captive_options_module *options_module,
+                                             PDRIVER_OBJECT DriverEntry_DriverObject,
+                                             PUNICODE_STRING DriverEntry_RegistryPath);
+NTSTATUS    <a href="captive-apiref-ldr.html#captive-LdrLoadModule">captive_LdrLoadModule</a>           (struct captive_options_module *options_module,
+                                             PMODULE_OBJECT *ModuleObjectp);
+G_CONST_RETURN gchar* <a href="captive-apiref-ldr.html#captive-ModuleList-function-disable-find">captive_ModuleList_function_disable_find</a>
+                                            (gconstpointer ExportAddress);
+void*       <a href="captive-apiref-ldr.html#captive-Module-GetExportAddress">captive_Module_GetExportAddress</a> (const gchar *ModuleName_utf8,
+                                             const gchar *FunctionName);
+void        <a href="captive-apiref-ldr.html#captive-PoQueueShutdownWorkItem-hooklist-invoke">captive_PoQueueShutdownWorkItem_hooklist_invoke</a>
+                                            (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-LdrpLoadAndCallImage"></a>captive_LdrpLoadAndCallImage ()</h3><pre class="programlisting">NTSTATUS    captive_LdrpLoadAndCallImage    (PMODULE_OBJECT *ModuleObjectp,
+                                             struct captive_options_module *options_module,
+                                             PDRIVER_OBJECT DriverEntry_DriverObject,
+                                             PUNICODE_STRING DriverEntry_RegistryPath);</pre><p>
+Corresponds to reactos LdrpLoadAndCallImage() but it also provides arguments
+to pass to PDRIVER_INITIALIZE call of module driver initialization.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>ModuleObjectp</tt></i> :</span></td><td> Returns PMODULE_OBJECT successfuly loaded.
+</td></tr><tr><td><span class="term"><i><tt>options_module</tt></i> :</span></td><td> captive_options_module structure describing the module to load.
+Loading of already loaded module is forbidden despite original
+LdrpLoadAndCallImage().
+</td></tr><tr><td><span class="term"><i><tt>DriverEntry_DriverObject</tt></i> :</span></td><td> argument DriverObject of PDRIVER_INITIALIZE call.
+</td></tr><tr><td><span class="term"><i><tt>DriverEntry_RegistryPath</tt></i> :</span></td><td> argument RegistryPath of PDRIVER_INITIALIZE call.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> STATUS_SUCCESS if the driver module was loaded and initialized
+successfuly during this call. Ignore returned <i><tt>ModuleObjectp</tt></i> if function failed.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-LdrLoadModule"></a>captive_LdrLoadModule ()</h3><pre class="programlisting">NTSTATUS    captive_LdrLoadModule           (struct captive_options_module *options_module,
+                                             PMODULE_OBJECT *ModuleObjectp);</pre><p>
+Load and initialize module to reactos using host OS functions.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>options_module</tt></i> :</span></td><td> captive_options_module structure describing the module to load.
+Loading of already loaded module is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>ModuleObjectp</tt></i> :</span></td><td> Returns initialized module object.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> STATUS_SUCCESS if the module was loaded successfuly during the call.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ModuleList-function-disable-find"></a>captive_ModuleList_function_disable_find ()</h3><pre class="programlisting">G_CONST_RETURN gchar* captive_ModuleList_function_disable_find
+                                            (gconstpointer ExportAddress);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>ExportAddress</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-Module-GetExportAddress"></a>captive_Module_GetExportAddress ()</h3><pre class="programlisting">void*       captive_Module_GetExportAddress (const gchar *ModuleName_utf8,
+                                             const gchar *FunctionName);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>ModuleName_utf8</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>FunctionName</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-PoQueueShutdownWorkItem-hooklist-invoke"></a>captive_PoQueueShutdownWorkItem_hooklist_invoke ()</h3><pre class="programlisting">void        captive_PoQueueShutdownWorkItem_hooklist_invoke
+                                            (void);</pre><p>
+
+</p></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-init.html"><b>&lt;&lt; init</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-macros.html"><b>macros &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-macros.html b/project/captive/apiref/captive-apiref-macros.html
new file mode 100644 (file)
index 0000000..8f3792e
--- /dev/null
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>macros</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-ldr.html" title="ldr"><link rel="next" href="captive-apiref-mm.html" title="mm"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-ldr.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-mm.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-macros"></a><div class="titlepage"></div><div class="refnamediv"><h2>macros</h2><p>macros &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+#define     <a href="captive-apiref-macros.html#CAPTIVE-FAKEUSE-CAPS">CAPTIVE_FAKEUSE</a>
+#define     <a href="captive-apiref-macros.html#captive-newn">captive_newn</a>                    (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new0n">captive_new0n</a>                   (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-renewn">captive_renewn</a>                  (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new">captive_new</a>                     (objp)
+#define     <a href="captive-apiref-macros.html#captive-new0">captive_new0</a>                    (objp)
+#define     <a href="captive-apiref-macros.html#captive-newn-alloca">captive_newn_alloca</a>             (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new0n-alloca">captive_new0n_alloca</a>            (objp,n)
+#define     <a href="captive-apiref-macros.html#captive-new-alloca">captive_new_alloca</a>              (objp)
+#define     <a href="captive-apiref-macros.html#captive-new0-alloca">captive_new0_alloca</a>             (objp)
+#define     <a href="captive-apiref-macros.html#captive-memdup">captive_memdup</a>                  (destp,srcp)
+#define     <a href="captive-apiref-macros.html#captive-va-arg">captive_va_arg</a>                  (objp,ap)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-MEMZERO-CAPS">CAPTIVE_MEMZERO</a>                 (objp)
+#define     <a href="captive-apiref-macros.html#captive-printf-alloca">captive_printf_alloca</a>           (format,args...)
+#define     <a href="captive-apiref-macros.html#captive-strdup-alloca">captive_strdup_alloca</a>           (string)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN-CAPS">CAPTIVE_ROUND_DOWN</a>              (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN64-CAPS">CAPTIVE_ROUND_DOWN64</a>            (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN-EXCEEDING-CAPS">CAPTIVE_ROUND_DOWN_EXCEEDING</a>    (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-DOWN-EXCEEDING64-CAPS">CAPTIVE_ROUND_DOWN_EXCEEDING64</a>  (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-UP-CAPS">CAPTIVE_ROUND_UP</a>                (pointer,fragment)
+#define     <a href="captive-apiref-macros.html#CAPTIVE-ROUND-UP64-CAPS">CAPTIVE_ROUND_UP64</a>              (pointer,fragment)
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="CAPTIVE-FAKEUSE-CAPS"></a>CAPTIVE_FAKEUSE</h3><pre class="programlisting">#define CAPTIVE_FAKEUSE =0
+</pre><p>
+Prevent 'might be used uninitialized' warning.
+Macro will fakes the use of the variable as sometimes GCC can't code flow
+analyse C correctly.
+</p><p>
+</p><div class="informalexample"><pre class="programlisting">
+g_some_type some_variable CAPTIVE_FAKEUSE;
+</pre></div><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-newn"></a>captive_newn()</h3><pre class="programlisting">#define captive_newn(objp,n) ((objp)=g_new(typeof(*(objp)),(n)))
+</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0n"></a>captive_new0n()</h3><pre class="programlisting">#define captive_new0n(objp,n) ((objp)=g_new0(typeof(*(objp)),(n)))
+</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated and precleared.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-renewn"></a>captive_renewn()</h3><pre class="programlisting">#define     captive_renewn(objp,n)</pre><p>
+Macro to reallocate the original memory stored in <i><tt>objp</tt></i>
+to the size <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+New allocated space may contain garbage. Both <i><tt>objp</tt></i> and <i><tt>n</tt></i> can be nonexclusively
+passed as zero.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be reallocated. 
+Value <tt>NULL</tt> is permitted (g_malloc() effect).
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (g_free() effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new"></a>captive_new()</h3><pre class="programlisting">#define captive_new(objp) (captive_newn((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage. Equivalent to captive_newn(objp,1) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp)).
+Value <tt>NULL</tt> is never returned.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0"></a>captive_new0()</h3><pre class="programlisting">#define captive_new0(objp) (captive_new0n((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared. Equivalent to captive_new0n(objp,1) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp)).
+Value <tt>NULL</tt> is never returned.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated and precleared.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-newn-alloca"></a>captive_newn_alloca()</h3><pre class="programlisting">#define     captive_newn_alloca(objp,n)</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0n-alloca"></a>captive_new0n_alloca()</h3><pre class="programlisting">#define     captive_new0n_alloca(objp,n)</pre><p>
+Macro to allocate <i><tt>n</tt></i> objects of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp))*n.
+Value <tt>NULL</tt> is returned iff <i><tt>n</tt></i>==<tt>0</tt>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the objects wished to be allocated and precleared.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>n</tt></i> :</span></td><td> Numbers of objects to be allocated. Value <tt>0</tt> is permitted (<tt>NULL</tt> assignment effect).
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new-alloca"></a>captive_new_alloca()</h3><pre class="programlisting">#define captive_new_alloca(objp) (captive_newn_alloca((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory may contain garbage. Equivalent to captive_newn_alloca(objp,1) call.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the memory of size sizeof(typeof(*objp)).
+Value <tt>NULL</tt> is never returned.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-new0-alloca"></a>captive_new0_alloca()</h3><pre class="programlisting">#define captive_new0_alloca(objp) (captive_new0n_alloca((objp),1))
+</pre><p>
+Macro to allocate one object of type *<i><tt>objp</tt></i> and to assign the resulting pointer to <i><tt>objp</tt></i>.
+Allocated memory is precleared. Equivalent to captive_new0n_alloca(objp,1) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value as the cleared memory of size sizeof(typeof(*objp)).</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable with the pointer to the object wished to be allocated and precleared.
+Original value is discarded.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-memdup"></a>captive_memdup()</h3><pre class="programlisting">#define     captive_memdup(destp,srcp)</pre><p>
+Macro to similiar to g_memdup() but the object size is detected automatically.
+Size of <i><tt>destp</tt></i> object and <i><tt>srcp</tt></i> object must be the same.
+</p><p>
+You must free the allocated memory of <i><tt>destp</tt></i> by g_free().
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>destp</tt></i> value as the copied memory of size sizeof(typeof(*srcp)).</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>destp</tt></i> :</span></td><td> Variable with the pointer to the target object wished to be allocated.
+Original value is discarded.
+</td></tr><tr><td><span class="term"><i><tt>srcp</tt></i> :</span></td><td> Pointer to the source object to be copied to <i><tt>destp</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-va-arg"></a>captive_va_arg()</h3><pre class="programlisting">#define captive_va_arg(objp,ap) ((objp)=va_arg((ap),typeof(objp)))
+</pre><p>
+Automatically determines the size of <i><tt>objp</tt></i>.
+Equivalent to objp=va_arg(ap,typeof(objp)) call.
+</p><p>
+<i><tt>Returns</tt></i>: Initialized <i><tt>objp</tt></i> value.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Variable to be filled from the next argument of <i><tt>ap</tt></i>.
+</td></tr><tr><td><span class="term"><i><tt>ap</tt></i> :</span></td><td> Initialized va_list type.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-MEMZERO-CAPS"></a>CAPTIVE_MEMZERO()</h3><pre class="programlisting">#define CAPTIVE_MEMZERO(objp) (memset((objp),0,sizeof(*(objp))))
+</pre><p>
+Clears the sizeof(*<i><tt>objp</tt></i>) bytes of the given pointer with memset().
+Pass _pointer_ to the object to be cleared.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>objp</tt></i> :</span></td><td> Pointer to the variable to be cleared.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-printf-alloca"></a>captive_printf_alloca()</h3><pre class="programlisting">#define     captive_printf_alloca(format,args...)</pre><p>
+Format the given format string <i><tt>format</tt></i> as in sprintf().
+Output buffer is allocated automatically and it does not need to be deallocated
+manually as it is managed by g_alloca().
+</p><p>
+<i><tt>Returns</tt></i>: Formatted output string located in g_alloca() memory.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>format</tt></i> :</span></td><td> Format string. See the sprintf() documentation.
+</td></tr><tr><td><span class="term"><i><tt>args...</tt></i> :</span></td><td> Arguments for <i><tt>format</tt></i>. See the sprintf() documentation.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-strdup-alloca"></a>captive_strdup_alloca()</h3><pre class="programlisting">#define     captive_strdup_alloca(string)</pre><p>
+Macro to do g_strdup() equivalent in g_alloca() style.
+</p><p>
+Memory is allocated on the stack frame by g_alloca() and it will be automatically deallocated
+during exit of current function (or current block if variable sized variables present there).
+You cannot deallocate or reallocate such memory in any other way.
+</p><p>
+<i><tt>Returns</tt></i>: Duplicated <i><tt>string</tt></i>. You may modify its items if the length is not changed.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string</tt></i> :</span></td><td> const gchar * string to duplicate.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN-CAPS"></a>CAPTIVE_ROUND_DOWN()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN(pointer,fragment)</pre><p>
+General pointer down-rounding macro. Already aligned pointer is left as is.
+</p><p>
+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS.
+</p><p>
+<i><tt>Returns</tt></i>: Down-rounded <i><tt>pointer</tt></i> to the integer multiple of <i><tt>fragment</tt></i>.
+Resulting pointer has the same type as <i><tt>pointer</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td> Arbitrary pointer type.
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td> Amount of 'sizeof(char)' to align <i><tt>pointer</tt></i> down to.
+This size will be typically a power of 2.
+Value less or equal to <tt>0</tt> is forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN64-CAPS"></a>CAPTIVE_ROUND_DOWN64()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN64(pointer,fragment)</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN-EXCEEDING-CAPS"></a>CAPTIVE_ROUND_DOWN_EXCEEDING()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN_EXCEEDING(pointer,fragment)</pre><p>
+Detects current non-aligned amount of data exceeding over integer multiple of <i><tt>fragment</tt></i>.
+It will return value <tt>0</tt> for an aligned pointer.
+</p><p>
+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS.
+</p><p>
+<i><tt>Returns</tt></i>: gsize typed number of bytes exceeding over integer multiple of <i><tt>fragment</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td> Arbitrary pointer type.
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td> Amount of 'sizeof(char)' to detect down-alignment amount of <i><tt>pointer</tt></i> for.
+This size will be typically a power of 2.
+Value less or equal to <tt>0</tt> is forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-DOWN-EXCEEDING64-CAPS"></a>CAPTIVE_ROUND_DOWN_EXCEEDING64()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_DOWN_EXCEEDING64(pointer,fragment)</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-UP-CAPS"></a>CAPTIVE_ROUND_UP()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_UP(pointer,fragment)</pre><p>
+General pointer up-rounding macro. Already aligned pointer is left as is.
+</p><p>
+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS.
+</p><p>
+<i><tt>Returns</tt></i>: Up-rounded <i><tt>pointer</tt></i> to the integer multiple of <i><tt>fragment</tt></i>.
+Resulting pointer has the same type as <i><tt>pointer</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td> Arbitrary pointer type.
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td> Amount of 'sizeof(char)' to align <i><tt>pointer</tt></i> up to.
+This size will be typically a power of 2.
+Value less or equal to <tt>0</tt> is forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="CAPTIVE-ROUND-UP64-CAPS"></a>CAPTIVE_ROUND_UP64()</h3><pre class="programlisting">#define     CAPTIVE_ROUND_UP64(pointer,fragment)</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>pointer</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><i><tt>fragment</tt></i> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-ldr.html"><b>&lt;&lt; ldr</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-mm.html"><b>mm &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-mm.html b/project/captive/apiref/captive-apiref-mm.html
new file mode 100644 (file)
index 0000000..88f3f0f
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>mm</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-macros.html" title="macros"><link rel="next" href="captive-apiref-ps-reactos.html" title="ps_reactos"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-macros.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-ps-reactos.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-mm"></a><div class="titlepage"></div><div class="refnamediv"><h2>mm</h2><p>mm &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gint        <a href="captive-apiref-mm.html#captive-flProtect-to-mmap-prot">captive_flProtect_to_mmap_prot</a>  (ULONG flProtect);
+gboolean    <a href="captive-apiref-mm.html#captive-mmap-map-new">captive_mmap_map_new</a>            (gconstpointer addr,
+                                             size_t len,
+                                             int mmap_prot);
+gint        <a href="captive-apiref-mm.html#captive-mmap-map-get">captive_mmap_map_get</a>            (gconstpointer addr);
+gboolean    <a href="captive-apiref-mm.html#captive-mmap-map-set">captive_mmap_map_set</a>            (gconstpointer addr,
+                                             int mmap_prot);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-flProtect-to-mmap-prot"></a>captive_flProtect_to_mmap_prot ()</h3><pre class="programlisting">gint        captive_flProtect_to_mmap_prot  (ULONG flProtect);</pre><p>
+Map reactos flProtect to mprotect(2)-compatible &quot;prot&quot; argument.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>flProtect</tt></i> :</span></td><td> reactos compatible constant such as <tt>PAGE_READWRITE</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> mmap(2) compatible <i><tt>prot</tt></i> argument.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-mmap-map-new"></a>captive_mmap_map_new ()</h3><pre class="programlisting">gboolean    captive_mmap_map_new            (gconstpointer addr,
+                                             size_t len,
+                                             int mmap_prot);</pre><p>
+Initialize the protection map for the specified memory block.
+Any existing protections in the specified block are forbidden.
+</p><p>
+This function does not do any mprotect(2) style, it just stores
+the settings for the later <tt>OR</tt> operations by MmSetPageProtect().
+Caller is responsibel to set the same protections as the given <i><tt>mmap_prot</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>addr</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned address of memory block.
+<tt>NULL</tt> value is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>len</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned  length of memory block.
+Value <tt>0</tt> is permitted. Value <tt>-1</tt> is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>mmap_prot</tt></i> :</span></td><td> Protections for the memory block as specified by <i><tt>prot</tt></i> of mprotect(2).
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the protection storage was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-mmap-map-get"></a>captive_mmap_map_get ()</h3><pre class="programlisting">gint        captive_mmap_map_get            (gconstpointer addr);</pre><p>
+Query the protection settings at <i><tt>addr</tt></i> address.
+The given <i><tt>addr</tt></i> block of <tt>PAGE_SIZE</tt> must be already initialized
+by <a href="captive-apiref-mm.html#captive-mmap-map-new">captive_mmap_map_new</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>addr</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned address of memory block.
+<tt>NULL</tt> value is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> Protections of the page as specified by <i><tt>prot</tt></i> of mprotect(2)
+if successful. Value <tt>-1</tt> if failed.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-mmap-map-set"></a>captive_mmap_map_set ()</h3><pre class="programlisting">gboolean    captive_mmap_map_set            (gconstpointer addr,
+                                             int mmap_prot);</pre><p>
+Set the protection settings at <i><tt>addr</tt></i> address.
+The given <i><tt>addr</tt></i> block of <tt>PAGE_SIZE</tt> must be already initialized
+by <a href="captive-apiref-mm.html#captive-mmap-map-new">captive_mmap_map_new</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>addr</tt></i> :</span></td><td> <tt>PAGE_SIZE</tt> aligned address of memory block.
+<tt>NULL</tt> value is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>mmap_prot</tt></i> :</span></td><td> Protections for the memory block as specified by <i><tt>prot</tt></i> of mprotect(2).
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the protections were successfuly set.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-macros.html"><b>&lt;&lt; macros</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-ps-reactos.html"><b>ps_reactos &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-ps-reactos.html b/project/captive/apiref/captive-apiref-ps-reactos.html
new file mode 100644 (file)
index 0000000..22555cb
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ps_reactos</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-mm.html" title="mm"><link rel="next" href="captive-apiref-unicode.html" title="unicode"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-mm.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-unicode.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-ps-reactos"></a><div class="titlepage"></div><div class="refnamediv"><h2>ps_reactos</h2><p>ps_reactos &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+typedef     <a href="captive-apiref-ps-reactos.html#captive-KPCR">captive_KPCR</a>;
+typedef     <a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a>;
+<a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a> <a href="captive-apiref-ps-reactos.html#captive-KeGetCurrentKPCR">captive_KeGetCurrentKPCR</a>      (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-KPCR"></a>captive_KPCR</h3><pre class="programlisting">typedef struct {
+       struct
+                       /* newline to pass gtkdoc-scan */
+                       _KTHREAD *CurrentThread;
+       } captive_KPCR;
+</pre><p>
+PCR (Processor Control Region) structure type.
+Returned by <a href="captive-apiref-ps-reactos.html#captive-KeGetCurrentKPCR">captive_KeGetCurrentKPCR</a>().
+</p><p>
+This structure IS NOT binary compatible with reactos!</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-PKPCR"></a>captive_PKPCR</h3><pre class="programlisting">typedef captive_KPCR *captive_PKPCR;
+</pre><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-KeGetCurrentKPCR"></a>captive_KeGetCurrentKPCR ()</h3><pre class="programlisting"><a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a> captive_KeGetCurrentKPCR      (void);</pre><p>
+Returns the PCR (Processor Control Region) structure for the
+current CPU.
+Currently libcaptive doesn't use multithreading
+and thus this function returns a constant pointer to one static structure.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <a href="captive-apiref-ps-reactos.html#captive-PKPCR">captive_PKPCR</a> type pointer to valid <a href="captive-apiref-ps-reactos.html#captive-KPCR">captive_KPCR</a>.
+This structure IS NOT binary compatible with reactos - you SHOULD NOT
+export this symbol for binary W32 modules. Anyone using this function
+is very low-level based and you would probably find many other
+compatibility problems afterwards - replace of such function is recommended.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-mm.html"><b>&lt;&lt; mm</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-unicode.html"><b>unicode &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-rtl-file.html b/project/captive/apiref/captive-apiref-rtl-file.html
new file mode 100644 (file)
index 0000000..c068ca9
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>rtl-file</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-signal.html" title="signal"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-signal.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th></tr></table><div class="refentry" lang="en"><a name="captive-apiref-rtl-file"></a><div class="titlepage"></div><div class="refnamediv"><h2>rtl-file</h2><p>rtl-file &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gpointer    <a href="captive-apiref-rtl-file.html#captive-rtl-file-mmap">captive_rtl_file_mmap</a>           (size_t *lenp,
+                                             const gchar *path,
+                                             int open_flags,
+                                             int mmap_prot,
+                                             int mmap_flags);
+void        <a href="captive-apiref-rtl-file.html#captive-rtl-file-munmap">captive_rtl_file_munmap</a>         (gpointer base);
+gpointer    <a href="captive-apiref-rtl-file.html#captive-rtl-file-read">captive_rtl_file_read</a>           (gint fd,
+                                             gsize *bufsizep);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-rtl-file-mmap"></a>captive_rtl_file_mmap ()</h3><pre class="programlisting">gpointer    captive_rtl_file_mmap           (size_t *lenp,
+                                             const gchar *path,
+                                             int open_flags,
+                                             int mmap_prot,
+                                             int mmap_flags);</pre><p>
+mmap(2) the whole file into memory.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>lenp</tt></i> :</span></td><td> returns the file length if successful. <tt>NULL</tt> pointer permitted.
+</td></tr><tr><td><span class="term"><i><tt>path</tt></i> :</span></td><td> File pathname to open(2).
+</td></tr><tr><td><span class="term"><i><tt>open_flags</tt></i> :</span></td><td> open(2) parameter flags such as <tt>O_RDONLY</tt>.
+</td></tr><tr><td><span class="term"><i><tt>mmap_prot</tt></i> :</span></td><td> mmap(2) parameter prot such as <tt>PROT_READ</tt>.
+</td></tr><tr><td><span class="term"><i><tt>mmap_flags</tt></i> :</span></td><td> mmap(2) parameter flags such as <tt>MAP_SHARED</tt>.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> address base with mmap(2)ed file (and <i><tt>lenp</tt></i> filled) or NULL if error.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-rtl-file-munmap"></a>captive_rtl_file_munmap ()</h3><pre class="programlisting">void        captive_rtl_file_munmap         (gpointer base);</pre><p>
+munmap(2) the whole file and destroy all its resources.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>base</tt></i> :</span></td><td> file base address returned by <a href="captive-apiref-rtl-file.html#captive-rtl-file-mmap">captive_rtl_file_mmap</a>(). <tt>NULL</tt> pointer forbidden.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-rtl-file-read"></a>captive_rtl_file_read ()</h3><pre class="programlisting">gpointer    captive_rtl_file_read           (gint fd,
+                                             gsize *bufsizep);</pre><p>
+Reads the whole file into memory.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>fd</tt></i> :</span></td><td> file-descriptor to read data from.
+</td></tr><tr><td><span class="term"><i><tt>bufsizep</tt></i> :</span></td><td> Returns the size of resulting data.
+<tt>NULL</tt> pointer is permitted.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> address base of the memory being filled with file contents.
+Free the area by g_free() if no longer used.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-signal.html"><b>&lt;&lt; signal</b></a></td><td align="right"></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-signal.html b/project/captive/apiref/captive-apiref-signal.html
new file mode 100644 (file)
index 0000000..ccc195d
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>signal</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-calltype-reactos.html" title="calltype_reactos"><link rel="next" href="captive-apiref-rtl-file.html" title="rtl-file"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-calltype-reactos.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-rtl-file.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-signal"></a><div class="titlepage"></div><div class="refnamediv"><h2>signal</h2><p>signal &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+gboolean    <a href="captive-apiref-signal.html#captive-signal-init">captive_signal_init</a>             (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-signal-init"></a>captive_signal_init ()</h3><pre class="programlisting">gboolean    captive_signal_init             (void);</pre><p>
+Initialize UNIX signal handling to be able to emulate foreign W32
+instructions. These instructions must be located inside address
+space of foreign W32 binary code which is identified by successful
+call to <a href="captive-apiref-mm.html#captive-mmap-map-get">captive_mmap_map_get</a>() returning PROT_EXEC bit set.
+This bit should be set from MmAllocateSection() called from
+ntoskrnl/ldr/loader.c/LdrPEProcessModule().
+</p><p>
+Currently emulated set is the access to <tt>fs</tt> register offset <tt>0</tt>
+where the exception stack top pointer is located.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if successful.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-calltype-reactos.html"><b>&lt;&lt; calltype_reactos</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-rtl-file.html"><b>rtl-file &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-storage.html b/project/captive/apiref/captive-apiref-storage.html
new file mode 100644 (file)
index 0000000..478140c
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>storage</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-unicode-reactos.html" title="unicode_reactos"><link rel="next" href="captive-apiref-ldr-exports.html" title="ldr_exports"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-unicode-reactos.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-ldr-exports.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-storage"></a><div class="titlepage"></div><div class="refnamediv"><h2>storage</h2><p>storage &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+extern      GIOChannel *<a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a>;
+extern      guint64 <a href="captive-apiref-storage.html#captive-image-size">captive_image_size</a>;
+guint64     <a href="captive-apiref-storage.html#captive-giochannel-size">captive_giochannel_size</a>         (GIOChannel *channel);
+gboolean    <a href="captive-apiref-storage.html#captive-cdrom-init">captive_cdrom_init</a>              (void);
+gboolean    <a href="captive-apiref-storage.html#captive-disk-init">captive_disk_init</a>               (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-image-iochannel"></a>captive_image_iochannel</h3><pre class="programlisting">extern GIOChannel *captive_image_iochannel;
+</pre><p>
+The readl GIOChannel to be used for accessing the disk image.
+It may be either directly captive_options-&gt;image_iochannel
+or the wrapper by giochannel-blind.</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-image-size"></a>captive_image_size</h3><pre class="programlisting">extern guint64 captive_image_size;
+</pre><p>
+Size of <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a>. Empty files are rejected and therefore
+this value is always &gt;0 after successful <a href="captive-apiref-init.html#captive-init">captive_init</a>().
+Value is detected by captive_giochannel_size(captive_image_iochannel).</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-giochannel-size"></a>captive_giochannel_size ()</h3><pre class="programlisting">guint64     captive_giochannel_size         (GIOChannel *channel);</pre><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>channel</tt></i> :</span></td><td>
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td>
+
+
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-cdrom-init"></a>captive_cdrom_init ()</h3><pre class="programlisting">gboolean    captive_cdrom_init              (void);</pre><p>
+Creates system device &quot;\Device\CdRom<tt>d</tt>&quot; providing readonly access
+to the given <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a> as emulation of CD-ROM driver.
+</p><p>
+libcaptive currently supports just one drive and thus &quot;\Device\CdRom0&quot;
+is always created. It is forbidden to call this function twice.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the initialization was successful.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-disk-init"></a>captive_disk_init ()</h3><pre class="programlisting">gboolean    captive_disk_init               (void);</pre><p>
+Creates system device &quot;\Device\CaptiveHarddisk<tt>d</tt>&quot; providing readwrite access
+to the given <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a> as emulation of harddisk driver.
+reactos initializes &quot;\Device\Harddisk<tt>d</tt>\Partition0&quot; as the whole disk
+and each partition it founds by IoReadPartitionTable() it will create
+as &quot;\Device\Harddisk<tt>d</tt>\Partition1&quot;, &quot;\Device\Harddisk<tt>d</tt>\Partition2&quot; etc.
+</p><p>
+libcaptive does not (yet?) support any partitions and it will always create
+just the disk device for the whole given <a href="captive-apiref-storage.html#captive-image-iochannel">captive_image_iochannel</a>.
+As this behaviour is a bit specific we rather create some non-standard name
+of the device; anyway I have seen some &quot;\Device\Harddisk<tt>dVolume</tt><tt>d</tt>&quot; on W32
+system.
+</p><p>
+captive currently supports just one drive and thus &quot;\Device\CaptiveHarddisk0&quot;
+is always created. It is forbidden to call this function twice.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the initialization was successful.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-unicode-reactos.html"><b>&lt;&lt; unicode_reactos</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-ldr-exports.html"><b>ldr_exports &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-unicode-reactos.html b/project/captive/apiref/captive-apiref-unicode-reactos.html
new file mode 100644 (file)
index 0000000..11cf220
--- /dev/null
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>unicode_reactos</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-unicode.html" title="unicode"><link rel="next" href="captive-apiref-storage.html" title="storage"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-unicode.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-storage.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-unicode-reactos"></a><div class="titlepage"></div><div class="refnamediv"><h2>unicode_reactos</h2><p>unicode_reactos &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+typedef     <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a>;
+const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a>* <a href="captive-apiref-unicode-reactos.html#captive-ucs4-to-ucs2-const">captive_ucs4_to_ucs2_const</a>
+                                            (const gunichar *string_ucs4);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-ucs2"></a>captive_ucs2</h3><pre class="programlisting">typedef guint16 captive_ucs2;
+</pre><p>
+This type is separated from Gnome gunichar2 as <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> MUST be used for UCS-2
+encoded strings in the opposite of gunichar2 beging used for UTF-16 encoded strings.</p><p>
+
+</p></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs4-to-ucs2-const"></a>captive_ucs4_to_ucs2_const ()</h3><pre class="programlisting">const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a>* captive_ucs4_to_ucs2_const
+                                            (const gunichar *string_ucs4);</pre><p>
+Constant string conversion from 32-bit wchar_t to 16-bit wchar_t.
+You may not modify the result in any way.
+</p><p>
+It is guaranteed to get two different string addresses for two different
+input addresses even if the input strings content is the same.
+Otherwise we would behave as GCC option <tt>-fmerge</tt>-constants which
+results in <tt>C</tt> non-conforming behaviour.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs4</tt></i> :</span></td><td> const gunichar * type of persistent string to convert.
+This string MUST remain readable with the same content forever.
+This string MUST be convertible to UCS-2 string.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> * converted string <i><tt>string_ucs4</tt></i>.
+</td></tr></tbody></table></div></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-unicode.html"><b>&lt;&lt; unicode</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-storage.html"><b>storage &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/captive-apiref-unicode.html b/project/captive/apiref/captive-apiref-unicode.html
new file mode 100644 (file)
index 0000000..d4ec3f8
--- /dev/null
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>unicode</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="ch01.html" title="Operation Captive"><link rel="previous" href="captive-apiref-ps-reactos.html" title="ps_reactos"><link rel="next" href="captive-apiref-unicode-reactos.html" title="unicode_reactos"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="captive-apiref-ps-reactos.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-unicode-reactos.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="refentry" lang="en"><a name="captive-apiref-unicode"></a><div class="titlepage"></div><div class="refnamediv"><h2>unicode</h2><p>unicode &#8212; </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
+
+
+
+#define     <a href="captive-apiref-unicode.html#captive-UnicodeString-to-utf8-alloca">captive_UnicodeString_to_utf8_alloca</a>(string_UnicodeString)
+#define     <a href="captive-apiref-unicode.html#captive-utf8-to-UnicodeString-alloca">captive_utf8_to_UnicodeString_alloca</a>(string_utf8)
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-ucs4">captive_validate_ucs4</a>           (const gunichar *string_ucs4);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-ucs2">captive_validate_ucs2</a>           (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-ucs2-fixlen">captive_validate_ucs2_fixlen</a>    (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2,
+                                             glong string_ucs2_fixlen);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-utf8">captive_validate_utf8</a>           (const gchar *string_utf8);
+glong       <a href="captive-apiref-unicode.html#captive-ucs2-strlen">captive_ucs2_strlen</a>             (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-UnicodeString">captive_validate_UnicodeString</a>  (const UNICODE_STRING *string_UnicodeString);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-UnicodeString-noterm">captive_validate_UnicodeString_noterm</a>
+                                            (const UNICODE_STRING *string_UnicodeString_noterm);
+gboolean    <a href="captive-apiref-unicode.html#captive-validate-AnsiString">captive_validate_AnsiString</a>     (const ANSI_STRING *string_AnsiString);
+gchar*      <a href="captive-apiref-unicode.html#captive-UnicodeString-to-utf8-malloc">captive_UnicodeString_to_utf8_malloc</a>
+                                            (const UNICODE_STRING *string_UnicodeString);
+PUNICODE_STRING <a href="captive-apiref-unicode.html#captive-utf8-to-UnicodeString-malloc">captive_utf8_to_UnicodeString_malloc</a>
+                                            (const gchar *string_utf8);
+const gunichar2* <a href="captive-apiref-unicode.html#captive-ucs4-to-utf16-const">captive_ucs4_to_utf16_const</a>
+                                            (const gunichar *string_ucs4);
+gboolean    <a href="captive-apiref-unicode.html#captive-ucs2-compare">captive_ucs2_compare</a>            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-UnicodeString-compare">captive_UnicodeString_compare</a>   (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);
+gboolean    <a href="captive-apiref-unicode.html#captive-ucs2-compare-insensitive">captive_ucs2_compare_insensitive</a>
+                                            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);
+gboolean    <a href="captive-apiref-unicode.html#captive-UnicodeString-compare-insensitive">captive_UnicodeString_compare_insensitive</a>
+                                            (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);
+void        <a href="captive-apiref-unicode.html#captive-FsRtlLegalAnsiCharacterArray-init">captive_FsRtlLegalAnsiCharacterArray_init</a>
+                                            (void);
+</pre></div><div class="refsect1" lang="en"><h2>Description</h2><p>
+
+</p></div><div class="refsect1" lang="en"><h2>Details</h2><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-to-utf8-alloca"></a>captive_UnicodeString_to_utf8_alloca()</h3><pre class="programlisting">#define     captive_UnicodeString_to_utf8_alloca(string_UnicodeString)</pre><p>
+alloca(3)-based conversion from PUNICODE_STRING to plain utf8 string.
+</p><p>
+<i><tt>Returns</tt></i>: const gchar * alloca(3)ed converted string <i><tt>string_UnicodeString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString</tt></i> :</span></td><td> PUNICODE_STRING type of string to convert.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-utf8-to-UnicodeString-alloca"></a>captive_utf8_to_UnicodeString_alloca()</h3><pre class="programlisting">#define     captive_utf8_to_UnicodeString_alloca(string_utf8)</pre><p>
+alloca(3)-based conversion from plain utf8 string to PUNICODE_STRING.
+</p><p>
+<i><tt>Returns</tt></i>: PUNICODE_STRING alloca(3)ed converted string <i><tt>string_utf8</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_utf8</tt></i> :</span></td><td> const gchar * string in utf8 to convert.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-ucs4"></a>captive_validate_ucs4 ()</h3><pre class="programlisting">gboolean    captive_validate_ucs4           (const gunichar *string_ucs4);</pre><p>
+Checks the validity of all 32-bit unicharacters of 0-terminated string.
+It is required to have characters complying to g_unichar_validate().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs4</tt></i> :</span></td><td> const gunichar * type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-ucs2"></a>captive_validate_ucs2 ()</h3><pre class="programlisting">gboolean    captive_validate_ucs2           (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);</pre><p>
+Checks the validity of all 16-bit unicharacters of 0-terminated string.
+It is required to have characters complying to g_unichar_validate().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs2</tt></i> :</span></td><td> const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> * type string to validate.
+Invalid string input is forbidden.
+UTF-16 encoded strings are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-ucs2-fixlen"></a>captive_validate_ucs2_fixlen ()</h3><pre class="programlisting">gboolean    captive_validate_ucs2_fixlen    (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2,
+                                             glong string_ucs2_fixlen);</pre><p>
+Checks the validity of first <i><tt>string_ucs2_fixlen</tt></i> 16-bit unicharacters of <i><tt>string_ucs2</tt></i>.
+It is required to have characters complying to g_unichar_validate().
+String length must be equal or larger than <i><tt>string_ucs2_fixlen</tt></i>;</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs2</tt></i> :</span></td><td> const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> * type string to validate.
+Invalid string input is forbidden.
+UTF-16 encoded strings are forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_ucs2_fixlen</tt></i> :</span></td><td> Number of characters from <i><tt>string_ucs2</tt></i> to check.
+captive_ucs2_strlen(<i><tt>string_ucs2</tt></i>)&gt;=<i><tt>string_ucs2_fixlen</tt></i> is required.
+Negative value is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-utf8"></a>captive_validate_utf8 ()</h3><pre class="programlisting">gboolean    captive_validate_utf8           (const gchar *string_utf8);</pre><p>
+Checks the validity of all utf8 of 0-terminated string.
+It is required to have characters complying to g_utf8_validate().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_utf8</tt></i> :</span></td><td> const gchar * utf8 type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs2-strlen"></a>captive_ucs2_strlen ()</h3><pre class="programlisting">glong       captive_ucs2_strlen             (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_ucs2);</pre><p>
+Counts the number of characters (=2bytes) in <i><tt>strings_ucs2</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs2</tt></i> :</span></td><td> String of type const gunichar2 * in pure UCS-2
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <i><tt>string_ucs2</tt></i> length in UCS-2 characters.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-UnicodeString"></a>captive_validate_UnicodeString ()</h3><pre class="programlisting">gboolean    captive_validate_UnicodeString  (const UNICODE_STRING *string_UnicodeString);</pre><p>
+Checks the internal consistency of the given <i><tt>string_UnicodeString</tt></i>.
+It is required to have characters complying to g_unichar_validate().
+<i><tt>string_UnicodeString</tt></i> MUST be zero-terminated.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString</tt></i> :</span></td><td> PUNICODE_STRING type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-UnicodeString-noterm"></a>captive_validate_UnicodeString_noterm ()</h3><pre class="programlisting">gboolean    captive_validate_UnicodeString_noterm
+                                            (const UNICODE_STRING *string_UnicodeString_noterm);</pre><p>
+Checks the internal consistency of the given <i><tt>string_UnicodeString</tt></i>.
+It is required to have characters complying to g_unichar_validate().
+<i><tt>string_UnicodeString_noterm</tt></i> does not neet to be zero-terminated.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString_noterm</tt></i> :</span></td><td> PUNICODE_STRING type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-validate-AnsiString"></a>captive_validate_AnsiString ()</h3><pre class="programlisting">gboolean    captive_validate_AnsiString     (const ANSI_STRING *string_AnsiString);</pre><p>
+Checks the internal consistency of the given <i><tt>string_AnsiString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_AnsiString</tt></i> :</span></td><td> PANSI_STRING type string to validate.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if the string is valid.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-to-utf8-malloc"></a>captive_UnicodeString_to_utf8_malloc ()</h3><pre class="programlisting">gchar*      captive_UnicodeString_to_utf8_malloc
+                                            (const UNICODE_STRING *string_UnicodeString);</pre><p>
+g_malloc()-based conversion from PUNICODE_STRING to plain utf8 string.
+You must free the result with g_free() function.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_UnicodeString</tt></i> :</span></td><td> PUNICODE_STRING type of string to convert.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> const gchar * g_malloc()ed converted string <i><tt>string_UnicodeString</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-utf8-to-UnicodeString-malloc"></a>captive_utf8_to_UnicodeString_malloc ()</h3><pre class="programlisting">PUNICODE_STRING captive_utf8_to_UnicodeString_malloc
+                                            (const gchar *string_utf8);</pre><p>
+g_malloc()-based conversion from plain utf8 string to PUNICODE_STRING.
+You must free the result with g_free() function.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_utf8</tt></i> :</span></td><td> const gchar * string in utf8 to convert.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> PUNICODE_STRING g_malloc()ed converted string <i><tt>string_utf8</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs4-to-utf16-const"></a>captive_ucs4_to_utf16_const ()</h3><pre class="programlisting">const gunichar2* captive_ucs4_to_utf16_const
+                                            (const gunichar *string_ucs4);</pre><p>
+Constant string conversion from 32-bit wchar_t to 16-bit (possible pairs of) UTF-16.
+You may not modify the result in any way.
+</p><p>
+It is guaranteed to get two different string addresses for two different
+input addresses even if the input strings content is the same.
+Otherwise we would behave as GCC option <tt>-fmerge</tt>-constants which
+results in <tt>C</tt> non-conforming behaviour.
+</p><p>
+FIXME: UTF-16 encoding IS NOT IMPLEMENTED.
+</p><p>
+See also <a href="captive-apiref-unicode-reactos.html#captive-ucs4-to-ucs2-const">captive_ucs4_to_ucs2_const</a>().</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_ucs4</tt></i> :</span></td><td> const gunichar * type of persistent string to convert.
+This string MUST remain readable with the same content forever.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> const gunichar2 * converted string <i><tt>string_ucs4</tt></i>.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs2-compare"></a>captive_ucs2_compare ()</h3><pre class="programlisting">gboolean    captive_ucs2_compare            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);</pre><p>
+Compares case-sensitively <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_ucs2</tt></i> :</span></td><td> First string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_ucs2</tt></i> :</span></td><td> Second string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-compare"></a>captive_UnicodeString_compare ()</h3><pre class="programlisting">gboolean    captive_UnicodeString_compare   (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);</pre><p>
+Compares case-sensitively <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_UnicodeString</tt></i> :</span></td><td> First string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_UnicodeString</tt></i> :</span></td><td> Second string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-ucs2-compare-insensitive"></a>captive_ucs2_compare_insensitive ()</h3><pre class="programlisting">gboolean    captive_ucs2_compare_insensitive
+                                            (const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_a_ucs2,
+                                             const <a href="captive-apiref-unicode-reactos.html#captive-ucs2">captive_ucs2</a> *string_b_ucs2);</pre><p>
+Compares case-insensitively <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_ucs2</tt></i> :</span></td><td> First string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_ucs2</tt></i> :</span></td><td> Second string of type const gunichar2 * in pure UCS-2.
+Invalid string input is forbidden. UTF-16 encoded pairs are forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_ucs2</tt></i> and <i><tt>string_b_ucs2</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-UnicodeString-compare-insensitive"></a>captive_UnicodeString_compare_insensitive ()</h3><pre class="programlisting">gboolean    captive_UnicodeString_compare_insensitive
+                                            (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);</pre><p>
+Compares case-insensitively <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i>.</p><p>
+
+</p><div class="variablelist"><table border="0"><col align="left" valign="top"><tbody><tr><td><span class="term"><i><tt>string_a_UnicodeString</tt></i> :</span></td><td> First string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><i><tt>string_b_UnicodeString</tt></i> :</span></td><td> Second string of type PUNICODE_STRING.
+Invalid string input is forbidden.
+</td></tr><tr><td><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></td><td> <tt>TRUE</tt> if <i><tt>string_a_UnicodeString</tt></i> and <i><tt>string_b_UnicodeString</tt></i> are the same.
+</td></tr></tbody></table></div></div><hr><div class="refsect2" lang="en"><h3><a name="captive-FsRtlLegalAnsiCharacterArray-init"></a>captive_FsRtlLegalAnsiCharacterArray_init ()</h3><pre class="programlisting">void        captive_FsRtlLegalAnsiCharacterArray_init
+                                            (void);</pre><p>
+Initialize FsRtlLegalAnsiCharacterArray character classes
+by appropriate FSRTL_FAT_LEGAL etc. flags.</p><p>
+
+</p></div></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="captive-apiref-ps-reactos.html"><b>&lt;&lt; ps_reactos</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-unicode-reactos.html"><b>unicode_reactos &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/ch01.html b/project/captive/apiref/ch01.html
new file mode 100644 (file)
index 0000000..432c223
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Operation Captive</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="up" href="index.html" title="Operation Captive Reference Manual"><link rel="previous" href="index.html" title="Operation Captive Reference Manual"><link rel="next" href="captive-apiref-init.html" title="init"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td><th width="100%" align="center">Operation Captive Reference Manual</th><td><a accesskey="n" href="captive-apiref-init.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr></table><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="id2872113"></a>Operation Captive</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="captive-apiref-init.html">init</a> - </dt><dt><a href="captive-apiref-ldr.html">ldr</a> - </dt><dt><a href="captive-apiref-macros.html">macros</a> - </dt><dt><a href="captive-apiref-mm.html">mm</a> - </dt><dt><a href="captive-apiref-ps-reactos.html">ps_reactos</a> - </dt><dt><a href="captive-apiref-unicode.html">unicode</a> - </dt><dt><a href="captive-apiref-unicode-reactos.html">unicode_reactos</a> - </dt><dt><a href="captive-apiref-storage.html">storage</a> - </dt><dt><a href="captive-apiref-ldr-exports.html">ldr_exports</a> - </dt><dt><a href="captive-apiref-calltype-reactos.html">calltype_reactos</a> - </dt><dt><a href="captive-apiref-signal.html">signal</a> - </dt><dt><a href="captive-apiref-rtl-file.html">rtl-file</a> - </dt></dl></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"><a accesskey="p" href="index.html"><b>&lt;&lt; Operation Captive Reference Manual</b></a></td><td align="right"><a accesskey="n" href="captive-apiref-init.html"><b>init &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/home.png b/project/captive/apiref/home.png
new file mode 100644 (file)
index 0000000..1700361
Binary files /dev/null and b/project/captive/apiref/home.png differ
diff --git a/project/captive/apiref/index.html b/project/captive/apiref/index.html
new file mode 100644 (file)
index 0000000..780e376
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Operation Captive Reference Manual</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><meta name="generator" content="GTK-Doc V1.1 (XML mode)"><style type="text/css">
+        .synopsis, .classsynopsis {
+            background: #eeeeee;
+            border: solid 1px #aaaaaa;
+            padding: 0.5em;
+        }
+        .programlisting {
+            background: #eeeeff;
+            border: solid 1px #aaaaff;
+            padding: 0.5em;
+        }
+        .variablelist {
+            padding: 4px;
+            margin-left: 3em;
+        }
+        .navigation {
+            background: #ffeeee;
+            border: solid 1px #ffaaaa;
+            margin-top: 0.5em;
+            margin-bottom: 0.5em;
+        }
+        .navigation a {
+            color: #770000;
+        }
+        .navigation a:visited {
+            color: #550000;
+        }
+        .navigation .title {
+            font-size: 200%;
+        }
+      </style><link rel="home" href="index.html" title="Operation Captive Reference Manual"><link rel="next" href="ch01.html" title="Operation Captive"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" lang="en"><div class="titlepage"><div><table class="navigation" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Operation Captive Reference Manual</p></th></tr></table></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="ch01.html">Operation Captive</a></dt></dl></div></div><table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="0"><tr valign="middle"><td align="left"></td><td align="right"><a accesskey="n" href="ch01.html"><b>Operation Captive &gt;&gt;</b></a></td></tr></table></body></html>
diff --git a/project/captive/apiref/left.png b/project/captive/apiref/left.png
new file mode 100644 (file)
index 0000000..2d05b3d
Binary files /dev/null and b/project/captive/apiref/left.png differ
diff --git a/project/captive/apiref/right.png b/project/captive/apiref/right.png
new file mode 100644 (file)
index 0000000..92832e3
Binary files /dev/null and b/project/captive/apiref/right.png differ
diff --git a/project/captive/apiref/up.png b/project/captive/apiref/up.png
new file mode 100644 (file)
index 0000000..85b3e2a
Binary files /dev/null and b/project/captive/apiref/up.png differ
diff --git a/project/captive/dist/captive-0.9-0.i386.rpm b/project/captive/dist/captive-0.9-0.i386.rpm
new file mode 100644 (file)
index 0000000..4034651
Binary files /dev/null and b/project/captive/dist/captive-0.9-0.i386.rpm differ
diff --git a/project/captive/dist/captive-0.9-0.src.rpm b/project/captive/dist/captive-0.9-0.src.rpm
new file mode 100644 (file)
index 0000000..57fa5de
Binary files /dev/null and b/project/captive/dist/captive-0.9-0.src.rpm differ
diff --git a/project/captive/dist/captive-0.9-0mdk91.i586.rpm b/project/captive/dist/captive-0.9-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..ac5b765
Binary files /dev/null and b/project/captive/dist/captive-0.9-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/captive-0.9-0rh8.i386.rpm b/project/captive/dist/captive-0.9-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..5369071
Binary files /dev/null and b/project/captive/dist/captive-0.9-0rh8.i386.rpm differ
diff --git a/project/captive/dist/captive-0.9.tar.gz b/project/captive/dist/captive-0.9.tar.gz
new file mode 100644 (file)
index 0000000..53a4688
Binary files /dev/null and b/project/captive/dist/captive-0.9.tar.gz differ
diff --git a/project/captive/dist/captive-debuginfo-0.9-0.i386.rpm b/project/captive/dist/captive-debuginfo-0.9-0.i386.rpm
new file mode 100644 (file)
index 0000000..c6f7559
Binary files /dev/null and b/project/captive/dist/captive-debuginfo-0.9-0.i386.rpm differ
diff --git a/project/captive/dist/captive-install-0.9-0.i386.rpm b/project/captive/dist/captive-install-0.9-0.i386.rpm
new file mode 100644 (file)
index 0000000..3a66088
Binary files /dev/null and b/project/captive/dist/captive-install-0.9-0.i386.rpm differ
diff --git a/project/captive/dist/captive-install-0.9-0mdk91.i586.rpm b/project/captive/dist/captive-install-0.9-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..3431b46
Binary files /dev/null and b/project/captive/dist/captive-install-0.9-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/captive-install-0.9-0rh8.i386.rpm b/project/captive/dist/captive-install-0.9-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..9e1fe93
Binary files /dev/null and b/project/captive/dist/captive-install-0.9-0rh8.i386.rpm differ
diff --git a/project/captive/dist/captive-install_0.9_i386.deb b/project/captive/dist/captive-install_0.9_i386.deb
new file mode 100644 (file)
index 0000000..5bae30c
Binary files /dev/null and b/project/captive/dist/captive-install_0.9_i386.deb differ
diff --git a/project/captive/dist/captive-lufs-0.9-0.i386.rpm b/project/captive/dist/captive-lufs-0.9-0.i386.rpm
new file mode 100644 (file)
index 0000000..c5a304d
Binary files /dev/null and b/project/captive/dist/captive-lufs-0.9-0.i386.rpm differ
diff --git a/project/captive/dist/captive-lufs-0.9-0mdk91.i586.rpm b/project/captive/dist/captive-lufs-0.9-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..17e342a
Binary files /dev/null and b/project/captive/dist/captive-lufs-0.9-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/captive-lufs-0.9-0rh8.i386.rpm b/project/captive/dist/captive-lufs-0.9-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..72aee4d
Binary files /dev/null and b/project/captive/dist/captive-lufs-0.9-0rh8.i386.rpm differ
diff --git a/project/captive/dist/captive-lufs_0.9_i386.deb b/project/captive/dist/captive-lufs_0.9_i386.deb
new file mode 100644 (file)
index 0000000..56c6e16
Binary files /dev/null and b/project/captive/dist/captive-lufs_0.9_i386.deb differ
diff --git a/project/captive/dist/captive_0.9.dsc b/project/captive/dist/captive_0.9.dsc
new file mode 100644 (file)
index 0000000..dfa59db
--- /dev/null
@@ -0,0 +1,21 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: captive
+Version: 0.9
+Binary: captive, captive-lufs, captive-install
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0), liborbit2-dev, libssl-dev, libgnomevfs2-dev, libxml2-dev (>= 2.4.29), libpopt-dev, libglib2.0-dev, libreadline4-dev, libbonobo2-dev, lufs, ntfsprogs-dev, libgnomeui-dev, gcc (>= 3.0) | gcc-3.0
+Files: 
+ 9e600552363fd5d826f78ab9b32e7155 2386447 captive_0.9.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/cqojzD78uUT8djIRAryjAKCdOYA04vPvCm8n74+kyYpWhg/odQCfaZQR
+PL6Mr5bEqsSrY9nO+PTE6Q4=
+=8ywL
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/captive_0.9.tar.gz b/project/captive/dist/captive_0.9.tar.gz
new file mode 100644 (file)
index 0000000..fa93cf2
Binary files /dev/null and b/project/captive/dist/captive_0.9.tar.gz differ
diff --git a/project/captive/dist/captive_0.9_i386.changes b/project/captive/dist/captive_0.9_i386.changes
new file mode 100644 (file)
index 0000000..dbd03e3
--- /dev/null
@@ -0,0 +1,35 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: captive
+Binary: captive-lufs captive-install captive
+Architecture: source i386
+Version: 0.9
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ captive    - NTFS filesystem using Microsoft Windows drivers
+ captive-install - Instant installer for Microsoft Windows platform filesystem acces
+ captive-lufs - LUFS module for Microsoft Windows platform filesystem access.
+Changes: 
+ captive (0.9) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ ec17497c2ceb98ac38a61232bd4e2307 731 contrib/base optional captive_0.9.dsc
+ 9e600552363fd5d826f78ab9b32e7155 2386447 contrib/base optional captive_0.9.tar.gz
+ ac64c371bdcaf3305b0238945c3ef90a 342604 contrib/base optional captive_0.9_i386.deb
+ 686965b5e2def09e0d7ae551753ccce3 21730 contrib/base optional captive-lufs_0.9_i386.deb
+ c38084f6a9736abcda10a20a5f9ec5d6 54846 contrib/base optional captive-install_0.9_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/cqoqzD78uUT8djIRAuE5AJ93P5pUo9OWOW3GA9G4FjfllzJ2hACdF2Ut
+j/iaKH+CFycdN/jyw3rXbA8=
+=9zU3
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/captive_0.9_i386.deb b/project/captive/dist/captive_0.9_i386.deb
new file mode 100644 (file)
index 0000000..e12427f
Binary files /dev/null and b/project/captive/dist/captive_0.9_i386.deb differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm
new file mode 100644 (file)
index 0000000..bad3365
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.i386.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm
new file mode 100644 (file)
index 0000000..b53e440
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0.src.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..180a873
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0mdk91.i586.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm
new file mode 100644 (file)
index 0000000..995f6e0
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2-0rh8.i386.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz
new file mode 100644 (file)
index 0000000..848a25f
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-2.3.8captive2.tar.gz differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm b/project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm
new file mode 100644 (file)
index 0000000..2ed799b
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive-debuginfo-2.3.8captive2-0.i386.rpm differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.dsc b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.dsc
new file mode 100644 (file)
index 0000000..404c5fd
--- /dev/null
@@ -0,0 +1,21 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: gnome-vfs-httpcaptive
+Version: 2.3.8captive2
+Binary: gnome-vfs-httpcaptive
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0), libgnomevfs2-dev, libglib2.0-dev
+Files: 
+ 28b11b8bad6afd34358c7164cf115b26 548681 gnome-vfs-httpcaptive_2.3.8captive2.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/cQF0zD78uUT8djIRAg0BAJ41drC99NHu0WeZ1jbrOeqBVDskagCgjiBh
+LGCDaoxg6ntOx5MKZezbgbA=
+=R87D
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz
new file mode 100644 (file)
index 0000000..f283893
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.tar.gz differ
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.changes b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.changes
new file mode 100644 (file)
index 0000000..5f696a5
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: gnome-vfs-httpcaptive
+Binary: gnome-vfs-httpcaptive
+Architecture: source i386
+Version: 2.3.8captive2
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ gnome-vfs-httpcaptive - Improved http handler for GNOME virtual file-system libraries
+Changes: 
+ gnome-vfs-httpcaptive (2.3.8captive2) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ 17cb718d117e7d9379f82f0bd6921f5e 601 main/base optional gnome-vfs-httpcaptive_2.3.8captive2.dsc
+ 28b11b8bad6afd34358c7164cf115b26 548681 main/base optional gnome-vfs-httpcaptive_2.3.8captive2.tar.gz
+ ced34037f2394693e125d93569fa3c05 29014 main/base optional gnome-vfs-httpcaptive_2.3.8captive2_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/cQF5zD78uUT8djIRAi+lAJ4kX3A7BRernUTWY3ULbjyNhjjSrQCdFBjH
+BMDmPvZSKiguLfa47mNMDbM=
+=cNwB
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb
new file mode 100644 (file)
index 0000000..b2f938b
Binary files /dev/null and b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.deb differ
diff --git a/project/captive/dist/lufs-0.9.6-1captive1.i386.rpm b/project/captive/dist/lufs-0.9.6-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..ab66d44
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive1.i386.rpm differ
diff --git a/project/captive/dist/lufs-0.9.6-1captive1.src.rpm b/project/captive/dist/lufs-0.9.6-1captive1.src.rpm
new file mode 100644 (file)
index 0000000..25b4eb1
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive1.src.rpm differ
diff --git a/project/captive/dist/lufs-0.9.6-1captive1mdk91.i586.rpm b/project/captive/dist/lufs-0.9.6-1captive1mdk91.i586.rpm
new file mode 100644 (file)
index 0000000..3a444d1
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive1mdk91.i586.rpm differ
diff --git a/project/captive/dist/lufs-0.9.6captive1.tar.gz b/project/captive/dist/lufs-0.9.6captive1.tar.gz
new file mode 100644 (file)
index 0000000..8df0566
Binary files /dev/null and b/project/captive/dist/lufs-0.9.6captive1.tar.gz differ
diff --git a/project/captive/dist/lufs-debuginfo-0.9.6-1captive1.i386.rpm b/project/captive/dist/lufs-debuginfo-0.9.6-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..a0c0540
Binary files /dev/null and b/project/captive/dist/lufs-debuginfo-0.9.6-1captive1.i386.rpm differ
diff --git a/project/captive/dist/lufs_0.9.6captive1.dsc b/project/captive/dist/lufs_0.9.6captive1.dsc
new file mode 100644 (file)
index 0000000..154ffd2
--- /dev/null
@@ -0,0 +1,21 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: lufs
+Version: 0.9.6captive1
+Binary: lufs
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: any
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0), cvs2cl, make, autoconf, libtool, automake (>= 1.6) | automake1.6 | automake1.7, gcc, perl
+Files: 
+ d4b2984c65cbc7115a4e59518bc61bc7 212273 lufs_0.9.6captive1.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bV1OzD78uUT8djIRAt/MAKCiIdO28pBnmP54H3LRapcY7qj+1ACeNDpn
+5ZqfZJ2Z6ce2RGbuBTctHBA=
+=Kr94
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/lufs_0.9.6captive1.tar.gz b/project/captive/dist/lufs_0.9.6captive1.tar.gz
new file mode 100644 (file)
index 0000000..42a2201
Binary files /dev/null and b/project/captive/dist/lufs_0.9.6captive1.tar.gz differ
diff --git a/project/captive/dist/lufs_0.9.6captive1_i386.changes b/project/captive/dist/lufs_0.9.6captive1_i386.changes
new file mode 100644 (file)
index 0000000..fae8e99
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: lufs
+Binary: lufs
+Architecture: source i386
+Version: 0.9.6captive1
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ lufs       - lufs - Linux Userland File System
+Changes: 
+ lufs (0.9.6captive1) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ 67ee78bb425fb97a80bc4d758b450c8d 606 base optional lufs_0.9.6captive1.dsc
+ d4b2984c65cbc7115a4e59518bc61bc7 212273 base optional lufs_0.9.6captive1.tar.gz
+ 0e961a01e470e5f53f002f07d5b21cef 138556 base optional lufs_0.9.6captive1_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bV1UzD78uUT8djIRAv3oAJ48WvewJ2L3NryqgnUkj+KUazSp9wCgqqWZ
+Qi41hMzoXysrrqn1rB6Ce0M=
+=cBEy
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/lufs_0.9.6captive1_i386.deb b/project/captive/dist/lufs_0.9.6captive1_i386.deb
new file mode 100644 (file)
index 0000000..2f94d11
Binary files /dev/null and b/project/captive/dist/lufs_0.9.6captive1_i386.deb differ
diff --git a/project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm b/project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..801d4a7
Binary files /dev/null and b/project/captive/dist/ntfsprogs-200309071734-1captive1.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm b/project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm
new file mode 100644 (file)
index 0000000..50eb2ab
Binary files /dev/null and b/project/captive/dist/ntfsprogs-200309071734-1captive1.src.rpm differ
diff --git a/project/captive/dist/ntfsprogs-200309071734captive1.tar.gz b/project/captive/dist/ntfsprogs-200309071734captive1.tar.gz
new file mode 100644 (file)
index 0000000..ddca521
Binary files /dev/null and b/project/captive/dist/ntfsprogs-200309071734captive1.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm b/project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..6a64a6b
Binary files /dev/null and b/project/captive/dist/ntfsprogs-debuginfo-200309071734-1captive1.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb b/project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb
new file mode 100644 (file)
index 0000000..a164d20
Binary files /dev/null and b/project/captive/dist/ntfsprogs-dev_200309071734captive1_i386.deb differ
diff --git a/project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm b/project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm
new file mode 100644 (file)
index 0000000..1162b36
Binary files /dev/null and b/project/captive/dist/ntfsprogs-devel-200309071734-1captive1.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0-0.i386.rpm b/project/captive/dist/ntfsprogs-gnomevfs-1.0-0.i386.rpm
new file mode 100644 (file)
index 0000000..747824b
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0-0.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0-0.src.rpm b/project/captive/dist/ntfsprogs-gnomevfs-1.0-0.src.rpm
new file mode 100644 (file)
index 0000000..c8598cb
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0-0.src.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0.tar.gz b/project/captive/dist/ntfsprogs-gnomevfs-1.0.tar.gz
new file mode 100644 (file)
index 0000000..9050e09
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0-0.i386.rpm b/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0-0.i386.rpm
new file mode 100644 (file)
index 0000000..351ea71
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0-0.i386.rpm differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.dsc b/project/captive/dist/ntfsprogs-gnomevfs_1.0.dsc
new file mode 100644 (file)
index 0000000..9f7003d
--- /dev/null
@@ -0,0 +1,21 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: ntfsprogs-gnomevfs
+Version: 1.0
+Binary: ntfsprogs-gnomevfs
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Build-Depends: debhelper (>> 3.0.0), libgnomevfs2-dev, libglib2.0-dev, ntfsprogs-dev
+Files: 
+ f09c3b0bd5472b52f4fc9aee01ebc4cd 312258 ntfsprogs-gnomevfs_1.0.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bfcWzD78uUT8djIRArd0AJ0bsfWvluoGAiftB4EcdS0YPPZBsgCfR9Gr
+SCBZbK+UNlftMm1M0WufI2Q=
+=yfRZ
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.tar.gz b/project/captive/dist/ntfsprogs-gnomevfs_1.0.tar.gz
new file mode 100644 (file)
index 0000000..c6b17c1
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs_1.0.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0_i386.changes b/project/captive/dist/ntfsprogs-gnomevfs_1.0_i386.changes
new file mode 100644 (file)
index 0000000..e98881e
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Sun, 17 Aug 2003 14:16:59 +0200
+Source: ntfsprogs-gnomevfs
+Binary: ntfsprogs-gnomevfs
+Architecture: source i386
+Version: 1.0
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ ntfsprogs-gnomevfs - NTFS filesystem library GNOME virtual file-system interface
+Changes: 
+ ntfsprogs-gnomevfs (1.0) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ d31a9ba8f6042adb6c7c477f9b9628c9 587 main/base optional ntfsprogs-gnomevfs_1.0.dsc
+ f09c3b0bd5472b52f4fc9aee01ebc4cd 312258 main/base optional ntfsprogs-gnomevfs_1.0.tar.gz
+ e6eb04edc54ed4e4d44b4ab3ccaa407f 9906 main/base optional ntfsprogs-gnomevfs_1.0_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bfcbzD78uUT8djIRAhOJAJ0fgxxdJ7dGHxJWVAby6ahP/0NOBgCfbGh5
+Rr9PQBIl5yIC5VR/55f69g0=
+=qs70
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0_i386.deb b/project/captive/dist/ntfsprogs-gnomevfs_1.0_i386.deb
new file mode 100644 (file)
index 0000000..2cfdfa9
Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs_1.0_i386.deb differ
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1.dsc b/project/captive/dist/ntfsprogs_200309071734captive1.dsc
new file mode 100644 (file)
index 0000000..9b6b0a3
--- /dev/null
@@ -0,0 +1,20 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.0
+Source: ntfsprogs
+Version: 200309071734captive1
+Binary: ntfsprogs, ntfsprogs-dev
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Architecture: i386
+Standards-Version: 3.5.2
+Files: 
+ d1d605893444b80fd837301320dd2261 535278 ntfsprogs_200309071734captive1.tar.gz
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bdcpzD78uUT8djIRAjnhAKCE3ofdN1P9M434xfCqJTuqAVSHSQCdFiq1
+0Mg8noB5XT55apyd7hq6RbI=
+=LrBu
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1.tar.gz b/project/captive/dist/ntfsprogs_200309071734captive1.tar.gz
new file mode 100644 (file)
index 0000000..0ec13c3
Binary files /dev/null and b/project/captive/dist/ntfsprogs_200309071734captive1.tar.gz differ
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1_i386.changes b/project/captive/dist/ntfsprogs_200309071734captive1_i386.changes
new file mode 100644 (file)
index 0000000..d60878f
--- /dev/null
@@ -0,0 +1,33 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+Format: 1.7
+Date: Tue, 09 Sep 2003 08:22:48 +0200
+Source: ntfsprogs
+Binary: ntfsprogs ntfsprogs-dev
+Architecture: source i386
+Version: 200309071734captive1
+Distribution: unstable
+Urgency: low
+Maintainer: Jan Kratochvil <project-captive@jankratochvil.net>
+Changed-By: Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
+Description: 
+ ntfsprogs  - NTFS filesystem libraries and utilities
+ ntfsprogs-dev - files required to compile software that uses libntfs
+Changes: 
+ ntfsprogs (200309071734captive1) unstable; urgency=low
+ .
+   * See package ChangeLog entries.
+Files: 
+ d4fd74a7e479d42cb3e375c0c50f0694 524 contrib/base optional ntfsprogs_200309071734captive1.dsc
+ d1d605893444b80fd837301320dd2261 535278 contrib/base optional ntfsprogs_200309071734captive1.tar.gz
+ 202a161dc4b512e94ed4ef65a798b33a 169968 contrib/base optional ntfsprogs_200309071734captive1_i386.deb
+ 80b2f06832c66bb07c439f7c7e175b64 91630 contrib/base optional ntfsprogs-dev_200309071734captive1_i386.deb
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.2.3 (GNU/Linux)
+
+iD8DBQE/bdcuzD78uUT8djIRAvX4AJoC11uEH2aQNfmLgeRGOOU5u0098gCcDHpS
+cN3+Cbhbo775wc68qlvhSqw=
+=FheU
+-----END PGP SIGNATURE-----
diff --git a/project/captive/dist/ntfsprogs_200309071734captive1_i386.deb b/project/captive/dist/ntfsprogs_200309071734captive1_i386.deb
new file mode 100644 (file)
index 0000000..53b9fcb
Binary files /dev/null and b/project/captive/dist/ntfsprogs_200309071734captive1_i386.deb differ
diff --git a/project/captive/doc/Index.html.pl b/project/captive/doc/Index.html.pl
new file mode 100755 (executable)
index 0000000..6bb3b89
--- /dev/null
@@ -0,0 +1,1665 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Captive project doc Index page Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::captive::doc::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+use vars qw($VERSION $CVS_ID);
+$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+$CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+
+
+My::Web->init(
+               "__PACKAGE__"=>__PACKAGE__,
+               "title"=>'Captive NTFS doc',
+               "head_css"=>"
+.productname { font-family: cursive; }
+.fname       { font-family: monospace; }
+.constant    { font-family: monospace; }
+.author      { font-family: cursive; }
+.stuff       { font-style: italic; font-size: larger; margin-left: 20%; margin-right: 10%; }
+.function    { font-family: monospace; }
+.type        { font-family: monospace; }
+.command     { font-family: monospace; }
+.instruction { font-style: italic; }
+",
+               );
+My::Web->heading();
+
+
+sub doc_img
+{
+my($img_base,$caption)=@_;
+
+       my $r="";
+       $r.='<table border="0" align="center">'."\n";
+               $r.="\t<tr><td>".img($img_base,$caption)."</td></tr>\n";
+               $r.="\t<caption>".CGI::escapeHTML($caption)."</caption>\n";
+       $r.='</table>'."\n";
+       return $r;
+}
+
+my $freespeech=a_href 'http://www.gnu.org/philosophy/free-sw.html','Free';
+my $freebeer=a_href 'http://www.gnu.org/philosophy/free-sw.html','free (as in beer)';
+
+sub productname
+{
+my($url,$name)=@_;
+
+       return '<span class="productname">'.a_href($url,CGI::escapeHTML($name)).'</span>';
+}
+my $Wine=productname 'http://www.winehq.com/','Wine';
+my $ReactOS=productname 'http://www.reactos.com/','ReactOS';
+my $LinuxNTFS=productname 'http://linux-ntfs.sourceforge.net/','Linux NTFS';
+my $GnomeVFS=productname 'http://developer.gnome.org/doc/API/gnome-vfs/','Gnome-VFS';
+my $GnomeVFSmodule=productname 'http://developer.gnome.org/doc/API/gnome-vfs/modules.html','Gnome-VFS-module';
+my $gnulinux='GNU/Linux';
+
+
+print vskip("10ex")."<h1 align=\"center\">!!! PRELIMINARY - TO BE UPDATED !!!</h1>\n".vskip("10ex");
+
+print <<"HERE";
+<h1>Abstract</h1>
+
+<p>Existing binary Microsoft Windows file system drivers were exploited
+for accessing drives with possibly proprietary file system data structures.
+Open file system API is provided to access these file system drivers.
+Microsoft Windows system components required by these drivers
+were analyzed and successfuly emulated in the GNU/Linux operating system.
+Currently the implementation allows applications running under the GNU/Linux
+operating system to access VFAT, ISO9660 and EXT2 drives. NTFS file system
+capability target is the final goal being currently developed on the base
+of this project assets.</p>
+
+
+<h1>Reasons for the Implementation</h1>
+
+       <p>Currently there is no possibility to any of the available $freespeech
+               ($freespeech used in the following text in the meaning of
+               &quot;<a href="http://www.gnu.org/philosophy/free-sw.html">free as in speech</a>&quot;)
+       operating systems to reliably write to the most common disk partition
+       filesystem type - <span class="productname">Microsoft NTFS</span>. It would
+       be already supported a long time ago but there is no proper documentation of
+       <span class="productname">NTFS</span> filesystem data structures available.
+       Since <span class="productname">Microsoft</span> corporation continues in its
+       propagation of <span class="productname">Microsoft Windows NT</span>
+               (<span class="productname">NT</span> identifier used in the following text
+               applies to all the products of <span class="productname">Microsoft</span>
+               <span class="productname">NT</span> series such as
+               <span class="productname">NT&nbsp;4.0</span>,
+               <span class="productname">2000</span> as NT-5.0
+               and
+               <span class="productname">XP</span> as NT-5.1.)
+       based operating systems <span class="productname">NTFS</span> is the default
+       disk file system type for new installations as described in the
+       <a href="http://www.microsoft.com/hwdev/tech/storage/ntfs-preinstallP.asp">recommendations
+       report</a> by <span class="productname">Microsoft</span>.</p>
+
+       <p>Unfortunately the <span class="productname">NTFS</span> filesystem has too
+       complex data structure to allow a complete reverse enginnering process in
+       reasonable time. Currently available $freespeech solutions such as $LinuxNTFS
+       filesystem have already implemented (more or less) reliable reverse
+       engineered read-only access. However <a name="reliability">the
+       reliability</a> of the read-write part of the access requires much better
+       knowledge of the <span class="productname">NTFS</span> data structures. Also
+       any future versions of <span class="productname">NTFS</span> filesystem would
+       require another major reverse engineering effort.</p>
+
+
+<h1>Goals of This Stage of the Project</h1>
+
+       <p>The <a name="NTFSgoal">ultimate goal</a> of this project is definitely the
+       free implementation of <a href="#reliability">reliable</a> read-write <span
+       class="productname">NTFS</span> filesystem driver. This project chose to
+       solve this problem in the style of $Wine project by using the original binary
+       <span class="fname">ntfs.sys</span> and emulating all the required layers of
+       <span class="productname">Microsoft Windows NT</span> for it.</p>
+
+       <p>Unfortunately this effort is tainted by only partial and generally
+       insufficient documentation of API between filesystem driver
+       (<span class="fname">ntfs.sys</span>) and the
+       <span class="productname">Microsoft Windows NT</span>
+       (&quot;<a href="http://mail.gnu.org/archive/html/libtool/2000-09/msg00000.html">W32</a>&quot;
+       in the following text) kernel <span class="fname">ntoskrnl.exe</span>. Note
+       that this API is a different than the one being used in the $Wine project
+       since <span class="productname">Wine</span> implements only the user space
+       part of W32.</p>
+
+       <p>There also exists a $freespeech
+       <span class="fname"><a href="http://sys.xiloo.com/projects/projects.htm#ext2fsd">ext2fsd.sys</a></span>
+       W32 filesystem driver for <span class="constant">ext2</span> filesystems with
+       source files freely available for it. Moreover original
+       <span class="productname">Microsoft Windows NT</span> filesystems
+       <span class="fname">cdfs.sys</span> and
+       <span class="fname">fastfat.sys</span> (which correspond to Linux
+       <span class="productname">iso9660</span> and
+       <span class="productname">vfat</span> filesystems, resp.) are easy enough to
+       get working in reasonable time. All these filesystem drivers also use only
+       the documented filesystem data structures which makes their behaviour better
+       controllable when debugging the project.</p>
+
+       <p>Therefore this stage of the project is intended to get only the original
+       W32 binary form of <span class="fname">cdfs.sys</span> and
+       <span class="fname">fastfat.sys</span> drivers working. This goal was
+       achieved and the compatibility with <span class="fname">ext2fsd.sys</span>
+       can be considered as an additional benefit.</p>
+
+
+<h1>Architecture</h1>
+
+       <p>Although this project attempts to be as general and crossplatform as
+       possible to avoid being needlessly bound by any resources the current
+       implementation is being developed/tested on $gnulinux. The principle of the
+       project lies in the glue between
+       <span class="productname">Microsoft Windows NT</span> kernel space
+       environment and $gnulinux user space process environment. Currently there are
+       no plans to ever extend the project's crossplatformity beyond the
+       <span class="constant">i386</span> processor
+               (<span class="constant">i386</span> used here as
+               <a href="http://www.intel.com/">Intel</a> architecture covering 32-bit
+               processors compatible with <span class="constant">i386</span>,
+               <span class="constant">i486</span>, ...).
+
+       <a name="existing_emulation"><h2>Existing Emulation Projects</h2></a>
+
+               <p>There are two well-known $freespeech projects emulating W32 subsystems
+               to reach the compatibility with various W32 components:
+               $Wine and $ReactOS. Sad moment is that the goals of this project do not fit
+               very well into any role in those two projects:
+
+               <table align="center" border="1">
+                       <tr>
+                               <th><a href="#guestosnote">Guest-OS</a></th>
+                               <th><a href="#hostosnote" >Host-OS</a ></th>
+                               <th>Implements</th>
+                               <th>W32 kernel library</th>
+                               </tr>
+                       <tr>
+                               <td>$Wine</td>
+                               <td>$gnulinux</td>
+                               <td>W32 user space</td>
+                               <td><span class="fname">ntdll.dll</span></td>
+                               </tr>
+                       <tr>
+                               <td>$ReactOS</td>
+                               <td><span class="constant">i386</span> hardware</td>
+                               <td>W32 kernel and user space</td>
+                               <td><span class="fname">ntoskrnl.exe</span></td>
+                               </tr>
+                       <caption>Existing Emulation Projects Characteristics</caption>
+               </table>
+
+               <dl>
+                       <a name="guestosnote"><dt>Guest-OS</dt></a>
+                       <dd><a href="http://www.vmware.com/support/reference/common/glossary/#guestos">Guest OS</a>:
+                               An operating system that runs inside a&nbsp;virtual machine.</dd>
+                       <a name="hostosnote" ><dt>Host  OS</dt></a>
+                       <dd><a href="http://www.vmware.com/support/reference/common/glossary/#hostos" >Host  OS</a>:
+                               An operating system that runs on the host machine.</dd>
+               </dl>
+
+               <p>While $ReactOS provides the necessary W32 kernel subsystem emulation
+               code we also need to run such <a href="#guestosnote">Guest-OS</a> in the <a
+               href="#hostosnote">Host-OS</a> $gnulinux. Initially it was planned to
+               extend $Wine with the W32 kernel space emulation functionality but
+               fortunately <span class="author">Steven Edwards</span> pointed to the $ReactOS
+               which better suits the needs of this project by its already implemented W32
+               kernel space emulation.</p>
+
+               <p>The <a name="reactos_nocare">original reasons</a> for developing
+               $ReactOS still make no sense to the author of this project. Free
+               implementation of W32 platform standalone running on the machine hardware
+               is no longer free as most od the W32 applications are usually closed source
+               and the user still looses its freedom on the application level anyway. Even
+               in the case of available free applications there still remains the
+               disadvantage of loosing the Host-OS platform availability if implemented in
+               the $Wine style. For these ideology incompatibilities not much effort was
+               made for acceptance the fixes and improvements of $ReactOS by this project.
+               Moreover new functionality is not being implemented to the $ReactOS part
+               but it is coded in Gnome style in the project specific source files
+               place.</p>
+
+               <p>The most serious problem of $ReactOS is its dependence on the direct
+               <span class="constant">i386</span> hardware instead of some
+               <a href="#hostosnote">Host-OS</a> as required by the goals of this project.
+               W32 is designed to be hardware-independent using its
+               <span class="fname">hal.dll</span>. Unfortunately $ReactOS does not follow
+               this design and thus there are needed various patches and replaces of its
+               various parts and its hardware-dependent code. Despite it $ReactOS code
+               base still made a big asset for this project.</p>
+
+
+
+
+
+               <p>Some API functions are provided both by
+               <span class="fname">ntdll.dll</span> and
+               <span class="fname">ntoskrnl.exe</span> in W32.
+               <span class="author">Casper Hornstrup</span> enlightened such functions
+               calling conventions have to be differentiated as
+               <span class="fname">ntdll.dll</span> lives in the user space (low address
+               space -- below <span class="constant">0x80000000</span>) and
+               <span class="fname">ntoskrnl.exe</span> in the kernel space (high address
+               space -- above <span class="constant">0x80000000</span>). Although they
+               contain slightly different set of symbols (functions)
+               <span class="fname">ntdll.dll</span> still can be considered as a&nbsp;user
+               space interface to the kernel space implementation by
+               <span class="fname">ntoskrnl.exe</span>.</p>
+
+       <h2>API Function Implementation Choices</h2>
+
+               <p>During the initial point of the project development all the API
+               functions were defined as unimplemented, of course. Any call of such
+               unimplemented function is fatal and results in program termination. When we
+               need to implement any required API function we have multiple choices to do
+               so:
+               <a href="#functype_pass">Direct pass to original
+                               <span class="fname">ntoskrnl.exe</span></a>,
+               <a href="#functype_wrap">Wrap of the original
+                               <span class="fname">ntoskrnl.exe</span> function</a>,
+               <a href="#functype_native_reactos">Native implementation -- $ReactOS,
+               <a href="#functype_native_wine">Native implementation -- $Wine
+               or
+               <a href="#functype_native_libcaptive">Native implementation
+                               -- project specific</a>.
+               <!-- a href="#functype_undef" Undefined function /a -->
+
+       <h2>&quot;patched&quot; vs. &quot;unpatched&quot; Libraries</h2>
+
+               <p>Library is called <span class="constant">patched</span> if we require
+               loading its original binary code file. Project needs to patch it to be able
+               to trap all the function entry points. The typical current
+               <span class="constant">patched</span> library of this project is
+               <span class="fname">ntoskrnl.exe</span>.</p>
+
+               <p>Library is called <span class="constant">unpatched</span> if no original
+               binary code is needed since all of its functions are completely emulated by
+               <a href="#functype_native">the native implementations</a> of this project.
+               The typical <span class="constant">unpatched</span> representative is
+               <span class="fname">hal.dll</span> as it specializes on the hardware
+               dependent code and therefore it must be completely replaced by this project
+               running in the $gnulinux operating system environment. Early versions of
+               this project had also full <span class="constant">unpatched</span>
+               <a href="#native_ntoskrnl">native implementation of
+               <span class="fname">ntoskrnl.exe</span></a> but it no longer applies.</p>
+
+       <h2>Memory Management</h2>
+
+               <p>Original <span class="productname">Microsoft Windows NT</span>
+               architecture uses two address space areas - user space and kernel space.
+               User space is mapped in the range <span class="constant">0x00000000</span>
+               to <span class="constant">0x7FFFFFFF</span>, kernel space is mapped in the
+               range <span class="constant">0x80000000</span>
+               (<span class="constant">KERNEL_BASE</span> in $ReactOS sources) to
+               <span class="constant">0xFFFFFFFF</span>. All these virtual memory ranges
+               represent addresses after their MMU (Memory Management Unit) mapping, of
+               course. More discussion can be found in the
+               <a href="http://www.microsoft.com/hwdev/platform/server/PAE/PAEmem.asp">description 
+               by <span class="productname">Microsoft</span></a>.</p>
+
+               <p>This project runs in the virtual address space used both for the UNIX
+               user space process part and for the W32 kernel space. Therefore this
+               project defines that W32 kernel runs in the whole range
+               <span class="constant">0x00000000</span> to
+               <span class="constant">0xFFFFFFFF</span> since there are no special mapping
+               assumptions about the UNIX user space process mapping. No W32 user space
+               exists in this project. Such approach also nullifies any special memory
+               moving operations between W32 kernel space and W32 user space memory areas
+               (such as <span class="function">MmSafeCopyToUser()</span>).</p>
+
+       <h2>Unicode Strings and Characters</h2>
+
+               <p>W32 platform uses 16-bit type <span class="type">wchar_t</span> while $gnulinux uses a
+               32-bit one. This can be problem during GCC (GNU C&nbsp;Compiler)
+               compilation of combination of native UNIX C&nbsp;sources (assuming 32-bit
+               GCC with 32-bit <span class="type">wchar_t</span>) and
+               $ReactOS C sources (assuming W32 compiler with 16-bit
+               <span class="type">wchar_t</span>) for literal wide strings
+               (C source file systax: <span class="command">L&quot;wstring&quot;</span>).
+               Possibilities to solve this issue list:</p>
+
+               <ul>
+                       <li>
+                               <p>Using <span class="constant">-fshort-wchar</span> GCC option and
+                               strictly differentiate between compilation of
+                               <span class="productname">ReactOS</span> code and UNIX code.</p>
+
+                               <p>pros: No source modifications needed, no runtime performance hit.</p>
+
+                               <p>cons: No type checking if some part of code has bad compilation
+                               flags, complicated way to completely split
+                               <span class="productname">ReactOS</span> and UNIX code.</p>
+                       </li>
+                       <li>
+                               <p>Wrap all <span class="productname">ReactOS</span> literal constants
+                               by some conversions function call (implemented as macro
+                               <span class="function">REACTOS_UCS2()</span> by this project).</p>
+
+                               <p>pros: Any forgotten/mistaken conversions are type-checked and warned
+                               during the compilation by GCC.</p>
+
+                               <p>cons: All compiled <span class="productname">ReactOS</span> sources
+                               files containing literal wide strings have to be wrapped/modified,
+                               performance hit by runtime string conversions.</p>
+
+                               <p>This solution was chosen to get the internal sanity checking
+                               benefit.</p>
+                       </li>
+               </ul>
+
+       <h2>Supported Binary Formats</h2>
+
+               <p>The native W32 binary format is identified as
+               <span class="constant">PE-32</span> (Portable Executable 32-bit), such
+               files have all the usual extensions such as
+               <span class="fname">.sys</span>, <span class="fname">.exe</span>,
+               <span class="fname">.dll</span> etc. <span class="constant">PE-32</span>
+               loading support was already implemented by $ReactOS, its memory mapping
+               specifics just had to be ported to $gnulinux environment by this project.
+               This loading support does not (yet) cover importing of debug symbols from
+               W32 <span class="fname">.PDB</span> (Program DataBase) files in $gnulinux
+               ABI (Application Binary Interface) compatible way.</p>
+
+               <p>This project also supports transparent loading of UNIX
+               <span class="fname">.so</span> (Shared Object file) binary format. If you
+               have W32 source files for some W32 library you can try to compile it by GCC
+               to get the shared library with $gnulinux ABI compatible debug information
+               (GCC option <span class="constant">-ggdb3</span> recommended). Beware of
+               possible compilation problems as <span class="productname">Microsoft</span>
+               C&nbsp;code expects <span class="constant">exception</span> handling to be
+               supported by the compiler (definitely not the case of the plain C compiler
+               of GCC) --- all the exception catching code should be discarded as any
+               <a href="#exception_fatal">generated exceptions are always fatal</a> when
+               such driver is running in the scope of this project.</p>
+
+               <p>Be aware of some differences if you use
+               <span class="constant">PE-32</span> binary format file vs.
+               <span class="fname">.so</span> format file.
+               <span class="constant">PE-32</span> use the appropriate W32 specific
+               <a href="#calltype">cdecl/stdcall/fastcall call types</a>,
+               <span class="fname">.so</span> must be completely compiled in the standard
+               UNIX <a href="#calltype_cdecl">cdecl call type semantics</a>.
+               <a href="#functype_native">Native function implementations</a> do not need
+               to be explicitely exported by <span class="fname">captivesym</span> as they
+               are resolved automatically by the UNIX dynamic system linker. It may be
+               surprising you will have to fix all such missing symbol exports if you
+               advance during the development from the debugging
+               <span class="fname">.so</span> file for the production version of the
+               original <span class="constant">PE-32</span> binary file.</p>
+
+       <h2>Reverse Engineering</h2>
+
+               <p>This project has no intentions to reverse engineer and document the
+               filesystem data structures themselves since they are being encapsulated by
+               the filesystem driver. For these reasons the resources available in
+               projects such as $LinuxNTFS get out of any possible use. This project goal
+               is to provide fully compatible API interface to the rest of the W32 system
+               to persuade the filesystem driver it is running in the native
+               <span class="productname">Microsoft Windows XP</span> environment.</p>
+
+               <p>All the W32 filesystem drivers are running in the W32 kernel address
+               space and this area of W32 API is not much documented by
+               <span class="productname">Microsoft</span>. Some API functions are not
+               documented at all and the others are documented insufficiently for a their
+               possibly needed reimplementation from scratch. Documentation being
+               consulted primarily consists of
+               <span class="productname"><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/kmhdr_6enb.asp">MSDN (Microsoft Developer Network) Kernel-Mode Driver Architecture: Windows DDK</a></span>
+               documentation and also various other 3rd party documentation resources such as
+               <span class="productname"><a href="http://www.osr.com/ntinsider/1996/cacheman.htm">The NT Cache Manager Description</a></span>,
+               <span class="productname"><a href="http://www.winntmag.com/Articles/Print.cfm?ArticleID=3864">Learn About NT's&nbsp;File-system Cache</a></span>,
+               <span class="productname"><a href="http://www.ntfsd.org/archive/">NT File System Developers mailing list archives</a></span>
+               including various
+               <a href="http://www.google.com/search?q=site%3Amicrosoft.com">fulltext searches</a>
+               through Internet from case to case.</p>
+
+               <p>Sometimes no sufficient documentation was found and some code behaviour
+               had to be reverse engineered directly from the binaries of
+               <span class="fname">ntoskrnl.exe</span>,
+               <span class="fname">cdfs.sys</span>
+               and/or
+               <span class="fname">fastfat.sys</span>.
+               Up to now the code was disassembled by
+               <span class="productname"><a href="http://www.simtel.net/pub/pd/29498.html">IDA Freeware</a></span>
+               and by
+               <span class="productname">dumpbin.exe</span> of
+               <span class="productname">Microsoft Visual Studio</span>.
+               <span class="productname">dumpbin.exe</span> is fortunately able to
+               interpret debug symbols from W32 <span class="fname">.PDB</span>
+               (Program DataBase) debug information files.</p>
+
+       <a name="law"><h2>Laws and Licensing Conditions</h2></a>
+
+               <p>If you are an <span class="productname">authorized user</span> of
+               <span class="productname">Microsoft Windows NT</span> the laws in some
+               countries give you the right to fully handle the product in any way you
+               want. Therefore you can disassemble the product even in the case you had
+               to agree with the product license forbidding such disassembly as the
+               country laws override any such license agreement.</p>
+
+               <h3>Microsoft Service Pack</h3>
+
+                       <p>Sometimes you may have the legal license for
+                       <span class="productname">Microsoft Windows NT</span>
+                       but for various technical reasons you do not have the media and/or
+                       installation ready at the place of intended use of this project.</p>
+
+                       <p>Fortunately <span class="productname">Microsoft</span> provides
+                       $freebeer update packages for its
+                       <span class="productname">Microsoft Windows</span> products called
+                       <span class="productname">Service Packs</span>; the latest one is
+                       <span class="productname"><a href="http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp">Microsoft Windows XP Service Pack 1a</a></span>.</p>
+
+                       <p>This downloadable file contains the full versions of the essential
+                       files needed for the current stage of this product:
+                       <span class="fname">cdfs.sys</span>,
+                       <span class="fname">fastfat.sys</span>
+                       and
+                       <span class="fname">ntoskrnl.exe</span>.
+                       It even contains <span class="fname">ntfs.sys</span> for the planned
+                       <a href="#NTFSgoal"><span class="productname">NTFS</span>
+                       functionality</a>.</p>
+
+                       <p><span class="productname">Service Pack</span> also contains
+                       EULA (End User License Agreement) paper disallowing any use of
+                       <span class="productname">Service Pack</span> outside its original
+                       intentions. According to the laws of some countries you need to be
+                       <span class="productname">authorized user</span> of the
+                       <span class="productname">Microsoft Windows XP</span> product to be
+                       allowed to use the files contained in such
+                       <span class="productname">Service Pack</span> without the bindings of its
+                       EULA. Even the interpretation of such laws may vary.</p>
+
+                       <p>It would be a&nbsp;breach of the law by the project author to provide
+                       automatic (=hidden) functionality to download and extract the
+                       <span class="productname">Service Pack</span> files. On the other hand it
+                       is perfectly legal to ask user for his/her confirmation whether he/she is
+                       really the <span class="productname">authorized user</span> of
+                       <span class="productname">Microsoft Windows XP</span> product and
+                       download/extract the <span class="productname">Service Pack</span> files
+                       accordingly.</p>
+
+       <h2>Project Architecture</h2>
+
+               @{[ doc_img 'fig/architecture','Project Architecture' ]}
+
+               <p>Most of the work of this project is located in the single box called
+               &quot;<span class="constant">libcaptive</span>&quot; located in the center
+               of the scheme. This component implements the core W32 kernel API by
+               <a href="#functype">various methods described in this document</a>.
+               The &quot;<span class="constant">libcaptive</span>&quot; box cannot be
+               further dissected as it is just an implementation of a&nbsp;set of API
+               functions. It could be separated to several subsystems such as the Cache
+               Manager, Memory Manager, Object Manager, Runtime Library, I/O&nbsp;Manager
+               etc. but they have no interesting referencing structure.</p>
+
+               <p>As this project is in fact just a&nbsp;filesystem implementation every
+               story must begin at the device file and end at the filesystem operations
+               interface. The unified suppported interfaces are
+               <span class="productname"><a href="http://developer.gnome.org/doc/API/2.0/glib/">GLib</a></span>
+                       (the most low level portability, data-types and utility library for Gnome)
+               <span class="type">GIOChannel</span> (for the device access) and the custom
+               <span class="constant">libcaptive</span> filesystme API. Each of these ends
+               can be connected either to some direct interface (such as the
+               <span class="constant">captive-cmdline</span> client) or it can connected
+               as a general $GnomeVFS filter. $GnomeVFS offers nice filter interface on
+               the UNIX user-privileges level for transparent operation with archives and
+               network protocols. This filter interface was used by this project to turn
+               the device reference such as <span class="fname">/dev/hda3</span> or
+               <span class="fname">/dev/discs/disc0/part3</span> to the fully accessible
+               filesystem (pretending being an &quot;archive&quot; in the device
+               reference). This device access can be specified by $GnomeVFS URLs such as:
+               <span class="fname">file:///dev/hda3#captive-fastfat:/autoexec.bat</span></p>
+               
+               <p>If the passed device reference is requested by the user to be accessed
+               either in <span class="dashdash">--ro</span> (read-only) mode or in the
+               <span class="dashdash">--rw</span> (full read-write) mode there are no
+               further device layers needed. Just in the case of
+               <span class="dashdash">--blind</span> mode another layer is involved to
+               emulate read-write device on top of the real read-only device by the method
+               of non-persistent memory buffering of all the possible write requests.</p>
+
+               <p>Such device is still only a&nbsp;UNIX style GLib <span
+               class="type">GIOChannel</span> type at this point.  As we need to supply it
+               to the W32 filesystem driver we must convert it to the W32 I/O&nbsp;Device
+               with its capability of handling <span class="type">IRP</span>
+                       (<span class="constant">I/O Request Packet</span>; structure holding the
+                       request and result data for any W32 filesystem or W32 block device
+                       operation)
+               requests from its upper W32 filesystem driver. Such W32 I/O&nbsp;Device can
+               represent either <span class="type">CD-ROM</span> or
+               <span class="type">disk</span> device type as different W32 filesystem
+               drivers require different media types:</p>
+
+               <h3>cdfs.sys</h3>
+
+                       <p><span class="type">CD-ROM</span> filesystem runs just on the
+                       <span class="constant">FILE_DEVICE_CD_ROM_FILE_SYSTEM</span> device type.
+                       Use <span class="dashdash">--cdrom</span> option of this project for
+                       <span class="fname">cdfs.sys</span>.</p>
+
+               <h3>fastfat.sys</h3>
+
+                       <p><span class="type">FAT</span> filesystem supports both the (expected)
+                       <span class="constant">FILE_DEVICE_DISK_FILE_SYSTEM</span> device type
+                       but it also supports the reading of
+                       <span class="constant">FILE_DEVICE_CD_ROM_FILE_SYSTEM</span> devices as
+                       you can use <span class="type">FAT</span> filesystem on <span
+                       class="type">CD-ROM</span> media in W32 environment. It is recommended to
+                       use <span class="dashdash">--disk</span> option of this project for
+                       <span class="fname">fastfat.sys</span>.</p>
+
+               <h3>ext2fsd.sys</h3>
+
+                       <p><span class="type">ext2</span> filesystem supports just the
+                       <span class="constant">FILE_DEVICE_DISK_FILE_SYSTEM</span> device type.
+                       Use <span class="dashdash">--disk</span> option of this project for
+                       <span class="fname">ext2fsd.sys</span>.</p>
+               
+               @{[ vskip("3ex") ]}
+
+               <p>W32 media I/O&nbsp;Device is accessed from the W32 filesystem driver.
+               The filesystem driver itself always creates volume object by
+               <span class="function">IoCreateStreamFileObject()</span> representing the
+               underlying W32 media I/O&nbsp;Device as the object handled by the
+               filesystem driver itself. All the client application filesystem requests
+               must be first resolved at the filesystem structures level, passed to the
+               volume stream object of the same filesystem and then finally passed to the
+               W32 media I/O&nbsp;Device (already implemented by this project as an
+               interface to <span class="type">GIOChannel</span> noted above).</p>
+
+               <p>The filesystem driver is called by the core W32 kernel implementation of
+               <span class="constant">libcaptive</span> in
+               <a href="#synchronous">synchronous way</a> 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>.
+               This single-shot synchronous behaviour is possible since all the needed
+               resources (disk blocks etc.) can be always presented as instantly ready as
+               their acquirement is solved by <a href="hostosnote">Host-OS</a> outside of
+               the W32 emulated <a href="guestosnote">Guest-OS</a> environment.</p>
+
+               <p><span class="constant">libcaptive</span> offers the W32 kernel
+               filesystem API to the upper layers. This is still not the API the common
+               W32 applications are used to as they use W32 libraries which in turn pass
+               the call to W32 kernel.  For example
+               <span class="function">CreateFileA()</span> is being implemented by several
+               libraries such as <span class="fname">user32.dll</span> as a relay
+               interface for the kernel function
+               <span class="function">IoCreateFile()</span> implemented by this
+               project's&nbsp;<span class="constant">libcaptive</span> W32 kernel
+               emulation component.</p>
+
+               <p>As it would be very inconvenient to use the legacy, bloated and UNIX
+               style unfriendly W32 kernel filesystem API this project offers its own
+               <a href="#client_interface">custom filesystem API interface</a> inspired by
+               the $GnomeVFS client interface adapted to the specifics of W32 kernel API.
+               This interface is supposed to be easily utilized by
+               <a href="#client_interface_customapp">a&nbsp;custom application accessing
+               the W32 filesystem driver</a>.</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
+               as a generic system filesystem (as those are usually implemented only as
+               the components od UNIX kernel). The most thin implementation would be to
+               implement <FIXME:LUFS><a href="#fuse_interface">FUSE \bookcitation{FUSE}
+                       (Filesystem in Userspace project for $gnulinux implemented by its own
+                       filesystem code for Linux kernel)
+               interface</a> for the purpose but such feature is not yet implemented.
+               Currently this project implements
+               <a href="#offered_gnomevfs">Gnome-VFS interface</a> allowing its filesystem
+               access even without any involvement of UNIX kernel from any
+               $GnomeVFS aware client application (such as
+               <span class="fname">gnome-vfs/tests/test-shell</span>).
+               This <a href="#offered_gnomevfs">Gnome-VFS interface</a> connects the data
+               flow of this project in two points - both as the lowest layer device image
+               source and also as the upper layer for the filesystem operation
+               requests.</p>
+
+               <p>That's&nbsp;all folks!</p>
+
+       <a name="mounted_one"><h2>At Most One Mounted Filesystem</h2></a>
+
+               @{[ doc_img 'fig/sandbox','Multiple Filesystems by libcaptive Sandboxing' ]}
+
+               <p>The project technically supports only one (exactly one...) mounted
+               filesystem device and only one filesystem driver. There is nothing
+               complicated to support multiple disks and multiple loaded filesystem
+               modules but as they would share the address space it would only bring
+               a&nbsp;possible complications during bug reports and the bug solving
+               itself.  It was considered as a&nbsp;more sane way to support multiple W32
+               mounted disks by completely separately running project instances in
+               a&nbsp;different UNIX processes communicating from their sandboxes via
+               <a href="#todo_sandbox">CORBA sandbox interface</a>. This sandboxing
+               feature is not yet deployed although its code is already prepared.</p>
+
+               <p>The project also does not support any state cleanup to be able to load
+               filesystem&nbsp;<span class="constant">A</span>,
+               cleanup&nbsp;<span class="constant">A</span> and load a different
+               filesystem&nbsp;<span class="constant">B</span> in the same process address
+               space. It complies with the preventions of the possible debugging
+               complications as noted above. Despite this you still must call the function
+               <span class="function">captive_shutdown()</span> to flush all the pending
+               filesystem buffers to the disk. After calling
+               <span class="function">captive_shutdown()</span> the process address space is
+               no longer usable for any further project operations and the process is
+               expected to be terminated in the manner compatible with its driving
+               <a href="#todo_sandbox">CORBA sandbox interface</a> control master.</p>
+
+               <p>Each sandbox executing the untrusted W32 binary filesystem driver code
+               is connected through its
+               <a href="#todo_sandbox">CORBA sandbox interface</a> at the point of upper
+               layer <span class="constant">libcaptive</span>-specific filesystem API, at
+               the point of the bottom layer of <span class="type">GIOChannel</span>
+               device access and also for transfers of GLib logging
+               messages/warnings/errors out of the sandbox to the user.</p>
+
+
+<h1>Choice of the Emulation Methods</h1>
+
+       <p>The intent of the project was to get reliable read-write access to
+       <span class="productname">NTFS</span> partition. There are several possible
+       ways to achieve that:</p>
+
+       <h2>Virtualmachine Running the Original W32 Subsystem</h2>
+
+               <p>Creating virtual-hardware PC and running the original W32 binaries
+               including their boot-loader etc. Disk device access would be passed as
+               virtual IDE disk (=hard disk drive). File access API would be implemented
+               either by special escaping by some trapped instruction out of the
+               virtualmachine while using W32 file access API or using the standard W32
+               SMB (Server Message Block) network access through some virtual network
+               card. The latter network access solution is almost the currently available
+               possibility of running full-blown disk-sharing real
+               <span class="productname">Microsoft Windows NT</span> inside virtual
+               machine emulator such as <span class="productname">VMware</span>.</p>
+
+               <p>pros: Full compatibility due to fully native codebase.</p>
+
+               <p>cons: Hard to debug, missing documentation of NT booting internals,
+               possible problems by different PC virtual-hardware than expected by NT,
+               requirement of fully installed
+               <span class="productname">Microsoft Windows NT</span> product.</p>
+
+       <a name="method_ntoskrnl"><h2>&quot;ntoskrnl.exe&quot; Inside Virtual Address Space</h2></a>
+
+               <p>This solution was chosen by the project. Binary filesystem driver and
+               also <span class="fname">ntoskrnl.exe</span> binary file are required.
+               Unfortunately <span class="fname">ntoskrnl.exe</span> expects a&nbsp;native
+               PC virtual-hardware missing during regular UNIX user space process
+               emulation, therefore such instructions must be trapped and emulated/ignored
+               from case to case.</p>
+
+               <p>Also the <a name="init_ntoskrnl">initialization code of <span
+               class="fname">ntoskrnl.exe</span></a> is not executed by this project since
+               it expects to get full PC hardware access privileges and thus some
+               datastructures do not get initialized by it (need to be trapped later at
+               runtime stage). Some of the missing initializations are solved by
+               <a href="#functype_wrap">API functions wrapping</a>.
+
+               <p>pros: Lightweight, easier to debug.</p>
+
+               <p>cons: Possible incompatible emulation of
+               <span class="fname">ntoskrnl.exe</span> parts, missing documentation needed
+               for the implementation.</p>
+
+       <h2>Filesystem Driver Inside Virtual Address Space</h2>
+
+               <p>Unlike <a href="#method_ntoskrnl">previous method</a> here we do not use
+               even <span class="fname">ntoskrnl.exe</span> as the complete kernel part of
+               W32 is <a name="native_ntoskrnl">emulated from the project source
+               files</a>. <span class="fname">cdfs.sys</span> driver was successfuly ran
+               in this manner in the former versions of this project but the possibility
+               to run without <span class="fname">ntoskrnl.exe</span> was dropped since it
+               had no licensing gains (you need the original
+               <span class="productname">Microsoft Windows NT</span> files at least for
+               the filesystem driver itself) and the emulation of undocumented parts
+               reusable from <span class="fname">ntoskrnl.exe</span> binary was
+               a&nbsp;pain.</p>
+
+               <p>pros: Lightweight, easier to debug.</p>
+
+               <p>cons: Possible incompatible emulation of the whole
+               <span class="fname">ntoskrnl.exe</span>, its missing documentation.</p>
+
+
+<h1>Implementation Details</h1>
+
+       <a name="functype"><h2>API Function Implementation Choices</h2></a>
+
+               <p>For each function exported by W32
+               <span class="fname">ntoskrnl.exe</span> and imported and called by the
+               filesystem driver a decision needs to be made to properly implement its
+               functionality. Currently implemented functionality statistics are provided
+               below:</p>
+
+               <FIXME:numbers>
+               <table border="1" align="center">
+                       <tr><th>Function type                                        </th><th>Items</th><th>Portion</th></tr>
+                       <tr><td><a href="#functype_pass">pass</a>                    </td><td>   46</td><td>    21%</td></tr>
+                       <tr><td><a href="#functype_wrap">wrap</a>                    </td><td>    1</td><td>     0%</td></tr>
+                       <tr><td><a href="#functype_native_reactos">native-ReactOS</a></td><td>   94</td><td>    43%</td></tr>
+                       <tr><td><a href="#functype_native_libcaptive">native-own</a> </td><td>   79</td><td>    36%</td></tr>
+                       <caption>Function Implementation Types Statistics</caption>
+               </table>
+
+               <p>As there are several choices to implement each function the usual
+               attempts/investigations ordering is listed in the sections below.</p>
+
+               <p>Special case must be taken for data-type symbols since they are
+               referenced without the possibility of catching the code flow by some
+               breakpoints (it would be possible only in some special access cases). Data
+               export symbols of <span class="constant">unpatched</span> libraries must
+               contain already prepared content at the runtime. There is a&nbsp;problem
+               with <span class="constant">patched</span> libraries where it is necessary
+               to also fully implement the data symbol as
+               <a href="#functype_native">native implementation</a> since there is no
+               possibility to <a href="#functype_pass">pass</a> the data symbol instead of
+               the original W32 data location and therefore there will be two instances of
+               such data variable place. As there will be also the uncaught references for
+               such W32 data location from the <span class="constant">patched</span>
+               library itself such symbols should be usually only some constants (such as
+               <span class="constant">KeNumberProcessors</span>).</p>
+
+               <p>W32 platform symbols export/import can be based either on the symbol
+               name itself or it can be also exported and imported just by its
+               identification number called <span class="constant">Ordinal</span>.
+               Although it saves some jumptables file binary size it is currently no
+               longer used by W32 binaries and this project also does not support such
+               <span class="constant">Ordinal</span> symbol reference type at all.</p>
+
+               <p>All the exporting magic is handled by custom script
+               <span class="fname">captivesym</span> processing the definition file
+               <FIXME:span class="fname">src/libcaptive/ke/exports.captivesym</span> to produce
+               the intermediate relaying code
+               <FIXME:span class="fname">src/libcaptive/ke/exports.c</span>. For details of the
+               <span class="fname">captivesym</span>-specific source file syntax please
+               see its documentation: <FIXME:span class="fname">doc/captivesym-pod.html</span>
+
+               <a name="functype_pass"><h3>Direct Pass to Original &quot;ntoskrnl.exe&quot;</h3></a>
+
+                       <p>Simple (standalone) functions such as
+                       <span class="function">RtlTimeToSecondsSince1970()</span> can be simply
+                       passed to the original implementation in
+                       <span class="fname">ntoskrnl.exe</span> as they make no hardware access
+                       and they do not expect any special internal data structures to be set up
+                       in advance by an earlier library initialization. A common case are all
+                       the data structures utility functions such as
+                       <span class="constant">GenericTable</span> subsystem or
+                       <span class="constant">LargeMcb</span> handling.</p>
+
+                       <a name="functype_pass_fromunix"><h4>Pass from UNIX Code</h4></a>
+
+                               <p>Control flow begins in some standard UNIX code. Such code is always
+                               using <a href="#calltype_cdecl">cdecl call type</a> for all its
+                               intracalls. <a href="#functype_native_reactos">Native functions
+                               compiled from <span class="productname">ReactOS</span> sources</a> use
+                               their own <a href="#calltype">cdecl/stdcall/fastcall</a> declarations
+                               but these call type modifications are discarded during compilation for
+                               this project by the <span class="constant">LIBCAPTIVE</span>
+                               symbol.</p>
+
+                               <p>UNIX code calls <span class="function">FUNCTIONNAME()</span> relay
+                               from the generated UNIX jump table. Such relay will debug dump the
+                               passed arguments and finally pass the control to the original W32
+                               function code in the proper call type
+                               <a href="#calltype">cdecl/stdcall/fastcall</a> for a&nbsp;given
+                               function.</p>
+
+                               <p>Original W32 code entry point is always trapped by a&nbsp;breakpoint
+                               although it would not be needed during this specific direct pass from
+                               UNIX code to the original W32 implementation. Still the breakpoint has
+                               to be there to catch some other (such as intra-W32) possible calls
+                               described later. There are several more ways to define breakpoint in
+                               the code. One way is to use processor hardware breakpoint support but
+                               the number of breakpoints is limited.  The other way is to patch in the
+                               <span class="instruction">@{[ 'int $3' ]}</span> instruction but it will invoke
+                               <span class="constant">SIGTRAP</span> signal handler conflicting with
+                               the possible debugger (<span class="productname">gdb(1)</span>)
+                               control. This project uses the <span class="instruction">hlt</span>
+                               instruction, which also has a&nbsp;single-byte opcode as
+                               <span class="instruction">@{[ 'int $3' ]}</span> and it is a&nbsp;privileged
+                               instruction forbidden to be used from the UNIX user space code.
+                               <span class="instruction">hlt</span> invokes
+                               <span class="constant">SIGSEGV</span> signal which can be resolved by
+                               a&nbsp;custom signal handler without any conflict with the possible
+                               debugger control; <span class="productname">gdb(1)</span> needs the
+                               following command to pass through such
+                               <span class="constant">SIGSEGV</span> signal:</p>
+
+                               <blockquote class="command">
+                                       <p>handle SIGSEGV nostop noprint pass</p>
+                               </blockquote>
+
+                               <p>When a breakpoint gets caught, we usually need to return to the
+                               running code. Unfortunately it is not possible because of the patched
+                               breakpoint opcode. The breakpoint cannot be simply removed upon return
+                               as it would permanently loose control over the point of entry. Even if
+                               the return would include faking of the return address in the bottom
+                               stack frame to patch the breakpoint back during later function exit it
+                               still would not solve the caughts of inner calls of recursive
+                               functions. One of the working possibilities would be to patch the
+                               original instruction back and perform a&nbsp;singlestep provided by
+                               <span class="function">ptrace(2)</span> syscall. However such
+                               singlestep needs another controlling UNIX process and it would again
+                               conflict with the debuggers such as
+                               <span class="productname">gdb(1)</span>. This project implements the
+                               singlestep functionality by two consecutive breakpoints
+                               (<span class="instruction">hlt</span> instructions to be specific):
+                               The first two instruction addresses of the W32 functions are called
+                               <span class="productname">slot #1</span> and
+                               <span class="productname">slot #2</span>, the length of the first
+                               function instruction has to be analyzed to get the right address of
+                               <span class="productname">slot #2</span>. When the first breakpoint is
+                               caught it is necessary to patch the original instruction back and also
+                               patch another breakpoint in place of
+                               <span class="productname">slot #2</span>.
+                               During the <span class="productname">slot #2</span> breakpoint
+                               invocation the operation will be reverted - the breakpoint will be put
+                               to <span class="productname">slot #1</span> again and the instruction
+                               of <span class="productname">slot #2</span> will be restored to be able
+                               to continue the execution of the function.</p>
+
+                               <p>W32 function will finish in its specific
+                               <a href="#calltype">cdecl/stdcall/fastcall call type</a>, the control
+                               will return to the UNIX jump table relay which will debug dump the
+                               return value and it will finally pass the control back to the UNIX
+                               caller in the standard UNIX
+                               <a href="#calltype_cdecl">cdecl call type</a>.</p>
+
+                               @{[ doc_img 'fig/functype_patched_pass_fromunix',
+                                               'Function Type: <span class="constant">pass</span> from UNIX Code' ]}
+
+                       <a name="functype_pass_fromw32"><h4>Pass from W32 Code</h4></a>
+
+                               <p>This function type is similiar to the
+                               <a href="#functype_pass_fromunix">previous one</a> with the exception
+                               of more complicated entry point. Unfortunately W32 libraries call their
+                               own functions directly, using the <span class="instruction">call</span>
+                               instructions without any patchable jump table. Even the
+                               <span class="instruction">call</span> argument itself cannot be patched
+                               according to the relocation table record as such library intra-call
+                               instruction has no relocation due to its relative argument offset on
+                               <span class="constant">i386</span>. This time the double-breakpoint
+                               mechanism <a href="#functype_pass_fromunix">described above</a> gets
+                               handy since it will catch the entry point when the function gets
+                               called.  <span class="constant">SIGSEGV</span> handler gets invoked by
+                               the <span class="instruction">hlt</span> instruction and it will
+                               redirect the control to the jump table relay function to debug dump the
+                               function entry arguments (it has no other uses in this call type).</p>
+
+                               <p>When the relay needs to call the original function it will reach
+                               exactly the same breakpoint instruction as during the recent
+                               <span class="constant">SIGSEGV</span> handling redirecting to this
+                               calling relay.  But this time the
+                               <span class="constant">through_w32_func</span> field of this function
+                               record will be set to to prevent repeated redirection and to pass the
+                               control through the breakpoint mangle instead this time.</p>
+
+                               <p>Returning is not much interesting as the first
+                               <span class="constant">SIGSEGV</span> handler did a&nbsp;straight jump
+                               for the redirection purposes without any needed consequent
+                               handling.</p>
+
+                               <p>The jump table relay used for the callers from W32 code is
+                               a&nbsp;different one than the relay being used for the callers
+                               <a href="#functype_pass_fromunix">from UNIX code</a>. UNIX code always
+                               uses relay with external <a href="#calltype_cdecl">cdecl call type</a>
+                               but in this case a&nbsp;relay with the appropriate
+                               <a href="#calltype">cdecl/stdcall/fastcall call type</a> is used.</p>
+
+                               @{[ doc_img 'fig/functype_patched_pass_fromw32',
+                                               'Function Type: <span class="constant">pass</span> from W32 Code' ]}
+
+                       @{[ vskip() ]}
+
+                       <table border="1" align="center">
+                               <tr><td><span class="fname">captivesym</span> keyword</td><td>pass</td></tr>
+                               <tr><td>Native code function name                    </td><td>(no implementation)</td></tr>
+                               <tr><td>W32 traced code from UNIX function name      </td><td>FUNCNAME</td></tr>
+                               <tr><td>W32 traced code from W32  function name      </td><td>FUNCNAME_cdecl/_stdcall/_fastcall</td></tr>
+                               <tr><td>Entry/exit debug tracing from UNIX code      </td><td>yes</td></tr>
+                               <tr><td>Entry/exit debug tracing from W32 code       </td><td>yes</td></tr>
+                               <caption>Function Type <span class="constant">pass</span> Characteristics</caption>
+                       </table>
+
+               <a name="functype_wrap"><h3>Wrap of the Original "ntoskrnl.exe" Function</h3></a>
+
+                       <a name="functype_wrap_fromunix"><h4>Wrapping of Call from UNIX Code</h4></a>
+
+                               <p>The code control flow has no special hardcore features since it is
+                               very similiar to <a href="#functype_pass_fromunix">the direct pass to
+                               W32 function from UNIX code</a>. All the wrapping is done in the
+                               standard UNIX <a href="#calltype_cdecl">cdecl call type</a> manner.
+                               Jump table debug dumping relays are provided twice - the
+                               &quot;outer&quot; one to trace the parameters from the function caller
+                               and the &quot;inner&quot; one to trace the call from the wrapper to the
+                               original W32 code. The &quot;inner&quot; relay also calls the W32 code
+                               with the appropriate <a href="#calltype">cdecl/stdcall/fastcall call
+                               type</a>.</p>
+
+                               @{[ doc_img 'fig/functype_patched_wrap_fromunix',
+                                               'Function Type: <span class="constant">wrap</span> from UNIX Code' ]}
+
+                       <a name="functype_wrap_fromw32"><h4>Wrapping of Call from W32 Code</h4></a>
+
+                               <p>This scheme is a&nbsp;combination of the
+                               <a href="#functype_wrap_fromunix">previous wrap of a&nbsp;call from
+                               UNIX code</a> and the <a href="#functype_pass_fromw32">direct pass from
+                               the W32 code</a>. The control is caught and redirected by
+                               <span class="constant">SIGSEGV</span> handler from the breakpoint
+                               placed at the entry to the original W32 function code. The second entry
+                               to the original W32 function with the
+                               <span class="constant">through_w32_func</span> field of this function
+                               description already set is done from the &quot;inner&quot; jump table
+                               relay with the appropriate
+                               <a href="#calltype">cdecl/stdcall/fastcall call type</a>.</p>
+
+                               @{[ doc_img 'fig/functype_patched_wrap_fromw32',
+                                               'Function Type: <span class="constant">wrap</span> from W32 Code' ]}
+
+                       @{[ vskip() ]}
+
+                       <p>Some functions can be <a href="#functype_pass">passed to the original
+                       code</a> but they need their parameters to be checked/prepared.
+                       Currently, such wrapping is only needed for the
+                       <span class="function">ExAllocateFromPagedLookasideList()</span> function
+                       where it is required due to <a href="#init_ntoskrnl">missing execution of
+                       <span class="fname">ntoskrnl.exe</span> initialization execution</a>,
+                       which would otherwise properly initialize some internal data structures.
+                       In this case the wrapping code detects passing of an uninitialized
+                       parameter and will search through the whole
+                       <span class="fname">ntoskrnl.exe</span> code body at runtime to find the
+                       proper initialization routine containing the correct initialization
+                       parameters.  Passed addresses of static structures must be differentiated
+                       as each of them usually has different initialization parameters. It is
+                       proactive to not to have fixed parameters array as these parameters may
+                       differ across different <span class="fname">ntoskrnl.exe</span>
+                       versions.</p>
+
+                       <table border="1" align="center">
+                               <tr><td><span class="fname">captivesym</span> keyword</td><td>wrap</td></tr>
+                               <tr><td>Native UNIX wrapping code function name      </td><td>FUNCNAME_wrap</td></tr>
+                               <tr><td>W32 traced wraping code from UNIX func. name </td><td>FUNCNAME</td></tr>
+                               <tr><td>W32 traced wrapping code from W32 func. name </td><td>FUNCNAME_cdecl/_stdcall/...</td></tr>
+                               <tr><td>W32 traced original code function name       </td><td>FUNCNAME_orig</td></tr>
+                               <tr><td>Entry/exit debug tracing from UNIX code      </td><td>yes</td></tr>
+                               <tr><td>Entry/exit debug tracing from W32 code       </td><td>yes</td></tr>
+                               <caption>Function Type <span class="constant">wrap</span> Characteristics</caption>
+                       </table>
+
+               <a name="functype_native"><h3>Native Implementation</h3></a>
+
+                       <h4>Native Implementation Called from UNIX Code</h4>
+
+                               <p>This is the simplest case of a&nbsp;function call as it is fully
+                               handled only by the compiler and/or linker.</p>
+
+                               <p>In this case though, no debug dumping call relay is provided - such
+                               relay would need to rename the implementations of native functions to
+                               prevent its automatic linking with the caller code. This renaming would
+                               not be possible to do by simple <span class="constant">#define</span>
+                               since it would also rename any calling statements of such function in
+                               the same C&nbsp;sources.  One of the possibilities to solve would be to
+                               utilize <span class="dashdash">--redefine-sym</span> feature of the
+                               <span class="productname">objcopy(1)</span> utility. On the other hand
+                               there is not much need to catch/debug such calls as both the caller and
+                               the callee are provided with full source file debug information for the
+                               debugger. Also the callee usually debug dumps its entry/exit parameters
+                               by custom debug dumps in the
+                               <a href="#functype_native_reactos"><span class="productname">ReactOS</span> implementations</a>.
+
+                               @{[ doc_img 'fig/functype_native_fromunix',
+                                               'Function Type: <span class="constant">native</span> from UNIX Code' ]}
+
+                       <a name="functype_native_fromw32"><h4>Native Implementation of
+                                       &quot;unpatched&quot; Library Function Called from W32 Code</h4></a>
+
+                               @{[ doc_img 'fig/functype_unpatched_native_fromw32',
+                                               'Function Type: <span class="constant">native</span> of <span class="constant">unpatched</span> from W32 Code' ]}
+
+                               <p>Here comes the differentiation if the project deals either with
+                               a&nbsp;<span class="constant">patched</span> or an
+                               <span class="constant">unpatched</span> version of the library
+                               (<span class="constant">patched</span> is a&nbsp;loaded W32 binary
+                               library while <span class="constant">unpatched</span> library is
+                               completely provided by this project with no use of the library's
+                               original W32 binary file). As the project adjusts the exported symbol
+                               address during the patching operation, in some cases the
+                               <span class="constant">patched</span> library call may be handled
+                               simply as <span class="constant">unpatched</span> library call even for
+                               the <span class="constant">patched</span> libraries. Fortunately the
+                               distinction is not much important as the project is prepared to
+                               properly handle both cases.</p>
+
+                               <p>The W32 caller which imported the symbol will be pointed right to
+                               the relaying function. The debug dumping relay will be called from W32
+                               code with the appropriate
+                               <a href="#calltype">cdecl/stdcall/fastcall call type</a> while the
+                               relay will call the implementation of the native function in the
+                               standard UNIX <a href="#calltype_cdecl">cdecl call type</a> manner.</p>
+
+                       <h4>Native Implementation of &quot;patched&quot; Library Function Called from W32 Code</h4>
+
+                               @{[ doc_img 'fig/functype_patched_native_fromw32',
+                                               'Function Type: <span class="constant">native</span> of <span class="constant">patched</span> from W32 Code' ]}
+
+                               <p>The calling scheme is similiar to the
+                               <a href="#functype_native_fromw32">previous call of
+                               <span class="constant">unpatched</span> library function from W32
+                               code</a> but the call control is redirected from the entry point of the
+                               original W32 binary implementation by the breakpoint and its
+                               <span class="constant">SIGSEGV</span> handler as in
+                               <a href="#functype_pass_fromw32">the case of passing control from W32
+                               call</a>.</p>
+
+                               <p>The original W32 function implementation located in the original
+                               loaded binary file is never executed but its entry point needs to be
+                               trapped by the breakpoint to be able to catch the function calls within
+                               the library.</p>
+
+                       @{[ vskip() ]}
+
+                       <p>In all cases the final function implementation is a&nbsp;standard UNIX
+                       code compiled from C&nbsp;sources with full debug information available
+                       for the debugger. Fortunately all such functions do not need to be coded
+                       from scratch for this project since there already exist $freespeech
+                       $ReactOS and $Wine projects and their code can be used instead.</p>
+
+                       <p>$Wine project is listed mostly for a&nbsp;completeness as almost no
+                       code was suitable for reuse as it implements W32 user space while this
+                       project is running pure W32 kernel space environment (in $gnulinux user
+                       space!).</p>
+
+                       <a name="functype_native_reactos"><h4>Native Implementation
+                                       - <span class="productname">ReactOS</span></h4></a>
+
+                               <p>Some functions are already implemented in the $ReactOS
+                               project and they can be used as they are.  Although it would be
+                               possible to <a href="#functype_pass">pass some function calls to the
+                               original code</a> it is more handy to provide native implementation as
+                               there is better control of the data handling during debugging sessions
+                               due to the provided debugging symbols.</p>
+
+                               <p>Such functions can be found in
+                               <span class="fname">src/libcaptive/reactos/</span> subdirectory.
+                               Some functions had to be adjusted for this project
+                               - these modifications are compiled conditionally, depending on the
+                               <span class="constant">LIBCAPTIVE</span> symbol existence.</p>
+
+                               <p>Later stages of this project reached the level where
+                               $ReactOS is yet too immature and the needed functions are usually
+                               written just with the sad body:</p>
+
+                               <blockquote class="command">
+                                       <p>UNIMPLEMENTED;</p>
+                               </blockquote>
+
+                               <p>Functions that were not possible to
+                               <a href="#functype_pass">pass</a> were reimplemented by this project
+                               and placed in the project's implementation directories
+                               <a href="#reactos_nocare">instead of extending</a> $ReactOS code.</p>
+
+                       <a name="functype_native_wine"><h4>Native Implementation -- <span class="productname">Wine</span></h4></a>
+
+                               <p>Even though $Wine only implements the
+                               <span class="productname">Microsoft Windows NT</span> user space, there
+                               still are some common functions which could be copied from the $Wine
+                               project.</p>
+
+                       <a name="functype_native_libcaptive"><h4>Native Implementation - Project Specific</h4></a>
+
+                               <p>As the last resort it was necessary to provide completely own
+                               implementation of some API functions such as PC hardware dependent
+                               parts or memory management functions.</p>
+
+                       @{[ vskip() ]}
+
+                       <table border="1" align="center">
+                               <tr><td><span class="fname">captivesym</span> keyword</td><td>(none; just the symbol name)</td></tr>
+                               <tr><td>Native code function name                    </td><td>FUNCTIONNAME</td></tr>
+                               <tr><td>Native traced code from W32 code func. name  </td><td>FUNCTIONNAME_cdecl/_std...</td></tr>
+                               <tr><td>Entry/exit debug tracing from UNIX code      </td><td>no</td></tr>
+                               <tr><td>Entry/exit debug tracing from W32 code       </td><td>yes</td></tr>
+                               <caption>Function Type <span class="constant">native</span> Characteristics</caption>
+                       </table>
+
+               <a name="functype_undef"><h3>Undefined Function</h3></a>
+
+                       <p>Functions not defined by any of the previous function types cannot be
+                       called by any W32 code including the code of the library implementing
+                       such function. All functions of <span class="constant">patch</span>ed
+                       libraries not listed in the <span class="fname">captivesym</span> exports
+                       file are automatically set to be trapped as fatal program execution
+                       errors.</p>
+
+                       <p>It is not necessary to list the symbols as
+                       <span class="constant">undef</span> as long as you are just loading the
+                       W32 <span class="constant">PE-32</span> code and the symbols belong to
+                       <span class="constant">patch</span>ed library. On the other hand if you
+                       are loading W32 <span class="fname">.so</span> code or if such symbol is
+                       a&nbsp;part of <span class="constant">unpatched</span> library (and thus
+                       being completely provided by the project) you need to list such symbol as
+                       <span class="constant">undef</span> type to prevent unresolved symbol
+                       reference.</p>
+
+                       <table border="1" align="center">
+                               <tr><td><span class="fname">captivesym</span> keyword</td><td>undef</td></tr>
+                               <tr><td>Native code function name                    </td><td>(no implementation)</td></tr>
+                               <tr><td>Native traced code function name             </td><td>FUNCTIONNAME_cdecl/_stdcall/_fastcall</td></tr>
+                               <tr><td>Debug tracing message from UNIX code         </td><td>yes</td></tr>
+                               <tr><td>Debug tracing message from W32 code          </td><td>yes</td></tr>
+                               <caption>Function Type <span class="constant">undef</span> Characteristics</caption>
+                       </table>
+
+       
+       <a name="calltype"><h2>API Function Calling Conventions</h2></a>
+
+               <p>Standard UNIX code compiled by GCC (GNU C&nbsp;Compiler) running on host
+               $gnulinux always uses <a href="#calltype_cdecl">cdecl</a> ABI (Application
+               Binary Interface) calling convention. This calling convention is also the
+               default declaration type of UNIX functions.</p>
+
+               <p>W32 uses three different calling conventions in its ABI. They are all
+               described in the
+               <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_core_argument_passing_and_naming_conventions.asp"><span class="productname">Microsoft</span> documentation</a>.
+               There is always necessary to have the proper function declaration
+               (prototype) in the caller scope to prevent all sorts of unexpected
+               crashes.</p>
+
+               <p>Unfortunately some non-matching combinations of calling conventions
+               result in hard to debug bugs: the caller gets back an unexpected stack
+               pointer from the callee and upon return it will restore registers from the
+               wrong stack pointer place. Since the caller will finally reclaim its stack
+               frame from its (uncorrupted) <span class="constant">EBP</span> stack frame
+               pointer the caller will return to the caller of the caller correctly. Just
+               the registers remain corrupted causing crashes of completely unrelated code
+               executed far, far away...</p>
+
+               <p><span class="constant">EDI</span>, <span class="constant">ESI</span> and
+               <span class="constant">EBX</span> registers are always saved on the stack.
+               They are stored on the stack in this particular order from bottom to top
+               addresses (using the <span class="instruction">push EBX</span>,
+               <span class="instruction">push ESI</span>,
+               <span class="instruction">push EDI</span> sequence). Fortunately $gnulinux
+               GCC has the same register saving behaviour. If some register corruption
+               occurs the calling type presented between the caller and callee should be
+               checked.</p>
+
+               <a name="calltype_cdecl"><h3>W32 Calling Convention &quot;cdecl&quot;</h3></a>
+
+                       <p>The only calling convention in the UNIX world. The default one for all
+                       the compilers. All the arguments are passed on the stack, no arguments
+                       are cleaned by the callee. Possible inconsistencies in the number of
+                       function arguments with the function prototype used by the caller is
+                       harmless. Variable arguments lists can be passed by this convention.</p>
+
+                       @{[ doc_img 'fig/calltype_cdecl',
+                                       'W32 Calling Convention <span class="constant">cdecl</span> Scheme' ]}
+
+                       <table border="1" align="center">
+                               <tr><td>Arguments freed by         </td><td>caller</td></tr>
+                               <tr><td>Arguments on the stack     </td><td>#0 ... #(n-1)</td></tr>
+                               <tr><td>Arguments in the registers </td><td>none</td></tr>
+                               <tr><td>GCC attribute              </td><td><span class="command">__attribute__((__cdecl__))</span> (default)</td></tr>
+                               <caption>Calling Convention <span class="constant">cdecl</span> Characteristics</caption>
+                       </table>
+
+               <h3>W32 Calling Convention &quot;stdcall&quot;</h3>
+
+                       @{[ doc_img 'fig/calltype_stdcall',
+                                       'W32 Calling Convention <span class="constant">stdcall</span> Scheme' ]}
+
+                       <p>Convention never used in the UNIX world. It needs to be specified for
+                       W32 compilers. All the arguments are passed on the stack, all the
+                       arguments are cleaned by the callee. Possible inconsistencies in the
+                       number of function arguments with the function prototype used by the
+                       caller will result in fatal crash. Variable arguments lists cannot be
+                       passed by this convention - use <a href="#calltype_cdecl">cdecl</a>
+                       instead.</p>
+
+                       <table border="1" align="center">
+                               <tr><td>Arguments freed by         </td><td>callee</td></tr>
+                               <tr><td>Arguments on the stack     </td><td>#0 ... #(n-1)</td></tr>
+                               <tr><td>Arguments in the registers </td><td>none</td></tr>
+                               <tr><td>GCC attribute              </td><td><span class="command">__attribute__((__stdcall__))</span></td></tr>
+                               <caption>Calling Convention <span class="constant">stdcall</span> Characteristics</caption>
+                       </table>
+
+               <h3>W32 Calling Convention &quot;fastcall&quot;</h3>
+
+                       <p>Convention never used in the UNIX world. It needs to be specified for
+                       W32 compilers. Convention used in the W32 world for its low calling
+                       overhead. All but the first two arguments are passed on the stack, such
+                       arguments are cleaned by the callee. First two arguments are passed in
+                       the registers <span class="constant">ECX</span> and
+                       <span class="constant">EDX</span> respectively. Possible inconsistencies
+                       in the number of function arguments with the function prototype used by
+                       the caller will result in fatal crash. Variable arguments lists cannot be
+                       passed by this convention - use <a href="#calltype_cdecl">cdecl</a>
+                       instead.</p>
+
+                       <p>GCC (GNU C&nbsp;Compiler) native support for this calling convention
+                       is pretty fresh and it is currently present only in the recent CVS
+                       versions since 21st December of 2002 which should get released as GCC
+                       version 3.4. This project solved the unsupported calling convention by
+                       declaration of arguments passed in registers by
+                       <span class="command">__attribute__((__regparm__(3)))</span>.
+                       W32 passes the arguments in registers in the order
+                       <span class="constant">ECX</span>, <span class="constant">EDX</span> but
+                       GCC passes them in registers <span class="constant">EAX</span>,
+                       <span class="constant">EDX</span>, <span class="constant">ECX</span>.
+                       This incompatibility is compensated at C&nbsp;source level in the
+                       <a href="#functype">relaying code</a> generated by
+                       <span class="fname">captivesym</span> relay generator.</p>
+
+                       @{[ doc_img 'fig/calltype_fastcall',
+                                       'W32 Calling Convention <span class="constant">fastcall</span> Scheme' ]}
+
+                       <table border="1" align="center">
+                               <tr><td>Arguments freed by         </td><td>callee</td></tr>
+                               <tr><td>Arguments on the stack     </td><td>#2 ... #(n-1)</td></tr>
+                               <tr><td>Arguments in the registers </td><td><span class="constant">ECX</span>=#0,
+                                                                           <span class="constant">EDX</span>=#1</td></tr>
+                               <tr><td>GCC &ge;3.4 attribute      </td><td><span class="command">__attribute__((__fastcall__))</span></td></tr>
+                               <tr><td>GCC &lt;3.4 attr. emulation</td><td><span class="command">__attribute__((__stdcall__))</span></td></tr>
+                               <tr><td>                           </td><td><span class="command">__attribute__((__regparm__(3) /* EAX,EDX,ECX */))</span></td></tr>
+                               <caption>Calling Convention <span class="constant">fastcall</span> Characteristics</caption>
+                       </table>
+
+       <a name="synchronous"><h2>Multithreading and Multiple Processors</h2></a>
+
+               <p>W32 platform stands on its&nbsp;thorough architecture parallelism. It
+               must lock all its objects to maintain coherence in presence of
+               multithreading and multiple processors. Since the author of this project
+               considers any parallel execution a serious obstacle for debugging the whole
+               project architecture was designed to prevent any undeterministic behaviour.
+               Therefore this projects always emulates uniprocessor
+               <span class="productname">Microsoft Windows NT</span> kernel
+               (<span class="constant">KeNumberProcessors</span> symbol is always 1),
+               everything runs in the single initial thread/process and all the filesystem
+               operations are performed as synchronous
+                       (&quot;synchronous&quot; by flags
+                       <span class="constant">FILE_SYNCHRONOUS_IO_ALERT</span>,
+                       <span class="constant">FO_SYNCHRONOUS_IO</span>,
+                       <span class="constant">IRP_SYNCHRONOUS_API</span>,
+                       <span class="constant">IRP_SYNCHRONOUS_PAGING_IO</span>,
+                       forced <span class="constant">TRUE</span> result of
+                       <span class="function">IoIsOperationSynchronous()</span>
+                       etc.).
+               <span class="constant">STATUS_PENDING</span> result code indicating that
+               request should be completed in the next callback of the driver is
+               considered <a href="#paranoia">fatal</a> as it should not happen for the
+               requested synchronous <span class="constant">IRP</span>s (I/O Request
+               Packets). Since there is a&nbsp;possibility some filesystem would require
+               a&nbsp;real W32 parallel thread all the code that would be hit by W32
+               multithreading capability is marked by
+               <span class="constant">TODO:thread</span> comment for a&nbsp;possible
+               future extension.</p>
+
+               <p>Multiple processors (SMP) support will never need to be implemented
+               since uniprocessor W32 kernels apparently run the filesystem driver modules
+               fine. As this project implements only the uniprocessor W32 kernel all the
+               processor locking functions and structures such as
+               <span class="constant">KSPIN_LOCK</span> etc. can be safely implemented as
+               no-operations.</p>
+
+               <p>Asynchronous callbacks registered for
+               <span class="constant">IO_WORKITEM</span>s are passed as GLib idle
+               functions by <span class="function">g_idle_add_full()</span>. Although they
+               will probably never be executed during non-interactive project's batch
+               executions it is the&nbsp;responsibility of W32 driver implementation to
+               complete all the pending tasks before its W32 shutdown. Such W32 shutdown
+               is done during cleanup of the project's&nbsp;execution by
+               <span class="function">captive_shutdown()</span>.</p>
+
+       <a name="paranoia"><h2>Paranoia Checks</h2></a>
+
+               <p>A&nbsp;general approach of software projects development is to implement
+               many internal sanity checks during the development stage but to produce the
+               most optimized final release product without those debugging checks.</p>
+
+               <p>Facilities for these practices can be seen in the standard
+               C&nbsp;include files for example as function
+               <span class="function">assert()</span> which gets disabled by the
+               <span class="constant">NDEBUG</span> symbol used during the final optimized
+               executable compilation. This project uses Gnome GLib messaging subsystem
+               offering sanity checks discarded by symbols
+               <span class="constant">G_DISABLE_ASSERT</span> and
+               <span class="constant">G_DISABLE_CHECKS</span>.
+               <span class="productname">Microsoft</span> also produces two versions of
+               its products - regular customers use the &quot;free build&quot; (also
+               called &quot;retail&quot;) while the programmers should develop their code
+               on the &quot;checked build&quot; product releases.</p>
+
+               <p>As this project will always run unknown binary code of proprietary W32
+               filesystem drivers, the code can never be trusted. Such code even runs in
+               the same unprotected address space as its controlling UNIX code. Since
+               there is not enough documentation for the W32 components of the system and
+               also such documentation is usually misleading it can never be considered as
+               100% emulation. Even in the final releases all the sanity checks
+               implemented in this project should remain active as all the project's code
+               always interacts with unknown and untrusted W32 binaries.</p>
+
+               <p><span class="productname">Microsoft Windows NT</span> code is written in
+               a&nbsp;foolproof style as it accepts even invalid input values, and which
+               it usually corrects. This makes long-term debugging a&nbsp;pain as it hides
+               sources of problems. &quot;Checked build&quot; releases were probably
+               designed to fix this flaw by strict consistency checks but it did not reach
+               its goals as such checks are usually missing in the code.</p>
+
+               <p>This project has strict consistency checks across all the code to make
+               the debugging phase easy enough. Failed sanity check is not always
+               a&nbsp;bug - sometimes it just means the real W32 binary code is more
+               benevolent than it could be expected according to the documentation and
+               such sanity check gets removed for the next version build. In other cases
+               the failed sanity checks mean the execution path for some unexpected
+               arguments combination was not yet implemented by this project. I may also
+               mean a bug, of course...</p>
+
+               <p>Last but not least - never miss a&nbsp;possible sanity check as its
+               later removal is in an order of magnitude cheaper than an&nbsp;uncaught
+               invalid assumption. Failed assertion is not always a&nbsp;bug although it
+               has to be fixed, of course.</p>
+
+       <a name="client_interface"><h2>Client Filesystem Interface</h2></a>
+
+               <p>While this project successfuly communicates with the W32 filesystem
+               driver (considered as the lower layer) it must also somehow offer its open
+               filesystem interface service to some real client software (upper layer).
+               This project offers its own custom filesystem operations interface of <span
+               class="constant">libcaptive</span> library based on GLib
+               <span class="constant">GObject</span> OO system. Interface prototypes are
+               specified in the project's&nbsp;<span class="fname">client-*.h</span>
+               include files.</p>
+
+               <p>The filesystem service can be offered in several ways:</p>
+
+               <ul>
+                       <li>
+                               <p>One possibility would be to write
+                               <a name="client_interface_customapp">a custom client application</a>
+                               for this project such as file manager or a&nbsp;shell. Although it
+                               would implement the most appropriate user interface to the set of
+                               functions offered by this project (and W32 filesystem API) it has the
+                               disadvantage of special client software. Appropriate client is provided
+                               by this project as:
+                               <span class="fname">src/client/cmdline/cmdline-captive</span></p>
+                       </li>
+                       <li>
+                               <p>The real UNIX OS filesystem implementation must be completely
+                               implemented inside the hosting OS kernel. This requires special coding
+                               methods with limited availability of coding features and libraries.
+                               Also it would give the full system control to the untrusted W32
+                               filesystem driver code with possibly fatal consequences of yet
+                               unhandled W32 emulation code paths. It would benefit from the best
+                               execution performance but this solution was never considered a real
+                               possibility.</p>
+                       </li>
+                       <li>
+                               <p>The common approach
+                               <a name="offered_NFS">of filesystem implementations</a>
+                               outside UNIX OS kernel were custom NFS servers usually running on the
+                               same machine as the NFS-connected client as such NFS server is usually
+                               an ordinary UNIX user space process. It would be possible to implement
+                               this project as a&nbsp;custom NFS server but the NFS protocol itself
+                               has a&nbsp;lot of fundamental flaws and complicated code for backward
+                               compatibility.</p>
+                       </li>
+                       <li>
+                               <p>Currently there is already implemented
+                               <a name="offered_gnomevfs"><a href="#offered_gnomevfs_todo">Gnome-VFS interface</a></a>
+                               to the custom filesystem interface of this project's&nbsp;library <span
+                               class="constant">libcaptive</span>.
+                               The $GnomeVFSmodule can be used by a&nbsp;Gnome-VFS aware client (such
+                               as <span class="fname">gnome-vfs/tests/test-shell</span>).</p>
+
+                               <FIXME:lufs-gvfs>
+                               <p>The <span class="productname">Gnome-VFS-module</span> can be further
+                               utilized by the <span class="productname">UserVFS</span>
+                               \bookcitation{UserVFS-2.0} software ported to provide local <span
+                               class="productname">Coda</span> \bookcitation{Coda} network filesystem
+                               server implementation similar to the <a href="#offered_NFS">NFS
+                               server</a> solution but with much more acceptable network protocol ---
+                               more about this actual scheme can be found in \link{architecture}{the
+                               project architecture description}.</p>
+                       </li>
+                       <li>
+                               <FIXME:LUFS>
+                               <p>Direct interface for the Host-OS kernel would be provided
+                               by the
+                               \label{fuse_interface}
+                               <span class="productname">FUSE</span> \bookcitation{FUSE} project \link{offered_FUSE}{described
+                               later in this document}. This interface is currently not yet implemented.
+                               Although it would be much more straightforward than
+                               <a href="#offered_gnomevfs">Gnome-VFS interface</a> described above,
+                               its biggest disadvantage would be the requirement to replace/update
+                               the stock distributions kernel package as it usually does not
+                               have the <span class="productname">FUSE</span> \bookcitation{FUSE} filesystem support while it already supports
+                               the <span class="productname">Coda</span> \bookcitation{Coda} interface, which is sufficient for the
+                               ported <span class="productname">UserVFS</span> \bookcitation{UserVFS-2.0} interface.</p>
+                       </li>
+               </ul>
+
+       <h2>3rd Party Projects Bugfixes</h2>
+
+               <p>Implementation of this project required certain bugfixes to 3rd party
+               software packages:</p>
+
+               <h3>GNU Libtool, A&nbsp;Generic Library Support Script</h3>
+               
+                       <p><span class="productname"><a href="http://www.gnu.org/software/libtool/">libtool</a></span>:
+                       Handle duplicate object file names when performing piecewise archive
+                       linking by renaming object files when needed.</p>
+
+               <h3>dosfstools, MS-DOS FAT Filesystems Support on Linux</h3>
+
+                       <p><span class="productname"><a href="ftp://ftp.uni-erlangen.de/pub/Linux/LOCAL/dosfstools/">dosfstools</a></span>:
+                       Prevent generation of <span class="constant">FAT-32</span> filesystems
+                       not supported by the (buggy?) W32 platform
+                       <span class="fname">fastfat.sys</span> implementation.</p>
+
+               <h3>ext2fsd, Ext2 File System Driver</h3>
+
+                       <p><span class="productname"><a href="http://sys.xiloo.com/projects/projects.htm#ext2fsd">Ext2fsd</a></span>:
+                       Many filesystem corruption fixes, missing filesystem unregistration
+                       etc.</p>
+
+
+<h1>Futher Development</h1>
+
+       <p>All the W32 filesystem operations of <span class="fname">cdfs.sys</span>,
+       <span class="fname">fastfat.sys</span>
+       and
+       <span class="fname">ext2fsd.sys</span> can be successfuly executed.
+       The further development tasks include:</p>
+
+       <ul>
+               <li>
+                       <p>The primary goal is to reach <span class="productname">NTFS</span>
+                       filesystem (<span class="fname">ntfs.sys</span>) compatibility.
+                       A&nbsp;lot of imported symbols is missing although it is expected most of
+                       them can be just safely passed for execution in the original
+                       <span class="fname">ntoskrnl.exe</span>.</p>
+               </li>
+               <li>
+                       <p>There may still be valid code paths where some emulated W32 kernel
+                       functionality and symbols remain unimplemented as these code paths were
+                       just not hit during testing. The proper way would be to check all the
+                       possibilities of such code paths execution from the filesystem driver
+                       code disassembly.</p>
+               </li>
+               <li>
+                       <p>No unusual error codes are expected from the filesystem drivers and
+                       any such return codes will abort the project's execution. For example
+                       code <span class="constant">STATUS_NO_SUCH_FILE</span> is expected and
+                       correctly recognized but
+                       <span class="constant">STATUS_FILE_CORRUPT_ERROR</span> will stop driver
+                       execution.</p>
+
+                       <p><a name="exception_fatal">No exceptions in W32 code are allowed</a>
+                       - any thrown exception will result in driver execution abortion (instead
+                       of just returning some error code as in the original W32 environment).</p>
+
+                       <p>These issues should cease to be a&nbsp;problem after deployment of
+                       sandbox wrapper which will restart the filesystem driver after any
+                       unexpected error.</p>
+               </li>
+               <li>
+                       <p><a name="todo_sandbox">Completion and activation of the sandbox
+                       wrapper.</a> <span class="fname">src/libcaptive/sandbox/</span> sources
+                       currently implement the base of both the client and the server sides of
+                       CORBA interface to separate the client calling filesystem operations from
+                       the W32 filesystem driver itself. Although CORBA usually makes sense for
+                       crossmachine network interconnections here it gets a&nbsp;role of
+                       inter-process interface between the regular client process and the
+                       <span class="constant">chroot</span>ed/unprivileged/<span class="constant">ulimit</span>ed
+                       environment of the W32 emulation address space.</p>
+
+                       <p>Any W32 binary file must be always considered untrusted and therefore
+                       it is needed to be sandboxed and accessible only via the CORBA interface.
+                       Furthermore it is needed for clean implementation of $GnomeVFSmodule as
+                       this project always handles <a href="#mounted_one">exactly one mounted
+                       filesystem</a> but $GnomeVFSmodule interface expects unlimited number of
+                       mounts in the scope of one process.</p>
+               </li>
+               <li>
+                       <p>Project offers
+                       <a name="offered_gnomevfs_todo">the filesystem access as its custom UNIX API</a>
+                       (<span class="fname">captive/client-*.h</span>). This API is currently
+                       offered in the scope of $GnomeVFSmodule interface as a filter applied to
+                       the filesystem device (or filesystem image file).
+                       As $GnomeVFS has no officially supported method of generic $gnulinux
+                       kernel filesystem access it may be better to provide
+                       <FIXME:LUFS><a name="offered_FUSE">an interface</a> for <span
+                       class="productname">FUSE</span> \bookcitation{FUSE} instead.</p>
+
+                       <p>To get transparent access to W32 filesystems from legacy
+                       (=non <span class="productname">Gnome-VFS-2.0</span> aware) applications it is possible to use a draft
+                       port \bookcitation{UserVFS-2.0} of the original <span class="productname">UserVFS</span>
+                       \bookcitation{UserVFS} to <span class="productname">Gnome-VFS-2.0</span> interface.
+                       It is also possible to use the test utilities of <span class="productname">Gnome-VFS-2.0</span> \bookcitation{GnomeVFS} package.</p>
+               </li>
+               <li>
+                       <p>Implementation of interface to this project by
+                       <span class="productname"><a href="http://surprise.sourceforge.net/">Partition Surprise</a></span>
+                       partition manager. Although there currently exists
+                       <span class="productname"><a href="http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html">ntfsresize</a></span>
+                       it is a data structures reverse engineered solution which may have
+                       problems on various hard drives. <span class="productname">Partition
+                       Surprise</span> project would be able to resize the disk safely by using
+                       just the original W32 filesystem driver file although with some
+                       performance hit.</p>
+               </li>
+       </ul>
+
+
+<h1>Related Projects</h1>
+
+       <p>The usual solution for file exchange between $freespeech operating systems
+       and <span class="productname">Microsoft Windows NT</span> is to use
+       <span class="productname">FAT32</span> (<span class="productname">vfat</span>
+       called in $gnulinux) partition and swap the files over it. This method is not
+       very comfortable as you never have access to all the files of the other
+       operating system.</p>
+
+       <a name="LinuxNTFScompet"><h2>$LinuxNTFS</h2></a>
+
+               <p>Although this project takes a&nbsp;completely different approach and has
+               a&nbsp;different architecture, the final goal is the same as for this
+               project - reliable read-write <span class="productname">NTFS</span>
+               filesystem support. $LinuxNTFS goes the way of reverse engineering
+               filesystem data structures (and possibly
+               <span class="fname">ntfs.sys</span> itself). Unfortunately after many years
+               of its development it did not yet reach the state of reliable read-write
+               access although its read-only part is considered trustworthy.</p>
+
+               <p>Using $LinuxNTFS for read-only access to existing partition with
+               <span class="productname">Microsoft Windows NT</span> installation is
+               planned to be able to acquire existing <span class="fname">ntfs.sys</span>,
+               <span class="fname">ntoskrnl.exe</span> and possibly
+               <span class="fname">ksecdd.sys</span> (imported by
+               <span class="fname">ntfs.sys</span>) files from the user's
+               <span class="productname">NTFS</span> partition.</p>
+
+       <h2><span class="productname"><a href="http://www.cgsecurity.org/ntfs.html">NTPwd NTFS Driver</a></span></h2>
+
+               <p>DOS based <a href="http://www.gnu.org/licenses/gpl.html">GPL-2.0</a>
+               read-write NTFS driver. Filesystem structures are reverse engineered in the
+               way of <a href="#LinuxNTFScompet">Linux-NTFS Project</a>. As it is not very
+               actively maintained it reaches a&nbsp;lower level of
+               <span class="productname">NTFS</span> compatibility.</p>
+
+       <h2>Virtual Machine with <span class="productname">Microsoft Windows NT</span></h2>
+
+               <p>Original <span class="productname">Microsoft Windows NT</span>
+               operating system can be run inside a virtual machine running under
+               $gnulinux (or vice versa) and share the read-write disk partitions by using
+               a network file sharing through a&nbsp;virtual network card.</p>
+
+               <p>Although there will be full filesystem structures compatibility the
+               <span class="productname">NTFS</span> partition cannot be accessed with no
+               system installed (or with non-bootable crashed system to repair it this
+               way)
+                       (Although this project requires the original
+                       <span class="fname">ntfs.sys</span> it can obtained from the legal
+                       <span class="productname">Microsoft Windows NT</span> CD.),
+               it will have substantial system resources requirement and you also need
+               a virtual machine software product such as commercial
+               <span class="productname"><a href="http://www.vmware.com/download/workstation.html">VMware Workstation</a></span>.</p>
+
+
+<h1>Conclusion</h1>
+
+       <p>The project established <a href="#existing_emulation">a&nbsp;new form</a>
+       of W32 emulation model suitable for existing proprietary binary W32 kernel
+       code (drivers) while being hosted in an open source operating system
+       (currently $gnulinux). Currently, only the subsystems required by W32
+       filesystem drivers are implemented but the project can be further extended
+       for compatibility with various hardware-related drivers such as W32 video
+       drivers, W32 disk interface drivers etc.</p>
+
+       <p>Some W32 kernel space subsystems were implemented for the first time as
+       $freespeech code as they are still missing in the only currently available
+       $freespeech W32 kernel implementation, $ReactOS. Some W32 kernel function
+       behaviour expected by the drivers had to be reverse engineered and documented
+       in this project's&nbsp;API documentation (not listed in this book) and/or in
+       its source files, because its description in the
+       <span class="productname">Microsoft</span> documentation is missing.</p>
+
+       <p>Author had to get familiar both with the W32 kernel API and also with the
+       W32 kernel code by the reverse engineering. This experience also covers the
+       first <span class="productname">Microsoft Windows</span> compatible code ever
+       written by the author - <span class="fname">hal.dll</span> (Hardware
+       Abstraction Layer) part of W32 kernel.</p>
+
+       <p>Certain UNIX implementation interfaces allow a regular, non-privileged
+       user of UNIX system to mount image files with any W32 filesystem supported by
+       this project. Such mount operation usually requires UNIX
+       <span class="constant">root</span> privileges to do so. On the other hand the
+       choice of supported filesystem types is very limited as only a&nbsp;few
+       filesystem types are supported for the W32 platform.</p>
+HERE
+
+
+My::Web->footer();
diff --git a/project/captive/doc/Makefile.am b/project/captive/doc/Makefile.am
new file mode 100644 (file)
index 0000000..2cb8feb
--- /dev/null
@@ -0,0 +1,26 @@
+# $Id$
+# automake source for the Makefile of project/captive/ documentation
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+SUBDIRS= \
+               fig \
+               dia
+
+EXTRA_DIST+= \
+               Index.html.pl
diff --git a/project/captive/doc/arch-W32.png b/project/captive/doc/arch-W32.png
new file mode 100644 (file)
index 0000000..3326345
Binary files /dev/null and b/project/captive/doc/arch-W32.png differ
diff --git a/project/captive/doc/arch-W32.sxd b/project/captive/doc/arch-W32.sxd
new file mode 100644 (file)
index 0000000..a062e4e
Binary files /dev/null and b/project/captive/doc/arch-W32.sxd differ
diff --git a/project/captive/doc/arch-W32s.png b/project/captive/doc/arch-W32s.png
new file mode 100644 (file)
index 0000000..12fc356
Binary files /dev/null and b/project/captive/doc/arch-W32s.png differ
diff --git a/project/captive/doc/arch-captive.sxd b/project/captive/doc/arch-captive.sxd
new file mode 100644 (file)
index 0000000..e5fd171
Binary files /dev/null and b/project/captive/doc/arch-captive.sxd differ
diff --git a/project/captive/doc/dia/Makefile.am b/project/captive/doc/dia/Makefile.am
new file mode 100644 (file)
index 0000000..7d449f5
--- /dev/null
@@ -0,0 +1,26 @@
+# $Id$
+# automake source for the Makefile of project/captive/ documentation .dia-s
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+               parent-connector.dia
+
+CLEANFILES+= \
+               *.png \
+               *.gif
diff --git a/project/captive/doc/dia/parent-connector.dia b/project/captive/doc/dia/parent-connector.dia
new file mode 100644 (file)
index 0000000..44f8d36
--- /dev/null
@@ -0,0 +1,1080 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+  <dia:diagramdata>
+    <dia:attribute name="background">
+      <dia:color val="#ffffff"/>
+    </dia:attribute>
+    <dia:attribute name="paper">
+      <dia:composite type="paper">
+        <dia:attribute name="name">
+          <dia:string>#A4#</dia:string>
+        </dia:attribute>
+        <dia:attribute name="tmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="bmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="lmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="rmargin">
+          <dia:real val="2.8222"/>
+        </dia:attribute>
+        <dia:attribute name="is_portrait">
+          <dia:boolean val="true"/>
+        </dia:attribute>
+        <dia:attribute name="scaling">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="fitto">
+          <dia:boolean val="false"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="grid">
+      <dia:composite type="grid">
+        <dia:attribute name="width_x">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="width_y">
+          <dia:real val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_x">
+          <dia:int val="1"/>
+        </dia:attribute>
+        <dia:attribute name="visible_y">
+          <dia:int val="1"/>
+        </dia:attribute>
+      </dia:composite>
+    </dia:attribute>
+    <dia:attribute name="guides">
+      <dia:composite type="guides">
+        <dia:attribute name="hguides"/>
+        <dia:attribute name="vguides"/>
+      </dia:composite>
+    </dia:attribute>
+  </dia:diagramdata>
+  <dia:layer name="Background" visible="true">
+    <dia:object type="Flowchart - Box" version="0" id="O0">
+      <dia:attribute name="obj_pos">
+        <dia:point val="1,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.95,5.95;7.0868,7.95"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="1,6"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="6.0368"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="1.9"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#disconnected#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="4.0184,7.19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O1">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11,6"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.95,5.95;14.658,7.95"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="11,6"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.608"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="1.9"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#broken#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12.804,7.19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#ff0000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O2">
+      <dia:attribute name="obj_pos">
+        <dia:point val="1,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.9,11.9;4.676,14.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="1,12"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.576"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#00ff00"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#closed
+clean#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="2.788,13.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O3">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.9,11.9;14.7552,14.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="11,12"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.6552"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#closed 
+dirty #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12.8276,13.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O4">
+      <dia:attribute name="obj_pos">
+        <dia:point val="1,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.9,17.9;5.072,20.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="1,18"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.972"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#00ff00"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#opened
+clean#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="2.986,19.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Flowchart - Box" version="0" id="O5">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.9,17.9;15.072,20.9"/>
+      </dia:attribute>
+      <dia:attribute name="elem_corner">
+        <dia:point val="11,18"/>
+      </dia:attribute>
+      <dia:attribute name="elem_width">
+        <dia:real val="3.972"/>
+      </dia:attribute>
+      <dia:attribute name="elem_height">
+        <dia:real val="2.8"/>
+      </dia:attribute>
+      <dia:attribute name="border_width">
+        <dia:real val="0.2"/>
+      </dia:attribute>
+      <dia:attribute name="border_color">
+        <dia:color val="#ff0000"/>
+      </dia:attribute>
+      <dia:attribute name="show_background">
+        <dia:boolean val="true"/>
+      </dia:attribute>
+      <dia:attribute name="padding">
+        <dia:real val="0.5"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#opened
+dirty#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Helvetica"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12.986,19.24"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O6">
+      <dia:attribute name="obj_pos">
+        <dia:point val="0,9"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-0.05,8.95;23.05,9.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="0,9"/>
+        <dia:point val="23,9"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="line_style">
+        <dia:enum val="1"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O7">
+      <dia:attribute name="obj_pos">
+        <dia:point val="18,8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="15.8946,7.1323;20.1554,8.3823"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#no VFS#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.1"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="18,8"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O8">
+      <dia:attribute name="obj_pos">
+        <dia:point val="19,11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="15.4365,10.1323;22.6135,11.3823"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#VFS exists#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="1.1"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="19,11"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O9">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="6.42685,7.30804;11.0707,12.0707"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="11,12"/>
+        <dia:point val="7.0368,7.9"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O3" connection="0"/>
+        <dia:connection handle="1" to="O0" connection="15"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O10">
+      <dia:attribute name="obj_pos">
+        <dia:point val="9,11"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.7284,10.3553;10.3216,11.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#cease#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="9,11"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O11">
+      <dia:attribute name="obj_pos">
+        <dia:point val="4,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="3.2,7.95;4.8,12.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="4,12"/>
+        <dia:point val="4,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O12">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="1.3924,9.35531;4.5576,11.1053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#cease  
+abort  #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="3,10"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O13">
+      <dia:attribute name="obj_pos">
+        <dia:point val="13,12"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="12.2,7.95;13.8,12.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="13,12"/>
+        <dia:point val="13,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O14">
+      <dia:attribute name="obj_pos">
+        <dia:point val="12,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.7064,9.35531;13.3436,10.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#abort #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="12,10"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O15">
+      <dia:attribute name="obj_pos">
+        <dia:point val="5,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.2,7.95;5.8,18.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="5,18"/>
+        <dia:point val="5,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O16">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="5.4424,16.3553;8.6076,17.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#abort  #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="7,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O17">
+      <dia:attribute name="obj_pos">
+        <dia:point val="13.979,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="13.1999,7.94832;14.8001,18.0501"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="13.979,18"/>
+        <dia:point val="14,8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O5" connection="3"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O18">
+      <dia:attribute name="obj_pos">
+        <dia:point val="17,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="15.4424,16.3553;18.6076,17.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#abort  #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="17,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O19">
+      <dia:attribute name="obj_pos">
+        <dia:point val="1,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.2,14.75;1.8,18.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="1,18"/>
+        <dia:point val="1,14.8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O4" connection="0"/>
+        <dia:connection handle="1" to="O2" connection="11"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O20">
+      <dia:attribute name="obj_pos">
+        <dia:point val="3,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="1.4424,16.3553;4.6076,17.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#detach #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="3,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O21">
+      <dia:attribute name="obj_pos">
+        <dia:point val="11,18"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="10.2,14.75;11.8,18.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="11,18"/>
+        <dia:point val="11,14.8"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O5" connection="0"/>
+        <dia:connection handle="1" to="O3" connection="11"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O22">
+      <dia:attribute name="obj_pos">
+        <dia:point val="9,16"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="7.4512,15.3553;10.5988,16.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#detach#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="9,16"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Line" version="0" id="O23">
+      <dia:attribute name="obj_pos">
+        <dia:point val="4.972,19.4"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="4.922,18.6;11.05,20.2"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="4.972,19.4"/>
+        <dia:point val="11,19.4"/>
+      </dia:attribute>
+      <dia:attribute name="numcp">
+        <dia:int val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O4" connection="8"/>
+        <dia:connection handle="1" to="O5" connection="7"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O24">
+      <dia:attribute name="obj_pos">
+        <dia:point val="8,19"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="5.7208,18.3553;10.3292,19.3053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#write op.#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="8,19"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Arc" version="0" id="O25">
+      <dia:attribute name="obj_pos">
+        <dia:point val="1,7.9"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-0.05,7.85;1.8,12.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="1,7.9"/>
+        <dia:point val="1,12"/>
+      </dia:attribute>
+      <dia:attribute name="curve_distance">
+        <dia:real val="1"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O0" connection="11"/>
+        <dia:connection handle="1" to="O2" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O26">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,10"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-4.2792,9.35531;0.3292,11.1053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#read op.
+write op.#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="-2,10"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Arc" version="0" id="O27">
+      <dia:attribute name="obj_pos">
+        <dia:point val="1,14.8"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="0.1858,14.75;1.8,18.05"/>
+      </dia:attribute>
+      <dia:attribute name="conn_endpoints">
+        <dia:point val="1,14.8"/>
+        <dia:point val="1,18"/>
+      </dia:attribute>
+      <dia:attribute name="curve_distance">
+        <dia:real val="0.7642"/>
+      </dia:attribute>
+      <dia:attribute name="line_width">
+        <dia:real val="0.1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow">
+        <dia:enum val="1"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_length">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:attribute name="end_arrow_width">
+        <dia:real val="0.8"/>
+      </dia:attribute>
+      <dia:connections>
+        <dia:connection handle="0" to="O2" connection="11"/>
+        <dia:connection handle="1" to="O4" connection="0"/>
+      </dia:connections>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O28">
+      <dia:attribute name="obj_pos">
+        <dia:point val="-2,17"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-4.2792,16.3553;0.3292,18.1053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#read op.
+write op.#</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="-2,17"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+    <dia:object type="Standard - Text" version="0" id="O29">
+      <dia:attribute name="obj_pos">
+        <dia:point val="7,23"/>
+      </dia:attribute>
+      <dia:attribute name="obj_bb">
+        <dia:rectangle val="-2.702,22.3553;16.752,24.9053"/>
+      </dia:attribute>
+      <dia:attribute name="text">
+        <dia:composite type="text">
+          <dia:attribute name="string">
+            <dia:string>#shutdown: &lt;detach&gt; [down OK] &lt;ceaase&gt;
+shutdown: &lt;detach&gt; [crash] &lt;abort&gt;   
+unsolicited: [crash] &lt;abort&gt;         #</dia:string>
+          </dia:attribute>
+          <dia:attribute name="font">
+            <dia:font name="Courier"/>
+          </dia:attribute>
+          <dia:attribute name="height">
+            <dia:real val="0.8"/>
+          </dia:attribute>
+          <dia:attribute name="pos">
+            <dia:point val="7,23"/>
+          </dia:attribute>
+          <dia:attribute name="color">
+            <dia:color val="#000000"/>
+          </dia:attribute>
+          <dia:attribute name="alignment">
+            <dia:enum val="1"/>
+          </dia:attribute>
+        </dia:composite>
+      </dia:attribute>
+    </dia:object>
+  </dia:layer>
+</dia:diagram>
diff --git a/project/captive/doc/fig/Makefile.am b/project/captive/doc/fig/Makefile.am
new file mode 100644 (file)
index 0000000..facf957
--- /dev/null
@@ -0,0 +1,37 @@
+# $Id$
+# automake source for the Makefile of project/captive/ documentation .fig-s
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+               architecture.fig \
+               sandbox.fig \
+               functype_native_fromunix.fig \
+               functype_patched_native_fromw32.fig \
+               functype_patched_pass_fromunix.fig \
+               functype_patched_pass_fromw32.fig \
+               functype_patched_wrap_fromunix.fig \
+               functype_patched_wrap_fromw32.fig \
+               functype_unpatched_native_fromw32.fig \
+               calltype_cdecl.fig \
+               calltype_stdcall.fig \
+               calltype_fastcall.fig
+
+CLEANFILES+= \
+               *.png \
+               *.gif
diff --git a/project/captive/doc/fig/architecture.fig b/project/captive/doc/fig/architecture.fig
new file mode 100644 (file)
index 0000000..7cb9ed0
--- /dev/null
@@ -0,0 +1,186 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 5325 -1350 7275 -1050
+6 5475 -1275 7200 -1125
+4 0 0 50 0 0 12 0.0000 4 135 1650 5505 -1125 GnomeVFS/test-shell\001
+-6
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5325 -1350 7275 -1350 7275 -1050 5325 -1050 5325 -1350
+-6
+6 4275 150 6075 450
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4275 450 6075 450 6075 150 4275 150 4275 450
+4 0 0 50 0 0 12 0.0000 4 180 1530 4425 375 libcaptive-gnomevfs\001
+-6
+6 2925 -3525 4425 -3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2925 -3525 4425 -3525 4425 -3000 2925 -3000 2925 -3525
+4 0 0 50 0 0 12 0.0000 4 180 1200 3097 -3202 user application\001
+-6
+6 3975 6450 5175 6750
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3975 6450 5175 6450 5175 6750 3975 6750 3975 6450
+4 0 0 50 0 0 12 0.0000 4 180 960 4103 6668 giognomevfs\001
+-6
+6 3975 7050 5175 7350
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3975 7350 5175 7350 5175 7050 3975 7050 3975 7350
+4 0 0 50 0 0 12 0.0000 4 135 885 4125 7275 GnomeVFS\001
+-6
+6 -525 -3525 975 -3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        -525 -3525 975 -3525 975 -3000 -525 -3000 -525 -3525
+4 0 0 50 0 0 12 0.0000 4 180 1200 -383 -3202 captive-cmdline\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3675 2550 3675 2850
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1950 3150 2850 3150 2850 3450 1950 3450 1950 3150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 3150 4200 3150 4200 3450 3150 3450 3150 3150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3150 5550 3150 5550 3450 4500 3450 4500 3150
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        3675 2850 2400 2850 2400 3150
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+        3675 2850 3675 3150
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        3675 2850 5025 2850 5025 3150
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        4350 3750 4350 4050
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        3675 3450 3675 3750 4350 3750
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        5025 3450 5025 3750 4350 3750
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        2400 3450 2400 4050
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        2400 4350 2400 4650 3675 4650
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        4350 4350 4350 4650 3675 4650
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3675 4650 3675 5100
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3675 1650 3675 1350
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2925 1350 4425 1350 4425 1050 2925 1050 2925 1350
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3675 1050 3675 750
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1875 1650 5475 1650 5475 2550 1875 2550 1875 1650
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        5175 450 5175 750 3675 750
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        2850 -375 2850 750 3675 750
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        4500 -1575 4500 -1875
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        5175 -450 5175 -750
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        5175 -750 6300 -750 6300 -1050
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        5175 -750 4425 -750 4425 -1050
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        5175 150 5175 -150
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        2850 -675 2850 -1875
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3300 -1875 2400 -1875 2400 -2100 3300 -2100 3300 -1875
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3675 -3000 3675 -2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 4
+        3000 -150 3225 -375 3225 -150 3000 -375
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3750 -375 3000 -375 3000 -150 3750 -150 3750 -375
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3525 -375 2175 -375 2175 -675 3525 -675 3525 -375
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3675 6150 3675 5700
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        3675 5700 4425 5700 4425 5550
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 4
+        3675 5700 2925 5700 2925 5100 3675 5100
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        4425 5250 4425 5100 3675 5100
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        3675 6150 2850 6150 2850 6750
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        4575 6750 4575 7050
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        4575 7350 4575 7650 3675 7650
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3750 7650 3750 7950
+2 4 0 1 0 7 50 0 -1 0.000 0 0 10 0 0 5
+        4350 8400 4350 7950 3075 7950 3075 8400 4350 8400
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        2850 7050 2850 7650 3750 7650
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        3675 6150 4575 6150 4575 6450
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5025 -1575 3825 -1575 3825 -1050 5025 -1050 5025 -1575
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3975 -1575 5025 -1575 5025 -1350 3975 -1350 3975 -1575
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5025 -1875 3975 -1875 3975 -2100 5025 -2100 5025 -1875
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5025 -2700 2100 -2700 2100 -1875 5025 -1875 5025 -2700
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        600 -1800 5100 -1800 5100 -2775 600 -2775 600 -1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 2100 2325 2100 2325 2400 3150 2400 3150 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4275 2100 3300 2100 3300 2400 4275 2400 4275 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4425 2100 5325 2100 5325 2400 4425 2400 4425 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1725 4050 3075 4050 3075 4350 1725 4350 1725 4050
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3750 4050 4950 4050 4950 4350 3750 4350 3750 4050
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3675 5250 5175 5250 5175 5550 3675 5550 3675 5250
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4575 -150 5775 -150 5775 -450 4575 -450 4575 -150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2550 6750 3150 6750 3150 7050 2550 7050 2550 6750
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        225 -3000 225 750 2850 750
+4 0 0 50 0 0 10 0.0000 4 105 375 4387 4740 --disk\001
+4 0 0 50 0 0 12 0.0000 4 180 1200 3098 1260 libcaptive/client\001
+4 0 0 50 0 0 12 0.0000 4 180 735 2100 1950 libcaptive\001
+4 0 0 50 0 0 12 0.0000 4 135 720 4073 -1140 UserVFS\001
+4 0 0 50 0 0 12 0.0000 4 135 345 3374 -2183 VFS\001
+4 0 0 50 0 0 12 0.0000 4 135 930 825 -2400 Linux kernel\001
+4 0 0 50 0 0 9 0.0000 4 75 345 3285 -210 TODO\001
+4 0 0 50 0 0 10 0.0000 4 105 450 4500 5700 --blind\001
+4 0 0 50 0 0 12 0.0000 4 180 2565 3750 4950 captive_giochannel [GIOChannel]\001
+4 0 0 50 0 0 12 0.0000 4 180 1065 3750 6000 [GIOChannel]\001
+4 0 0 50 0 0 12 0.0000 4 180 2460 4650 6975 VFS parent [GnomeVFSHandle]\001
+4 0 0 50 0 0 12 0.0000 4 180 360 3810 7867 [file]\001
+4 0 0 50 0 0 11 0.0000 4 105 255 2722 -1928 fuse\001
+4 0 0 50 0 0 11 0.0000 4 105 735 4116 -1928 Coda-client\001
+4 0 0 50 0 0 11 0.0000 4 105 525 4583 2318 ReactOS\001
+4 0 0 50 0 0 11 0.0000 4 150 630 2408 2310 halcaptive\001
+4 0 0 50 0 0 11 0.0000 4 105 795 3390 2325 ntoskrnl.exe\001
+4 0 0 50 0 0 12 0.0000 4 180 1230 3795 5460 giochannel-blind\001
+4 0 0 50 0 0 12 0.0000 4 180 990 3225 8235 image device\001
+4 0 0 50 0 0 11 0.0000 4 105 750 4088 -1403 Coda-server\001
+4 0 0 50 0 0 12 0.0000 4 180 1125 2296 -458 libcaptive-fuse\001
+4 0 0 50 0 0 12 0.0000 4 135 885 4733 -225 GnomeVFS\001
+4 0 0 50 0 0 12 0.0000 4 180 1665 3750 960 [libcaptive client API]\001
+4 0 0 50 0 0 12 0.0000 4 180 1335 3750 1560 [W32 kernel API]\001
+4 0 0 50 0 0 12 0.0000 4 180 930 3757 2760 [IFSkit API]\001
+4 0 0 50 0 0 13 0.0000 4 195 705 2088 3369 cdfs.sys\001
+4 0 0 50 0 0 13 0.0000 4 195 885 3279 3368 fastfat.sys\001
+4 0 0 50 0 0 12 0.0000 4 180 885 4612 3361 ext2fsd.sys\001
+4 0 0 50 0 0 12 0.0000 4 180 930 3900 4268 storage/disk\001
+4 0 0 50 0 0 12 0.0000 4 180 1080 1852 4260 storage/cdrom\001
+4 0 0 50 0 0 10 0.0000 4 105 600 2220 5700 --ro/--rw\001
+4 0 0 50 0 0 11 0.0000 4 105 315 2670 6968 GLib\001
+4 0 0 50 0 0 10 0.0000 4 105 510 1830 4748 --cdrom\001
diff --git a/project/captive/doc/fig/calltype_cdecl.fig b/project/captive/doc/fig/calltype_cdecl.fig
new file mode 100644 (file)
index 0000000..dd0429b
--- /dev/null
@@ -0,0 +1,87 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+        3750 1050 3750 3750
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1800 3450 1800 3450 2100 2250 2100 2250 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2032 2250 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 1732 2250 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2325 2250 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2100 3450 2100 3450 2400 2250 2400 2250 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1275 3450 1275 3450 1800 2250 1800 2250 1275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2400 3450 2400 3450 2700 2250 2700 2250 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2700 3450 2700 3450 3000 2250 3000 2250 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2625 2250 2625
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2925 2250 2925
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 1800 6600 1800 6600 2100 5400 2100 5400 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2032 5400 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 1732 5400 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2325 5400 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 2100 6600 2100 6600 2400 5400 2400 5400 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 1275 6600 1275 6600 1800 5400 1800 5400 1275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 2400 6600 2400 6600 2700 5400 2700 5400 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 2700 6600 2700 6600 3000 5400 3000 5400 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2625 5400 2625
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2925 5400 2925
+4 0 0 50 0 16 13 0.0000 4 210 2745 2550 750 W32 cdecl calling convention\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 135 960 2415 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 2775 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2977 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 2377 [ESP+0x08]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 1778 [ESP+0x10]\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2910 argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2610 argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 135 960 5565 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 5925 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4073 2977 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4073 2677 [ESP+0x04]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4072 2377 [ESP+0x08]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4072 1778 [ESP+0x10]\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2910 argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2610 argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 840 5579 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 180 945 923 2078 [ESP+0x0C]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2677 [ESP+0x04]\001
+4 0 0 50 0 0 12 0.0000 4 180 945 4073 2078 [ESP+0x0C]\001
+4 0 0 50 0 0 12 0.0000 4 135 795 1950 3750 before call\001
+4 0 0 50 0 0 12 0.0000 4 135 675 4950 3750 after call\001
+4 0 0 50 0 0 12 0.0000 4 135 1830 4050 3375 EDX:EAX=return value\001
diff --git a/project/captive/doc/fig/calltype_fastcall.fig b/project/captive/doc/fig/calltype_fastcall.fig
new file mode 100644 (file)
index 0000000..2a6fd0f
--- /dev/null
@@ -0,0 +1,47 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1800 3450 1800 3450 2100 2250 2100 2250 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2032 2250 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 1732 2250 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2325 2250 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2100 3450 2100 3450 2400 2250 2400 2250 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1275 3450 1275 3450 1800 2250 1800 2250 1275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        4725 2325 5100 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5100 1275 6300 1275 6300 2400 5100 2400 5100 1275
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+        3750 1050 3750 3450
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 135 960 2415 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 2775 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 960 5258 1982 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 135 1830 4050 2850 EDX:EAX=return value\001
+4 0 0 50 0 0 12 0.0000 4 180 1320 1200 3000 ECX=argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 1335 1200 2700 EDX=argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 645 1215 2377 [ESP+0]\001
+4 0 0 50 0 0 12 0.0000 4 180 645 1215 2078 [ESP+4]\001
+4 0 0 50 0 0 12 0.0000 4 180 645 1215 1778 [ESP+8]\001
+4 0 0 50 0 0 12 0.0000 4 180 645 4058 2385 [ESP+0]\001
+4 0 0 50 0 0 12 0.0000 4 15 135 5641 1755 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 795 1950 3450 before call\001
+4 0 0 50 0 0 12 0.0000 4 135 675 4800 3450 after call\001
+4 0 0 50 0 16 13 0.0000 4 210 2910 2550 750 W32 fastcall calling convention\001
diff --git a/project/captive/doc/fig/calltype_stdcall.fig b/project/captive/doc/fig/calltype_stdcall.fig
new file mode 100644 (file)
index 0000000..a7fb9e2
--- /dev/null
@@ -0,0 +1,59 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1800 3450 1800 3450 2100 2250 2100 2250 1800
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2032 2250 2032
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 1732 2250 1732
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2325 2250 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2100 3450 2100 3450 2400 2250 2400 2250 2100
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 1275 3450 1275 3450 1800 2250 1800 2250 1275
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+        3750 1050 3750 3450
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2400 3450 2400 3450 2700 2250 2700 2250 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2250 2700 3450 2700 3450 3000 2250 3000 2250 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2625 2250 2625
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2925 2250 2925
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5025 2325 5400 2325
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5400 1275 6600 1275 6600 2400 5400 2400 5400 1275
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2011 argument 3\001
+4 0 0 50 0 0 12 0.0000 4 135 960 2415 1696 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 2775 1485 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 1830 4050 2850 EDX:EAX=return value\001
+4 0 0 50 0 0 12 0.0000 4 135 795 1950 3450 before call\001
+4 0 0 50 0 16 13 0.0000 4 210 2850 2550 750 W32 stdcall calling convention\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2977 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 923 2677 [ESP+0x04]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 2377 [ESP+0x08]\001
+4 0 0 50 0 0 12 0.0000 4 180 945 893 2078 [ESP+0x0C]\001
+4 0 0 50 0 0 12 0.0000 4 180 915 922 1778 [ESP+0x10]\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2910 argument 0\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2610 argument 1\001
+4 0 0 50 0 0 12 0.0000 4 180 840 2429 2310 argument 2\001
+4 0 0 50 0 0 12 0.0000 4 180 915 4058 2385 [ESP+0x00]\001
+4 0 0 50 0 0 12 0.0000 4 135 960 5558 1982 rest of stack\001
+4 0 0 50 0 0 12 0.0000 4 15 135 5941 1755 ...\001
+4 0 0 50 0 0 12 0.0000 4 135 675 4950 3450 after call\001
diff --git a/project/captive/doc/fig/functype_native_fromunix.fig b/project/captive/doc/fig/functype_native_fromunix.fig
new file mode 100644 (file)
index 0000000..4a2934a
--- /dev/null
@@ -0,0 +1,44 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 3150 5535 3870 6255
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 5535 3870 5535 3870 6075 3150 6075 3150 5535
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 6075 3870 6075 3870 6255 3150 6255 3150 6075
+4 0 0 50 0 0 12 0.0000 4 135 585 3237 5887 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 3439 6203 ret\001
+-6
+6 4275 5490 4950 5850
+4 0 0 50 0 0 12 0.0000 4 180 600 4309 5631 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 4382 5817 cdecl\001
+-6
+6 3060 3375 4005 3780
+6 3060 3555 4005 3780
+4 0 0 50 0 0 12 0.0000 4 180 900 3083 3698 calling code\001
+-6
+4 0 0 50 0 0 12 0.0000 4 135 465 3270 3510 UNIX\001
+-6
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4140 3510 4410
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 1 2
+       2 1 1.00 120.00 90.00
+        3510 5085 3510 4815
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 4410 3870 4410 3870 4815 3150 4815 3150 4410
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        3510 6255 3510 6435 4185 6435 4185 4680 3870 4680
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 6
+       0 0 1.00 60.00 120.00
+        3870 4545 4320 4545 4320 5400 2835 5400 2835 5805 3150 5805
+4 0 0 50 0 0 12 0.0000 4 135 555 3242 4674 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 3240 4095 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3330 5265 END\001
diff --git a/project/captive/doc/fig/functype_patched_native_fromw32.fig b/project/captive/doc/fig/functype_patched_native_fromw32.fig
new file mode 100644 (file)
index 0000000..82a7618
--- /dev/null
@@ -0,0 +1,103 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2625 2550 3225 3150
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 2841 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 2720 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 2969 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 3096 /fastcall\001
+-6
+6 4725 1350 5550 1950
+4 0 0 50 0 1 12 0.0000 4 135 720 4778 1718 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4901 1531 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 4864 1893 handler\001
+-6
+6 1650 1500 2475 1950
+4 0 0 50 0 0 12 0.0000 4 135 465 1831 1674 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 180 735 1719 1849 jumptable\001
+-6
+6 2925 1500 4425 1950
+4 0 0 50 0 1 12 0.0000 4 180 1470 2939 1665 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 3225 1852 binary code\001
+-6
+6 600 1500 1125 1875
+4 0 0 50 0 0 12 0.0000 4 135 465 615 1665 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 360 668 1846 code\001
+-6
+6 4815 3240 5445 3420
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3240 5445 3240 5445 3420 4815 3420 4815 3240
+4 0 0 50 0 0 9 0.0000 4 90 405 4950 3375 redirect\001
+-6
+6 953 3343 1628 3718
+4 0 0 50 0 0 12 0.0000 4 180 600 1017 3514 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 1090 3700 cdecl\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 3375 2070 3555 2430 3555 2430 2520 3195 2520
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3195 2385 2565 2385 2565 3330 3240 3330
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 7
+       0 0 1.00 60.00 120.00
+        5130 3420 5130 3555 5670 3555 5670 2025 1440 2025 1440 2475
+        1845 2475
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        855 3150 855 3330 1665 3330 1665 2880 1845 2880
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1845 2700 1215 2700
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2790 2295 2790 2295 2970 1845 2970 1845 2790
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3240 2295 3240 2295 3375 1845 3375 1845 3240
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2970 2295 2970 2295 3240 1845 3240 1845 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2340 2295 2340 2295 2610 1845 2610 1845 2340
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2610 2295 2610 2295 2790 1845 2790 1845 2610
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 4275 4185 4275 4185 4635 3195 4635 3195 4275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 2655 4185 2655 4185 2250 3195 2250 3195 2655
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3690 2655 3690 2835
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3150 2115 3465 2250
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3195 4185 3195 4185 3465 3195 3465 3195 3195
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3465 4185 3465 4185 4275 3195 4275 3195 3465
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        4140 3330 4815 3330
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2430 1215 2430 1215 2970 495 2970 495 2430
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2970 1215 2970 1215 3150 495 3150 495 2970
+4 0 0 50 0 0 12 0.0000 4 105 210 3594 4507 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 3345 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 2457 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 2558 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 3093 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 3193 trace\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3430 2510 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 2564 2212 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3517 2981 END\001
+4 0 0 50 0 0 9 0.0000 4 75 270 3540 3382 break\001
+4 0 0 50 0 0 12 0.0000 4 135 540 3427 3885 unused\001
+4 0 0 50 0 0 12 0.0000 4 135 585 3413 4102 callee...\001
+4 0 0 50 0 0 12 0.0000 4 135 360 3484 3720 W32\001
+4 0 0 50 0 0 12 0.0000 4 135 585 582 2782 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 784 3098 ret\001
diff --git a/project/captive/doc/fig/functype_patched_pass_fromunix.fig b/project/captive/doc/fig/functype_patched_pass_fromunix.fig
new file mode 100644 (file)
index 0000000..6d4c9c8
--- /dev/null
@@ -0,0 +1,116 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 4594 4305 4849 4495
+4 0 0 50 0 0 9 0.0000 4 75 255 4594 4495 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 4615 4395 exit\001
+-6
+6 4589 3696 4859 3872
+4 0 0 50 0 0 9 0.0000 4 105 270 4589 3771 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4594 3872 trace\001
+-6
+6 4990 3300 5740 4050
+4 0 0 50 0 1 12 0.0000 4 180 600 5049 3949 /fastcall\001
+4 0 0 50 0 1 12 0.0000 4 135 600 5066 3782 /stdcall/\001
+4 0 0 50 0 1 12 0.0000 4 135 435 5114 3634 cdecl/\001
+4 0 0 50 0 0 12 0.0000 4 180 600 5068 3463 calltype\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        4950 4005 5985 4005
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        6165 5400 6165 5580 5310 5580 5310 4275 4950 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        6255 4005 6975 4005 6975 3690 7290 3690
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        7605 3960 7605 4140 6615 4140
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        6615 4275 7290 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        7605 4590 7605 4770 6975 4770 6975 4455 6255 4455
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3870 4545 4185 4545 4185 3870 4500 3870
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4500 6660 4500 6660 5040 5670 5040 5670 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 5040 6660 5040 6660 5400 5670 5400 5670 5040
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4230 5940 4230 5940 4500 5670 4500 5670 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 4230 6300 4230 6300 4500 5940 4500 5940 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 4230 6660 4230 6660 4500 6300 4500 6300 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 3960 6300 3960 6300 4230 5940 4230 5940 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 3960 6660 3960 6660 4230 6300 4230 6300 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3600 7922 3600 7922 3780 7290 3780 7290 3600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3780 7920 3780 7920 3960 7290 3960 7290 3780
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4230 7920 4230 7920 4410 7290 4410 7290 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4410 7920 4410 7920 4590 7290 4590 7290 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3960 5940 3960 5940 4230 5670 4230 5670 3960
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4140 3510 4410
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 1 2
+       2 1 1.00 120.00 90.00
+        3510 5085 3510 4815
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 4410 3870 4410 3870 4815 3150 4815 3150 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4275 4950 4275 4950 4545 4500 4545 4500 4275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4545 4950 4545 4950 4680 4500 4680 4500 4545
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 4680 4725 4950 4185 4950 4185 4680 3870 4680
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3645 4950 3645 4950 3915 4500 3915 4500 3645
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3915 4950 3915 4950 4095 4500 4095 4500 3915
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4095 4950 4095 4950 4275 4500 4275 4500 4095
+4 0 0 50 0 0 12 0.0000 4 180 900 3083 3338 calling code\001
+4 0 0 50 0 1 12 0.0000 4 180 1470 5414 3150 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 5700 3337 binary code\001
+4 0 0 50 0 0 12 0.0000 4 135 465 3270 3150 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 105 210 6069 5272 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4140 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 5970 4140 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 6360 4140 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 270 6331 4410 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 5996 4410 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4410 #2\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7369 3921 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7366 4373 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7371 3744 #1=instr\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7362 4545 #2=instr\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4486 3159 UNIX\001
+4 0 0 50 0 1 12 0.0000 4 135 720 7253 3248 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 7376 3061 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 7339 3423 handler\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3242 4674 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 585 5919 4837 callee...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 3240 4095 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3330 5265 END\001
+4 0 0 50 0 0 9 0.0000 4 75 150 4657 4662 ret\001
+4 0 0 50 0 0 12 0.0000 4 180 600 3904 3606 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 3977 3792 cdecl\001
+4 0 0 50 0 0 12 0.0000 4 180 735 4374 3334 jumptable\001
diff --git a/project/captive/doc/fig/functype_patched_pass_fromw32.fig b/project/captive/doc/fig/functype_patched_pass_fromw32.fig
new file mode 100644 (file)
index 0000000..71103f5
--- /dev/null
@@ -0,0 +1,136 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 7275 3675 7950 4125
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3735 7922 3735 7922 3915 7290 3915 7290 3735
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3915 7920 3915 7920 4095 7290 4095 7290 3915
+4 0 0 50 0 0 9 0.0000 4 75 465 7369 4056 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7371 3879 #1=instr\001
+-6
+6 5100 3375 5700 3975
+4 0 0 50 0 1 10 0.0000 4 105 405 5195 3606 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 5149 3485 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 5132 3734 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 5120 3861 /fastcall\001
+-6
+6 5175 4275 5775 4875
+4 0 0 50 0 1 10 0.0000 4 105 405 5250 4501 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 5204 4380 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 5187 4629 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 5175 4756 /fastcall\001
+-6
+6 5400 2250 6900 2700
+4 0 0 50 0 1 12 0.0000 4 180 1470 5414 2430 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 5700 2617 binary code\001
+-6
+6 4350 2250 5175 2700
+4 0 0 50 0 0 12 0.0000 4 180 735 4374 2614 jumptable\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4486 2439 UNIX\001
+-6
+6 7200 2175 8025 2775
+4 0 0 50 0 1 12 0.0000 4 135 720 7253 2528 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 7376 2341 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 7339 2703 handler\001
+-6
+6 4595 4475 4850 4665
+4 0 0 50 0 0 9 0.0000 4 90 210 4616 4565 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4595 4665 trace\001
+-6
+6 4588 3872 4858 4048
+4 0 0 50 0 0 9 0.0000 4 75 255 4593 4048 trace\001
+4 0 0 50 0 0 9 0.0000 4 105 270 4588 3947 entry\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        4950 4185 5985 4185
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        6165 5400 6165 5580 5130 5580 5130 4365 4950 4365
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        6255 4140 7065 4140 7065 3825 7290 3825
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        7605 4095 7605 4185 6615 4185
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        6615 4275 7290 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        7605 4590 7605 4725 6975 4725 6975 4455 6255 4455
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 4860 4725 5040 4275 5040 4275 3285 5670 3285
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4500 6660 4500 6660 5040 5670 5040 5670 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 5040 6660 5040 6660 5400 5670 5400 5670 5040
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4230 5940 4230 5940 4500 5670 4500 5670 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 4230 6300 4230 6300 4500 5940 4500 5940 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 4230 6660 4230 6660 4500 6300 4500 6300 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 3960 6300 3960 6300 4230 5940 4230 5940 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 3960 6660 3960 6660 4230 6300 4230 6300 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3960 5940 3960 5940 4230 5670 4230 5670 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3420 6660 3420 6660 3015 5670 3015 5670 3420
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        5670 3150 5040 3150 5040 4005 5985 4005
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3375 7920 3375 7920 3555 7290 3555 7290 3375
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        6255 4005 6885 4005 6885 3465 7290 3465
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 7
+       0 0 1.00 60.00 120.00
+        7605 3555 7605 3645 8145 3645 8145 2790 4140 2790 4140 3960
+        4500 3960
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        6165 3420 6165 3690
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        5670 2880 5940 3015
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4725 4950 4725 4950 4860 4500 4860 4500 4725
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4455 4950 4455 4950 4725 4500 4725 4500 4455
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4275 4950 4275 4950 4455 4500 4455 4500 4275
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4095 4950 4095 4950 4275 4500 4275 4500 4095
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3825 4950 3825 4950 4095 4500 4095 4500 3825
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4230 7920 4230 7920 4410 7290 4410 7290 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4410 7920 4410 7920 4590 7290 4590 7290 4410
+4 0 0 50 0 0 12 0.0000 4 105 210 6069 5272 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4140 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 5970 4140 break\001
+4 0 0 50 0 0 9 0.0000 4 75 270 6331 4410 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 5996 4410 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4410 #2\001
+4 0 0 50 0 0 12 0.0000 4 135 585 5919 4837 callee...\001
+4 0 0 50 0 0 12 0.0000 4 135 555 5905 3275 caller...\001
+4 0 0 50 0 0 9 0.0000 4 90 405 7425 3510 redirect\001
+4 0 0 50 0 0 12 0.0000 4 135 390 5985 3825 END\001
+4 0 0 50 0 0 12 0.0000 4 135 570 5085 2970 START\001
+4 0 0 50 0 0 9 0.0000 4 75 150 4660 4819 ret\001
+4 0 0 50 0 0 9 0.0000 4 90 225 6356 4121 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7365 4369 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7373 4545 #2=instr\001
diff --git a/project/captive/doc/fig/functype_patched_wrap_fromunix.fig b/project/captive/doc/fig/functype_patched_wrap_fromunix.fig
new file mode 100644 (file)
index 0000000..4367e4f
--- /dev/null
@@ -0,0 +1,173 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 3900 3450 4575 3825
+4 0 0 50 0 0 12 0.0000 4 180 600 3904 3606 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 3977 3792 cdecl\001
+-6
+6 5400 5475 6075 6225
+4 0 0 50 0 1 12 0.0000 4 180 600 5417 6123 /fastcall\001
+4 0 0 50 0 1 12 0.0000 4 135 600 5434 5956 /stdcall/\001
+4 0 0 50 0 1 12 0.0000 4 135 435 5482 5808 cdecl/\001
+4 0 0 50 0 0 12 0.0000 4 180 600 5436 5637 calltype\001
+-6
+6 3150 5550 3900 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 5580 3690 5580 3690 5715 3150 5715 3150 5580
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 5715 3870 5715 3870 6075 3150 6075 3150 5715
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 6075 3870 6075 3870 6255 3150 6255 3150 6075
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3870 6255 3150 6255 3150 6435 3870 6435 3870 6255
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 6435 3870 6435 3870 6570 3150 6570 3150 6435
+4 0 0 50 0 16 8 0.0000 4 90 450 3195 5685 wrapper\001
+4 0 0 50 0 0 9 0.0000 4 90 510 3244 5881 arguments\001
+4 0 0 50 0 0 9 0.0000 4 75 300 3361 6007 check\001
+4 0 0 50 0 0 9 0.0000 4 75 150 3424 6540 ret\001
+-6
+6 4500 5850 4950 7125
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6480 4950 6480 4950 6660 4500 6660 4500 6480
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6930 4950 6930 4950 7065 4500 7065 4500 6930
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6660 4950 6660 4950 6930 4500 6930 4500 6660
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6300 4950 6300 4950 6480 4500 6480 4500 6300
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 6030 4950 6030 4950 6300 4500 6300 4500 6030
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4860 6030 4500 6030 4500 5895 4860 5895 4860 6030
+4 0 0 50 0 0 9 0.0000 4 75 150 4648 7035 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 4586 6147 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 6248 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 4612 6783 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 6883 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 4548 6007 inner\001
+-6
+6 4275 5175 4950 5625
+4 0 0 50 0 0 12 0.0000 4 180 600 4347 5382 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 4420 5568 cdecl\001
+-6
+6 3375 6975 4050 7350
+4 0 0 50 0 0 12 0.0000 4 180 600 3422 7127 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 3495 7313 cdecl\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        6255 4005 6975 4005 6975 3690 7290 3690
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        7605 3960 7605 4185 6615 4185
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        6615 4275 7290 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        7605 4590 7605 4770 6975 4770 6975 4455 6255 4455
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3870 4545 4050 4545 4050 3870 4500 3870
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 4770 4725 4950 4050 4950 4050 4680 3870 4680
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4500 6660 4500 6660 5040 5670 5040 5670 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 5040 6660 5040 6660 5400 5670 5400 5670 5040
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 4230 5940 4230 5940 4500 5670 4500 5670 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 4230 6300 4230 6300 4500 5940 4500 5940 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 4230 6660 4230 6660 4500 6300 4500 6300 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5940 3960 6300 3960 6300 4230 5940 4230 5940 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        6300 3960 6660 3960 6660 4230 6300 4230 6300 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3600 7922 3600 7922 3780 7290 3780 7290 3600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 3780 7920 3780 7920 3960 7290 3960 7290 3780
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4230 7920 4230 7920 4410 7290 4410 7290 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        7290 4410 7920 4410 7920 4590 7290 4590 7290 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 4410 3870 4410 3870 4815 3150 4815 3150 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5670 3960 5940 3960 5940 4230 5670 4230 5670 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4185 4950 4185 4950 4365 4500 4365 4500 4185
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4635 4950 4635 4950 4770 4500 4770 4500 4635
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4365 4950 4365 4950 4635 4500 4635 4500 4365
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3735 4950 3735 4950 4005 4500 4005 4500 3735
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 3735 4860 3735 4860 3600 4500 3600 4500 3735
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        4725 7065 4725 7155 4050 7155 4050 6345 3870 6345
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        4500 4095 4185 4095 4185 5895 3870 5895
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        3510 6570 3510 6750 4320 6750 4320 4275 4500 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3870 6165 4500 6165
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 60.00 120.00
+        6165 5400 6165 6570 4950 6570
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        4950 6390 5310 6390 5310 4005 5985 4005
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4500 4005 4950 4005 4950 4185 4500 4185 4500 4005
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4140 3510 4410
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3510 4815 3510 5085
+4 0 0 50 0 1 12 0.0000 4 180 1470 5414 3150 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 135 465 3270 3150 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 105 210 6069 5272 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4140 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 5970 4140 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 6360 4140 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 270 6331 4410 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 5996 4410 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 5737 4410 #2\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7369 3921 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 75 465 7366 4373 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7371 3744 #1=instr\001
+4 0 0 50 0 0 9 0.0000 4 90 420 7362 4545 #2=instr\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4486 3159 UNIX\001
+4 0 0 50 0 1 12 0.0000 4 135 720 7253 3248 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 7376 3061 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 7339 3423 handler\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3242 4674 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 585 5919 4837 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 4648 4740 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 4586 3852 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 3953 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 4612 4488 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 4591 4588 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 4543 3705 outer\001
+4 0 0 50 0 0 12 0.0000 4 180 735 4374 3334 jumptable\001
+4 0 0 50 0 0 12 0.0000 4 180 870 5700 3337 binary code\001
+4 0 0 50 0 0 12 0.0000 4 135 360 3323 3331 code\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3342 5247 END\001
+4 0 0 50 0 0 12 0.0000 4 135 570 3240 4110 START\001
diff --git a/project/captive/doc/fig/functype_patched_wrap_fromw32.fig b/project/captive/doc/fig/functype_patched_wrap_fromw32.fig
new file mode 100644 (file)
index 0000000..1493046
--- /dev/null
@@ -0,0 +1,195 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2625 2550 3225 3150
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 2841 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 2720 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 2969 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 3096 /fastcall\001
+-6
+6 4725 1350 5550 1950
+4 0 0 50 0 1 12 0.0000 4 135 720 4778 1718 SIGSEGV\001
+4 0 0 50 0 0 12 0.0000 4 135 465 4901 1531 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 555 4864 1893 handler\001
+-6
+6 1800 3825 2325 5025
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4410 2295 4410 2295 4590 1845 4590 1845 4410
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4860 2295 4860 2295 4995 1845 4995 1845 4860
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4590 2295 4590 2295 4860 1845 4860 1845 4590
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 4230 2295 4230 2295 4410 1845 4410 1845 4230
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3960 2295 3960 2295 4230 1845 4230 1845 3960
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2205 3960 1845 3960 1845 3825 2205 3825 2205 3960
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 4965 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 4077 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 4178 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 4713 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 4813 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 1893 3937 inner\001
+-6
+6 675 4200 1350 4575
+4 0 0 50 0 0 12 0.0000 4 180 600 722 4382 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 795 4568 cdecl\001
+-6
+6 750 1950 1425 2325
+4 0 0 50 0 0 12 0.0000 4 180 600 814 2121 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 887 2307 cdecl\001
+-6
+6 1650 1500 2475 1950
+4 0 0 50 0 0 12 0.0000 4 135 465 1831 1674 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 180 735 1719 1849 jumptable\001
+-6
+6 2925 1500 4425 1950
+4 0 0 50 0 1 12 0.0000 4 180 1470 2939 1665 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 3225 1852 binary code\001
+-6
+6 600 1500 1125 1875
+4 0 0 50 0 0 12 0.0000 4 135 465 615 1665 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 360 668 1846 code\001
+-6
+6 525 2550 1125 2850
+4 0 0 50 0 0 9 0.0000 4 90 510 581 2675 arguments\001
+4 0 0 50 0 0 9 0.0000 4 75 300 698 2801 check\001
+-6
+6 2625 3900 3225 4500
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 4146 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 4025 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 4274 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 4401 /fastcall\001
+-6
+6 4800 2925 5475 3375
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 2970 5447 2970 5447 3150 4815 3150 4815 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3150 5445 3150 5445 3330 4815 3330 4815 3150
+4 0 0 50 0 0 9 0.0000 4 75 465 4894 3291 #2=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 4896 3114 #1=instr\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 3375 2070 3555 2430 3555 2430 2520 3195 2520
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3735 4185 3735 4185 4275 3195 4275 3195 3735
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3465 3465 3465 3465 3735 3195 3735 3195 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3465 3465 3825 3465 3825 3735 3465 3735 3465 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3825 3465 4185 3465 4185 3735 3825 3735 3825 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3465 3195 3825 3195 3825 3465 3465 3465 3465 3195
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3825 3195 4185 3195 4185 3465 3825 3465 3825 3195
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 3195 3465 3195 3465 3465 3195 3465 3195 3195
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3195 2385 2565 2385 2565 3240 3510 3240
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 2610 5445 2610 5445 2790 4815 2790 4815 2610
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3780 3240 4410 3240 4410 2700 4815 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 7
+       0 0 1.00 60.00 120.00
+        5130 2790 5130 2880 5670 2880 5670 2025 1440 2025 1440 2475
+        1845 2475
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        855 3420 855 3600 1665 3600 1665 2880 1845 2880
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1845 2700 1215 2700
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2790 2295 2790 2295 2970 1845 2970 1845 2790
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3240 2295 3240 2295 3375 1845 3375 1845 3240
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2970 2295 2970 2295 3240 1845 3240 1845 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2340 2295 2340 2295 2610 1845 2610 1845 2340
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2340 2205 2340 2205 2205 1845 2205 1845 2340
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2610 2295 2610 2295 2790 1845 2790 1845 2610
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 4995 2070 5085 1395 5085 1395 3150 1215 3150
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        1215 2970 1530 2970 1530 4095 1845 4095
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2385 1035 2385 1035 2520 495 2520 495 2385
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2520 1215 2520 1215 2880 495 2880 495 2520
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2880 1215 2880 1215 3060 495 3060 495 2880
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1215 3060 495 3060 495 3240 1215 3240 1215 3060
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 3240 1215 3240 1215 3420 495 3420 495 3240
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        2295 4320 2565 4320 2565 3420 3510 3420
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 4275 4185 4275 4185 4635 3195 4635 3195 4275
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        3690 4635 3690 4815 2565 4815 2565 4500 2295 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 2655 4185 2655 4185 2250 3195 2250 3195 2655
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 57.15 114.30
+        3780 3375 4590 3375 4590 3060 4815 3060
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 3
+       0 0 1.00 57.15 114.30
+        5130 3330 5130 3420 4140 3420
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 57.15 114.30
+        4140 3510 4815 3510
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 57.15 114.30
+        5130 3825 5130 3960 4500 3960 4500 3690 3780 3690
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3465 5445 3465 5445 3645 4815 3645 4815 3465
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4815 3645 5445 3645 5445 3825 4815 3825 4815 3645
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3690 2655 3690 2835
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3150 2115 3465 2250
+4 0 0 50 0 0 12 0.0000 4 105 210 3594 4507 ret\001
+4 0 0 50 0 0 9 0.0000 4 75 120 3262 3375 #1\001
+4 0 0 50 0 0 9 0.0000 4 75 270 3495 3375 break\001
+4 0 0 50 0 0 9 0.0000 4 75 270 3856 3645 break\001
+4 0 0 50 0 0 9 0.0000 4 90 225 3521 3645 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 120 3262 3645 #2\001
+4 0 0 50 0 0 12 0.0000 4 135 585 3444 4072 callee...\001
+4 0 0 50 0 0 9 0.0000 4 90 405 4950 2745 redirect\001
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 3345 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 2457 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 2558 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 3093 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 3193 trace\001
+4 0 0 50 0 16 8 0.0000 4 105 285 1888 2310 outer\001
+4 0 0 50 0 16 8 0.0000 4 90 450 548 2490 wrapper\001
+4 0 0 50 0 0 9 0.0000 4 75 150 784 3363 ret\001
+4 0 0 50 0 0 12 0.0000 4 135 555 3430 2510 caller...\001
+4 0 0 50 0 0 9 0.0000 4 90 225 3885 3356 instr\001
+4 0 0 50 0 0 9 0.0000 4 75 465 4895 3608 #1=break\001
+4 0 0 50 0 0 9 0.0000 4 90 420 4894 3780 #2=instr\001
+4 0 0 50 0 0 12 0.0000 4 135 570 2564 2212 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3517 2981 END\001
diff --git a/project/captive/doc/fig/functype_unpatched_native_fromw32.fig b/project/captive/doc/fig/functype_unpatched_native_fromw32.fig
new file mode 100644 (file)
index 0000000..d9b6c7d
--- /dev/null
@@ -0,0 +1,75 @@
+#FIG 3.2
+Landscape
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2625 2550 3225 3150
+4 0 0 50 0 1 10 0.0000 4 105 405 2720 2841 cdecl/\001
+4 0 0 50 0 0 10 0.0000 4 135 510 2674 2720 calltype\001
+4 0 0 50 0 1 10 0.0000 4 105 540 2657 2969 /stdcall/\001
+4 0 0 50 0 1 10 0.0000 4 150 525 2645 3096 /fastcall\001
+-6
+6 1650 1500 2475 1950
+4 0 0 50 0 0 12 0.0000 4 135 465 1831 1674 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 180 735 1719 1849 jumptable\001
+-6
+6 2925 1500 4425 1950
+4 0 0 50 0 1 12 0.0000 4 180 1470 2939 1665 Microsoft Windows\001
+4 0 0 50 0 0 12 0.0000 4 180 870 3225 1852 binary code\001
+-6
+6 600 1500 1125 1875
+4 0 0 50 0 0 12 0.0000 4 135 465 615 1665 UNIX\001
+4 0 0 50 0 0 12 0.0000 4 135 360 668 1846 code\001
+-6
+6 975 3555 1650 3930
+4 0 0 50 0 0 12 0.0000 4 180 600 1017 3694 calltype\001
+4 0 0 50 0 1 12 0.0000 4 135 375 1090 3880 cdecl\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        2070 3555 2070 3735 2430 3735 2430 2520 3195 2520
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 4
+       0 0 1.00 60.00 120.00
+        3195 2385 1620 2385 1620 2655 1845 2655
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3195 2655 4185 2655 4185 2250 3195 2250 3195 2655
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3690 2655 3690 2835
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       2 1 1.00 120.00 90.00
+        3150 2115 3465 2250
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 5
+       0 0 1.00 60.00 120.00
+        855 3330 855 3510 1665 3510 1665 3060 1845 3060
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1845 2880 1215 2880
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2970 2295 2970 2295 3150 1845 3150 1845 2970
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3420 2295 3420 2295 3555 1845 3555 1845 3420
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 3150 2295 3150 2295 3420 1845 3420 1845 3150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2520 2295 2520 2295 2790 1845 2790 1845 2520
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        1845 2790 2295 2790 2295 2970 1845 2970 1845 2790
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 2610 1215 2610 1215 3150 495 3150 495 2610
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        495 3150 1215 3150 1215 3330 495 3330 495 3150
+4 0 0 50 0 0 12 0.0000 4 135 555 3430 2510 caller...\001
+4 0 0 50 0 0 12 0.0000 4 135 570 2564 2212 START\001
+4 0 0 50 0 0 12 0.0000 4 135 390 3517 2981 END\001
+4 0 0 50 0 0 9 0.0000 4 75 150 1993 3525 ret\001
+4 0 0 50 0 0 9 0.0000 4 105 270 1931 2637 entry\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 2738 trace\001
+4 0 0 50 0 0 9 0.0000 4 90 210 1957 3273 exit\001
+4 0 0 50 0 0 9 0.0000 4 75 255 1936 3373 trace\001
+4 0 0 50 0 0 12 0.0000 4 135 585 582 2962 callee...\001
+4 0 0 50 0 0 9 0.0000 4 75 150 784 3278 ret\001
diff --git a/project/captive/doc/fig/sandbox.fig b/project/captive/doc/fig/sandbox.fig
new file mode 100644 (file)
index 0000000..153bdc9
--- /dev/null
@@ -0,0 +1,145 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 5325 -1350 7275 -1050
+6 5505 -1260 7155 -1125
+4 0 0 50 0 0 12 0.0000 4 135 1650 5505 -1125 GnomeVFS/test-shell\001
+-6
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5325 -1350 7275 -1350 7275 -1050 5325 -1050 5325 -1350
+-6
+6 4575 -450 5775 -150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4575 -150 5775 -150 5775 -450 4575 -450 4575 -150
+4 0 0 50 0 0 12 0.0000 4 135 885 4725 -225 GnomeVFS\001
+-6
+6 2625 1650 4913 3150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3075 1800 4425 1800 4425 2100 3075 2100 3075 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3075 2400 4425 2400 4425 3000 3075 3000 3075 2400
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3750 2400 3750 2100
+2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5
+        4875 1650 2625 1650 2625 3150 4875 3150 4875 1650
+4 0 0 50 0 0 12 0.0000 4 180 1200 3173 2025 libcaptive/client\001
+4 0 0 50 0 0 10 0.0000 4 135 1110 3803 2303 [W32 kernel API]\001
+4 0 0 50 0 0 15 0.0000 4 195 825 3353 2782 libcaptive\001
+-6
+6 3150 3600 4350 3900
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 3600 4350 3600 4350 3900 3150 3900 3150 3600
+4 0 0 50 0 0 12 0.0000 4 180 960 3278 3818 giognomevfs\001
+-6
+6 3150 4200 4350 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3150 4500 4350 4500 4350 4200 3150 4200 3150 4500
+4 0 0 50 0 0 12 0.0000 4 135 885 3300 4425 GnomeVFS\001
+-6
+6 3525 -3525 5025 -2700
+6 3525 -3525 5025 -3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3525 -3525 5025 -3525 5025 -3000 3525 -3000 3525 -3525
+4 0 0 50 0 0 12 0.0000 4 180 1200 3697 -3202 user application\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        4275 -3000 4275 -2700
+-6
+6 5025 1650 7313 3150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5475 1800 6825 1800 6825 2100 5475 2100 5475 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5475 2400 6825 2400 6825 3000 5475 3000 5475 2400
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        6150 2400 6150 2100
+2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5
+        7275 1650 5025 1650 5025 3150 7275 3150 7275 1650
+4 0 0 50 0 0 12 0.0000 4 180 1200 5573 2025 libcaptive/client\001
+4 0 0 50 0 0 10 0.0000 4 135 1110 6203 2303 [W32 kernel API]\001
+4 0 0 50 0 0 15 0.0000 4 195 825 5753 2782 libcaptive\001
+-6
+6 5550 3600 6750 3900
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5550 3600 6750 3600 6750 3900 5550 3900 5550 3600
+4 0 0 50 0 0 12 0.0000 4 180 960 5678 3818 giognomevfs\001
+-6
+6 5550 4200 6750 4500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5550 4500 6750 4500 6750 4200 5550 4200 5550 4500
+4 0 0 50 0 0 12 0.0000 4 135 885 5700 4425 GnomeVFS\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        4500 -1575 4500 -1875
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        5175 -450 5175 -750
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        5175 -750 6300 -750 6300 -1050
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+        5175 -750 4425 -750 4425 -1050
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5025 -1575 3825 -1575 3825 -1050 5025 -1050 5025 -1575
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        5175 150 5175 -150
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2775 1200 7575 1200 7575 150 2775 150 2775 1200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2925 1200 4875 1200 4875 750 2925 750 2925 1200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3750 1200 3750 1800
+2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5
+        2625 1650 3375 1650 3375 1425 2625 1425 2625 1650
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3750 3600 3750 3000
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3750 3900 3750 4200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        3750 4500 3750 4800
+2 4 0 1 0 7 50 0 -1 0.000 0 0 10 0 0 5
+        4500 5250 4500 4800 3000 4800 3000 5250 4500 5250
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5025 -2700 3525 -2700 3525 -1875 5025 -1875 5025 -2700
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2175 -1800 5100 -1800 5100 -2775 2175 -2775 2175 -1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        3975 -1575 5025 -1575 5025 -1350 3975 -1350 3975 -1575
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5025 -1875 3975 -1875 3975 -2100 5025 -2100 5025 -1875
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        6150 1200 6150 1800
+2 2 2 1 0 7 50 0 -1 3.000 0 0 -1 0 0 5
+        5025 1650 5775 1650 5775 1425 5025 1425 5025 1650
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        6150 3600 6150 3000
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        6150 3900 6150 4200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+        6150 4500 6150 4800
+2 4 0 1 0 7 50 0 -1 0.000 0 0 10 0 0 5
+        6900 5250 6900 4800 5400 4800 5400 5250 6900 5250
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        5025 1200 6975 1200 6975 750 5025 750 5025 1200
+4 0 0 50 0 0 12 0.0000 4 135 720 4073 -1140 UserVFS\001
+4 0 0 50 0 0 12 0.0000 4 135 630 2700 1597 sandbox\001
+4 0 0 50 0 0 12 0.0000 4 180 1530 4425 525 libcaptive-gnomevfs\001
+4 0 0 50 0 0 12 0.0000 4 135 345 4050 -2325 VFS\001
+4 0 0 50 0 0 11 0.0000 4 105 750 4103 -1395 Coda-server\001
+4 0 0 50 0 0 12 0.0000 4 135 630 5100 1597 sandbox\001
+4 0 0 50 0 0 12 0.0000 4 180 2460 6225 4125 VFS parent [GnomeVFSHandle]\001
+4 0 0 50 0 0 12 0.0000 4 180 360 6210 4717 [file]\001
+4 0 0 50 0 0 12 0.0000 4 180 1065 6225 3450 [GIOChannel]\001
+4 0 0 50 0 0 12 0.0000 4 180 1665 6225 1500 [libcaptive client API]\001
+4 0 0 50 0 0 12 0.0000 4 180 750 7350 1725 [CORBA]\001
+4 0 0 50 0 0 12 0.0000 4 180 750 7350 3172 [CORBA]\001
+4 0 0 50 0 0 12 0.0000 4 15 135 7200 1050 ...\001
+4 0 0 50 0 0 11 0.0000 4 150 1530 3067 1035 captiveVFS #1 [GObject]\001
+4 0 0 50 0 0 11 0.0000 4 150 1530 5167 1035 captiveVFS #2 [GObject]\001
+4 0 0 50 0 0 12 0.0000 4 180 1215 5557 5085 image device #2\001
+4 0 0 50 0 0 12 0.0000 4 180 1215 3157 5086 image device #1\001
+4 0 0 50 0 0 12 0.0000 4 135 930 2340 -2400 Linux kernel\001
+4 0 0 50 0 0 11 0.0000 4 105 735 4095 -1928 Coda-client\001
diff --git a/project/captive/doc/ratio.png b/project/captive/doc/ratio.png
new file mode 100644 (file)
index 0000000..63fd917
Binary files /dev/null and b/project/captive/doc/ratio.png differ
diff --git a/project/captive/doc/ratio.sxi b/project/captive/doc/ratio.sxi
new file mode 100644 (file)
index 0000000..c11280f
Binary files /dev/null and b/project/captive/doc/ratio.sxi differ
diff --git a/project/checkstatic/Index.html.pl b/project/checkstatic/Index.html.pl
new file mode 100755 (executable)
index 0000000..e625301
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::checkstatic'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::checkstatic::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+use My::Project;
+use project::checkstatic::ListItem;
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::checkstatic::ListItem::ListItem,
+               );
+
+My::Web->footer();
index 91f0d26..03d6b16 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::checkstatic;
+package project::checkstatic::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"C Sources Symbol Attributes Checker",
                "priority"=>7,
                "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/checkstatic?rev=HEAD",
index a8e5c31..c1c4634 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 71%
rename from project/cvsbranchdiff/index.html.pl
rename to project/cvsbranchdiff/Index.html.pl
index e85a1aa..70a945f 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::cvsbranchdiff::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::cvsbranchdiff::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::cvsbranchdiff::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::cvsbranchdiff::ListItem::ListItem,
                );
 
 My::Web->footer();
index 6e66bc3..1c319de 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::cvsbranchdiff;
+package project::cvsbranchdiff::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"CVS Branching Utility",
                "priority"=>6,
                "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/cvsbranchdiff?rev=HEAD",
index e821382..cffb9e2 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/cvsutil/index.html.pl
rename to project/cvsutil/Index.html.pl
index f77cf06..f7d8b86 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::cvsutil::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::cvsutil::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::cvsutil::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::cvsutil::ListItem::ListItem,
                );
 
 My::Web->footer();
index 50af733..c713a6c 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::cvsutil;
+package project::cvsutil::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"CVS General Utility",
                "priority"=>7,
                "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/cvsutil?rev=HEAD",
index 4baa20e..63108f5 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/d1xnet/index.html.pl
rename to project/d1xnet/Index.html.pl
index 817b479..023ef0e 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::d1xnet::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::d1xnet::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::d1xnet::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::d1xnet::ListItem::ListItem,
                );
 
 My::Web->footer();
index 2ec7cfe..5a16254 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::d1xnet;
+package project::d1xnet::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"<a href=\"http://d1x.warpcore.org/\">D1X</a> native TCP/IP support patch",
                "priority"=>2,
                "download"=>"d1x-tcpip-0.99.1.diff.gz",
index c226e1f..c75fd5d 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/doswatch/index.html.pl
rename to project/doswatch/Index.html.pl
index 1cd0733..7186dcb 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::doswatch::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::doswatch::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::doswatch::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::doswatch::ListItem::ListItem,
                );
 
 My::Web->footer();
index 38c99ac..436f6f7 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::doswatch;
+package project::doswatch::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"DOSWatcher - DOS File Access Snooper",
                "priority"=>2,
                "download"=>"doswatch.zip",
@@ -40,9 +39,10 @@ our %ListItem=(
                                .' calls access on the secondary console. Useful for many failure discoveries'
                                .' for weird software packages with broken file/directory access.</p>'
                                .' <ul>'
-                               .'      <li>Requires MDA/Hercules secondary adapter to be usable'
-                               .'      <li>Contains also MDABIOS, generic secondary adapter display layer'
-                               .'      <li>Can be run on primary-only VGA (with not much comfort, indeed)'
+                               .'      <li>MDA/Hercules secondary adapter recommended for DOSWATCH</li>'
+                               .'      <li>Package contains also MDABIOS - generic secondary adapter driver</li>'
+                               .'      <li>MDABIOS features DOS commands accessible device "mda$"</li>'
+                               .'      <li>DOSWATCH can be run on single VGA card (with not much comfort, indeed)</li>'
                                .' </ul>'
                );
 
index 7cbbe96..df5a81d 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/fixhtml/index.html.pl
rename to project/fixhtml/Index.html.pl
index 4524e36..378df03 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::fixhtml::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::fixhtml::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::fixhtml::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::fixhtml::ListItem::ListItem,
                );
 
 My::Web->footer();
index e5dbbbc..a583e5d 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::fixhtml;
+package project::fixhtml::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Converter of HTML Files URLs to Relative",
                "priority"=>3,
                "download"=>"fixhtml.pl",
index d30b8b4..555f1b1 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 87%
rename from project/ircon/index.html.pl
rename to project/ircon/Index.html.pl
index e70d307..d2d24f1 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::ircon::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::ircon::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::ircon::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::ircon::ListItem::ListItem,
                );
 
 print <<'HERE';
index cd4f448..4e4baf6 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::ircon;
+package project::ircon::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"IRCon - Infrared Remote Control",
                "priority"=>5,
                "download"=>"ircon.tar.gz",
index d585b16..b7bf197 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/kix/index.html.pl
rename to project/kix/Index.html.pl
index c5de223..b5a8a6a 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::kix::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::kix::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::kix::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::kix::ListItem::ListItem,
                );
 
 My::Web->footer();
index fbfb31b..7e1ea35 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::kix;
+package project::kix::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"KIX - KaliNix Replacement",
                "priority"=>4,
                "download"=>"kix.c",
index c9e04ea..fecdcd8 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/kware/index.html.pl
rename to project/kware/Index.html.pl
index c7598e3..fc02755 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::kware::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::kware::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::kware::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::kware::ListItem::ListItem,
                );
 
 My::Web->footer();
index b617182..2a95bc9 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::kware;
+package project::kware::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"KernelWare, Linux Kernel Drivers in Userland",
                "priority"=>5,
                "download"=>"kware.tar.gz",
index d33693b..60305f8 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 76%
rename from project/line9k/index.html.pl
rename to project/line9k/Index.html.pl
index b803226..dc8beec 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::line9k::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::line9k::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::line9k::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::line9k::ListItem::ListItem,
                );
 
 print <<'HERE';
@@ -40,6 +43,6 @@ your original mobile phone charge to <code>AC</code> pins. <code>PS/2</code> key
 fork of <code>+5V</code>/<code>GND</code> pins are required to power this hardware switch.</p>
 HERE
 
-print '<table border="0"><tr><td align="center">'.My::Web::img("line9k.gif","AC Switch Scheme").'</td></tr></table>'."\n";
+print '<table border="0"><tr><td align="center">'.My::Web::img("line9k","AC Switch Scheme").'</td></tr></table>'."\n";
 
 My::Web->footer();
index 6b60251..c399973 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::line9k;
+package project::line9k::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Modem / Nokia 9110 GSM data gate",
                "priority"=>7,
                "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/usr/local/sbin/line9k?rev=HEAD",
@@ -38,7 +37,7 @@ our %ListItem=(
                "description"=>""
                                .'<p>Waits for incoming PPP data connection, authorizes it and answers it.</p>'
                                .'<p>Scheme of computer controllde hardware charger for Nokia Communicator 9110 is supplied.'
-                               .'It keeps the Nokia battery fit by automatically controlled battery charging cycles.</p>'
+                               .' It keeps the Nokia battery fit by automatically controlled battery charging cycles.</p>'
                );
 
 1;
index bf70f20..1945b4b 100644 (file)
@@ -20,14 +20,10 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl \
+       Index.html.pl \
        line9k.fig
 
-noinst_DATA+= \
-       index.html \
-       line9k.gif
-
-index.html: line9k.gif
-
 CLEANFILES+= \
-       line9k.fig.bak
+       line9k.fig.bak \
+       line9k.png \
+       line9k.gif
similarity index 72%
rename from project/mdsms/index.html.pl
rename to project/mdsms/Index.html.pl
index 4419075..c7de2ce 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::mdsms::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::mdsms::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::mdsms::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::mdsms::ListItem::ListItem,
                );
 
 My::Web->footer();
index 4dc644f..24cae4b 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::mdsms;
+package project::mdsms::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Mobile Device SMS Tool",
                "priority"=>8,
                "download-sources .tar.gz"=>"mdsms-1.5.2.tar.gz",
index 3cc6842..8eb2d05 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 71%
rename from project/mod_auth_tacacs/index.html.pl
rename to project/mod_auth_tacacs/Index.html.pl
index 9490658..dbec51d 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::mod_auth_tacacs::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::mod_auth_tacacs::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::mod_auth_tacacs::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::mod_auth_tacacs::ListItem::ListItem,
                );
 
 My::Web->footer();
index 997be01..437f96f 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::mod_auth_tacacs;
+package project::mod_auth_tacacs::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"<a href=\"http://sourceforge.net/projects/mod-auth-tacacs/\">mod_auth_tacacs</a> TACACS+ test client",
                "priority"=>2,
                "download"=>"mod_auth_tacacs-2.0.2-gts1-checkout.diff.gz",
index b564973..a08b8cf 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/mot2as/index.html.pl
rename to project/mot2as/Index.html.pl
index 7352004..b2dab0c 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::mot2as::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::mot2as::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::mot2as::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::mot2as::ListItem::ListItem,
                );
 
 My::Web->footer();
index 30afeeb..7c59c0b 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::mot2as;
+package project::mot2as::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Motorola to AT&amp;T/GNU Assembler Syntax Converter",
                "priority"=>5,
                "download"=>"mot2as.c",
index 63e2d77..3ee15d4 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 81%
rename from project/netstat/index.html.pl
rename to project/netstat/Index.html.pl
index 4132351..be9a9be 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::netstat::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::netstat::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::netstat::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::netstat::ListItem::ListItem,
                );
 
 print <<'HERE';
index 37ff856..10d2491 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::netstat;
+package project::netstat::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Program name display for <a href=\"http://www.inka.de/sites/lina/linux/NetTools/\">net-tools-1.50</a>/netstat",
                "priority"=>3,
                "download"=>"net-tools-1.50-progname.diff.gz",
index 4f2da6e..6ca5708 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 74%
rename from project/oslik/index.html.pl
rename to project/oslik/Index.html.pl
index 7630b06..04be1dd 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::oslik::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::oslik::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::oslik::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::oslik::ListItem::ListItem,
                );
 
 print <<"HERE";
index deff81b..ba2f839 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::oslik;
+package project::oslik::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Logical Puzzle in Prolog",
                "priority"=>5,
                "download"=>"oslik/oslik.zip",
index c99d2ce..997d8eb 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/patchd2/index.html.pl
rename to project/patchd2/Index.html.pl
index fee364b..7c30114 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::patchd2::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::patchd2::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::patchd2::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::patchd2::ListItem::ListItem,
                );
 
 My::Web->footer();
index d492d2e..6aabce3 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::patchd2;
+package project::patchd2::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Patch <a href=\"http://www.descent2.com/\">Descent 2</a> to Avoid CD-ROM",
                "priority"=>2,
                "download"=>"patchd2.zip",
index 15690b7..5d19d4c 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
diff --git a/project/pipebuf/Index.html.pl b/project/pipebuf/Index.html.pl
new file mode 100755 (executable)
index 0000000..2d97ffc
--- /dev/null
@@ -0,0 +1,39 @@
+#! /usr/bin/perl
+# 
+# $Id$
+# Main page of 'My::Project::pipebuf'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+package project::pipebuf::Index;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+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;
+use My::Project;
+use project::pipebuf::ListItem;
+
+
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::pipebuf::ListItem::ListItem,
+               );
+
+My::Web->footer();
index c6f2746..e4a1fa9 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::pipebuf;
+package project::pipebuf::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"PipeBuf - Data Buffering Tool",
                "priority"=>8,
                "download"=>"pipebuf.c",
index 1f51bd9..8646788 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/ppp9k/index.html.pl
rename to project/ppp9k/Index.html.pl
index aaa0ba7..76ec633 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::ppp9k::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::ppp9k::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::ppp9k::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::ppp9k::ListItem::ListItem,
                );
 
 My::Web->footer();
index 0c1a9e5..9f1d3f4 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::ppp9k;
+package project::ppp9k::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Nokia Communicator Leased Line",
                "priority"=>6,
                "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/ppp9k?rev=HEAD",
index 6aa772b..dadec1d 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 71%
rename from project/redirector_ad/index.html.pl
rename to project/redirector_ad/Index.html.pl
index 4c72d1f..e84ab21 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::redirector_ad::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::redirector_ad::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::redirector_ad::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::redirector_ad::ListItem::ListItem,
                );
 
 My::Web->footer();
index a1efd03..f0a068f 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::redirector_ad;
+package project::redirector_ad::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Banner Killer as 'squid redirector'",
                "priority"=>7,
                "link-CVS download"=>"http://cvs.jankratochvil.net/viewcvs/redirector-ad/redirector-ad.tar.gz?tarball=1",
index 20a5c35..21cfd3a 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/smbfs/index.html.pl
rename to project/smbfs/Index.html.pl
index 1a54ee3..2edcbfe 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::smbfs::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::smbfs::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::smbfs::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::smbfs::ListItem::ListItem,
                );
 
 My::Web->footer();
index e35dc74..660a4f3 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::smbfs;
+package project::smbfs::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"SMB Kernel Filesystem Acceleration",
                "priority"=>6,
                "download"=>"smbfs-2.1.132-blocksize.diff",
index b00fdbb..2f7332f 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 82%
rename from project/sshpatch/index.html.pl
rename to project/sshpatch/Index.html.pl
index f9083e5..43f63b9 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::sshpatch::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::sshpatch::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::sshpatch::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::sshpatch::ListItem::ListItem,
                );
 
 print <<'HERE';
index 0e516e6..c781a99 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::sshpatch;
+package project::sshpatch::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"SSH-1 patch for <i>KeepAliveData</i> and <i>OnDemandForward</i>",
                "priority"=>7,
                "download"=>"ssh-1.2.30-kadata+odforw.tar.gz",
index 4b005ae..c15394f 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/step/index.html.pl
rename to project/step/Index.html.pl
index 0c59086..a3d7887 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::step::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::step::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::step::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::step::ListItem::ListItem,
                );
 
 My::Web->footer();
index 3c1266f..40bc297 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::step;
+package project::step::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"STEP - Student's Trainee Exchange Programme",
                "priority"=>4,
                "download"=>"step.tar.gz",
index 4a0f95c..c89769e 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 70%
rename from project/surprise/index.html.pl
rename to project/surprise/Index.html.pl
index e51279f..5b8b746 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::surprise::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::surprise::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::surprise::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::surprise::ListItem::ListItem,
                );
 
-print '<table border="0"><tr><td align="center">'.My::Web::img("surprise-gnome-0.gif","Gnome client").'</td></tr></table>'."\n";
+print '<table border="0"><tr><td align="center">'.My::Web::img("surprise-gnome-0","Gnome client").'</td></tr></table>'."\n";
 
 My::Web->footer();
index 1d2b900..9e60f64 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::surprise;
+package project::surprise::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Partition Surprise",
                "priority"=>9,
                "download-Page on SourceForge.net"=>"http://sourceforge.net/project/showfiles.php?group_id=10546",
index c4c5552..482a487 100644 (file)
@@ -19,8 +19,9 @@
 include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
-       ListItem.pm \
-       index.html.pl
+               ListItem.pm \
+               Index.html.pl \
+               surprise-gnome-0.png
 
-noinst_DATA+= \
-       index.html
+CLEANFILES+= \
+               surprise-gnome-0.gif
diff --git a/project/surprise/surprise-gnome-0.gif b/project/surprise/surprise-gnome-0.gif
deleted file mode 100644 (file)
index 5b1ce7c..0000000
Binary files a/project/surprise/surprise-gnome-0.gif and /dev/null differ
diff --git a/project/surprise/surprise-gnome-0.png b/project/surprise/surprise-gnome-0.png
new file mode 100644 (file)
index 0000000..2d6431e
Binary files /dev/null and b/project/surprise/surprise-gnome-0.png differ
similarity index 83%
rename from project/tac_plus/index.html.pl
rename to project/tac_plus/Index.html.pl
index d0b0ff2..9542b92 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::tac_plus::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::tac_plus::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::tac_plus::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::tac_plus::ListItem::ListItem,
                );
 
 print <<'HERE';
index 93f8679..97bab7e 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::tac_plus;
+package project::tac_plus::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"TACACS+ Server NAS Host Based Authorization",
                "priority"=>8,
                "download-GTS rel.4 diff for TACACS+ v4.0.3"=>"tac_plus-F4.0.3.alpha.8.gts4.diff.gz",
index dfbc836..c2261aa 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/tcp_rto/index.html.pl
rename to project/tcp_rto/Index.html.pl
index 361a9cf..d22c83e 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::tcp_rto::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::tcp_rto::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::tcp_rto::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::tcp_rto::ListItem::ListItem,
                );
 
 My::Web->footer();
index 7338b40..38a7217 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::tcp_rto;
+package project::tcp_rto::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Linux Kernel Patch for Maximal Round-trip-time",
                "priority"=>7,
                "download-Linux kernel 2.2.17 patch"=>"linux-2.2.17-tcp_rto-1.diff",
index 1e511ee..a3bd7f7 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 81%
rename from project/tcpdump/index.html.pl
rename to project/tcpdump/Index.html.pl
index b709890..4abf4a0 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::tcpdump::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::tcpdump::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::tcpdump::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::tcpdump::ListItem::ListItem,
                );
 
 print <<'HERE';
index 19f0fed..4aa56d1 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::tcpdump;
+package project::tcpdump::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"tcpdump ASCII Dump Patch",
                "priority"=>6,
                "download"=>"tcpdump-3.4-ASCIIdump.diff",
index 7d428e8..0d57b65 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/timeplan/index.html.pl
rename to project/timeplan/Index.html.pl
index 5eeba24..2a4aa5c 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::timeplan::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::timeplan::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::timeplan::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::timeplan::ListItem::ListItem,
                );
 
 My::Web->footer();
index 248fa57..b013127 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::timeplan;
+package project::timeplan::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Time Log Summarizer",
                "priority"=>6,
                "download"=>"timeplan-1.0.1.tar.gz",
index db36941..d773411 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/vblib/index.html.pl
rename to project/vblib/Index.html.pl
index 303dd3d..920bb85 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::vblib::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::vblib::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::vblib::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::vblib::ListItem::ListItem,
                );
 
 My::Web->footer();
index 0e2c134..6ada1d1 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::vblib;
+package project::vblib::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Variable Buffers Library",
                "priority"=>4,
                "download"=>"vblib-1.0.0.tar.gz",
index 0a0c8d1..ced12a6 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 87%
rename from project/winvnc/index.html.pl
rename to project/winvnc/Index.html.pl
index fa5b3ff..c1fe864 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::winvnc::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::winvnc::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::winvnc::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::winvnc::ListItem::ListItem,
                );
 
 print <<'HERE';
index b677286..68d70ce 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::winvnc;
+package project::winvnc::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Patch for Secret WinVNC Server Run",
                "priority"=>6,
                "download-already patched version 3.3.3r9"=>"vnc-3.3.3r9_x86_win32-exe-SECRET.zip",
index 4f2fe05..4a75ab1 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/wllib/index.html.pl
rename to project/wllib/Index.html.pl
index 061bae3..687a970 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::wllib::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::wllib::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::wllib::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::wllib::ListItem::ListItem,
                );
 
 My::Web->footer();
index c490ca7..50d3041 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::wllib;
+package project::wllib::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Line drawing Crossplatform Library",
                "priority"=>4,
                "download"=>"wllib-1.0.0.tar.gz",
index 1fb9668..0bbd406 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 72%
rename from project/xbill/index.html.pl
rename to project/xbill/Index.html.pl
index 9c25cc0..a7eb0c8 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
+package project::xbill::Index;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
+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;
+use My::Project;
 use project::xbill::ListItem;
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::xbill::ListItem,
+My::Project->init_project(
+               "__PACKAGE__"=>__PACKAGE__,
+               "ListItem"=>\@project::xbill::ListItem::ListItem,
                );
 
 My::Web->footer();
index 80b9885..441e955 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 
-package My::Project::xbill;
+package project::xbill::ListItem;
 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
-use vars qw($VERSION $CVS_ID);
-$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
-$CVS_ID=q$Id$;
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
 use strict;
 use warnings;
 
 
-our %ListItem=(
+our @ListItem=(
                "name"=>"Classic xBill game",
                "priority"=>7,
                "link-Download from SourceForge.net"=>"http://sourceforge.net/project/showfiles.php?group_id=10700",
index 7414d24..e7ce4de 100644 (file)
@@ -20,7 +20,4 @@ include $(top_srcdir)/Makefile-head.am
 
 EXTRA_DIST+= \
        ListItem.pm \
-       index.html.pl
-
-noinst_DATA+= \
-       index.html
+       Index.html.pl
similarity index 79%
rename from project/checkstatic/index.html.pl
rename to redirect.pl
index a291c91..97a8cfb 100755 (executable)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # 
 # $Id$
-# Main page of 'My::Project::checkstatic'
+# URL redirector of &My::Web::a_href Perl template.
 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
 # 
 # This program is free software; you can redistribute it and/or modify
@@ -26,11 +26,14 @@ use strict;
 use warnings;
 
 use My::Web;
-use project::checkstatic::ListItem;
+use Apache::Constants qw(MOVED);
 
 
-My::Web->init_project(
-               "ListItem"=>\%My::Project::checkstatic::ListItem,
+my $W=My::Web->init(
+               "header_only"=>1,
+               "args_check"=>{
+                               "location"=>'^\w+://',
+                               },
                );
-
-My::Web->footer();
+$W->{"r"}->status(MOVED);
+$W->{"r"}->header_out("Location"=>$W->{"args"}{"location"});