4 # Main page of 'My::Project::captive'
5 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; exactly version 2 of June 1991 is required
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 package project::captive::Index;
22 require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
23 our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
28 BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
31 Wuse 'project::captive::ListItem';
34 my $W=My::Project->init_project(
35 "__PACKAGE__"=>__PACKAGE__,
36 "ListItem"=>\@project::captive::ListItem::ListItem,
39 .reqpkg { font-style: italic; }
40 .stuff { font-style: italic; font-size: larger; margin-left: 20%; margin-right: 10%; }
41 .re { font-style: italic; }
42 table.mailman > * /* FIXME: What is it? */ > tr > th,
43 table.mailman > * /* FIXME: What is it? */ > tr > td { padding: 1ex; text-align: center; }
49 print vskip("10ex")."<h1 align=\"center\">!!! DO NOT DISCLOSE !!!</h1>\n".vskip("10ex");
52 <h1>The First Read/Write NTFS for Free Operating Systems</h1>
53 <h1>The First Open Source MS-Windows Kernel API for Free OS</h1>
57 "A lot of people claim themselves as Windows Programmers.\n"
58 ." Now I can finally join them - I also wrote my own Microsoft Windows.",
59 "Why do they need ".a_href('http://www.winsupersite.com/reviews/winserver2k3_gold2.asp','5000 developers')
60 ." to write Microsoft Windows when it can be just One Man Show?",
64 "My first Microsoft Windows program ever written? Some 'helloworld'?"
65 ." <span class=\"quote\">hal.dll</span>.",
68 print rightimg((map("<p class=\"stuff\">$_</p>\n",($stuff[int rand @stuff])))[0],
69 'captive-install-acquire-small','[ Captive Microsoft Windows Drivers Acquire Illustration ]',
70 "a_href_img"=>'captive-install-acquire');
76 <table border="1" align="center" style="text-align: center;" width="100%"><tr><th>Distribution</th>
77 <th>Installation Case #1<br />Filesystem and installer<br />(recommended)</th>
78 <th>Installation Case #2<br />Manual installation<br />(filesystem, expert user)</th>
79 <th>Installation Case #3<br />Command-line client<br />(no filesystem access)</th></tr>
82 1=>[qw(captive captive-lufs captive-install lufs gnome-vfs-httpcaptive ntfsprogs ntfsprogs-gnomevfs)],
83 2=>[qw(captive captive-lufs lufs)],
87 1=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt libgnomeui)],
88 2=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt)],
89 3=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)],
92 map(($_=>["0.9.7","0"]),qw(captive captive-lufs captive-install)),
93 "lufs"=>["0.9.6","1captive5"],
94 "gnome-vfs-httpcaptive"=>["2.3.8captive2","0"],
95 "ntfsprogs"=>["200309071734","1captive1"],
96 "ntfsprogs-gnomevfs"=>["1.0.1","0"],
98 my %has_rh8=(map(($_=>1),qw(
104 my %has_mdk91=(map(($_=>1),qw(
105 gnome-vfs-httpcaptive
111 my %has_devel=(map(($_=>1),qw(
114 my %pkg_nosrc=(map(($_=>1),qw(
120 my $a_href_arch=sub ($$%)
122 my($file_base,$text,%args)=@_;
124 $text=~s/[._]\D.*$// if $case!=1 && $text!~/^[.]/;
125 return a_href $file_base,$text,"size"=>($case==1),%args;
130 "name"=>"Red Hat 9<br />Shrike i386",
132 my($pkg,$version_base,$version_ext)=@_;
133 my $file="$pkg-$version_base-$version_ext.i386.rpm";
134 my $r=&$a_href_arch("dist/$file",$file);
135 (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
136 $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
141 "name"=>"Red Hat 8<br />Psyche i386",
143 my($pkg,$version_base,$version_ext)=@_;
144 my $file="$pkg-$version_base-$version_ext".(!$has_rh8{$pkg} ? "" : "rh8").".i386.rpm";
145 my $r=&$a_href_arch("dist/$file",$file);
146 (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
147 $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
148 if ($pkg eq "captive-install") {
149 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)) {
150 $r.="<br />".&$a_href_arch('ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/'.$_,$_)." of Red Hat 9";
157 "name"=>"Mandrake 9.1<br />Bamboo i586",
159 my($pkg,$version_base,$version_ext)=@_;
160 my $file="$pkg-$version_base-$version_ext".(!$has_mdk91{$pkg} ? ".i386.rpm" : "mdk91.i586.rpm");
161 my $r=&$a_href_arch("dist/$file",$file);
162 (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
163 $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
168 "name"=>"Debian GNU/Linux<br />'unstable' i386",
170 my($pkg,$version_base,$version_ext)=@_;
171 $version_ext=~s/^\d+//;
172 my $file="${pkg}_$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext)."_i386.deb";
173 my $r=&$a_href_arch("dist/$file",$file);
174 (my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/;
175 $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
180 "name"=>"Sources (.tar.gz)",
182 my($pkg,$version_base,$version_ext)=@_;
183 return () if $pkg_nosrc{$pkg};
184 $version_ext=~s/^\d+//;
185 my $file="$pkg-$version_base".($version_ext=~/^\d+$/ ? "" : $version_ext).".tar.gz";
190 "name"=>"Sources (.src.rpm)<br />(Red Hat 9 - Shrike)",
192 my($pkg,$version_base,$version_ext)=@_;
193 return () if $pkg_nosrc{$pkg};
194 my $file="$pkg-$version_base-$version_ext.src.rpm";
200 for my $dist (@dist) {
202 print "<td>".$dist->{"name"}."</td>";
203 for my $casel (1,2,3) {
206 print join("<br />",map({ my $pkg=$_;
207 my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}});
208 (!defined $text ? ($file) || () : (&$a_href_arch("dist/$file",$text)));
221 <h1>Installation Notes</h1>
223 <p>You should first run <b>captive-install-acquire</b> command to check your
224 available Microsoft Windows drivers versions. Now you can execute:</p>
228 # mkdir /mnt/dosc<br />
229 # mount -t captive-ntfs /dev/hda1 /mnt/dosc
236 <p>'<b>captive</b>' is the base package. It contains debugging '<b>captive-cmdline</b>' client.<br />
237 '<b>captive-lufs</b>' permits mounting NTFS as regular filesystem. It needs '<b>lufs</b>'.<br />
238 '<b>lufs</b>' is a daemon to enable userland process to provide filesystem functions.</p>
240 <p>Any errors from '<b>captive-lufs</b>' are written to '<b>/var/log/messages</b>'.</p>
242 <p>Needed drivers (at least ntoskrnl.exe+ntfs.sys) must be in '<b>/var/lib/captive</b>'.</p>
244 <p>'<b>captive</b>' package creates '<b>captive</b>' user and '<b>captive</b>' group on your system.</p>
247 <h2>Package Version Conflicts</h2>
251 <dt>@{[ a_href 'http://lufs.sourceforge.net/lufs/','lufs' ]}</dt>
252 <dd><p><b>'captive' version required</b>: Although you may already have the
253 original package installed you must replace it by the local 'captive'-marked
254 version containing some 'captive'-essential fixes and extensions.</p></dd>
256 <dt>@{[ a_href 'http://linux-ntfs.sourceforge.net/','ntfsprogs' ]}</dt>
257 <dd><p><b>Original version >=200309071734 sufficient</b>:
258 The package downloadable here has no code patches - you can freely use the
259 original version instead. Unfortunately the last public release is
260 <b>1.7.1</b> while this project requires at least
261 @{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/','snapshot' ]} version
262 <b>@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/ntfsprogs-200309071734.tar.bz2','200309071734' ]}</b>
263 which is not packaged (.rpm/.deb) yet. Packaged versions are provided here for
264 your convenience.</p></dd>
269 <h2>LUFS Kernel Driver Module</h2>
271 <p>@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} (Linux Userland File
272 System) needs Linux kernel module driver (<i>lufs.o</i>) compatible with your
273 running Linux kernel. Binary driver is supplied already precompiled for many
274 Linux kernel versions in the binary packages above (<b>.i386.rpm</b> and
275 <b>_i386.deb</b> archives).</p>
277 <p>If you cannot <b>mount</b>(8) your NTFS filesystem you should run <span
278 class="quote">/usr/share/lufs/prepmod</span> to see the reasons. It is always
279 recommended to upgrade to the latest stable kernel supplied by your GNU/Linux
280 distribution vendor. You may need to install package
281 <b>kernel-source</b> (Red Hat) or <b>kernel-headers</b> (Debian) matching your
282 Linux kernel version (<b>rpm -q kernel</b>) and re-run <span
283 class="quote">/usr/share/lufs/prepmod</span>.</p>
289 print rightimg <<"HERE",'reactos','ReactOS',"a_href"=>'http://www.reactos.com/';
290 <h2>The First Open Source MS-Windows Kernel API for Free OS</h2>
292 <p>Compatibility with existing binary Microsoft Windows file system drivers was
293 reached. Microsoft Windows kernel system components required by these drivers
294 were analyzed and successfuly emulated in the GNU/Linux operating system.
295 Project brings Microsoft Windows kernel emulation framework to support even
296 other types Microsoft Windows drivers in the future.
297 <span class="productname">@{[ a_href 'http://www.reactos.com/','ReactOS' ]}</span>
298 code base made a big asset for this functionality.</p>
302 my @lists=qw(captive-announce-list captive-list captive-devel-list);
306 <a name="lists"><h2>Mailing Lists</h2></a>
308 <form action="@{[ top_dir("/Mailman.pl") ]}" method="post">
309 <table border="1" class="mailman" style="border-collapse: collapse; border-style: solid; border-width: 1px;">
310 <tr>@{[ map("<th>$_</th>",@lists) ]}</tr>
311 <tr><td>New versions announcements<br />
312 (low traffic, recommended)</td><td>User support</td><td>Development</td></tr>
313 <tr>@{[ map({ "<td>".a_href(&{$W->{"mailman_url_sub"}}()."/listinfo/$_",'Mailman Infopage')."</td>"; } @lists) ]}</tr>
314 <tr>@{[ map({ "<td>".a_href(&{$W->{"pipermail_url_sub"}}()."/$_",'Archive')."</td>"; } @lists) ]}</tr>
316 map(('<td><input type="checkbox" name="list" value="'.$_.'"'
317 .($_ ne "captive-announce-list" ? '' : ' checked="checked"')
318 .' /> Subscribe?</td>'),@lists)
321 <table border="0" style="text-align: left;">
322 <tr><td>Email address: </td><td><input type="text" name="email" size="30" /></td></tr>
323 <tr><td>Your new Mailman password:</td><td><input type="password" name="pw" size="15" /></td></tr>
324 <tr><td>Reenter your password: </td><td><input type="password" name="pw-conf" size="15" /></td></tr>
326 <p><input type="submit" name="email-button" value="Subscribe me" /></p>
329 <input type="hidden" name="back" value="/project/captive/#lists" />
337 <li>@{[ a_href 'Preview.html.pl','<span style="font-size: larger;">Technology Preview</span>' ]}</li>
338 <li>@{[ a_href 'CVS.html.pl','CVS Repository' ]}</li>
339 <li>@{[ a_href 'doc/','Developer Documentation' ]}; highlights:<ul>
340 <li>@{[ a_href 'doc/About.html.pl#versions','Microsoft Windows Versions Compatibility' ]}</li>
341 <li>@{[ a_href 'doc/Architecture.html.pl#law','Laws and Licensing Conditions' ]}</li>
342 <li>@{[ a_href 'doc/Details.html.pl#sandbox','Sandboxing of W32 Filesystem' ]}</li>
343 <li>@{[ a_href 'doc/TODO.html.pl#todo_fsck','TODO: Fsck of NTFS' ]}</li>
344 <li>@{[ a_href 'doc/TODO.html.pl#todo_surprise','TODO: NTFS Support for Partition Surprise' ]}</li>
345 <li>@{[ a_href 'doc/Related.html.pl#LinuxNTFScompet','Related Projects - Linux NTFS' ]}</li>
346 <li>@{[ a_href 'doc/Related.html.pl#vmware','Related Projects - VMware Workstation' ]}</li>
347 <li>@{[ a_href 'doc/LinuxNTFS.html.pl',"Re: 7.7 Can't we write a wrapper for Windows' driver?" ]}</li>
349 <li>@{[ a_href 'http://cvs.jankratochvil.net/viewcvs/*checkout*/priv/captive/TODO?rev=HEAD','Known Bugs' ]}</li>
354 'captive'=>[7,'Microsoft Windows NT kernel emulation for NTFS disk access'],
355 'mount.captive'=>[8,'mount(8) interface for NTFS disk access'],
356 'lufs-captivefs'=>[7,'Linux Userland File System module for NTFS as filesystem'],
357 'captive-cmdline'=>[1,'Command-line client for captive(7) NTFS disk access'],
358 ### 'captive-sandbox-server'=>[1,'Security+safety wrapper for NTFS disk access'],
359 'captive-install-acquire'=>[1,'Find MS Windows XP driver files for NTFS'],
360 ### 'captive-install-fstab'=>[1,'Manage captive-ntfs /etc/fstab entries'],
364 my $file=shift @mans;
365 my($section,$name)=@{shift @mans};
366 push @r,"<li>".a_href("man/$file.pod.html",$file)."($section) - $name</li>\n";
372 <li>@{[ a_href 'Resources.html.pl','Related Pages' ]}</li>
373 <li>@{[ a_href 'Thanks.html.pl','Thanks' ]}</li>
379 Why did I install Microsoft Windows and wrote such disgusting piece of code?<br />
380 Expecting @{[ a_href $W->{"resume_url"},"yet another challenging task" ]}!