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;
+Wuse 'My::Project';
+Wuse 'project::captive::ListItem';
my $W=My::Project->init_project(
);
-print vskip("10ex")."<h1 align=\"center\">!!! DO NOT DISCLOSE - **************** !!!</h1>\n".vskip("10ex");
+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>
+<h1>The First Open Source MS-Windows Kernel API for Free OS</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')
- ." to write Microsoft Windows when it is just One Man Show task?",
+ ." to write Microsoft Windows when it can be just One Man Show?",
<td align="left">
@{[ map("<p class=\"stuff\">$_</p>\n",($stuff[int rand @stuff])) ]}
</td>
- <td align="right">@{[ a_href My::Web::img_src('captive-install-acquire'),
- img('captive-install-acquire-small','[ Captive Microsoft Windows Drivers Acquire Illustration ]') ]}</td>
+ <td align="right">@{[
+ img 'captive-install-acquire-small','[ Captive Microsoft Windows Drivers Acquire Illustration ]',
+ "a_href_img"=>'captive-install-acquire'
+ ]}</td>
</tr>
</table>
3=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)],
);
my %version=(
- map(($_=>["0.9.1","0"]),qw(captive captive-lufs captive-install)),
- "lufs"=>["0.9.6","1captive2"],
+ map(($_=>["0.9.6","0"]),qw(captive captive-lufs captive-install)),
+ "lufs"=>["0.9.6","1captive5"],
"gnome-vfs-httpcaptive"=>["2.3.8captive2","0"],
"ntfsprogs"=>["200309071734","1captive1"],
"ntfsprogs-gnomevfs"=>["1.0.1","0"],
captive-lufs
captive-install
)));
+
+my $case;
+my $a_href_arch=sub ($$%)
+{
+my($file_base,$text,%args)=@_;
+
+ $text=~s/[._]\D.*$// if $case!=1 && $text!~/^[.]/;
+ return a_href $file_base,$text,"size"=>($case==1),%args;
+};
+
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 $r=&$a_href_arch("dist/$file",$file);
(my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+ $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
return $r;
},
},
"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 $r=&$a_href_arch("dist/$file",$file);
(my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+ $r.="<br />".&$a_href_arch("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";
+ for (qw(libxml2-2.5.4-1.i386.rpm libxml2-python-2.5.4-1.i386.rpm libxml2-devel-2.5.4-1.i386.rpm)) {
+ $r.="<br />".&$a_href_arch('ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/'.$_,$_)." of Red Hat 9";
}
}
return $r;
"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 $r=&$a_href_arch("dist/$file",$file);
(my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+ $r.="<br />".&$a_href_arch("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 $r=&$a_href_arch("dist/$file",$file);
(my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/;
- $r.="<br />".a_href("dist/$filedev",$filedev) if $has_devel{$pkg};
+ $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
return $r;
},
},
{
- "name"=>"Debian GNU/Linux<br />sources",
+ "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);
- return CGI::escapeHTML($file).":"
- .' ' .a_href("dist/$file.dsc",".dsc","size"=>0)
- .' '.a_href("dist/$file.tar.gz",".tar.gz");
+ my $file="$pkg-$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext).".tar.gz";
+ return $file,$file;
},
},
{
- "name"=>"Sources (.tar.gz)",
+ "name"=>"Sources (.src.rpm)<br />(Red Hat 9 - Shrike)",
"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";
+ my $file="$pkg-$version_base-$version_ext.src.rpm";
return $file,$file;
},
},
for my $dist (@dist) {
print "<tr>";
print "<td>".$dist->{"name"}."</td>";
- for my $case (1,2,3) {
+ for my $casel (1,2,3) {
+ $case=$casel;
print "<td>";
print join("<br />",map({ my $pkg=$_;
my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}});
- (!defined $text ? ($file) || () : (a_href("dist/$file",$text)));
+ (!defined $text ? ($file) || () : (&$a_href_arch("dist/$file",$text)));
} @{$pkg{$case}}));
print "</td>";
}
available Microsoft Windows drivers versions. Now you can execute:</p>
<blockquote>
-<p class="quote"># mount -t captive-ntfs /dev/hda1 /mnt/dosc</p>
+ <p class="quote">
+ # mkdir /mnt/dosc<br />
+ # mount -t captive-ntfs /dev/hda1 /mnt/dosc
+ </p>
</blockquote>
+
+<h2>Overview</h2>
+
+<p>'<b>captive</b>' is the base package. It contains debugging '<b>captive-cmdline</b>' client.<br />
+'<b>captive-lufs</b>' permits mounting NTFS as regular filesystem. It needs '<b>lufs</b>'.<br />
+'<b>lufs</b>' is a daemon to enable userland process to provide filesystem functions.</p>
+
+<p>Any errors from '<b>captive-lufs</b>' are written to '<b>/var/log/messages</b>'.</p>
+
+<p>Needed drivers (at least ntoskrnl.exe+ntfs.sys) must be in '<b>/var/lib/captive</b>'.</p>
+
+<p>'<b>captive</b>' package creates '<b>captive</b>' user and '<b>captive</b>' group on your system.</p>
+
+
<h2>Package version conflicts</h2>
<dl>
<col width="0*" />
<tr>
<td align="left">
- <h2>The First Free Microsoft Windows Kernel API Emulation</h2>
+ <h2>The First Open Source MS-Windows Kernel API for Free OS</h2>
<p>Compatibility with existing binary Microsoft Windows file system drivers was
reached. Microsoft Windows kernel system components required by these drivers
<span class="productname">@{[ a_href 'http://www.reactos.com/','ReactOS' ]}</span>
code base made a big asset for this functionality.</p>
</td>
- <td align="right">@{[ a_href 'http://www.reactos.com/',img('reactos','ReactOS') ]}</td>
+ <td align="right">@{[ img 'reactos','ReactOS',"a_href"=>'http://www.reactos.com/' ]}</td>
</tr>
</table>
<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 'http://cvs.jankratochvil.net/viewcvs/*checkout*/priv/captive/src/libcaptive/ke/exports.captivesym?rev=HEAD',
- 'List of implemented W32 kernel functions' ]}</li>
- <li>@{[ a_href 'Thanks.html.pl','Thanks' ]}</li>
+ <li>@{[ a_href 'doc/','Developer Documentation' ]}; highlights:<ul>
+ <li>@{[ a_href 'doc/About.html.pl#versions','Microsoft Windows Versions Compatibility' ]}</li>
+ <li>@{[ a_href 'doc/Architecture.html.pl#law','Laws and Licensing Conditions' ]}</li>
+ <li>@{[ a_href 'doc/Details.html.pl#sandbox','Sandboxing of W32 Filesystem' ]}</li>
+ <li>@{[ a_href 'doc/TODO.html.pl#todo_fsck','TODO: Fsck of NTFS' ]}</li>
+ <li>@{[ a_href 'doc/TODO.html.pl#todo_surprise','TODO: NTFS Support for Partition Surprise' ]}</li>
+ <li>@{[ a_href 'doc/Related.html.pl#LinuxNTFScompet','Related Projects - Linux NTFS' ]}</li>
+ <li>@{[ a_href 'doc/Related.html.pl#vmware','Related Projects - VMware Workstation' ]}</li>
+ <li>@{[ a_href 'doc/LinuxNTFS.html.pl',"Re: 7.7 Can't we write a wrapper for Windows' driver?" ]}</li>
+ </ul></li>
+ <li>@{[ a_href 'http://cvs.jankratochvil.net/viewcvs/*checkout*/priv/captive/TODO?rev=HEAD','Known Bugs' ]}</li>
+ <li>Man pages<ul>
+ @{[
+ do {
+ my @mans=(
+ 'captive'=>[7,'Microsoft Windows NT kernel emulation for NTFS disk access'],
+ 'mount.captive'=>[8,'mount(8) interface for NTFS disk access'],
+ 'lufs-captivefs'=>[7,'Linux Userland File System module for NTFS as filesystem'],
+ 'captive-cmdline'=>[1,'Command-line client for captive(7) NTFS disk access'],
+### 'captive-sandbox-server'=>[1,'Security+safety wrapper for NTFS disk access'],
+ 'captive-install-acquire'=>[1,'Find MS Windows XP driver files for NTFS'],
+### 'captive-install-fstab'=>[1,'Manage captive-ntfs /etc/fstab entries'],
+ );
+ my @r;
+ while (@mans) {
+ my $file=shift @mans;
+ my($section,$name)=@{shift @mans};
+ push @r,"<li>".a_href("man/$file.pod.html",$file)."($section) - $name</li>\n";
+ }
+ @r;
+ }
+ ]}
+ </ul></li>
<li>@{[ a_href 'Resources.html.pl','Related Pages' ]}</li>
+ <li>@{[ a_href 'Thanks.html.pl','Thanks' ]}</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" ]}, !
+ Expecting @{[ a_href $W->{"resume_url"},"yet another challenging task" ]}, !
</p>
HERE