Wuse 'project::captive::ListItem';
+my $lang="";
+do { $lang="de" if $_ && /^de/i; } for ($ENV{"HTTP_ACCEPT_LANGUAGE"});
+
+
my $W=My::Project->init_project(
"__PACKAGE__"=>__PACKAGE__,
"ListItem"=>\@project::captive::ListItem::ListItem,
.re { font-style: italic; }
table.mailman > * /* FIXME: What is it? */ > tr > th,
table.mailman > * /* FIXME: What is it? */ > tr > td { padding: 1ex; text-align: center; }
+table.download td { padding: 8px; }
+table.navigate td { padding-bottom: 1ex; padding-left: 15px; padding-right: 15px; }
",
+ "project_text_after_title"=>""
+ .($lang ne "de" ? "" : "<h1>Captive:"
+ ." Das erste kostenlose Programm um auf ein NTFS Dateisystem unter GNU/Linux zu lesen und zu schreiben</h1>")
+ .'<table border="0" width="100%"><tr><td align="center">'
+ .'<table border="0" class="navigate"><tr>'
+ .'<td>• '.a_href('#download','Download').'</td>'
+ .'<td>• '.a_href('#news','NEWS').'</td>'
+ .'<td>• '.a_href('#testimonials','Testimonials').'</td>'
+ .'<td>• '.a_href('#notes','Installation Notes').'</td>'
+ .'<td>• '.a_href('#lists','Mailing Lists').'</td>'
+ .'<td>• '.a_href('#seealso','See Also').'</td>'
+ .'</tr></table>'
+ .'</td></tr></table>',
+ ($lang eq "" ? () : ("force_charset"=>"utf-8")),
);
-print <<"HERE";
-<h1>The First free Read/Write NTFS for Free Operating Systems</h1>
-<h1>The First Open Source MS-Windows Kernel API for Free OS</h1>
-HERE
-
-my @stuff=(
- "A lot of people claim to be Windows Programmers.\n"
- ." Now, I can join them at last - I have also written my own Microsoft Windows.",
- "Why do they need ".a_href('http://www.winsupersite.com/reviews/winserver2k3_gold2.asp','5,000 developers')
- ." to write Microsoft Windows when it can be just a One Man Show?",
- "My first Microsoft Windows program ever written? Some 'helloworld'?"
- ." <span class=\"quote\">hal.dll</span>.",
- );
-
-print rightimg((map("<p class=\"stuff\">$_</p>\n",($stuff[int rand @stuff])))[0],
- 'captive-install-acquire-small','[ Captive Microsoft Windows Drivers Acquire Illustration ]',
- "a_href_img"=>'captive-install-acquire');
-
-print <<"HERE";
-
-
+print <<"HERE" if !$WebConfig::WebConfig{"no_job"};
@{[ vskip "3ex" ]}
<table border="0" width="100%"><tr><td align="center">
- <table border="0" style="margin: 4ex; padding: 2ex; background: #552222;">
+ <table border="0" style="margin: 3ex; padding: 2ex; background: #bb8888;">
<tr><td style="font-size: larger;">
- Why did I install Microsoft Windows and write such a disgusting piece of code?<br />
- Expecting @{[ a_href $W->{"resume_url"},"yet another challenging task" ]}!
+ Looking for a challenging job: @{[ a_href $W->{"resume_url"},"My resume" ]}
</td></tr>
</table>
</table>
-
-@{[ vskip "3ex" ]}
-
-
-<table border="1" align="center" style="text-align: center;" width="100%"><tr><th>Distribution</th>
- <th>Installation Case #1<br />Filesystem and installer<br />(recommended)</th>
- <th>Installation Case #2<br />Manual installation<br />(filesystem, expert user)</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 readline libgnomeui)],
- 23=>[qw(glib2 gnome-vfs2 ORBit2 libxml2 openssl popt readline)],
- );
+
my %version=(
- map(($_=>["1.0","0"]),qw(captive captive-lufs captive-install)),
- "lufs"=>["0.9.6","1captive6"],
- "gnome-vfs-httpcaptive"=>["2.3.8captive2","0"],
- "ntfsprogs"=>["200309071734","1captive1"],
- "ntfsprogs-gnomevfs"=>["1.0.2","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 $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 @libxml2_rh8_pkgs=qw(libxml2-2.5.4-1.i386.rpm libxml2-python-2.5.4-1.i386.rpm libxml2-devel-2.5.4-1.i386.rpm);
-
-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_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- return $r;
- },
- },
- {
- "name"=>"Red Hat 8<br />Psyche i386<br />"
- ."(".a_href("#libxml2_rh8","libxml2 upgrade note").")",
- "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_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- if ($pkg eq "captive-install") {
- for (@libxml2_rh8_pkgs) {
- $r.="<br />".&$a_href_arch('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_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E-/${pkg}-devel-/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- return $r;
- },
- },
- {
- "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_arch("dist/$file",$file);
- (my $filedev=$file)=~s/^\Q$pkg\E_/${pkg}-dev_/;
- $r.="<br />".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg};
- return $r;
- },
- },
- {
- "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;
- },
- },
- {
- "name"=>"Sources (.src.rpm)<br />(Red Hat 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;
- },
- },
+ map(($_=>["1.1.4","0"]),qw(captive captive-lufs captive-install)),
+ "lufs"=>["0.9.7","1captive8"],
);
-for my $dist (@dist) {
- print "<tr>";
- print "<td>".$dist->{"name"}."</td>";
- 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_arch("dist/$file",$text)));
- } @{$pkg{$case}}));
- print "</td>";
- }
- print "</tr>\n";
- }
-print "<tr style=\"height: 2ex;\"></tr>\n";
-print "<tr>";
- print "<td>Package Requirements</td>";
- for my $case (1,23) {
- print "<td".($case==23 ? ' colspan="2"' : '').">";
- print join(", ",map("<span class=\"reqpkg\">$_</span>",@{$reqpkg{$case}}));
- print "</td>";
+print <<"HERE";
+<a name="download"><h2>Download</h2></a>
+
+<h3>Choose the one preferred installation format:</h3>
+
+<table border="0" align="center" width="100%"><tr><td align="center">
+<table border="1" frame="border" rules="rows" align="center" style="text-align: center;" class="download">
+ <tr>
+ <td>
+HERE
+ if ($lang eq "") {
+ print "RPM i386 binary<br />tested for distributions:";
+ }
+ if ($lang eq "de") {
+ print "RPM i386 Binärcode<br />getestet für den Betrieb unter:";
}
-print "</tr>\n";
print <<"HERE";
+ <table border="0"><tr><td align="left"><ul>
+ <li>Red Hat 9 Shrike</li>
+ <li>Red Hat 8 Psyche</li>
+ <li>Mandrake 9.1 Bamboo</li>
+ </ul></td></tr></table>
+ </td>
+ <td>@{[ a_href 'dist/captive-static-'.$version{"captive"}[0].'-'.$version{"captive"}[1].'.i386.rpm',
+ undef(),"size"=>1,"basename"=>1 ]}</td>
+ </tr>
+ <tr>
+ <td>
+HERE
+ if ($lang eq "") {
+ print ".tar.gz i386 binary<br />(for non-RPM distributions)";
+ }
+ if ($lang eq "de") {
+ print ".tar.gz i386 Binärcode<br />(für Linux Versionen ohne RPM z.B. Knoppix)";
+ }
+print <<"HERE";
+ </td>
+ <td>@{[ a_href 'dist/captive-static-'.$version{"captive"}[0].'.tar.gz',undef(),"size"=>1,"basename"=>1 ]}</td>
+ </tr>
+ <tr>
+ <td>Debian .deb binaries</td>
+ <td>@{[ a_href 'CVS.html.pl#debian','download link' ]}</td>
+ </tr>
+ <tr>
+ <td>Source archives</td>
+ <td>@{[ a_href 'CVS.html.pl#source','download link' ]}</td>
+ </tr>
</table>
+</td></tr></table>
-<blockquote>
- <p><a name="libxml2_rh8"><b><i>Red Hat 8 Psyche</i> upgrade of <i>libxml2</i> package:</b></a>
- Upgrade only the packages already installed on your system to prevent
- many dependency requirements - do not use "<code>rpm -U</code>",
- use "<code>rpm -F</code>" instead:</p>
- <blockquote><p class="quote">
- <code>rpm -F @{[ join(" ",@libxml2_rh8_pkgs) ]}</code>
- </p></blockquote>
-</blockquote>
+@{[ vskip "3ex" ]}
+
+<a name="news"><h2>NEWS</h2></a>
+
+<dl>
+ <dt>captive-1.1.4 (2003-12-13) [@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/captive/NEWS?rev=HEAD','archive' ]}]</dt>
+ <dd>
+ <ul>
+ <li>Unicode/UTF8 localized filenames conversion for GNU/Linux is now supported</li>
+ <li>Various GNU/Linux distributions compatibility fixes</li>
+ <li>Fixed omitted captive-install-acquire(1) --microsoft-com progress bar</li>
+ <li>Fixed captive-install-acquire(1) --scan-disks* memory leaks (Steve Wampler)</li>
+ <li>Fixed captive-install-acquire(1) --scan-disks* performance</li>
+ </ul>
+ </dd>
+ <dt>lufs-0.9.7captive8 (2003-12-06) [@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/lufs/NEWS.captive?rev=1.1.2.11','archive' ]}]</dt>
+</dl>
@{[ vskip "3ex" ]}
+<a name="testimonials"><h2>Captive NTFS Testimonials</h2></a>
+
+<ul>
+ <li>Derek J Witt
+ <p>I commend you for this project. I am currently using this on my XP NTFS
+ partitions and I am impressed that I can actually move, edit, and remove files
+ and directories with no apparent ill effects. This is very nice indeed.</p>
+ <p>I initially was skeptical because it uses wine and parts of ReactOS
+ (I have messed with this OS a few times), but you have proved me wrong. I have
+ noticed no lag on my system. I do notice the initial mounting process does
+ take slightly longer than the Linux-NTFS project. But, once I'm past that, it's
+ quite transparent.</p>
+ <p><span style="font-style: italic;">[ technical question cut ]</span></p>
+ </li>
+ <li>James Van't Slot
+ <p>Just wanted to drop you a note and say "Excellent work!"</p>
+ <p>I just installed captive and it worked as advertized right out of the
+ rpm. Thanks, I've been holding off recompiling my kernel until NTFS is
+ supported out of the box for Redhat. Now I don't have to bother.</p>
+ <p>Thanks again and keep up the great work.</p>
+ </li>
+</ul>
+
+@{[ vskip "3ex" ]}
-<h1>Installation Notes</h1>
+<a name="notes"><h1>
+HERE
+ if ($lang eq "") {
+ print "Installation Notes";
+ }
+ if ($lang eq "de") {
+ print "Installationsanleitung";
+ }
+print <<"HERE";
+</h1></a>
+HERE
+ if ($lang eq "") {
+ print <<"EOF";
<p>You should first run <b>captive-install-acquire</b> command to check your
available Microsoft Windows drivers versions. Now you can execute:</p>
+EOF
+ }
+ if ($lang eq "de") {
+ print <<"EOF";
+<p>Sie sollten als erstes den Befehl <b>captive-install-acquire</b>
+ausführen um ihre Windows Treiber Version zu überprüfen. Nun können sie folgenden Befehl ausführen:</p>
+EOF
+ }
+print <<"HERE";
<blockquote>
<p class="quote">
</blockquote>
+HERE
+ if ($lang eq "") {
+ print <<"EOF";
<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>
-
-<dt>@{[ a_href 'http://lufs.sourceforge.net/lufs/','lufs' ]}</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' ]}</dt>
-<dd><p><b>Original version >=200309071734 sufficient</b>:
-The package which is downloadable from 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' ]} version
-<b>@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/ntfsprogs-200309071734.tar.bz2','200309071734' ]}</b>
-which is not packaged (.rpm/.deb) yet. Packaged versions are provided here for
-your convenience.</p></dd>
-
-</dl>
+EOF
+ }
+ if ($lang eq "de") {
+ print <<"EOF";
+<h2>Übersicht</h2>
+
+<p>Jegliche Fehler des '<b>captive-lufs</b>' werden im Ordner '<b>/var/log/messages</b>' aufgelistet.</p>
+<p>Die Dateien ntoskrnl.exe und ntfs.sys müssen in den '<b>/var/lib/captive</b>'-Ordner kopiert werden.
+(Empfehlendswert über ein Wechseldatenträger [CD-ROM, Diskette].)</p>
+<p>Das '<b>captive</b>' Packet erstellt einen '<b>captive</b>' Benutzer und eine '<b>captive</b>' Gruppe auf Ihrem System.</p>
+<p align="right" style="font-size: smaller;">Übersetzung von Botond Beres.</p>
+EOF
+ }
+print <<"HERE";
<h2>LUFS Kernel Driver Module</h2>
<td>User support,<br />bug reports</td>
<td>Development</td>
</tr>
- <tr>@{[ map({ "<td>".a_href(&{$W->{"mailman_url_sub"}}()."/listinfo/$_",'Mailman Infopage')."</td>"; } @lists) ]}</tr>
- <tr>@{[ map({ "<td>".a_href(&{$W->{"pipermail_url_sub"}}()."/$_",'Archive')."</td>"; } @lists) ]}</tr>
+ <tr>@{[ map({ "<td>".a_href(&{$W->{"mailman_url_sub"}}()."listinfo/$_",'Mailman Infopage')."</td>"; } @lists) ]}</tr>
+ <tr>@{[ map({ "<td>".a_href(&{$W->{"pipermail_url_sub"}}()."$_",'Archive')."</td>"; } @lists) ]}</tr>
<tr>@{[
map(('<td><input type="checkbox" name="list" value="'.$_.'"'
.($_ ne "captive-announce-list" ? '' : ' checked="checked"')
@{[ vskip "3ex" ]}
-<h1>See Also</h1>
+<a name="seealso"><h1>See Also</h1></a>
<ul>
- <li>@{[ a_href 'Preview.html.pl','<span style="font-size: larger;">Technology Preview</span>' ]}</li>
- <li>@{[ a_href 'CVS.html.pl','CVS Repository' ]}</li>
+ <li>@{[ a_href 'Preview.html.pl','Technology Preview' ]}</li>
+ <li>@{[ a_href 'CVS.html.pl','Download Sources, CVS Repository' ]}</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/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*/captive/TODO?rev=HEAD','Known Bugs' ]}</li>
+ <li>@{[ a_href $W->{"project_viewcvs"}.'/*checkout*/captive/TODO?rev=HEAD','Known Bugs' ]}</li>
<li>Man Pages<ul>
@{[
do {