From: short <> Date: Mon, 20 Oct 2003 08:07:18 +0000 (+0000) Subject: modperl branch collapsed back to MAIN trunk, man! X-Git-Tag: bp_apache20~144 X-Git-Url: http://git.jankratochvil.net/?p=www.jankratochvil.net.git;a=commitdiff_plain;h=b4ddfba5b53a40e47285f8851e1ff7bb5419909b modperl branch collapsed back to MAIN trunk, man! --- diff --git a/.htaccess b/.htaccess index ad263f7..f93e228 100644 --- a/.htaccess +++ b/.htaccess @@ -1,4 +1,4 @@ -DirectoryIndex index.html +DirectoryIndex Index.html.pl AddType text/html .shtml AddHandler server-parsed .shtml @@ -20,9 +20,11 @@ AddHandler cgi-script .cgi IndexOptions NameWidth=* AddType application/x-rpm .rpm AddType application/x-nokia-9000-communicator-add-on-software .aos -php_flag short_open_tag off -php_flag magic_quotes_gpc off -php_flag magic_quotes_runtime off + + php_flag short_open_tag off + php_flag magic_quotes_gpc off + php_flag magic_quotes_runtime off + RewriteEngine on @@ -42,3 +44,17 @@ php_flag magic_quotes_runtime off RewriteEngine on RewriteRule ^(/home/short/www/www.jankratochvil.net/)?sw/*(.*)$ http://www.jankratochvil.net/project/ [R=301] [L] + + RewriteEngine on + RewriteRule ^(/home/short/www/www.jankratochvil.net/)?projects/*(.*)$ http://www.jankratochvil.net/project/$2 [R=301] [L] + + + + + RewriteEngine on + RewriteRule ^.*?/www[.]jankratochvil[.]net/(.*)$ http://localhost:7680/$1 [P] + + + + Options +ExecCGI + diff --git a/Contact.html.pl b/Contact.html.pl new file mode 100755 index 0000000..a6d6a22 --- /dev/null +++ b/Contact.html.pl @@ -0,0 +1,62 @@ +#! /usr/bin/perl +# +# $Id$ +# Contact page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 Contact; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>"Contact", + "section"=>"Contact", + "head_css"=>" +table.contact td { vertical-align: top; } +table.contact { border-collapse: collapse; border-style: solid; border-width: 1px; margin: 8px; } +table.contact A[href] { text-decoration: inherit; /* revoke underline */ } +", + ); +My::Web->heading(); + + +my $mailme=(map({ a_href("mailto:$_",$_); } 'web@jankratochvil.net'))[0]; + +print <<"HERE"; +
+ + + + +
Name Jan Kratochvil
e-mail $mailme
WWW @{[ a_href('http://www.jankratochvil.net/') ]}
OpenPGP @{[ a_href '/pgp-JanKratochvil.txt','' + .'pub 1024D/44FC7632 2002-10-07 Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
' + .'sub 2048g/D9F5F44B 2002-10-07 [expires 2004-10-06]' ]}
+ +HERE + + +My::Web->footer(); diff --git a/Index.html.pl b/Index.html.pl new file mode 100755 index 0000000..c860a8d --- /dev/null +++ b/Index.html.pl @@ -0,0 +1,84 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Homepage', + "no_job"=>1, + ); +My::Web->heading(); + + +print <<"HERE"; +

Jan Kratochvil Homepage

+
+ +

Why did you come here? Shhh...Don't say anything – I'll guess.

+ +

Some paper...no, not a paper...a file...maybe even a folder. It is +so close you can almost touch it, but yet it is unreachable. It lies +behind glass...perhaps you can see it...but you cannot touch it.

+ +

For years, you have dreamed of being able to write to your NTFS partition +from the safety of your favorite OS GNU/Linux. Well, the day of reckoning is at +hand! Those nights lying awake feeling foolish for having that extra VFAT +partition just to exchange files between GNU/Linux and MS-Windows are over!

+ + + +
+ A programmer for hire: + + I am looking for new challenges. + If you find the software here useful, please + @{[ a_href $W->{"resume_url"},'consider me' ]} + for your next software project and + @{[ a_href 'Contact.html.pl','get in touch' ]}. + +
+ + +

Introducing the Captive NTFS Filesystem for GNU/Linux

+ +

The @{[ a_href '/project/captive/','Captive NTFS' ]} filesystem is an +installable filesystem for GNU/Linux, which allows read/write access to NTFS +partitions created by Microsoft Windows NT, 200x or XP. You can download it +@{[ a_href '/project/captive/','here' ]}.

+ +HERE + +Wrequire "project::captive::ListItem"; +my %captive_ListItem=( @project::captive::ListItem::ListItem ); +print $captive_ListItem{"description"}; + + +My::Web->footer(); diff --git a/Mailman.pl b/Mailman.pl new file mode 100755 index 0000000..acd5c3d --- /dev/null +++ b/Mailman.pl @@ -0,0 +1,69 @@ +#! /usr/bin/perl +# +# $Id$ +# Mailman page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 Mailman; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +use URI::Escape; +require LWP::Simple; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>"Mailman Interface", + "no_job"=>1, + "args_check"=>{ + "email"=>'', + "pw"=>'', + "pw-conf"=>'', + "list"=>['^[-\w]+$'], + "back"=>'', + }, + ); +My::Web->heading(); + + +for my $list (@{$W->{"args"}{"list"}}) { + print "

List $list

\n"; + my $url_base=&{$W->{"mailman_url_sub"}}()."/subscribe/$list"; + my $t=LWP::Simple::get("$url_base?" + .join('&', + "list=$list", + map({ $_."=".uri_escape($W->{"args"}{$_}); } qw(email pw pw-conf)))); + $t=($t=~m#^.*]*>(.*?)#is)[0]; + $t=~s#(href=")(../[^"]*)(")#$1$url_base/$2$3#gi; + print $t; + print "
\n"; + } + +if ($W->{"args"}{"back"}) { + print '

'.a_href($W->{"args"}{"back"},'Back to the original page').'

'."\n"; + } + + +My::Web->footer(); diff --git a/Makefile-head.am b/Makefile-head.am index 4f4aa18..40656bc 100644 --- a/Makefile-head.am +++ b/Makefile-head.am @@ -28,12 +28,22 @@ 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 $< $@ + fig2dev -L ppm -S4 -m1.75 -b10 $< | pnmgamma 0.4 >$@ %.gif: %.ppm - ppmtogif -sort $< >$@ + ppmquant -quiet 256 $< | ppmtogif -quiet -sort >$@ + +# Prevent: make: Circular %.ppm <- %.gif dependency dropped. +#%.ppm: %.gif +# giftopnm $< >$@ + +%.png: %.ppm + pnmtopng $< >$@ + +%.ppm: %.png + pngtopnm $< >$@ + +%.png: %.dia $(top_srcdir)/dia-w.sh + $(top_srcdir)/dia-w.sh --nosplash --export $@ $< diff --git a/Makefile.am b/Makefile.am index 00a170c..cf27f8b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,7 +19,7 @@ include $(top_srcdir)/Makefile-head.am AUTOMAKE_OPTIONS=foreign -SUBDIRS=macros project +SUBDIRS=macros My resume etmms 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,11 @@ ChangeLog: endif EXTRA_DIST+= \ - index.html.pl - -noinst_DATA+= \ - index.html + Index.html.pl \ + WebConfig.pm \ + Redirect.pl \ + have_js.js.pl \ + robots.txt \ + SendMsg.pl \ + Contact.html.pl \ + Mailman.pl diff --git a/Redirect.pl b/Redirect.pl new file mode 100755 index 0000000..327ef14 --- /dev/null +++ b/Redirect.pl @@ -0,0 +1,41 @@ +#! /usr/bin/perl +# +# $Id$ +# URL redirector of &My::Web::a_href Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 Redirect; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +use Apache::Constants qw(MOVED); + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "header_only"=>1, + "args_check"=>{ + "location"=>'^\w+://', + }, + ); +$W->{"r"}->status(MOVED); +$W->{"r"}->header_out("Location"=>$W->{"args"}{"location"}); diff --git a/SendMsg.pl b/SendMsg.pl new file mode 100755 index 0000000..1f7b4fb --- /dev/null +++ b/SendMsg.pl @@ -0,0 +1,59 @@ +#! /usr/bin/perl +# +# $Id$ +# Quick Send Message +# Copyright (C) 2003 Jan Kratochvil +# +# 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 SendMsg; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +use Apache::Constants qw(HTTP_NO_CONTENT); +require Mail::Send; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "header_only"=>1, + "args_check"=>{ + "msgscript"=>'', # If 'text/javascript' is supported. + "msghtml"=>'', # No 'text/javascript' available. + }, + ); +my $msg=$W->{"args"}{"msghtml"} || $W->{"args"}{"msgscript"}; +if ($msg) { + + my $subject=$msg.' @'.$W->{"r"}->uri(); + print STDERR "Message: $subject\n"; + + my $send=Mail::Send->new(); + $send->to(split /,/,$W->{"SendMsg_to"}); + $send->subject($subject); + my $fh=$send->open(); + print $fh "$subject\n\n"; + for (sort keys %ENV) { + print $fh $_."=".$ENV{$_}."\n"; + } + $fh->close(); # send it here + + } +$W->{"r"}->status(HTTP_NO_CONTENT); diff --git a/WebConfig.pm b/WebConfig.pm index 1e5db17..d73ecab 100644 --- a/WebConfig.pm +++ b/WebConfig.pm @@ -20,8 +20,9 @@ package WebConfig; require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway -use vars qw($VERSION); +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; @@ -30,10 +31,94 @@ use vars qw(@ISA @EXPORT); @ISA=qw(Exporter); @EXPORT=qw(%WebConfig); +use My::Web; +require CGI; + + +my $resume_url="/resume/Resume-JanKratochvil.html.pl/Resume-JanKratochvil.html"; + our %WebConfig=( "admin_mail"=>'web-www.jankratochvil.net@jankratochvil.net', - "viewcvs"=>map({ (!$_ ? $_ : s#^/#http://cvs.jankratochvil.net/viewcvs/energie/#); } $ENV{"SCRIPT_NAME"}), + "SendMsg_to"=>'web-www.jankratochvil.net@jankratochvil.net', + "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", + "project_viewcvs"=>"http://cvs.jankratochvil.net/viewcvs/", + "pserver"=>':pserver:pserver:@cvs.jankratochvil.net', + "pserver_path"=>"/cvs", + "resume_url"=>$resume_url, + "web_hostname_sub"=>sub () { return "www.jankratochvil.net"; }, # $My::Web::W->{"r"}->hostname() + "mailman_url_sub" =>sub () { return "http://".&{$My::Web::W->{"web_hostname_sub"}}."/mailman/"; }, + "pipermail_url_sub"=>sub () { return "http://".&{$My::Web::W->{"web_hostname_sub"}}."/pipermail/"; }, + "heading"=>sub () { + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print '
'."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print '
'."\n"; + print My::Web::a_href('http://www.jankratochvil.net/','Jan Kratochvil', + "attr"=>'style="text-decoration: inherit; /* revoke underline */;"'); + print '
'; + print '
'."\n"; + print ''."\n"; + print ''."\n"; + my @sections=( + "/project/"=>"Projects", + "http://cvs.jankratochvil.net/"=>"CVS", +# "/News.html.pl"=>"News", + $resume_url=>"Resume", + "/Contact.html.pl"=>"Contact", + ); + while (@sections) { + my $section_path=shift @sections; + my $section_name=shift @sections; + print '\n"; + } + print ''."\n"; + print '
'; + print(($My::Web::W->{"section"} || "") eq $section_name ? "$section_name" + : My::Web::a_href($section_path,$section_name, + "attr"=>'style="text-decoration: inherit; /* revoke underline */;"')); + print "
'."\n"; + print '
'."\n"; + print My::Web::vskip("1ex") if !$My::Web::W->{"WebConfig::heading_novskip"}; + }, + "footing"=>sub () { +# print "

footing

\n"; + }, + "footing_delimit"=>sub () { + return if $My::Web::W->{"no_job"}; + print <<"HERE"; + + +
+ A programmer for hire: + + I am looking for new challenges. + If you find the software here useful, please + @{[ My::Web::a_href($My::Web::W->{"resume_url"},'consider me') ]} + for your next software project. + +
+HERE + }, ); 1; diff --git a/autogen.pl b/autogen.pl index 9355b62..5ccb185 100755 --- a/autogen.pl +++ b/autogen.pl @@ -19,8 +19,7 @@ require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway -use vars qw($VERSION); -$VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; }; +our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; }; use strict; use warnings; @@ -30,16 +29,48 @@ 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 ', "ARGV"=>\@ARGV, "clean"=>[qw( + .xvpics ./ChangeLog.bak ./INSTALL + ./dia-w.sh ./project/Nokia61/Nokia61 ./project/Nokia61/Nokia61_23.cache + ./project/line9k/line9k.png ./project/line9k/line9k.gif - *.html + ./project/captive/doc/fig/*.png + ./project/captive/doc/fig/*.gif + ./project/captive/doc/dia/*.dia~ + ./project/captive/doc/*.gif + ./project/captive/*.gif + ./project/PortDiag/*.gif + ./project/CasioA/*.gif + ./project/LaserGame/*.gif + ./project/Islet/*.gif + ./project/surprise/*.gif + ./My/*.gif + ./project/int13sniff/*.gif + ./resume/*.gif + ./etmms/*.dia~ + ./project/TraceFS/*.gif + ./project/pgsqlsubstr/*.gif + ./project/winvnc/*.gif + ./project/TraceFS/*.gif + ./project/pgsqlsubstr/*.gif + ./project/winvnc/*.gif + ./project/xbill/*.gif + ./project/etherealmmse/*.gif + ./project/etherealwsp/*.gif + ./project/gladewsrc/*.gif + ./project/muttsort/*.gif + ./project/redirector_ad/*.gif + ./project/FordFulk/*.gif + ./project/Heat/*.gif )], ); diff --git a/configure.in b/configure.ac similarity index 64% rename from configure.in rename to configure.ac index e10d54f..a4b1390 100644 --- a/configure.in +++ b/configure.ac @@ -20,13 +20,21 @@ 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 +./resume/Makefile +./etmms/Makefile ./project/Makefile ./project/step/Makefile -./project/icp/Makefile +./project/Islet/Makefile ./project/FordFulk/Makefile ./project/Heat/Makefile ./project/kix/Makefile @@ -60,8 +68,41 @@ Makefile ./project/cvsutil/Makefile ./project/cvsbranchdiff/Makefile ./project/ppp9k/Makefile -./project/LaceMail/Makefile +./project/PerlMail/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 +./project/PortDiag/Makefile +./project/CasioA/Makefile +./project/LaserGame/Makefile +./project/ShortRel/Makefile +./project/TraceFS/Makefile +./project/AutoGen/Makefile +./project/gsmperl/Makefile +./project/332/Makefile +./project/lynxilla/Makefile +./project/wayback/Makefile +./project/kewensis/Makefile +./project/QueryDev/Makefile +./project/SClock/Makefile +./project/ResRAM/Makefile +./project/ssht/Makefile +./project/postget/Makefile +./project/middleman/Makefile +./project/phphash/Makefile +./project/energie/Makefile +./project/MyWeb/Makefile +./project/pgsqlsubstr/Makefile +./project/int13sniff/Makefile +./project/libtool/Makefile +./project/muttsort/Makefile +./project/gladewsrc/Makefile +./project/etherealmmse/Makefile +./project/etherealwsp/Makefile +./project/libxml2reader/Makefile ]) echo done. diff --git a/dia-w.sh.in b/dia-w.sh.in new file mode 100755 index 0000000..899f18c --- /dev/null +++ b/dia-w.sh.in @@ -0,0 +1,93 @@ +#! /bin/bash +# $Id$ +# Try to run "dia" with '-e' option, Xvnc wrapping if needed. +# Copyright (C) 2000,2003 Jan Kratochvil +# +# 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/etmms/Index.html.pl b/etmms/Index.html.pl new file mode 100755 index 0000000..3481e7d --- /dev/null +++ b/etmms/Index.html.pl @@ -0,0 +1,167 @@ +#! /usr/bin/perl +# +# $Id$ +# Contact page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 Contact; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +Wrequire 'My::Project'; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>"MMS Center Debugging", + ); +My::Web->heading(); + + +sub project ($) +{ +my($name)=@_; + + my %name_item=( My::Project->one_item_list_read($name) ); + return a_href "/project/$name/",$name_item{"name"}.': '.$name_item{"summary"}; +}; + + +print <<"HERE"; +

MMS Center Debugging

+ +

Here you can find description of very simple but technically interesting hack. +You can provide your own MMS Center (MMS=Multimedia Messaging Service) in GSM +network instead of the operator's one.

+ +

There is only a limitation of a bearer data service - MMS is usually run +over GPRS (General Packet Radio Service) channels while you cannot behave as +GPRS callee in GSM network. Fortunately MMS can be run also over CSD (Circuit +Switched Data - up to 14400bps) or HSCSD (High Speed CSD - up to 57600bps) +services. GPRS is usually known as always-online while CSD/HSCSD you must dial +some destination number. GPRS vs. CSD have usually also different GSM operator +tariffication but it should not matter much for the short data messages.

+ +

I did not provite a completely mine MMS center. I was involved in pilot MMS +Center project where some compatibility issues of MMS message format between +MMS phone and MMS center had to be solved. As I did not have technical access +to the MMS center itself I setup two mobile phones +(@{[ a_href 'http://www.nokia.com/','Nokia' ]} @{[ a_href 'http://www.communicator.org/','Communicator' ]}s) +to setup sniffing tunnel. One of the phones were setup in answer mode to +simulate the MMS center while the other one called to the real official (and +buggy) MMS center accessible as regular service provided by the GSM operator.

+ +@{[ centerimg 'gate','MMS Sniffing Diagram' ]} +@{[ vskip "2ex" ]} +@{[ centerimg 'triple.jpeg','MMS Sniffing Mobiles Setup' ]} + +
+
Answer side pppd(8) command
+
+pppd /dev/ttyS5 19200 modem lock crtscts connect "chat -vf /etc/ppp/answer-T68i.chat" @{[ "\\" ]}
+		noauth debug nodefaultroute 192.168.192.67:192.168.192.68 default-asyncmap
+	
+
Answer side /etc/ppp/answer-T68i.chat file
+
+TIMEOUT 3 "" "ATZ" "OK-ATZ-OK" "" ABORT "BUSY" ABORT "NO CARRIER"
+ABORT "NO DIAL TONE" ABORT "ERROR" ABORT "VOICE" REPORT CONNECT ""
+ATL2 OK-ATL2-OK
+AT+CBST=7,0,1;+DS=3,0,1300,32;+CR=1;+DR=1 OK
+""
+TIMEOUT 300
+@{[ 'RING \d\d\d\d\d\dATA' ]}
+CONNECT "" ^M ""
+	
+ +
Dial side pppd(8) command
+
+pppd /dev/ttyS4 19200 modem lock nocrtscts xonxoff connect "chat -vf /etc/ppp/mmsgate.chat" @{[ "\\" ]}
+		noauth debug nodefaultroute
+	
+
Answer side /etc/ppp/mmsgate.chat file
+
+TIMEOUT 3 "" "ATZ" "OK-ATZ-OK" "" ABORT "BUSY" ABORT "NO CARRIER"
+ABORT "NO DIAL TONE" ABORT "ERROR" ABORT "VOICE" REPORT CONNECT ""
+#AT+CBST=7,0,1;+DS=3,0,1300,32;+CR=1;+DR=1 OK
+ATD+420602900666
+TIMEOUT 90 CONNECT "" ^M ""
+	
+
+ +

Some decoded data illustration

+
+MMS Message Encapsulation
+	Message-Type: m-retrieve-conf (0x84)
+	Transaction-ID: PVve-6DaCUEAAC5qAAAAAQAAAEoAAAAA
+	MMS-Version: 1.0
+	Date: Aug 15, 2002 19:25:20.000000000
+	From: +4206CENSORED/TYPE=PLMN
+	Subject: testidD
+	To: +4206CENSORED/TYPE=PLMN
+	Message-Class: Informational (0x82)
+	Delivery-Report: No (0x81)
+	Content Type: application/vnd.wap.multipart.related (0x33)
+		Type: application/smil
+		Start: AAAA
+	Multipart body
+		Part: 1
+			Content Type: application/smil
+				Charset: us-ascii (0x0003)
+			Headers
+				Content-Location: AAAA
+			Data in this part
+		Part: 2
+			Content Type: image/gif (0x1d)
+			Headers
+				Content-Location: postcard.gif
+			Data in this part
+
+ +

@{[ a_href 'http://www.sonyericsson.com/T68i/','Sony Ericsson T68i' ]} +MMS definition file URL decoded out of the data stream above: +@{[ a_href 'http://wap.sonyericssonmobile.com/UAprof/T68R201.xml' ]}

+ + +

Completed Subtasks

+
    +
  • @{[ project 'etherealmmse' ]}
  • +
  • @{[ project 'etherealwsp' ]}
  • +
+ + + + + + + + + + + + + +HERE + + +My::Web->footer(); diff --git a/etmms/Makefile.am b/etmms/Makefile.am new file mode 100644 index 0000000..920c2bf --- /dev/null +++ b/etmms/Makefile.am @@ -0,0 +1,21 @@ +# $Id$ +# automake source for the Makefile of etmms/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= diff --git a/etmms/gate.dia b/etmms/gate.dia new file mode 100644 index 0000000..d4c3b12 --- /dev/null +++ b/etmms/gate.dia @@ -0,0 +1,948 @@ + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GNU/Linux PC# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #pppd(8)# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #pppd(8)# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #serial# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #serial# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Sony Ericsson T68i +MMS Phone +CSD MMS Dial Mode# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Simulated MMS Center# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Real GSM Operator +MMS Center# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Ethereal +sniff# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Nokia Communicator +Modem +ATA (answer mode)# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Nokia Communicator +Modem +ATD (dial mode)# + + + + + + + + + + + + + + + + + + + + + + diff --git a/etmms/gate.gif b/etmms/gate.gif new file mode 100644 index 0000000..33e18af Binary files /dev/null and b/etmms/gate.gif differ diff --git a/etmms/gate.png b/etmms/gate.png new file mode 100644 index 0000000..129f7ce Binary files /dev/null and b/etmms/gate.png differ diff --git a/etmms/triple.jpeg b/etmms/triple.jpeg new file mode 100644 index 0000000..6081f01 Binary files /dev/null and b/etmms/triple.jpeg differ diff --git a/have_js.js.pl b/have_js.js.pl new file mode 100755 index 0000000..efc19d4 --- /dev/null +++ b/have_js.js.pl @@ -0,0 +1,64 @@ +#! /usr/bin/perl +# +# $Id$ +# JavaScript detection scriptlet Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 have_js; +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/,)[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/pgp-JanKratochvil.txt b/pgp-JanKratochvil.txt new file mode 100644 index 0000000..58c35bd --- /dev/null +++ b/pgp-JanKratochvil.txt @@ -0,0 +1,31 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.1 (GNU/Linux) + +mQGiBD2h6DgRBADenq5efAujJXIdXgnaKsdjNs7Ld1O5YoCE9lTzGHKw0o8uaaal +/IuNi2qSG8zRnXMEEvQpPbnLiq3Na/oUMSBXJuSM68dNeTyGKEsBs/zmCFqtv+oD +T4R6Ux3q7zDGSkcpa5mbUuW22HNLbhpSv2LWUg/DMRjMeFL3rKvqIcv3zwCgrthY +rrGehDsrcD3Dsp+OGoj3EQkD/i3IEFozsCXpdnY96S/JVyTN6mhxW3NzhXzHgG+y +oX82PBWPt4JOEVTAlpzHpUK10Agvei8d3YojtnEGy4TgiWZB5gQMpYsNINAP7UW8 +0tvblUX2dZEDNimJ68kTOFOFfu2hIDBSKplGSCqYmNJIB4Jojz+6sgRg6eB6o79N +uaxLA/4tEQUBkpl469AORAodkzNlVTxpwYTpa4YzoeAwa1h5ZKAuWbaKujSfdGpF +kKOvKsp/i1C1eIKvH1iiGGizhlMGRjHOrPDBHGbQnB/ACDJJ36GxwgPDZS+sLC/T +8sK4NI6L0z2qgy7/ypqF6fEpoL64vFvvJKnKv8V/wQsbqr83uLQvSmFuIEtyYXRv +Y2h2aWwgPHBncC00NEZDNzYzMkBqYW5rcmF0b2NodmlsLm5ldD6IXQQTEQIAHQUC +PaHpWgUJA8JnAAULBwoDBAMVAwIDFgIBAheAAAoJEMw+/LlE/HYysgsAoJCW/9BV +VqfrfmoD+YktgNbgZjvsAJ9G6JoUgZyM8QHLtcUZOtsNKNTa5IhGBBARAgAGBQI9 +pDS7AAoJECCEtPrx50OBNRwAn0C3TyT4BBqX6yteUDczKMuD0CK1AJ44lw8ht+YZ +6wPE82sPpwvIrJImb7kCDQQ9oeiPEAgAsMFBmBCGfPrA4HI5R45QkNYvI6ldjsDV +8jbQ9A37VmnvApsox421pbcerGYlJMZx6BgMCILoJgiih84VQMwARWRdraeTu2Kt +lrnJQmxxRf9eq4fiDFEwMjKvT7JPtEpC4jR6UBQ3BZAfo/buMmePlKisaMXw2tqL +BwaIgwzDm1qm+kjwdvfOEjbNlG0VGDjuT2lDs0LfiHdIE/S0c5tys94ecsJu1sfq +19Lv1BYDEs/oSLqCW1rxeUYYsgSQ8cwbK5JYYgLFPNx+oIB/vDH1kn6srdcOunMe +zprQuLnPWCS91KZ09aaSnuYsf/72JYHaIxflygtCExMu5i8zax2eFwADBwf/RXLm +50lIQ3JLUvL3q3KTQkX70/1Xb1pJ6ypT0TUNwH7BChpZWpBBI9VYiLoG5sQ235KK +JcO1Fq1zTW2Mb1TlXcIZ52raPsZvVBN9cY+vot/Zug3FNZq7Y5GUQt6DCOB2ZwRE +jQOc+T78w71kgnZ/xBDNal8GhLfjo/gRVcO7XpuSEy0/Jh9m7Bkj6BCwFNqkx85o +RAIzLeOQVjiSBFOjwYvE5NULbtY1CYU7SHpiSSAnDTL1k8u2zxi8XcNIO7h6e3jE +WylQbT9Bxp/D5ocD1vSyViBfW6DRQ5eUu3taqPfI9Xgxg/F6pQBQQ8yKkV6eFhPF +73xpOc2gNJswlsCx44hMBBgRAgAMBQI9oeiPBQkDwmcAAAoJEMw+/LlE/HYyoU0A +oJzhwVIejRBppzWYb1dwDQBScO0AAJ4iHaUVFxv8w7Hq94x8w+AJupB1Zw== +=xebT +-----END PGP PUBLIC KEY BLOCK----- diff --git a/project/.htaccess b/project/.htaccess deleted file mode 100644 index 311399d..0000000 --- a/project/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ -Options +ExecCGI -DirectoryIndex list.cgi.pl index.html diff --git a/project/332/332-back-board-small.jpeg b/project/332/332-back-board-small.jpeg new file mode 100644 index 0000000..1932bc6 Binary files /dev/null and b/project/332/332-back-board-small.jpeg differ diff --git a/project/332/332-back-board.jpeg b/project/332/332-back-board.jpeg new file mode 100644 index 0000000..d5e85f2 Binary files /dev/null and b/project/332/332-back-board.jpeg differ diff --git a/project/332/332-front-CPU.jpeg b/project/332/332-front-CPU.jpeg new file mode 100644 index 0000000..27d75c7 Binary files /dev/null and b/project/332/332-front-CPU.jpeg differ diff --git a/project/332/332-front-board-small.jpeg b/project/332/332-front-board-small.jpeg new file mode 100644 index 0000000..04df758 Binary files /dev/null and b/project/332/332-front-board-small.jpeg differ diff --git a/project/332/332-front-board.jpeg b/project/332/332-front-board.jpeg new file mode 100644 index 0000000..140c7e7 Binary files /dev/null and b/project/332/332-front-board.jpeg differ diff --git a/project/332/332-front-icon.jpeg b/project/332/332-front-icon.jpeg new file mode 100644 index 0000000..9bb72b4 Binary files /dev/null and b/project/332/332-front-icon.jpeg differ diff --git a/project/332/332-noexec.tar.gz b/project/332/332-noexec.tar.gz new file mode 100644 index 0000000..eb18e92 Binary files /dev/null and b/project/332/332-noexec.tar.gz differ diff --git a/project/332/Index.html.pl b/project/332/Index.html.pl new file mode 100755 index 0000000..63000a9 --- /dev/null +++ b/project/332/Index.html.pl @@ -0,0 +1,72 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::332' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::332::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::332::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::332::ListItem::ListItem, + ); + + +print <<"HERE"; +

Project was destined as the kernel for GPS-tracking device. +Used Motorola 68332 computer features 1.25MB of RAM and 512KB of FlashEPROM. +Included build script with custom GCC target for AmigaOS.

+

Fortunately Pavel Troller already disassembled the kernel core in the past +and this project could be based on his reverse engineered sources.

+

@{[ a_href "/project/332/332-noexec.tar.gz",'Downloadable sources' ]} archive unfortunately +legally cannot contain the real code of the ported AmigaOS kernel core as +@{[ a_href 'http://amigaworld.net/modules/newbb/viewtopic.php?forum=2&topic_id=224','it is copyrighted.' ]}. +You should send me a mail with md5sum(1)s of AmigaOS kernel including +statement you are the legal owner to let me send you the missing patched +AmigaOS kernel core disassembled sources.

+

The provided kernel lists the following features:

+
    +
  • memory management
  • +
  • system objects lists operations
  • +
  • multitasking
  • +
  • intertask messaging
  • +
  • device drivers communication
  • +
  • locking/synchronization
  • +
  • system libraries management
  • +
  • server side for remote serial port debuggin
  • +
+ +@{[ centerimg + ["332-front-board-small.jpeg","Custom Board (front)","a_href_img"=>"332-front-board.jpeg"], + ["332-back-board-small.jpeg" ,"Custom Board (back)" ,"a_href_img"=>"332-back-board.jpeg"] + ]} +@{[ centerimg "332-front-CPU.jpeg" ,"68332 CPU Board Detail" ]} +HERE + + +My::Web->footer(); diff --git a/index.html.pl b/project/332/ListItem.pm similarity index 52% rename from index.html.pl rename to project/332/ListItem.pm index 2ab5986..264204f 100755 --- a/index.html.pl +++ b/project/332/ListItem.pm @@ -1,7 +1,7 @@ #! /usr/bin/perl # # $Id$ -# Main page Perl template. +# Definition of 'My::Project::332' for list.cgi.pl # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,41 +18,32 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +package project::332::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; use My::Web; -use Carp qw(cluck confess); -My::Web->init( - "title"=>'Homepage of Jan Kratochvil alias Lace', - ); -My::Web->heading(); - -print <<'HERE'; -

Jan Kratochvil

-
- -

Software projects

-
-

List of my software projects

-
- -

ViewCVS of my CVS repository

-
-

My public CVSROOT; Accessible storage of all of my projects, config files, webs and more.

-
- -

Contact

-
-

e-mail: web-www.jankratochvil.net@jankratochvil.net

-
- +our @ListItem=( + "name"=>"332", + "platform"=>"unixdevel", + "priority"=>630, + "icon"=>"332-front-icon.jpeg", + # FIXME: Relative 'download': + "download-sources without patched core"=>"/project/332/332-noexec.tar.gz", + "summary"=>"AmigaOS kernel port to embedded Motorola 68332", + "license"=>"PD", + "maintenance"=>"ready", + "sponsorship"=>@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}, + "language"=>"680x0 asm, C", + "description"=><<"HERE", +

Core of the AmigaOS kernel (exec.library) ported to embedded Motorola 68332 computer. +Reusable as OS for your embedded device suitable for developers with AmigaOS experience.

HERE + ); -My::Web->footer(); +1; diff --git a/project/332/Makefile.am b/project/332/Makefile.am new file mode 100644 index 0000000..5a40374 --- /dev/null +++ b/project/332/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/332/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/AutoGen/Index.html.pl b/project/AutoGen/Index.html.pl new file mode 100755 index 0000000..ffdf9b6 --- /dev/null +++ b/project/AutoGen/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::AutoGen' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::AutoGen::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::AutoGen::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::AutoGen::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/AutoGen/ListItem.pm b/project/AutoGen/ListItem.pm new file mode 100755 index 0000000..28f0f75 --- /dev/null +++ b/project/AutoGen/ListItem.pm @@ -0,0 +1,69 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::AutoGen' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::AutoGen::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; + +use My::Web; + + +our @ListItem=( + "name"=>"AutoGen", + "platform"=>"unixdevel", + "priority"=>540, + "cvs"=>"macros", + "link-Documentation"=>'/project/Pod2Html.html.pl?cvs=macros/AutoGen.pm', + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "link-Source file"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/macros/AutoGen.pm?rev=HEAD", + "summary"=>"autogen.sh while supporting CVS/.rpm/.deb", + "license"=>"GPL", + "maintenance"=>"active", + "language"=>"Perl", + "description"=><<"HERE", +

Projects usually have their autogen.sh script files to run +autoconf(1), automake(1) and similiar tools. +This project has some additional features:

+
    +
  • + Clean the checkout directory without Makefiles for + 'make clean'. +
  • +
  • + Maintain .cvsignore files containing the files being + cleaned. +
  • +
  • + Single-command package building of + .rpm/.deb out of CVS checkout. +
  • +
  • + Support: gettext, glib-gettext, + libtool, autoconf, + automake. +
  • +
+HERE + ); + +1; diff --git a/project/AutoGen/Makefile.am b/project/AutoGen/Makefile.am new file mode 100644 index 0000000..a5a52c7 --- /dev/null +++ b/project/AutoGen/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/AutoGen/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/CasioA/Casio-A-icon.png b/project/CasioA/Casio-A-icon.png new file mode 100644 index 0000000..b3de039 Binary files /dev/null and b/project/CasioA/Casio-A-icon.png differ diff --git a/project/CasioA/Casio-A.asm b/project/CasioA/Casio-A.asm new file mode 100644 index 0000000..e18d5ff --- /dev/null +++ b/project/CasioA/Casio-A.asm @@ -0,0 +1,1930 @@ +;DEBUG equ 1 + +;TODO: +; TRANSMIT/K/M & AppMessage w/arg>1 + + include "ssmac.h" + +BaudRateBase equ 1200 +Def_BaudRateN equ 3 +Def_BaudRate equ BaudRateBase<,a0 + get.l Arg_Device,d0 + beq.s NoDevice + move.l d0,a0 + move.l (a0),a0 +NoDevice put.l a0,Arg_Device + moveq #0,d1 + get.l Arg_DevUnit,d0 + beq.s NoDevUnit + move.l d0,a0 + move.l (a0),d1 +NoDevUnit put.l d1,Arg_DevUnit + move.l #Def_BaudRate,d1 + get.l Arg_Baud,d0 + beq.s NoBaud + move.l d0,a0 + move.l (a0),d1 +NoBaud put.l d1,Arg_Baud + + lea SerErrTab(pc),a0 + move.l a0,a2 + geta SerErrMem,a1 +LoopSerErr move.b -(a0),1(a1) + beq.s DoneSerErr + moveq #0,d0 + move.b -(a0),d0 + move.b d0,3(a1) + addq #4,a1 + subq.b #1,d0 +LoopSerErr2 move.l a2,(a1)+ +SkipSerErr tst.b (a2)+ + bne.s SkipSerErr + dbra d0,LoopSerErr2 + bra.s LoopSerErr + +DoneSerErr get.l Arg_To,d0 + vor.l Arg_From,d0 + snev GotCmdArgs + tstv.l Arg_MUI + bne.s DoMUI + tst.l d0 + bne ProcessCmdArgs +DoMUI dtl ,a0 + moveq #MUIMaster_MVer,d0 + call TrackLibrary + put.l d0,muimasterbase + move.l d0,a6 + bset.b #svfb_errorreq,sv_flags+3(v) + + dtl <_Transmit>,a2 + dt <_Receive> + dt <_Settings> + dt <_Quit> + dt <_Abort> + dt <_Save> + dt <_Use> + dt <_Restore> + dt <_Close> + geta Buttons,a3 + moveq #8,d2 +LoopMakeObj push a2 + move.l sp,a0 + moveq #MUIO_Button,d0 + call muimaster,MUI_MakeObjectA + addq #4,sp + move.l d0,(a3)+ + bne.s GenTButton +MUIDosError dtl ,a0 +SSDosError jump ss,DosError + +GenTButton tst.b (a2)+ + bne.s GenTButton + move.l d0,a0 + move.w #MUIA_CycleChain-MUITags,d0 + moveq #TRUE,d1 + bsr SetAttr + dbra d2,LoopMakeObj + + move.w #MUIA_InputMode-MUITags,d0 + moveq #MUIV_InputMode_Toggle,d1 + get.l SettingsButton,a0 + bsr SetAttr + move.w #MUIA_Weight-MUITags,d0 + moveq #0,d1 + get.l AbortButton,a0 + bsr SetAttr + + move.w #MUIA_Popstring_Toggle-MUITags,d0 + moveq #1,d1 + get.l TransmitButton,a0 + bsr SetAttr + move.w #MUIA_Popstring_Toggle-MUITags,d0 + moveq #1,d1 + get.l ReceiveButton,a0 + bsr SetAttr + + moveq #(6*32*16/8)>>2,d0 + rol.l #2,d0 + moveq #MEMF_PUBLIC!MEMF_CHIP,d1 + call ss,TrackAllocMem + move.l d0,a6 + + lea CasioIcons(pc),a2 + lea PartTab(pc),a4 + geta Bitmaps,a3 + geta StatBar0,a1 + moveq #5,d7 +SkipZeroPart tst.b (a4)+ + beq.s SkipZeroPart + lea -1(a4),a0 + put.l a0,StatBarText + put.l a3,StatBarBMap + move.l #$00040010,(a3)+ ;bm_BytesPerRow+bm_Rows + move.l #$00010000,(a3)+ ;bm_Flags+bm_Depth+bm_Pad + move.l a6,(a3)+ ;bm_Planes[0] + moveq #15,d0 +GenIconLine move.w (a2)+,d1 + moveq #15,d2 +GenIconPix move.w d1,d4 + roxr.w #1,d4 + roxr.l #1,d3 + roxr.w #1,d1 + roxr.l #1,d3 + dbra d2,GenIconPix + move.l d3,(a6)+ + dbra d0,GenIconLine + mpush a1-a3/a6 + lea MUI_StatBar(pc),a3 + bsr GenerateMUI + mpop a1-a3/a6 + move.l d0,(a1)+ ;StatBar + get.l StatBarNumber,(a1)+ ;StatBarNum +SkipPartPart tst.b (a4)+ + bne.s SkipPartPart + dbra d7,SkipZeroPart + + move.l #gnm_SIZEOF*PackMenuNum+1,d0 + move.l d0,d2 + call ss,IPAlloc + clr.l -(sp) + push d0 + move.l d0,a3 + add.l d0,d2 + subq.l #1,d2 + lea PackMenus(pc),a2 + geta MenusHots,a4 + moveq #FirstMenuCode,d3 +NextMenuField addq.b #NM_ITEM,(a3) +NextMenuTag move.b (a2)+,d0 + beq.s GotMenuTitle + bpl.s GotMenuHot + addq.b #1,d0 + bne.s NotMenuSepar + subq.l #-NM_BARLABEL,gnm_Label(a3) + bra.s NextMenuRecord + +NotMenuSepar move.w #CHECKIT!MENUTOGGLE,gnm_Flags(a3) + bra.s NextMenuTag + +GotMenuTitle subq.b #NM_ITEM-NM_TITLE,(a3) +GotMenuHot subq.b #2,d0 + bmi.s NotMenuHot + move.b d0,(a4) + move.l a4,gnm_CommKey(a3) + addq #2,a4 +NotMenuHot move.l a2,gnm_Label(a3) +ToEndLabel tst.b (a2)+ + bne.s ToEndLabel + move.l d3,gnm_UserData(a3) + addq.l #1,d3 +NextMenuRecord lea gnm_SIZEOF(a3),a3 + cmp.l a3,d2 + bne.s NextMenuField + move.l sp,a0 + moveq #MUIO_MenustripNM,d0 + call muimaster,MUI_MakeObjectA + put.l d0,MenuStrip + beq MUIDosError + addq #8,sp + pea (FirstMenuCode+1).w + push #MUIM_FindUData + move.l d0,a2 + bsr DoMethod + put.l d0,TransmitMItem + addq.l #1,4(sp) ;2 + bsr DoMethod + put.l d0,ReceiveMItem + beq MUIDosError + addq.l #6,4(sp) ;8 + bsr DoMethod + put.l d0,ConfigMItem + beq MUIDosError + addq #8,sp + + get.l sv_thistask,a0 + move.l v,TC_Userdata(a0) + sub.l a0,a0 + gett STR_Slider,a1 + sub.l a2,a2 + moveq #6,d0 + lea BaudRateFunc(pc),a3 + call muimaster,MUI_CreateCustomClass + put.l d0,BaudRateClass + beq MUIDosError + move.l d0,a0 + move.l mcc_Class(a0),a0 + clr.l -(sp) + push sp ;TRUE + push #MUIA_CycleChain + pea Def_BaudRateN.w + push #MUIA_Numeric_Max + pea Def_BaudRateN.w + push #MUIA_Numeric_Value + pea 3.w + push #MUIA_ExportID + sub.l a1,a1 + move.l sp,a2 + call intuition,NewObjectA + lea 4*8+4(sp),sp + put.l d0,BaudRateSlider + beq MUIDosError + + lea MUI_Applic(pc),a3 + bsr GenerateMUI + + lea MUI_Notific(pc),a3 + bsr SetNotify + + push TriggerValPtr(pc) ;28 + vpush MainWin ;24 + push #MUIM_Popstring_Open ;20 + pea 1.w ;16 + vpush TransmitAsl ;12 + pea (FirstMenuCode+1).w ;8 + push #MUIA_Application_MenuAction ;4 + push #MUIM_Notify ;0 + bsr DoMethodAppl + addq.l #1,8(sp) ;2 + get.l ReceiveAsl,12(sp) + bsr DoMethod + addq.l #2,8(sp) ;4 + get.l ApplObj,12(sp) + addq.l #1,16(sp) ;->2 + move.w #MUIM_Application_AboutMUI-MUITags,22(sp) + bsr DoMethod + addq.l #5,8(sp) ;9 + moveq #MUIV_Application_Load_ENVARC,d0 + move.l d0,24(sp) + move.w #MUIM_Application_Load-MUITags,22(sp) + bsr DoMethod + addq.l #1,8(sp) ;10 + move.w #MUIM_Application_OpenConfigWindow-MUITags,22(sp) + clr.l 24(sp) + bsr DoMethod + move.w #MUIA_Window_Open-MUITags,6(sp) + move.l EveryTimePtr(pc),8(sp) + move.w #MUIM_CallHook-MUITags,22(sp) + geta WOpenHook,a0 + lea WinOpenHook(pc),a1 + move.l a1,h_Entry(a0) + move.l v,h_Data(a0) + move.l a0,24(sp) + get.l MainWin,a2 + bsr DoMethod + move.w #MUIA_AppMessage-MUITags,6(sp) + move.l a2,12(sp) + addq.l #1,16(sp) ;->3 + geta AppObjHook,a0 + lea AppDropHook(pc),a1 + move.l a1,h_Entry(a0) + move.l v,h_Data(a0) + move.l a0,24(sp) + bsr DoMethod + lea 8*4(sp),sp + + bsr ActRestore + + move.w #MUIA_Window_Open-MUITags,d0 + moveq #TRUE,d1 + get.l MainWin,a0 + bsr SetAttr + move.w #MUIA_Window_Open-MUITags,d0 + get.l MainWin,a0 + bsr GetAttr + beq MUIDosError + + bsr ProcessCmdArgs + tstv.b GotCmdArgs + bne Return8 + +LoopNewInput bsr.s DoMUIPoll + get.l MUIWaitMask,d0 + beq.s LoopNewInput + bsr.s MUIPollEnd + bra.s LoopNewInput + +MUIPollEnd bset.l #SIGBREAKB_CTRL_C,d0 + call exec,Wait + put.l d0,MUIWaitMask + btst.l #SIGBREAKB_CTRL_C,d0 + beq Return8 +BreakOut moveq #err_break,d0 +SSReportError jump ss,ReportError + +DoMUIPoll call ss,TestBreak + push a2 + vpea MUIWaitMask + push #MUIM_Application_NewInput + bsr DoMethodAppl + addq #8,sp + pop a2 + addq.l #1,d0 + beq EXIT ;MUIV_Application_ReturnID_Quit + subq.l #2,d0 + bmi Return8 + moveq #8,d1 + cmp.l d0,d1 + bcs Return8 + cmp.w #5,d0 + bcc.s CallAct + tstv.b Inside + bne.s Return8 +CallAct add.l d0,d0 + lea ButtonAct(pc),a0 + add.w (a0,d0.w),a0 + jmp (a0) + +ButtonAct dc.w ActTransmit-ButtonAct ;0 + dc.w ActReceive-ButtonAct ;1 + dc.w ActSave-ButtonAct ;2 + dc.w ActUse-ButtonAct ;3 + dc.w ActRestore-ButtonAct ;4 + dc.w ActAbort-ButtonAct ;5 + dc.w Return8-ButtonAct ;6 + dc.w Return8-ButtonAct ;7 + dc.w ActAbout-ButtonAct ;8 + +ActAbout moveq #TRUE,d1 + bsr.s ApplicSleep + dtl.lc ,a0 + dt.lc + dt.lc <© 1996 Short Software ',60,'short@k332.feld.cvut.cz',62,'> + dt.lc + dt.lc <> + dt.lc + dt.lc + dt.lc <> + dt.lc + push a2 + dtl ,a2 + call ss,SimpleRequest + pop a2 + moveq #FALSE,d1 +ApplicSleep move.w #MUIA_Application_Sleep-MUITags,d0 + get.l ApplObj,a0 + bra SetAttr + +ActUse push #MUIV_Application_Save_ENV + bra.s ActUseCont + +ActSave push #MUIV_Application_Save_ENVARC +ActUseCont push #MUIM_Application_Save + bsr DoMethodAppl + addq #8,sp + move.w #MUIA_Window_Open-MUITags,d0 + moveq #FALSE,d1 + get.l ConfigWin,a0 + bra SetAttr + +ActRestore push #MUIV_Application_Load_ENV + push #MUIM_Application_Load + bsr DoMethodAppl + addq #8,sp +Return8 rts + +ActTransmit get.l Arg_From,d0 + bne TrasmitClear + get.l TransmitText,a0 + bsr GetAttrStr + bra DoTransmit + +ActReceive get.l ReceiveText,a0 + bsr GetAttrStr + bra DoReceive + +ActAbort stv InAbort +Return10 rts + +ChangeState0 tstv.l muimasterbase + beq.s Return10 + moveq #0,d2 +;--------------- +ChangeState clr.l -(sp) + vpush ConfigGroup + vpush ReceiveButton + vpush TransmitButton + push d2 + push #MUIA_Disabled + push #MUIM_MultiSet + bsr DoMethodAppl + lea 7*4(sp),sp + move.w #MUIA_Menuitem_Enabled-MUITags,d0 + bchg.l #0,d2 + move.l d2,d1 + get.l TransmitMItem,a0 + bsr.s SetAttr + move.w #MUIA_Menuitem_Enabled-MUITags,d0 + move.l d2,d1 + get.l ReceiveMItem,a0 + bsr.s SetAttr + move.w #MUIA_Disabled-MUITags,d0 + move.l d2,d1 + get.l GaugeGroup,a0 +SetAttr clr.l -(sp) + push d1 + move.w d0,-(sp) + move.w #MUITags>>16,-(sp) + move.l sp,a1 + call intuition,SetAttrsA + lea 12(sp),sp + rts +;--------------- +ProcessCmdArgs get.l Arg_To,d0 + beq.s NoArgTo + bsr.s DoReceive + clrv.l Arg_To +NoArgTo get.l Arg_From,d0 + beq.s Return13 +TrasmitClear bsr.s DoTransmit + clrv.l Arg_From +Return13 rts + +DoTransmit pea CallTransmit(pc) + moveq #1,d1 + bra.s CallRoutine + +DoReceive pea CallReceive(pc) + moveq #2,d1 +CallRoutine put.b d1,Inside + push d0 + + tstv.l muimasterbase + beq.s SkipPrepCfg + moveq #1,d2 + bsr ChangeState + get.l DeviceString,a0 + bsr GetAttrStr + put.l d0,Arg_Device + move.w #MUIA_Numeric_Value-MUITags,d0 + get.l UnitNumber,a0 + bsr GetAttr + put.l d0,Arg_DevUnit + move.w #MUIA_Numeric_Value-MUITags,d0 + get.l BaudRateSlider,a0 + bsr GetAttr + moveq #1200>>4,d1 + addq.l #4,d0 + lsl.l d0,d1 + put.l d1,Arg_Baud + move.w #MUIA_Numeric_Value-MUITags,d0 + get.l MicroSecSlider,a0 + bsr GetAttr + put.l d0,Arg_MicroWait + + get.b Inside,d0 + subq.b #1,d0 + dtl ,a0 + beq.s SkipRecvInfo + dtl ,a0 +SkipRecvInfo move.l a0,d1 + move.w #MUIA_Gauge_InfoText-MUITags,d0 + get.l ProgressGauge,a0 + bsr SetAttr + moveq #0,d0 + bsr DoSetGauge + moveq #5,d2 + vlea PartCounts+6*4,a2 + move.l (v),a6 +ClearCounts clr.l -(a2) + move.l a2,a1 + bsr.s SetNumber + dbra d2,ClearCounts +SkipPrepCfg pop a1 + pop a0 + push a1 + moveq #0,d0 + clrv.b InAbort + call ss,CallBlock + get.b Inside,d0 + bmi.s AskDelete + subq.b #2,d0 + beq.s DoDelete + bra.s WasTransmit + +AskDelete dtl.lc ,a0 + dt + move.l sp,a1 + dtl ,a2 + call ss,SimpleRequest + tst.l d0 + beq.s WasTransmit +DoDelete move.l (sp),d1 + call dos,DeleteFile +WasTransmit addq #4,sp + clrv.b Inside + tstv.b FallOut + beq ChangeState0 +EXIT stv FallOut +SSExitCleanup jump ss,ExitCleanup + +AddPartCount moveq #0,d0 + get.b CurPart,d0 + beq.s IsZeroPart + subq.b #2,d0 +IsZeroPart lsl.l #2,d0 + lea PartCounts(v,d0.w),a1 + addq.l #1,(a1) +SetNumber push a2 + lea -12(sp),sp + move.l sp,a2 + push a1 + dt PercLUT,<%lu> + gett PercLUT,a0 + call ss,FormatStr + pop a1 + move.l sp,d1 + geta PartCounts,a0 + sub.l a0,a1 + add.l a1,a1 + geta StatBarNum0,a0 + move.l (a0,a1),a0 + move.w #MUIA_Text_Contents-MUITags,d0 + bsr SetAttr + lea 12(sp),sp + pop a2 + move.l (v),a6 + rts + +CallReceive move.l a1,a0 + moveq #OPEN_NEW+OPEN_LINEBUF,d0 + moveq #0,d1 + call TrackOpenBuf + move.l d0,a3 + stv CurPart + bsr SerialInit + put.b #ASCII_ACK,SerByte +WaitSig1 bsr GetSerByte + cmp.b #ASCII_CR,d0 + bne.s WaitSig1 + bsr GetSerByte + cmp.b #ASCII_LF,d0 + bne.s WaitSig1 + stv.b Inside +NextRcvPacket tstv.l muimasterbase + beq.s NotUpdGauge + get.b CurPart,d0 + bmi.s NotUpdGauge + bne.s NotZeroPart + moveq #2,d0 +NotZeroPart subq.l #1,d0 + moveq #100,d1 + mulu.w d1,d0 + moveq #7,d1 + divu.w d1,d0 + bsr.s ChkSetGauge +NotUpdGauge bsr SendItNow + bsr GetSerByte + cmp.b #ASCII_EOT,d0 + bne.s NotEndTrans + put.b d0,Inside +FullGaugeRet moveq #100,d0 +ChkSetGauge vcmp.w GaugeSet,d0 + bls Return7 +DoSetGauge tstv.l muimasterbase + beq Return7 + put.w d0,GaugeSet + ext.l d0 + move.l d0,d1 + move.w #MUIA_Gauge_Current-MUITags,d0 + get.l ProgressGauge,a0 + bra SetAttr + +NotEndTrans cmp.b #2,d0 + beq.s GotValidPkt + dtl ,a0 + move.w d0,-(sp) +ExitErrorA1 move.l sp,a1 +ExitError jump ExitError + +GotValidPkt bsr GetSerByte + move.b d0,d7 + vcmp.b CurPart,d0 + beq.s IsCurPart + put.b d0,CurPart + cmp.b #8,d0 + bcs.s SmallPartN +BadPartN dtl ,a0 + moveq #0,d0 + get.b CurPart,d0 + move.w d0,-(sp) + bra.s ExitErrorA1 + +SmallPartN lea PartTab(pc),a4 +LoopPart subq.b #1,d0 + bcs.s DoneParts +ScanPart tst.b (a4)+ + bne.s ScanPart + bra.s LoopPart + +DoneParts tst.b (a4) + beq.s BadPartN + dtl <',Char_Term,Char_Term,Char_Term,'>,a0 + call BPuts + move.l a4,a0 + call BPutsNL + bra.s NoFirstRec + +IsCurPart cmp.b #7,d7 + beq.s NoFirstRec + dtl <',Char_Term,Char_Term,'>,a0 + call BPutsNL +NoFirstRec bsr GetSerByte + add.b d0,d7 + move.b d0,d2 + bsr GetSerByte + add.b d0,d7 + rol.w #8,d0 + move.b d2,d0 + cmp.w #SerBufSiz-1,d0 + bcs.s OkaySize + dtl ,a0 + move.w #SerBufSiz-1,-(sp) +ExitErrorD0W move.w d0,-(sp) + bra.s ExitErrorA1 + +OkaySize geta SerBuf,a4 + clr.b (a4,d0.l) + move.w d0,d2 + move.w d0,d3 + bsr SerReceiveX + bsr GetSerByte + move.l a4,a0 +NextXSumChar add.b d0,d7 + move.b (a0)+,d0 + dbra d2,NextXSumChar + tst.b d7 + beq.s GoodXSum + dtl ,a0 + move.w d7,-(sp) + clr.b (sp) + bra ExitErrorA1 + +GoodXSum bsr AddPartCount + st d4 + get.b CurPart,d0 + beq BefRecScan + cmp.b #7,d0 ;CALENDAR + beq.s DoCalendar + cmp.b #$F8,(a4)+ + beq.s AfterF8 + dtl ,a0 + moveq #0,d0 + move.b -(a4),d0 + bra.s ExitErrorD0W + +DoCalendar cmp.w #6,d3 + beq.s GoodCalLen + dtl ,a0 + move.w d3,-(sp) + bra ExitErrorA1 + +GoodCalLen move.w (a4)+,d0 + bsr.s PrintDate + moveq #':',d0 + call BPutByte + moveq #3,d0 +ReadLELong move.b (a4)+,d2 + ror.l #8,d2 + dbra d0,ReadLELong + clr.w -(sp) +NextDate addq.w #1,(sp) + ror.l #1,d2 + bcc.s NotMarked + dtl < %02u>,a0 + move.l sp,a1 + call BPrintf +NotMarked cmp.w #31,(sp) + bne.s NextDate + addq #2,sp + bra DoneThisRec + +PrintDate move.w d0,d1 + and.w #$000F,d1 + move.w d1,-(sp) + lsr.w #4,d0 + add.w #$1900,d0 + btst.l #8,d0 + bne.s Not2000 + add.w #$2000-$1A00,d0 +Not2000 move.w d0,-(sp) + dtl <%x-%02u>,a0 + move.l sp,a1 + call BPrintf + addq #4,sp +Return7 rts + +AfterF8 cmp.b #5,d0 ;SCHEDULE + bne BefRecScan + cmp.b #12,d3 + bcc.s LongSchedDat + dtl ,a0 + move.w d3,-(sp) + bra ExitErrorA1 + +LongSchedDat moveq #0,d0 + move.b 10(a4),d0 + move.w d0,-(sp) + move.b 8(a4),d0 + move.w d0,-(sp) + move.b 3(a4),d0 + cmp.b #$F3,d0 + bne.s BadSchDat + cmp.l #$00F30000,(sp) + beq.s GoodSched +BadSchDat move.w d0,-(sp) + dtl ,a0 + bra ExitErrorA1 + +GoodSched addq #4,sp + move.w 1(a4),d0 + rol.w #8,d0 + bsr.s PrintDate + moveq #0,d0 + move.b 4(a4),d0 + move.w d0,-(sp) + move.b 5(a4),d0 + move.w d0,-(sp) + move.b (a4),d0 + move.w d0,-(sp) + dtl <-%02x: %02x:%02x>,a0 + move.l sp,a1 + call BPrintf + addq #6,sp + moveq #0,d0 + move.b 7(a4),d0 + cmp.b #$30,d0 + beq.s NoEndTime + moveq #0,d1 + move.b 6(a4),d1 + move.w d1,-(sp) + move.w d0,-(sp) + dtl <-%02x:%02x>,a0 + move.l sp,a1 + call BPrintf + addq #4,sp + moveq #0,d0 +NoEndTime move.b 9(a4),d0 + beq.s NoSchedImg + move.w d0,-(sp) + dtl.c < >,a0 + dt PercUT,<%u> + move.l sp,a1 + call BPrintf + addq #2,sp +NoSchedImg moveq #10,d0 + call BPutChar + lea 11(a4),a4 + +BefRecScan moveq #0,d2 +MainRecScan move.b (a4)+,d0 + beq.s DoneThisRec + cmp.b #Char_Term,d0 + bne.s NotCharTerm + moveq #Char_TermRepl,d0 + bra.s NotCharE4 + +NotCharTerm cmp.b #Char_CasSep,d0 + bne.s NotCharF3 + tst.b d4 + bne.s LoopRecScan + bsr.s FlushRecScan + moveq #Char_Term,d0 + call BPutByte + bra.s DoCharNL + +NotCharF3 cmp.b #Char_CasCR,d0 + bne.s NotCharE4 +DoCharNL addq.l #1,d2 + bra.s LoopRecScan + +NotCharE4 move.w d0,-(sp) + bsr.s FlushRecScan + move.w (sp)+,d0 + call BPutChar +LoopRecScan clr.b d4 + bra.s MainRecScan + +DoneThisRec moveq #10,d0 + call BPutChar + bra NextRcvPacket + +FlushRecScan tst.l d2 +FlushRecScanX beq Return7 + moveq #10,d0 + call BPutChar + subq.l #1,d2 + bra.s FlushRecScanX +;*************** +CallTransmit put.l a1,TransmitFName + move.l a1,a0 + moveq #OPEN_OLD,d0 + moveq #0,d1 + call TrackOpenBuf + push d0 + tstv.l muimasterbase + beq.s EmptyFile + move.l d0,a0 + move.l bh_handle(a0),d1 + move.l d1,d4 + moveq #0,d2 + moveq #OFFSET_END,d3 + call dos,Seek + moveq #OFFSET_BEGINNING,d3 + move.l d4,d1 + call Seek + put.l d0,TxFileSize + bne.s EmptyFile + addqv.l #1,TxFileSize +EmptyFile bsr SerialInit + move.l (sp),a2 + call BFlush + put.l sp,ErrPtr + moveq #0,d6 + stv CurPart + move.w #ASCII_CR<<8!ASCII_LF,-(sp) + move.l sp,a0 + moveq #2,d0 + bsr DoSendBuf + addq #2,sp + bsr WaitAck +NextLine addqv.l #1,CurLine + geta LineBuf,a3 + move.l a3,a0 + move.l #LineBufSiz,d0 + call BGets + subq.l #1,d0 + beq.s StringOK + bsr FlushRec + addq #4,sp + moveq #ASCII_EOT,d0 + bsr DoSendByte + bra FullGaugeRet + +StringOK cmp.w #Char_Term<<8!Char_Term,(a3) + bne NotSpec + bsr FlushRec + addq #2,a3 + tst.b (a3) + beq.s NextLine + cmp.b #Char_Term,(a3)+ + beq.s ReadPartID +DoInvUse dt InvUseT, + tpea InvUseT + bra.s ErrDesc + +ReadPartID lea PartTab(pc),a4 + clrv.b CurPart + moveq #0,d2 +LoopRdPartN move.l a3,a0 + move.l a4,a1 + call utility,Stricmp + move.l (v),a6 + beq.s NextLine +ScanRdPartN tst.b (a4)+ + bne.s ScanRdPartN + addqv.b #1,CurPart + cmpv.b #8,CurPart + bne.s LoopRdPartN +DoUnkPID dt UnkPIDT,,a0 + tpea UnkPIDT +ErrDesc geta LineBuf,a0 + push a0 +LenLine tst.b (a0)+ + bne.s LenLine + sub.l (sp),a0 + vpush CurLine + get.l TransmitFName,a2 + push a2 +LenFName tst.b (a2)+ + bne.s LenFName + sub.l (sp),a2 + add.l a2,a0 + lea 64(a0),a0 + move.l a0,d0 + call IPAlloc + move.l d0,a2 + dtl < in "%s", line %lu: "%s">,a0 + move.l sp,a1 + call FormatStr + lea 12(sp),sp + pop a0 + get.l ErrPtr,a1 + move.l a2,(a1) + bra ExitErrorA1 + +NotSpec move.l d6,a0 + tst.l d6 + bne AlreadyBeginX + moveq #0,d4 + geta SerBuf,a0 + move.b #2,(a0)+ + get.b CurPart,d0 + bmi.s DoUnkPID + move.b d0,(a0)+ + clr.w (a0)+ ;Length 2 B filled L8R + cmp.b #7,d0 + beq WrCalendar + tst.b d0 + beq AlreadyBegin + move.b #$F8,(a0)+ + move.b #Char_CasSep,(a0)+ + cmp.b #5,d0 + bne AlreadyBegin +WrSchedule moveq #'-',d3 + bsr ParseYear + move.w -(a4),d0 + rol.w #8,d0 + move.w d0,(a4)+ + bsr SchedStrStr + cmp.l #32,d0 + bcc BadSched + tst.l d0 + beq BadSched + bsr ConvByteBCD + move.b d0,-3(a4) + move.w #Char_CasSep<<8,(a4)+ + bsr SchReadHour + move.b d0,(a4)+ + move.l a4,a0 +LoopSch2Col move.b (a3)+,d0 + move.b d0,(a4)+ + beq.s TermSch2ColX + cmp.b #' ',d0 + beq.s TermSch2Col + cmp.b #'-',d0 + bne.s LoopSch2Col +TermSch2ColX subq #1,a3 +TermSch2Col bsr StrStrToLA4 + cmp.l #60,d0 + bcc.s BadSched + bsr ConvByteBCD + move.b d0,-2(a4) + clr.b (a4)+ + move.l #$30F30000,(a4)+ + move.l a4,a0 +SkipSchSpc move.b (a3)+,d0 + beq.s DoneSchParse + cmp.b #' ',d0 + beq.s SkipSchSpc + cmp.b #'-',d0 + bne.s NoEndSchTim + bsr.s SchReadHour + move.b d0,-4(a4) + move.l a4,a0 +LoopSch3Col move.b (a3)+,d0 + move.b d0,(a4)+ + beq.s TermSch3Col + cmp.b #' ',d0 + bne.s LoopSch3Col +TermSch3Col bsr StrStrToLA4 + cmp.l #60,d0 + bcc.s BadSched + bsr.s ConvByteBCD + move.b d0,-5(a4) +NoEndSchTim move.l a4,a0 +LoopSch4Col move.b (a3)+,d0 + move.b d0,(a4)+ + beq.s TermSch4Col + cmp.b #' ',d0 + bne.s LoopSch4Col +TermSch4Col bsr StrStrToLA4 + move.l d0,d1 + lsr.l #8,d1 + bne.s BadSched + move.b d0,-2(a4) + subq #1,a3 +LoopSch5Col move.b (a3)+,d0 + beq.s DoneSchParse + cmp.b #' ',d0 + beq.s LoopSch5Col +BadSched get.l ErrPtr,sp + dt BadSchedT, + tpea BadSchedT + bra ErrDesc + +DoneSchParse move.l a4,d6 + bra NextLine + +SchReadHour bsr SchedStrStr + cmp.l #24,d0 + bcc.s BadSched +ConvByteBCD divu.w #10,d0 + move.w d0,d1 + swap d0 + rol.b #4,d1 + or.b d1,d0 + rts + +ParseYear move.l a0,a4 +LoopYrMin move.b (a3)+,d0 + beq.s BadYear + move.b d0,(a4)+ + cmp.b #'-',d0 + bne.s LoopYrMin + bsr StrStrToLA4 + cmp.l #2100,d0 + bcs.s SmallYrYear +BadYear dt BadYearT, + tpea BadYearT + bra ErrDesc + +SmallYrYear cmp.w #1901,d0 + bcs.s BadYear + move.l d0,d2 + move.l a4,a0 +LoopYrCol move.b (a3)+,d0 + beq.s BadYear + move.b d0,(a4)+ + cmp.b d3,d0 + bne.s LoopYrCol + bsr StrStrToLA4 + cmp.l #13,d0 + bcc.s BadYear + tst.l d0 + beq.s BadYear + sub.w #1900,d2 + moveq #10,d1 + divu.w d1,d2 + swap d2 + rol.b #4,d2 + or.b d2,d0 + move.b d0,1(a4) + clr.w d2 + swap d2 + divu.w d1,d2 + swap d2 + move.b d2,d0 + swap d2 + rol.b #4,d2 + or.b d2,d0 + move.b d0,(a4) + addq #2,a4 +Return2 rts + +WrCalendar moveq #':',d3 + bsr.s ParseYear + moveq #0,d2 +NextCalenDay move.l a4,a0 +SkipSpcCalen move.b (a3)+,d0 + beq.s SendCalend + cmp.b #' ',d0 + beq.s SkipSpcCalen + bra.s SkipZeroCalI + +SkipZeroCal move.b (a3)+,d0 +SkipZeroCalI cmp.b #'0',d0 + beq.s SkipZeroCal +CopyDayNum move.b d0,(a4)+ + move.b (a3),d0 + beq.s DoneDayNum + addq #1,a3 + cmp.b #' ',d0 + bne.s CopyDayNum +DoneDayNum clr.b (a4) + move.l a0,a4 + call StrToL + subq.l #1,d0 + bmi.s BadCalend + bset.l d0,d2 + cmp.l #31,d0 + bcs.s NextCalenDay +BadCalend dt CalBadT, + tpea CalBadT + bra ErrDesc + +SchedStrStr move.l a4,a0 +LoopSchCol move.b (a3)+,d0 + beq BadSched + move.b d0,(a4)+ + cmp.b #':',d0 + bne.s LoopSchCol +StrStrToLA4 clr.b -(a4) + move.l a0,a4 + moveq #0,d0 +StrStrToL move.b (a0)+,d0 + beq.s Return2 + cmp.b #' ',d0 + beq.s StrStrToL + cmp.b #'0',d0 + beq.s StrStrToL + subq #1,a0 + jump StrToL + +SendCalend moveq #3,d0 +WrCalenLong move.b d2,(a4)+ + ror.l #8,d2 + dbra d0,WrCalenLong + move.l a4,d6 + bsr.s FlushRec + bra NextLine + +AlreadyBeginX moveq #Char_CasCR-$100,d0 + bclr.l #0,d4 + bne.s PutToBuf +AlreadyBegin move.b (a3)+,d0 + bne.s NotNL + addq.l #1,d4 + move.l a0,d6 + bra NextLine + +NotNL cmp.b #Char_Term,d0 + bne.s PutToBuf + tst.b (a3) + bne DoInvUse + moveq #-1,d4 + moveq #Char_CasSep-$100,d0 +PutToBuf geta SerBuf+SerBufSiz-1,a1 + cmp.l a1,a0 + bcs.s GoodPktLen + move.w #SerBufSiz,-(sp) + dt PktDatLT, + tpea PktDatLT + bra ErrDesc + +GoodPktLen move.b d0,(a0)+ + bra.s AlreadyBegin + +FlushRec tst.l d6 + beq.s Return3 + tstv.l muimasterbase + beq.s NoMUITxProg + call BTell + moveq #100,d1 + call utility,UMult32 + get.l TxFileSize,d1 + call utility,UDivMod32 + bsr DoSetGauge + bsr AddPartCount +NoMUITxProg move.l d6,d0 + geta SerBuf+4,a0 + sub.l a0,d0 + ror.w #8,d0 + put.w d0,SerBuf+2 + ror.w #8,d0 + addq.l #5,d0 + move.l d6,a1 + subq #4,a0 + lea 1(a0),a1 + move.w d0,d1 + subq.w #4,d1 + move.b (a1)+,d2 +TxXSum add.b (a1)+,d2 + dbra d1,TxXSum + neg d2 + move.b d2,(a1) + moveq #0,d6 + pea WaitAck(pc) + +DoSendBuf subq.w #1,d0 + bmi.s Return3 +LoopSendB push d0 + move.b (a0)+,d0 + push a0 + bsr.s DoSendByte + pop a0 + pop d0 + dbra d0,LoopSendB +Return3 rts + +DoSendByte put.b d0,SerByte + get.l TimerTrk,a1 + move.l trk_data(a1),a0 + get.l Arg_MicroWait,IOTV_TIME+TV_MICRO(a0) + beq.s SendItNow + clr.l IOTV_TIME+TV_SECS(a0) + dtl ,a0 + call ss,ChkDoIO +SendItNow get.l SerialIO,a0 + geta SerByte,a1 + move.l a1,IO_DATA(a0) + moveq #1,d0 + move.l d0,IO_LENGTH(a0) + move.w #CMD_WRITE,IO_COMMAND(a0) + dtl ,a0 + get.l SerialTrk,a1 + jump ss,ChkDoIO +;*************** +WaitAck bsr.s GetSerByte + cmp.b #ASCII_ACK,d0 + beq.s Return1 + addq #2,sp + move.w d0,(sp) + dtl ,a0 + cmp.b #5,d0 + beq.s MemoryErr + dtl ,a0 + cmp.b #ASCII_EOT,d0 + beq.s MemoryErr + dtl ,a0 +MemoryErr push a0 + bra ErrDesc + +;--------------- +GetSerByte moveq #1,d0 + subq #2,sp + move.l sp,a0 + bsr.s SerReceive + moveq #0,d0 + move.b (sp)+,d0 +Return1 rts +;--------------- +SerReceiveX move.l a4,a0 +SerReceive get.l SerialIO,a1 + move.l a0,IO_DATA(a1) + move.w #CMD_READ,IO_COMMAND(a1) + move.l d0,IO_LENGTH(a1) + move.l MN_REPLYPORT(a1),a0 + move.b MP_SIGBIT(a0),d5 + call exec,SendIO +LoopSerInput tstv.l muimasterbase + beq.s SkipAbort + bsr DoMUIPoll + tstv.b InAbort + beq.s SkipAbort + pea SSExitCleanup(pc) + put.b #ASCII_EOT,SerByte + bra SendItNow + +SkipAbort get.l SerialIO,a1 + call exec,CheckIO + tst.l d0 + bne.s DoneReadIO + tstv.l muimasterbase + beq.s ForceMUIPoll + get.l MUIWaitMask,d0 + beq.s LoopSerInput +ForceMUIPoll bset.l d5,d0 + bsr MUIPollEnd + bra.s LoopSerInput + +DoneReadIO get.l SerialIO,a1 + call exec,WaitIO + move.l (v),a6 +ProcSerErr ext.w d0 + beq.s Return1 + geta SerErrMem,a0 +;Stolen from SSLib.asm +10$ move.w d0,d1 + sub.w (a0)+,d1 + bcs.s 11$ + move.w (a0)+,d2 + beq.s 0$ + cmp.w d2,d1 + bcc.s 12$ + lsl.w #2,d1 + move.l 0(a0,d1.w),d2 + moveq #err_iofail2,d0 + bra.s 01$ + +11$ move.w (a0)+,d2 +12$ lsl.w #2,d2 + add.l d2,a0 + bra.s 10$ + +0$ moveq #err_iofail,d0 + get.l Arg_Device,d2 +01$ dtl ,a1 + jump ReportError +;--------------- +SerialInit dt TimerDev, + gett TimerDev,a0 + moveq #IOTV_SIZE,d0 + move.l d0,a1 + moveq #UNIT_MICROHZ,d0 + moveq #0,d1 + sub.l a2,a2 + call ss,TrackDevice + put.l d1,TimerTrk + move.w #TR_ADDREQUEST,IO_COMMAND(a1) + + get.l Arg_Device,a0 + get.l Arg_DevUnit,d0 + moveq #IOEXTSER_SIZE,d1 + move.l d1,a1 + moveq #0,d1 + geta SerErrMem,a2 + call TrackDevice + put.l d1,SerialTrk + put.l a1,SerialIO + move.w #SDCMD_SETPARAMS,IO_COMMAND(a1) + get.l Arg_Baud,IO_BAUD(a1) + move.l #$08080100!SERF_XDISABLED!SERF_RAD_BOOGIE,IO_READLEN(a1) + ;io_ReadLen,io_WriteLen,io_StopBits,io_SerFlags + dtl ,a0 + move.l d1,a1 + jump ChkDoIO +;--------------- +GenerateMUI gett __BaseText,a2 + get.l muimasterbase,a6 + moveq #0,d2 + bra.s .loopnext + +BuildMUILoop equ * +.loop push d2 +.loop2 move.l #MUITags,d2 + move.w (a3)+,d2 + beq.s .end + moveq #-1,d0 + cmp.w d0,d2 + bne.s .loopnext + move.l #ASL_TB,d2 + move.w (a3)+,d2 +.loopnext moveq #0,d3 + move.w (a3)+,d3 + bmi.s .subobj + bclr #14,d3 + bne.s .numb + add.l a2,d3 ; String + push d3 + bra.s .loop + +.numb cmp.w #$2000,d3 ; Number + beq.s .long + bcs.s .plus + or.l #$FFFFE000,d3 +.plus push d3 + bra.s .loop +.long push (a3)+ + bra.s .loop + +.subobj bclr #15,d3 + bclr #14,d3 + bne.s .var + add.l a2,d3 + link a4,#0 + push d3 + move.w (a3)+,-(sp) + push d2 + clr.l -(sp) + bra.s .loop2 + +.var move.l (a5,d3.w),-(sp) + bra.s .loop + +.end move.l -4(a4),a0 + move.l sp,a1 + call MUI_NewObject + tst.l d0 + beq MUIDosError + + move.w -6(a4),d3 + move.l d0,(a5,d3.w) + move.l -10(a4),d2 + unlk a4 + tst.w d2 + beq.s Return6 + push d0 + bra BuildMUILoop +;--------------- +DoMethodAppl get.l ApplObj,a2 +DoMethod lea 4(sp),a1 + move.l -4(a2),a0 +DoMethodEntry move.l h_Entry(a0),a6 + jmp (a6) +;--------------- +GetAttrStr move.w #MUIA_String_Contents-MUITags,d0 +GetAttr move.l #MUITags,d1 + move.w d0,d1 + move.l d1,d0 + clr.l -(sp) + move.l sp,a1 + call intuition,GetAttr + pop d0 +Return6 rts +;--------------- +;-1=Done,-2=TriggerValue,-3=ReturnID_Quit,-4=ID 1 +SetNotify move.l sp,d2 + move.w (a3)+,d0 + bpl.s FilledLongD0E + move.w d0,d1 + addq.w #1,d1 + beq.s Return6 + move.l #MUIV_TriggerValue,d0 +TriggerValPtr equ *-4 + addq.w #1,d1 + beq.s FilledLongD0 + push #MUIV_Application_ReturnID_Quit + addq.w #1,d1 + beq.s RetQuitID + neg.w d1 + ext.l d1 + move.l d1,(sp) +RetQuitID push #MUIM_Application_ReturnID + pea 2.w + vpush ApplObj + bra.s DoneRetID + +FilledLongD0E ext.l d0 +FilledLongD0 push d0 + move.w (a3)+,-(sp) + move.w #MUITags>>16,-(sp) + push #MUIM_Set + pea 3.w + move.w (a3)+,d0 + move.l (v,d0.w),d0 + push d0 +DoneRetID move.w (a3)+,d0 + ext.l d0 + push d0 + addq.l #1,d0 + bne.s NotEveryTime + move.l #MUIV_EveryTime,(sp) +EveryTimePtr equ *-4 +NotEveryTime move.w (a3)+,-(sp) + move.w #MUITags>>16,-(sp) + push #MUIM_Notify + move.w (a3)+,d0 + move.l (v,d0.w),a2 + bsr DoMethod + move.l d2,sp + bra.s SetNotify +;--------------- +BaudRateFunc cmp.l #MUIM_Numeric_Stringify,(a1) + beq.s GotNumString + move.l cl_Super(a0),a0 + bra DoMethodEntry + +GotNumString move.w cl_InstOffset(a0),d0 + mpush a2/a5/a6 + add.w d0,a2 + move.l 4(a1),d0 ;offsetof(struct MUIP_Numeric_Stringify,value) + moveq #1200>>4,d1 + addq.l #4,d0 + lsl.l d0,d1 + push d1 + move.l 4.w,a0 + move.l ThisTask(a0),a0 + move.l TC_Userdata(a0),v + move.l sp,a1 + gett PercLUT,a0 + call ss,FormatStr + addq #4,sp + move.l a2,d0 + mpop a2/a5/a6 + rts +;--------------- +WinOpenHook mpush a5/a6 + move.l h_Data(a0),v + move.w #MUIA_Window_Window-MUITags,d0 + get.l MainWin,a0 + bsr GetAttr + get.l sv_thistask,a0 + move.l d0,pr_WindowPtr(a0) + mpop a5/a6 + rts +;--------------- +AppDropHook mpush d2/d3/a2/a5/a6 + move.l h_Data(a0),v + move.l (a1),a1 + move.l am_NumArgs(a1),d0 + beq.s DoneDropHook + subq.l #1,d0 + beq.s OneDropHook +BeepDropHook sub.l a0,a0 + call intuition,DisplayBeep + bra.s DoneDropHook + +OneDropHook tstv.b Inside + bne.s BeepDropHook + move.l am_ArgList(a1),a0 + move.l (a0)+,d1 ;wa_Lock + push (a0) ;wa_Name + geta AppDropBuf,a2 + move.l a2,d2 + move.l #AppBufSiz,d3 + call dos,NameFromLock + pop d2 + tst.l d0 + beq.s BeepDropHook + move.l a2,d1 + call AddPart + tst.l d0 + beq.s BeepDropHook + put.l a2,Arg_From + moveq #1,d0 + push d0 + push #MUIM_Application_ReturnID + bsr DoMethodAppl + addq #8,sp + move.w #MUIA_Application_Iconified-MUITags,d0 + moveq #0,d1 + get.l ApplObj,a0 + bsr SetAttr +DoneDropHook mpop d2/d3/a2/a5/a6 + rts +;--------------- +Cleanup get.l muimasterbase,a6 + get.l ApplObj,d0 + beq.s NoApplObj + move.l d0,a0 + clrv.l ApplObj + call MUI_DisposeObject +NoApplObj get.l BaudRateClass,d0 + beq Return6 + move.l d0,a0 + clrv.l BaudRateClass + jump MUI_DeleteCustomClass +;--------------- + dc.b 0,1,15,3,11,3,4,1,1 +SerErrTab dc.b 'DevBusy',0 + dc.b 'BufErr',0 + dc.b 'InvParam',0 + dc.b 'LineErr',0 + dc.b 'TimerErr',0 + dc.b 'BufOverflow',0 + dc.b 'NoDSR',0 + dc.b 'DetectedBreak',0 +;!!! SerErrTabSize on begin - keep fresh +;--------------- +PackMenus dc.b 0,'Project',0 ;0 + dc.b 'T'+2,'Transmit...',0 ;1 + dc.b 'R'+2,'Receive...',0 ;2 + dc.b -1 + dc.b '?'+2,'About...',0 ;3 + dc.b 1,'About MUI...',0 ;4 + dc.b -1 + dc.b 'H'+2,'Hide',0 ;5 + dc.b 'Q'+2,'Quit',0 ;6 + dc.b 0,'Configuration',0 ;7 + dc.b -2,'C'+2,'Settings',0 ;8 + dc.b 1,'Restore last saved',0 ;9 + dc.b -1 + dc.b 'M'+2,'MUI...',0 ;10 +PackMenuNum equ 14 +;!!! PackMenuHots on begin - keep fresh +;--------------- +PartTab dc.b 'ProtID',0 ;0 + dc.b 0 ;1 + dc.b 0 ;2 + dc.b 'Phone-B',0 ;3 + dc.b 'Phone-P',0 ;4 + dc.b 'Schedule',0 ;5 + dc.b 'Memo',0 ;6 + dc.b 'Calendar',0 ;7 + even +;--------------- +MTag macro + ifge \1-MUITags + dc.w \1-MUITags + else + dc.w -1,\1-ASL_TB + endc + endm + +MOffs macro + dc.w \1+\2-__BaseText + endm + +MObj macro + ifne \1 + MTag \1 + endc + ifnd STREX_\2 +STREX_\2 set 1 + dt STR_\2,<\2.mui> + endc + MOffs $8000,STR_\2 + ifgt NARG-2 + dc.w \3 + dv.l \3 + elseif + dc.w __Trash + endc + endm + +MText macro + MTag \1 + dt STR_\@a,<\2> + MOffs 0,STR_\@a + endm + +MNum macro + MTag \1 + ifge \2-$2000 + dc.w $6000 + dc.l \2 + elseif + ifle \2+$2000 + dc.w $6000 + dc.l \2 + elseif + dc.w $4000+(\2&$3FFF) + endc + endc + endm + +MVar macro + MTag \1 + ifd \2 + ifge \2-$4000 + fail + endc + endc + dc.w \2+$C000 + endm + +MEnd macro + dc.w 0 + endm + +Notify macro + ifeq NARG-4 + ifc 'Quit','\4' + dc.w -3 + else + dc.w -(\4)-4 + endc + else + ifc 'TriggerValue','\6' + dc.w -2 + else + dc.w \6 + endc + dc.w MUIA_\5-MUITags,\4 + endc + ifc 'EveryTime','\3' + dc.w -1 + else + dc.w \3 + endc + dc.w MUIA_\2-MUITags,\1 + endm + + dv.l __Trash + dt.c __BaseText,<> +;--------------- +MUI_Applic + MObj 0,Application,ApplObj + MText MUIA_Application_Title, + MText MUIA_Application_Version,<$VER: Casio-A 1.0 (31.8.96)> + MText MUIA_Application_Copyright,<© 1996 Short Software> + MText MUIA_Application_Author, + MText MUIA_Application_Description, + MText MUIA_Application_Base, + MVar MUIA_Application_Menustrip,MenuStrip + MObj MUIA_Application_Window,Window,MainWin + MText MUIA_Window_Title, + MNum MUIA_Window_ID,'MAIN' + MNum MUIA_Window_AppWindow,TRUE + MObj MUIA_Window_RootObject,Group + MObj MUIA_Group_Child,Group,GaugeGroup + MNum MUIA_Group_Horiz,TRUE + MNum MUIA_Frame,MUIV_Frame_Button + MNum MUIA_Disabled,TRUE + MVar MUIA_Group_Child,AbortButton + MObj MUIA_Group_Child,Gauge,ProgressGauge + MNum MUIA_Gauge_Horiz,TRUE + MText MUIA_Gauge_InfoText,<%ld%%> + MNum MUIA_Frame,MUIV_Frame_Gauge + MEnd + MEnd + MObj MUIA_Group_Child,Rectangle + MEnd + MObj MUIA_Group_Child,Group + MNum MUIA_Group_Columns,2 + MNum MUIA_Frame,MUIV_Frame_Text + MVar MUIA_Group_Child,QuitButton + MVar MUIA_Group_Child,SettingsButton + MObj MUIA_Group_Child,Popasl,ReceiveAsl + MVar MUIA_Popstring_Button,ReceiveButton + MObj MUIA_Popstring_String,String,ReceiveText + MNum MUIA_ExportID,6 + MNum MUIA_ShowMe,FALSE + MEnd + MText ASLFR_TitleText, + MNum ASLFR_DoSaveMode,TRUE + MNum ASLFR_RejectIcons,TRUE + MEnd + MObj MUIA_Group_Child,Popasl,TransmitAsl + MVar MUIA_Popstring_Button,TransmitButton + MObj MUIA_Popstring_String,String,TransmitText + MNum MUIA_ExportID,5 + MNum MUIA_ShowMe,FALSE + MEnd + MText ASLFR_TitleText, + MNum ASLFR_RejectIcons,TRUE + MEnd + MEnd + MObj MUIA_Group_Child,Rectangle + MEnd + MObj MUIA_Group_Child,Group + MNum MUIA_Group_Columns,2 + MNum MUIA_Frame,MUIV_Frame_Group + MText MUIA_FrameTitle, + MVar MUIA_Group_Child,StatBar5 + MVar MUIA_Group_Child,StatBar2 + MVar MUIA_Group_Child,StatBar4 + MVar MUIA_Group_Child,StatBar1 + MVar MUIA_Group_Child,StatBar3 + MVar MUIA_Group_Child,StatBar0 + MEnd + MEnd + MEnd + MVar MUIA_Application_DropObject,MainWin + MObj MUIA_Application_Window,Window,ConfigWin + MText MUIA_Window_Title, + MNum MUIA_Window_ID,'SETT' + MObj MUIA_Window_RootObject,Group,ConfigGroup + MObj MUIA_Group_Child,Group + MNum MUIA_Group_Horiz,TRUE + MVar MUIA_Group_Child,CloseButton + MVar MUIA_Group_Child,RestoreButton + MVar MUIA_Group_Child,UseButton + MVar MUIA_Group_Child,SaveButton + MEnd + MObj MUIA_Group_Child,Group,MicroSecSlider + MNum MUIA_Group_Columns,2 + MNum MUIA_Frame,MUIV_Frame_Button + MObj MUIA_Group_Child,Slider + MNum MUIA_Numeric_Min,0 + MNum MUIA_Numeric_Max,1000 + MNum MUIA_Numeric_Value,Def_Micros + MNum MUIA_ExportID,4 + MNum MUIA_CycleChain,TRUE + MEnd + MObj MUIA_Group_Child,Text + MText MUIA_Text_Contents,<',27,'rDelay [MicroSec]> + MNum MUIA_HorizWeight,0 + MEnd + MVar MUIA_Group_Child,BaudRateSlider + MObj MUIA_Group_Child,Text + MText MUIA_Text_Contents,<',27,'rBaud rate> + MNum MUIA_HorizWeight,0 + MEnd + MObj MUIA_Group_Child,String,UnitNumber + MText MUIA_String_Accept,<0123456789> + MNum MUIA_Frame,MUIV_Frame_String + MVar MUIA_String_Integer,Arg_DevUnit + MNum MUIA_ExportID,2 + MNum MUIA_CycleChain,TRUE + MEnd + MObj MUIA_Group_Child,Text + MText MUIA_Text_Contents,<',27,'rDevice unit> + MNum MUIA_HorizWeight,0 + MEnd + MObj MUIA_Group_Child,String,DeviceString + MNum MUIA_Frame,MUIV_Frame_String + MVar MUIA_String_Contents,Arg_Device + MNum MUIA_ExportID,1 + MNum MUIA_CycleChain,TRUE + MEnd + MObj MUIA_Group_Child,Text + MText MUIA_Text_Contents,<',27,'rDevice> + MNum MUIA_HorizWeight,0 + MEnd + MEnd + MEnd + MEnd + MEnd + +MUI_StatBar + MObj 0,Group + MNum MUIA_Group_Horiz,TRUE + MNum MUIA_Frame,MUIV_Frame_Text + MObj MUIA_Group_Child,Rectangle + MNum MUIA_FixWidth,1 + MEnd + MObj MUIA_Group_Child,Text,StatBarNumber + MText MUIA_Text_Contents,< 0> + MText MUIA_Text_PreParse,<',27,'r',27,'8> + MEnd + MObj MUIA_Group_Child,Text + MVar MUIA_Text_Contents,StatBarText + MNum MUIA_Text_SetMax,TRUE + MEnd + MObj MUIA_Group_Child,Rectangle + MNum MUIA_Rectangle_VBar,TRUE + MNum MUIA_FixWidth,1 + MEnd + MObj MUIA_Group_Child,Bitmap + MVar MUIA_Bitmap_Bitmap,StatBarBMap + MNum MUIA_Bitmap_Width,32 + MNum MUIA_Bitmap_Height,16 + MNum MUIA_Bitmap_Precision,PRECISION_ICON + MNum MUIA_Frame,MUIV_Frame_None + MNum MUIA_FixWidth,32 + MNum MUIA_FixHeight,16 + MEnd + MEnd + +MUI_Notific + Notify SettingsButton,Selected,EveryTime,ConfigWin,Window_Open,TriggerValue + Notify ConfigWin,Window_Open,EveryTime,SettingsButton,Selected,TriggerValue + Notify ConfigWin,Window_Open,EveryTime,ConfigMItem,Menuitem_Checked,TriggerValue + Notify ConfigWin,Window_CloseRequest,TRUE,ConfigWin,Window_Open,FALSE + Notify CloseButton,Pressed,FALSE,ConfigWin,Window_Open,FALSE + Notify MainWin,Window_CloseRequest,TRUE,Quit + Notify TransmitText,String_Acknowledge,EveryTime,0 + Notify ReceiveText,String_Acknowledge,EveryTime,1 + Notify QuitButton,Pressed,FALSE,Quit + Notify SaveButton,Pressed,FALSE,2 + Notify UseButton,Pressed,FALSE,3 + Notify RestoreButton,Pressed,FALSE,4 + Notify AbortButton,Pressed,FALSE,5 + Notify ApplObj,Application_MenuAction,FirstMenuCode+5,ApplObj,Application_Iconified,TRUE + Notify ApplObj,Application_MenuAction,FirstMenuCode+6,Quit + Notify ConfigMItem,Menuitem_Checked,EveryTime,ConfigWin,Window_Open,TriggerValue + dc.w -1 +;--------------- +CasioIcons incbin "Casio-A.gfx" +;--------------- + tags + template + dv.l Arg_To + dv.l Arg_From + dv.l Arg_Device + dv.l Arg_DevUnit + dv.l Arg_Baud + dv.l Arg_MicroWait + dv.l Arg_MUI + defvar + diserr 1< +# +# 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::CasioA::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::CasioA::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::CasioA::ListItem::ListItem, + ); + + +print <<"HERE"; +@{[ centerimg "Casio-A","Casio-A Snapshot" ]} +@{[ vskip "1ex" ]} +@{[ centerimg "CasioSchema","Casio-A Interface Scheme" ]} +HERE + + +My::Web->footer(); diff --git a/project/CasioA/ListItem.pm b/project/CasioA/ListItem.pm new file mode 100755 index 0000000..2d6d088 --- /dev/null +++ b/project/CasioA/ListItem.pm @@ -0,0 +1,51 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::CasioA' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::CasioA::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; + +use My::Web; + + +our @ListItem=( + "name"=>"Casio-A", + "platform"=>"amiga", + "priority"=>450, + "icon"=>"Casio-A-icon", + "download"=>"Casio-A.lha", + "link-source file"=>"Casio-A.asm", + "summary"=>"Casio SF-A10 diary backup", + "license"=>"PD", + "maintenance"=>"obsolete-Casio SF-A10 diary and AmigaOS are no longer being used.", + "language"=>"680x0 asm", + "description"=><<"HERE", +

Casio-A is a software for backup/restore of Casio SF-A10 personal digital +diary. Its development involved reverse-engineering the Casio communication +protocol by sniffing serial communication of the vendor's MS-DOS backup tool.

+

Hardware issues, Casio SF-A10, electronic scheme and images by the courtesy of +@{[ a_href 'http://www.pavouk.org/','Pavel "Pavouk" Ruzicka' ]}.

+HERE + ); + +1; diff --git a/project/CasioA/Makefile.am b/project/CasioA/Makefile.am new file mode 100644 index 0000000..544d810 --- /dev/null +++ b/project/CasioA/Makefile.am @@ -0,0 +1,24 @@ +# $Id$ +# automake source for the Makefile of project/CasioA/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl \ + Casio-A.png diff --git a/project/ChangeLog.txt.pl b/project/ChangeLog.txt.pl new file mode 100755 index 0000000..6c85224 --- /dev/null +++ b/project/ChangeLog.txt.pl @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# URL redirector of &My::Web::a_href Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::ChangeLog; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +use Apache::Constants qw(MOVED); + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "header_only"=>1, + "args_check"=>{ + "cvs"=>'^[\w\d][\w\d/.]*$', + }, + ); + +$W->{"r"}->send_http_header("text/plain"); +local *F; +open F,"" + ."cvs -n -q -d ".$W->{"pserver"}.":".$W->{"pserver_path"}." rlog ".$W->{"args"}{"cvs"} + ." |perl -p -e 's#^RCS file: ".$W->{"pserver_path"}.'/(.*?)(?:/Attic/|/)?([^/]*),v$#$&\nWorking file: $1/$2#;'."'" + ." |cvs2cl --stdin --stdout --window 3600 --separate-header --no-wrap --usermap ".top_dir_disk()."/cvs2cl-usermap" + ." |"; +print while ; +close F; diff --git a/project/FordFulk/FordFulk-icon.png b/project/FordFulk/FordFulk-icon.png new file mode 100644 index 0000000..c9f0aa9 Binary files /dev/null and b/project/FordFulk/FordFulk-icon.png differ diff --git a/project/FordFulk/FordFulk.png b/project/FordFulk/FordFulk.png new file mode 100644 index 0000000..a8d73a8 Binary files /dev/null and b/project/FordFulk/FordFulk.png differ diff --git a/project/FordFulk/index.html.pl b/project/FordFulk/Index.html.pl similarity index 67% rename from project/FordFulk/index.html.pl rename to project/FordFulk/Index.html.pl index 5134e2c..d2ab68d 100755 --- a/project/FordFulk/index.html.pl +++ b/project/FordFulk/Index.html.pl @@ -18,25 +18,34 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::FordFulk::ListItem; +Wuse 'My::Project'; +Wuse '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'; + +print <<"HERE"; + +@{[ vskip "3ex" ]} + +@{[ centerimg "FordFulk","Applet Screenshot" ]} HERE + My::Web->footer(); diff --git a/project/FordFulk/ListItem.pm b/project/FordFulk/ListItem.pm index 055e13e..9d929b4 100755 --- a/project/FordFulk/ListItem.pm +++ b/project/FordFulk/ListItem.pm @@ -18,25 +18,29 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Ford-Fulkenson Algorithm Demonstration", - "priority"=>5, + +our @ListItem=( + "name"=>"FordFulk", + "platform"=>"web", + "priority"=>230, + "icon"=>"FordFulk-icon", "download"=>"FordFulk/FordFulk.zip", - "summary"=>"Web applet", + "summary"=>"Ford-Fulkenson algorithm web applet", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"Java 1.0.2", - "description"=>"" - .'

Java applet to demonstrate the internals of Ford-Fulkenson network algorithm.

' + "description"=><<"HERE", +

Java applet to demonstrate the internals of Ford-Fulkenson network algorithm.

+HERE ); 1; diff --git a/project/FordFulk/Makefile.am b/project/FordFulk/Makefile.am index b063480..0c1658b 100644 --- a/project/FordFulk/Makefile.am +++ b/project/FordFulk/Makefile.am @@ -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/Heat/Heat-icon.png b/project/Heat/Heat-icon.png new file mode 100644 index 0000000..b1d1d55 Binary files /dev/null and b/project/Heat/Heat-icon.png differ diff --git a/project/Heat/Heat.png b/project/Heat/Heat.png new file mode 100644 index 0000000..9804c57 Binary files /dev/null and b/project/Heat/Heat.png differ diff --git a/project/Heat/index.html.pl b/project/Heat/Index.html.pl similarity index 68% rename from project/Heat/index.html.pl rename to project/Heat/Index.html.pl index 4fd1ad1..ff2caad 100755 --- a/project/Heat/index.html.pl +++ b/project/Heat/Index.html.pl @@ -18,25 +18,34 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::Heat::ListItem; +Wuse 'My::Project'; +Wuse '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'; + +print <<"HERE"; + +@{[ vskip "3ex" ]} + +@{[ centerimg "Heat","Applet Screenshot" ]} HERE + My::Web->footer(); diff --git a/project/Heat/ListItem.pm b/project/Heat/ListItem.pm index 8781cff..592efd7 100755 --- a/project/Heat/ListItem.pm +++ b/project/Heat/ListItem.pm @@ -18,25 +18,29 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Heat Distribution Simulation", - "priority"=>5, + +our @ListItem=( + "name"=>"Heat", + "platform"=>"web", + "priority"=>220, + "icon"=>"Heat-icon", "download"=>"Heat/Heat.zip", - "summary"=>"Web applet", + "summary"=>"Heat distribution simulation web applet", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"Java 1.0.2", - "description"=>"" - .'

Java applet to demonstrate distribution of heat in time.

' + "description"=><<"HERE", +

Java applet to demonstrate distribution of heat in time.

+HERE ); 1; diff --git a/project/Heat/Makefile.am b/project/Heat/Makefile.am index b25e8c7..88d647c 100644 --- a/project/Heat/Makefile.am +++ b/project/Heat/Makefile.am @@ -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/Index.html.pl b/project/Index.html.pl new file mode 100755 index 0000000..dbbf486 --- /dev/null +++ b/project/Index.html.pl @@ -0,0 +1,79 @@ +#! /usr/bin/perl +# +# $Id$ +# List of projects Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wrequire 'My::Project'; + + +My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Project List', + "section"=>"Projects", + "rel_up"=>top_dir(), + "rel_start"=>top_dir(), + "footer_ids"=>0, + ); +My::Web->heading(); + +print My::Project->views("Detailed"); +print My::Project->platforms(undef()); + +my %item=( My::Project::item_hash_read() ); + +my @platforms=@My::Project::platforms; +while (@platforms) { + my $platform_sym =shift @platforms; + my $platform_name=shift @platforms; + print ''; + print "

$platform_name

"; + print '
'."\n"; + my @projects=sort { + ($item{$b}{"priority"} <=> $item{$a}{"priority"}) + or + (lc($item{$a}{"name"}) cmp lc($item{$b}{"name"})); + } map({ $item{$_}{"platform"} ne $platform_sym ? () : ($_); } keys(%item)); + for my $project (@projects) { + my $t=""; + + $t.="

".a_href("/project/$project/",$item{$project}{"name"}.": ".$item{$project}{"summary"})."

\n"; + $t.="
\n"; + $t.=$item{$project}{"description"}; + $t.="
\n"; + + if ($item{$project}{"icon"}) { + print rightimg $t, + "/project/$project/".$item{$project}{"icon"},$item{$project}{"name"}." Icon","a_href"=>"/project/$project/"; + } + else { + print $t; + } + } + } + + +My::Web->footer(); diff --git a/project/Islet/index.html.pl b/project/Islet/Index.html.pl similarity index 66% rename from project/Islet/index.html.pl rename to project/Islet/Index.html.pl index 5ef85ab..731a9bc 100755 --- a/project/Islet/index.html.pl +++ b/project/Islet/Index.html.pl @@ -1,7 +1,7 @@ #! /usr/bin/perl # # $Id$ -# Main page of 'My::Project::icp' +# Main page of 'My::Project::Islet' # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,27 +18,32 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +package project::Islet::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::icp::ListItem; +Wuse 'My::Project'; +Wuse 'project::Islet::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::icp::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::Islet::ListItem::ListItem, ); -print <<'HERE'; + +print <<"HERE"; + +@{[ centerimg "Islet","Applet demo screen" ]} HERE -print '
'.My::Web::img("Islet.png","Applet demo screen").'
'."\n"; My::Web->footer(); diff --git a/project/Islet/Islet-icon.png b/project/Islet/Islet-icon.png new file mode 100644 index 0000000..d774c43 Binary files /dev/null and b/project/Islet/Islet-icon.png differ diff --git a/project/Islet/ListItem.pm b/project/Islet/ListItem.pm index 11104f9..e3cc9c3 100755 --- a/project/Islet/ListItem.pm +++ b/project/Islet/ListItem.pm @@ -1,7 +1,7 @@ #! /usr/bin/perl # # $Id$ -# Definition of 'My::Project::icp' for list.cgi.pl +# Definition of 'My::Project::Islet' for list.cgi.pl # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,26 +18,29 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -package My::Project::icp; +package project::Islet::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; +use My::Web; -our %ListItem=( - "name"=>'ICP 1998 Competition Software', - "priority"=>5, + +our @ListItem=( + "name"=>"Islet", + "platform"=>"web", + "priority"=>210, + "icon"=>"Islet-icon", "download"=>"Islet/Islet.zip", - "summary"=>"Web game applet", + "summary"=>"Map fight web game applet", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"Java 1.1", - "description"=>"" - .'

Simple game. Written for the purpose of' - .' a programming competition.

' + "description"=><<"HERE", +

Java applet implementing a simple map fight game.

+HERE ); 1; diff --git a/project/Islet/Makefile.am b/project/Islet/Makefile.am index 3d2c020..d71feb9 100644 --- a/project/Islet/Makefile.am +++ b/project/Islet/Makefile.am @@ -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/LaserGame/Index.html.pl b/project/LaserGame/Index.html.pl new file mode 100755 index 0000000..412d472 --- /dev/null +++ b/project/LaserGame/Index.html.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::LaserGame' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::LaserGame::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::LaserGame::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::LaserGame::ListItem::ListItem, + ); + + +print <<"HERE"; +@{[ centerimg "hw.jpeg","LaserGame Hardware" ]} +@{[ vskip "1ex" ]} +@{[ centerimg "LaserComm","LaserComm Utility" ]} +HERE + + +My::Web->footer(); diff --git a/project/LaserGame/LaserComm.png b/project/LaserGame/LaserComm.png new file mode 100644 index 0000000..a5d88c6 Binary files /dev/null and b/project/LaserGame/LaserComm.png differ diff --git a/project/LaserGame/LaserGame.lha b/project/LaserGame/LaserGame.lha new file mode 100644 index 0000000..920699a Binary files /dev/null and b/project/LaserGame/LaserGame.lha differ diff --git a/project/LaserGame/LaserGun.a51 b/project/LaserGame/LaserGun.a51 new file mode 100644 index 0000000..d857c7b --- /dev/null +++ b/project/LaserGame/LaserGun.a51 @@ -0,0 +1,1220 @@ +// 11.0592MHz=>921600 T0 clk=>112.5 ops=2.27`5s time +// Code is big-endian! +public BaudRate equ 2400 // Communication speed +public StackSiz51 equ 24 // LaserGun stack size required + MagicRAMw equ 0x53AC // RAM-check + TestChar equ 't' // For Ph_Test + +MaxDecimal equ 99 // If dec>99 +BauDiv equ 28800/BaudRate // 3=9600, 6=4800, 12=2400 (PCON=0) + +/* +Init display: +Pn-Player ID +Gx-Game mode: A=Anarchy, G=Green team, R=Red team +Display: +Lt-Loading +Fn-Shot from friend detected +En-Shot from enemy detected but already dead +Sn-Shot down by enemy +dt-Currently dead +Left dot-reloading +Right dot-dead +*/ + +/******************************/ + seg data + org 0x00 +DataStart: + rb 4 // r0-r3 +#define DispL r4 +#define DispR r5 +#define Timer r6 +#define XMitPhase r7 + // 0='s';1=PktType;2=SwConfigX;3=PktData;4=XSumH;5=XSumL;6='e' + rb 4 + +TimPhase: rb 1 // Timer for current phase +TimLED4: rb 1 // 4-LED period +TimScroll: rb 1 // Scroll advance to next char + + ScrollPtr: rb 1 // Scroll-text start rel. ScrBase + SeriCnt: rb 1 // Shots in current series + CAPktEnd: rb 1 // End of ConfigReq being answered (or 0) + WDogCnt: rb 1 // WatchDog timer count-down + Phase: rb 1 // Current phase # (see below) +Ph_CfgDump equ 0 // Configuration to display dump [Phase1=sub-phase] +Ph_Ammo equ 1 // Normal Ammo display +Ph_Laser equ 2 // Laser on +Ph_Delay equ 3 // Laser off, laser button disabled +Ph_First equ 4 // Additional first-in-series delay + // Laser allowed boundary +Ph_Reload equ 5 // Reload countdown period [Phase1=cdown] +Ph_Dead equ 6 // Dead-state countdown period [Phase1=cdown] +Ph_Test equ 7 // Test mode with transmit/receive of 'T' + Phase1: rb 1 // Sub-phase +// Ph_CfgDump: +CD_Bootup equ 0 // Right after boot-up +CD_PNum equ 1 // Player no. (P#) +CD_GMode equ 2 // Game mode (G#: Anarchy, Green, Red) +CD_LEDs equ 3 // BBS_QuietL [Ld] +CD_Sound equ 4 // BBS_QuietS [Sd] +CD_WDogs equ 5 // WDogsCnt (dr, TU) +CD_WDogsN equ 6 // {TU} +CD_RSwChg equ 7 // RSwChgs (SC, TU) +CD_RSwChgN equ 8 // {TU} +CD_TotSh equ 9 // TotShotsW (FS, [TH], TU) +CD_TotShM equ 10 // {[TH]} +CD_TotShN equ 11 // {TU} +CD_Grave0 equ 12 // GraveW #0 (d#, [TH], TU) +CD_GraveL equ 60 // GraveW #++F(d#, [TH], TU) +CD_Last equ 60 +// Ph_Reload: Reload cycles countdown +// Ph_Dead: Dead cycles countdown + + CurPktE: rb 1 // +1 of last L2 packet byte received + XMitNib: rb 1 // Transmit-remaining nibble (or 0) + PktNibble: rb 1 // Recevied L2 packet hex nibble + CurPktS: rb 1 // Addr of size of L2 packet being received + UserPktS: rb 1 // Addr of size of 1st L2 packet in user queue + TimedL: rb 1 // Left digit of TimedDisp + TimedR: rb 1 // Right digit of TimedDisp + ConvDecW1: // For use by ConvDecW + RxChkXSumW: rw 1 // Computed xsum of incoming L2 packet + XMitXSumW: rw 1 // XSum being computed during XMit + XMitType: rb 1 // Actual XMit L3 Pkt type - One of PktN_* below + +ClearTop: + +public TotShotsW: rw 1 // Fire statistics +public RSwChgs: rb 1 // Run-Time switch configuration change # +public WDogsCnt: rb 1 // # of gurus-WatchDog restarts since power-on + +public SwConfigXA equ $-DataStart // Address of SwConfigX + SwConfigX: rb 1 // Copy of SwitchP + SysFlagsX: rb 1 // [XMittedN|XMitByte|XMit1stNib|XMitHaveP|TimedDisp|XMitting|PktGotNib|PktRcvng] +PktRcvng bit SysFlagsX.0 // Currently receiving packet (after 's') +PktGotNib bit SysFlagsX.1 // Already got one hex nibble in PktNibble +XMitting bit SysFlagsX.2 // Background packet transmit in progress +TimedDisp bit SysFlagsX.3 // Generated 2-digit display override +XMitHaveP bit SysFlagsX.4 // XMitNib is prepared and filled +XMit1stNib bit SysFlagsX.5 // Transmit 1st nibble from XMitNib +XMitByte bit SysFlagsX.6 // Transmitting byte instead of two nibbles +XMittedN bit SysFlagsX.7 // Sth was already xmitted this round +public UsrFlagsX: rb 1 // [RFU:2|FastFireRD|FullFireT|DisRSwChg|DispDotTR|DispDotRD|UnConfig] +UnConfig bit UsrFlagsX.0 // Ignore all further configuration attempts +DispDotRD bit UsrFlagsX.1 // Display LDot & RDot when [R]eload/[D]ead +DispDotTR bit UsrFlagsX.2 // Display LDot & RDot when [T]ransmit/[R]eceive +DisRSwChg bit UsrFlagsX.3 // Disable run-time switch reconfiguration +FullFireT bit UsrFlagsX.4 // Transmit full 10B packets for fires (safer) +FastFireRD bit UsrFlagsX.5 // Receive disable for FastFires (see FullFireT) + +/******************************/ +public Mark_Start equ 's' // L1 layer packet start +public Mark_End equ 'e' // L1 layer packet end +public XSum_Base equ 0xB3A7 // L2 packet xsumming base number +public XSum_Mul equ 13 // L2 packet xsumming advance multiply +public PktN_Fire equ 'S' // L3 packet ID for fire +public PktN_CfgR equ 'R' // L3 packet ID for configuration request +public PktN_CfgA equ 'A' // L3 packet ID for configuration answer + +DispP equ P0 +BMD_U equ 0x01 +BMD_UR equ 0x02 +BMD_UL equ 0x04 +BMD_M equ 0x08 +BMD_BR equ 0x10 +BND_DOT equ 5 +BBD_DOT equ DispP.BND_DOT +BMD_DOT equ 1< +BNM_LED3 equ 6 +BMM_LED3 equ 1< Dead cycle divisor +public T_Start: rb 1 // Startup info cycle delay +public T_Reload: rb 1 // Reload cycle delay +public T_Laser: rb 1 // Laser firing +public T_Delay: rb 1 // Inter-Laser delay +public T_First: rb 1 // Additional series start delay period +public T_LED4: rb 1 // 1 of RY-LED switch period +public T_Scroll: rb 1 // Scroll of one letter +public T_ScrollF: rb 1 // Scroll of 1st two letters +public T_Dead: rb 1 // 4LED-Dead (and Dead) cycle delay +public T_TimedD: rb 1 // TimedDisp delay (temporary, non-scrolling) +public AddrSpace equ $-DataStart // +1 of remote configurable address space +LoadPartS equ $-LoadPart + MagicRAM: rw 1 // Contains MagicRAMw for RAM-check +public RxBufSiz equ 0x80+DataStart-$-StackSiz51 // Receive buffer size +RxBuf: rb RxBufSiz // Receive buffer +StackBtm: // Start of stack + +/******************************/ + seg code + + org 0x0 // Reset, SUsage=6 +Reset: + jb BPI_Fire,BadRAM + mov a,#high MagicRAMw + xrl a,MagicRAM + jnz BadRAM + sjmp ResCont + + org 0xB // T0, SUsage=4 +T0Int: push psw + push acc + inc Timer + dec WDogCnt + mov a,WDogCnt + jnz NWDogFail + inc WDogsCnt // Failing! +WarmBoot: mov r0,#ClearTop-1 // Mustn't reset RAM + sjmp ContBoot + +NWDogFail: pop acc + pop psw + reti + + org 0x23 // Ser, SUsage=14 +SerInt: ajmp SerICont + +SwRConfig: inc RSwChgs + sjmp WarmBoot + +ResCont: mov a,#low MagicRAMw + xrl a,MagicRAM+1 + jz SwRConfig +BadRAM: mov MagicRAM,#high MagicRAMw + mov MagicRAM+1,#low MagicRAMw + mov r0,#LoadPart + mov dptr,#LoadContn + mov r2,#LoadPartS +FillMem: clr a + movc a,@a+dptr + mov @r0,a + inc r0 + inc dptr + djnz r2,FillMem +ColdBoot: mov r0,#LoadPart-1 + +ContBoot: clr a + mov IE,a + mov TCON,a + mov sp,#StackBtm-1 + +ClearMem: mov @r0,a + djnz r0,ClearMem + + mov SwConfigX,SwitchP + mov SysFlagsX,a + + mov Timer,#1 + mov CurPktS,#RxBuf + mov UserPktS,#RxBuf + + mov DispP,a + jb BPI_Fire,0f + mov MiscP,#~(BMM_DispL|BMM_DispR) + jnb BPI_Fire,$ + mov a,SwitchP + xch a,SwConfigX + xrl a,SwConfigX + jz 0f + mov Phase,#Ph_Test + setb DispDotTR +0: mov MiscP,#~BMM_DispR + + mov UsrFlagsX,#0x03 //DEBUG!!! + + clr a + mov IP,#0x10 // Pri: Ser=1 + mov TCON,a + mov TL1,#-BauDiv + mov TH1,#-BauDiv + mov TL0,a + mov TH0,a + mov TMOD,#0x20 // T1=m2, T0=m0 + mov PCON,a // SerSpd=normal + mov SCON,#0x50 // 8N1, T1, clr + mov TCON,#0x50 // T1+T0=run, clr + + mov IE,#0x92 // Int: Ser+T0 + + mov r0,#TimPhase + acall StartTim + acall InitLED4 +MainLoop: mov WDogCnt,#0 // Reset WatchDog +// Check run-time change of configuration + jb DisRSwChg,1f + mov a,SwConfigX + xrl a,SwitchP + jz 1f + ajmp SwRConfig +1: +// Display refresh + mov DispP,#0xFF + xrl MiscP,#BMM_DispL|BMM_DispR + mov a,Phase + jnb BPM_DispR,0f + jnb DispDotTR,6f + jb Xmitting,7f +6: jnb DispDotRD,1f + xrl a,#Ph_Reload + jnz 1f +7: clr BBD_DOT +1: mov a,ScrollPtr + jnz 4f + mov a,DispL + jnb TimedDisp,2f + mov a,TimedL + sjmp 2f + +0: jnb DispDotTR,8f + jb PktRcvng,9f +8: jnb DispDotRD,3f + xrl a,#Ph_Dead + jnz 3f +9: clr BBD_DOT +3: mov a,ScrollPtr + jz 5f + inc a +4: mov dptr,#ScrBase + movc a,@a+dptr + sjmp 2f + +5: mov a,DispR + jnb TimedDisp,2f + mov a,TimedR +2: anl DispP,a +// 4-LED cycle + jb BBS_QuietL,NoLED4Fr + mov a,Phase + xrl a,#Ph_Dead + jz NoLED4Fr + mov r0,#TimLED4 + acall QueryTim + jnc NoLED4Fr + jnb BBS_IsTeam,1f + mov a,#BMM_LED0|BMM_LED2 + jnb BBS_TeamN,5f + mov a,#BMM_LED1|BMM_LED3 +5: xrl MiscP,a + sjmp 2f + +1: mov a,#~BMM_LEDM + orl a,MiscP + rl a + jb acc.(BNM_LED3+1),4f + mov a,#~BMM_LED0 +4: orl MiscP,#BMM_LEDM + anl MiscP,a +2: mov r0,#TimLED4 + mov a,T_LED4 + acall StartTim +NoLED4Fr: +// Fire series maintenance + jnb BPI_Fire,0f + mov SeriCnt,#0 +0: +/*** Here end mandatory MainLoop routines ***/ + mov r0,#TimPhase + acall QueryTim + jnc NoPhases + mov dptr,#PhaseTab + mov r1,#Phase1 + mov a,Phase + acall JmpByTab +NoPhases: +// Fire check + mov a,Phase + jz 1f + dec a + jnz 2f +1: jb BPI_Status,0f + clr a + mov Phase,a + mov Phase1,a + mov r0,#TimPhase + acall StartTim + sjmp CantFire + +2: cjne a,#Ph_First-Ph_Ammo,CantFire + mov a,SeriCnt + dec a + jz CantFire +0: jb BPI_Fire,CantFire + mov a,SeriCnt + subb a,SeriC_Max + jnc CantFire + mov a,Ammo + jz CantFire + jb XMitting,CantFire +// Fire one shot NOW! + inc SeriCnt + mov Phase,#Ph_Laser + dec Ammo + clr BPM_Laser + mov c,BBS_QuietS + mov BPM_Sound,c + inc TotShotsW+1 + mov a,TotShotsW+1 + jnz 1f + inc TotShotsW +1: mov a,#PktN_Fire + acall StartXMiX + mov ScrollPtr,#0 + acall DispAmmo + mov a,T_Laser + mov r0,#TimPhase + acall StartTim +CantFire: +// Scroll Update + mov r0,#TimScroll + acall QueryTim + jnc 6f + clr TimedDisp + mov a,ScrollPtr + jz 6f + mov dptr,#ScrBase+2 + movc a,@a+dptr + jnz 0f + mov ScrollPtr,a + sjmp 6f + +0: inc ScrollPtr + mov a,ScrollPtr + movc a,@a+dptr + jnz 1f + mov a,T_ScrollF + sjmp 2f + +1: mov a,T_Scroll +2: acall StartTim +6: +// Packet received? + mov a,UserPktS + mov r0,a + xrl a,CurPktS + jnz 0f +GotNoSerS: ajmp GotNoSer + +ShortPkt: mov a,r0 + acall RxBufInc + push 0 //r0 + mov r0,a + sjmp ProcSPkt + +0: mov a,@r0 +; jb acc.7,ShortPkt + jb XMitting,GotNoSerS + inc a + add a,r0 + subb a,#RxBuf+RxBufSiz + jnc 1f + add a,#RxBufSiz +1: add a,#RxBuf + push acc + mov a,@r0 + clr c + subb a,#3 + jc FailRPktN + mov @r0,a + push 0 //r0 + inc a + mov r2,a + acall RxBufInc + mov r1,#RxChkXSumW+1 + mov @r1,#low XSum_Base + dec r1 + mov @r1,#high XSum_Base +0: mov a,@r0 + acall AddXSum + acall RxBufInc + djnz r2,0b + pop 2 //r2 + mov a,@r0 + xrl a,@r1 +FailRPktN: jnz FailRPktS + acall RxBufInc + mov a,@r0 + inc r1 + xrl a,@r1 + jnz FailRPktS +// XSum is correct + mov a,r2 + mov r0,a + mov a,@r0 + mov r2,a + acall RxBufInc + mov a,@r0 + mov r3,a + acall RxBufInc + cjne r3,#PktN_Fire,NoPFire + cjne r2,#1,FailRPktS +// Fire packet received, @R0=remote SwConfigX +ProcSPkt: mov a,@r0 + jnb BBS_IsTeam,ShotDown // We're anarchy + jnb acc.BNS_IsTeam,ShotDown // From anarchy one + xrl a,SwConfigX + jnb acc.BNS_TeamN,FriendS // One of our team + mov a,@r0 +ShotDown: xrl a,SwConfigX + anl a,#BMS_IdentM + jz FriendS +// Really shot by enemy + mov TimedL,#Font_E + mov a,Phase + xrl a,#Ph_Dead + jz PrintIDR + mov a,@r0 + anl a,#0x0F + rl a + add a,#GraveW+1 + mov r1,a + inc @r1 + mov a,@r1 + jnz 0f + dec r1 + inc @r1 +0: mov TimedL,#Font_S + mov Phase,#Ph_Dead + mov Phase1,DeadN + anl MiscP,#~BMM_LEDM + push 0 //r0 + acall NxtDead + pop 0 //r0 + sjmp PrintIDR + +FriendS: mov TimedL,#Font_F +PrintIDR: mov a,@r0 + anl a,#0x0F + mov dptr,#FontHex + movc a,@a+dptr + mov TimedR,a + setb TimedDisp + mov ScrollPtr,#0 + mov a,T_TimedD + mov r0,#TimScroll + acall StartTim +FailRPktS: sjmp FailRPkt + +NoPFire: cjne r3,#PktN_CfgR,NoPCfgR + jnb XMitting,0f + dec sp + sjmp GotNoSer + +0: mov a,@r0 + xrl a,SwConfigX + anl a,#BMS_IdentM + jnz FailRPkt + acall RxBufInc2 +CfgNBlock: mov a,r2 + jz FailRPkt + mov a,@r0 + acall RxBufInc2 + jz CRRepRes + mov r3,a + mov a,r2 + jz FailRPkt + mov a,@r0 + acall RxBufInc2 + mov r1,a +CfgBlock: mov a,r2 + jz FailRPkt + mov a,@r0 + acall RxBufInc2 + push acc + mov a,r1 + clr c + subb a,#AddrSpace + pop acc + jnc SkipWrite + jb UnConfig,SkipWrite + mov @r1,a +SkipWrite: inc r1 + djnz r3,CfgBlock + sjmp CfgNBlock + +CRRepRes: pop acc + clr c + subb a,#RxBuf+2 + jnc 0f + add a,#RxBufSiz +0: add a,#RxBuf + mov CAPktEnd,a + mov a,r0 + mov UserPktS,a + mov a,#CfgRS-ScrBase + acall DoScroll + mov a,#PktN_CfgA + acall StartXMiX + sjmp GotNoSer + +NoPCfgR: cjne r3,#PktN_CfgA,FailRPkt + mov a,#CfgAS-ScrBase +ScrRPkt: acall DoScroll +FailRPkt: pop UserPktS + +GotNoSer: + + ajmp MainLoop + +/******************************/ +PhaseTab: + db PhCfgDump-PhaseTab + db PhAmmo -PhaseTab + db PhLaser -PhaseTab + db PhDelay -PhaseTab + db PhFirst -PhaseTab + db PhReload -PhaseTab + db PhDead -PhaseTab + db PhTest -PhaseTab + +PhCfgDump: mov a,T_TimedD + acall StartTim +SkpCDump: inc @r1 + mov dptr,#CfgDTab + mov a,@r1 + clr c + subb a,#CD_Grave0 + jnc CDGrave + mov a,@r1 +JmpByTab: movc a,@a+dptr + jmp @a+dptr + +PhLaser: orl MiscP,#BMM_Laser|BMM_Sound + inc Phase + mov a,T_Delay + sjmp StartTimS + +PhDelay: inc Phase + mov a,Ammo + jz PD_Reload // Do Reload + mov a,T_First + sjmp StartTimS + +PhTest: jb XMitting,PT_WaitTI + mov a,#TestChar + acall StartXMiX +PT_WaitTI: + mov a,SwConfigX + swap a + rr a + anl a,#0x78 + sjmp StartTimS + +PD_Reload: inc Phase + mov Phase1,ReloadN + mov Ammo,Ammo_Max + mov a,#ReloadS-ScrBase + acall DoScroll +PhReload: dec Phase1 + mov a,Phase1 + jz NormAmmo + mov DispL,#Font_L + mov a,Phase1 + acall PutHexFnR + mov a,T_Reload + sjmp StartTimP + +PhDead: xrl MiscP,#BMM_LEDM + dec Phase1 + mov a,Phase1 + jz RAmmonLED +NxtDead: mov B,DeadDivN + div aB + xch a,B + jnz 0f + mov DispL,#Font_D + mov a,B + acall PutHexFnR +0: mov a,T_Dead +StartTimP: mov r0,#TimPhase +StartTimS: ajmp StartTim + +RAmmonLED: acall InitLED4 +PhFirst: +NormAmmo: mov Phase,#Ph_Ammo +PhAmmo: // PhAmmo shouldn't happen <= no timer + ajmp DispAmmo + +CDGrave: cjne a,#CD_Last-CD_Grave0,1f + sjmp NormAmmo + +1: mov B,#3 + div aB + mov r2,a + rl a + add a,#GraveW + mov r0,a + mov a,@r0 + inc r0 + orl a,@r0 + jz SkpCDump2 + mov a,B + cjne a,#0,0f + mov DispL,#Font_D + mov a,r2 +PutHexFnR: mov dptr,#FontHex + ajmp PutFontR + +0: dec r0 + mov r3,a + acall ConvDecW + cjne r3,#1,DispHexS + mov a,@r0 + sjmp DispHexS + +CfgDTab equ $-1 + db CDPNum -CfgDTab + db CDGMode -CfgDTab + db CDLEDs -CfgDTab + db CDSound -CfgDTab + db CDWDogs -CfgDTab + db CDWDogsN -CfgDTab + db CDRSwChg -CfgDTab + db CDRSwChgN-CfgDTab + db CDTotSh -CfgDTab + db CDTotShM -CfgDTab + db CDTotShN -CfgDTab + +CDPNum: mov DispL,#Font_P + mov a,SwConfigX + anl a,#0x0F + sjmp PutHexFnR + +CDGMode: mov DispL,#Font_G + mov a,#Font_A + jnb BBS_IsTeam,DoGaMode + mov a,#Font_R + jnb BBS_TeamN,DoGaMode + mov a,#Font_G +DoGaMode: mov DispR,a + ret + +CDLEDs: jnb BBS_QuietL,SkpCDumpS + mov DispL,#Font_L + mov DispR,#Font_D + ret + +CDSound: jnb BBS_QuietS,SkpCDumpS + mov DispL,#Font_S + mov DispR,#Font_D + ret + +CDWDogs: mov a,WDogsCnt + jz SkpCDump1 + mov DispL,#Font_D + mov DispR,#Font_R + ret + +SkpCDump2: inc @r1 +SkpCDump1: inc @r1 +SkpCDumpS: ajmp SkpCDump + +CDWDogsN: mov a,WDogsCnt + sjmp DispDecS + +CDRSwChg: mov a,RSwChgs + jz SkpCDump1 + mov DispL,#Font_S + mov DispR,#Font_C + ret + +CDRSwChgN: mov a,RSwChgs +DispDecS: ajmp DispDec + +CDTotSh: mov a,TotShotsW + orl a,TotShotsW+1 + jz SkpCDump2 + mov DispL,#Font_F + mov DispR,#Font_S + ret + +CDTotShM: mov r0,#TotShotsW + acall ConvDecW + mov a,@r0 + sjmp DispHexS + +CDTotShN: mov r0,#TotShotsW + acall ConvDecW +DispHexS: ajmp DispHex +/******************************/ +SerICont: push psw + push acc + push 0 //r0 + push 2 //r2 +RetryRI: jbc RI,GotRI +RetryTI: jbc TI,GotTI + pop 2 //r2 + pop 0 //r0 + pop acc + pop psw + reti +/******************************/ +GotRI: mov a,SBUF + jnb acc.7,5f + jb FastFireRD,ScratchRI + jb acc.6,ScratchRI + mov r0,CurPktS + mov @r0,a + acall RxBufInc + mov a,r0 + xrl a,UserPktS + jz ScratchRI + mov a,r0 + mov CurPktS,a + sjmp ScratchRI + +5: cjne a,#Mark_Start,0f + mov r0,CurPktS + acall RxBufInc + mov a,r0 + xrl a,UserPktS + jz ScratchRI + mov CurPktE,r0 + setb PktRcvng + clr PktGotNib + sjmp RetryRI + +0: cjne a,#Mark_End,1f + jnb PktRcvng,RetryRI + jb PktGotNib,ScratchRI + clr PktRcvng + mov a,CurPktE + mov r0,CurPktS + clr c + subb a,r0 + jnc 3f + add a,#RxBufSiz +3: dec a + jz RetryRI + mov @r0,a + mov a,CurPktE + mov CurPktS,a +// Successfuly received packet + sjmp RetryRI + +1: jnb PktRcvng,RetryRI + clr c + subb a,#'0' + jc ScratchRI + subb a,#10 + jc GotRITen + subb a,#'A'-('9'+1) + jc ScratchRI + subb a,#6 + jc GotRISix +ScratchRI: clr PktRcvng +RetryRIS: sjmp RetryRI +/******************************/ +GotTI: jnb XMitting,RetryTI + clr XMittedN + jnb XMitHaveP,PrepXMit + mov a,XMitNib +SendPrepd: jb XMittedN,RetryTIS + jbc XMitByte,XMitByteC + jnb XMit1stNib,Have2ndN + swap a +Have2ndN: anl a,#0x0F + add a,#'0' + mov r2,a + clr c + subb a,#'9'+1 + mov a,r2 + jc XMitByteC + add a,#'A'-('9'+1) +XMitByteC: mov SBUF,a + setb XMittedN + mov c,XMit1stNib + clr XMit1stNib + mov XMitHaveP,c + jnc PrepXMit +RetryTIS: ajmp RetryTI +/******************************/ +GotRISix: add a,#6 +GotRITen: add a,#10 + jb PktGotNib,2f + swap a + mov PktNibble,a + sjmp DoneFNRI + +2: orl a,PktNibble + mov r2,a + mov r0,CurPktE + acall RxBufInc + mov a,UserPktS + xrl a,r0 + jz ScratchRI + mov a,r0 + xch a,CurPktE + mov r0,a + mov a,r2 + mov @r0,a +DoneFNRI: cpl PktGotNib + sjmp RetryRIS +/******************************/ +PrepXMit: mov a,XMitPhase + mov dptr,#PhXMitTab + movc a,@a+dptr + jmp @a+dptr + +PhXMitTab: db XPStart -PhXMitTab + db XPType -PhXMitTab + db XPSwCfg -PhXMitTab + db XPData -PhXMitTab + db XPXSumH -PhXMitTab + db XPXSumL -PhXMitTab + db XPEnd -PhXMitTab + db XPFinish-PhXMitTab + +InvalCR: mov CAPktEnd,a +XPFinish: clr XMitting + sjmp RetryTIS + +XPStart: mov a,XMitType + xrl a,#TestChar + jnz 1f + mov a,#TestChar + sjmp 2f + +1: xrl a,#TestChar^PktN_Fire + jnz 0f + jb FullFireT,0f + mov a,SwConfigX + clr acc.6 + setb acc.7 +2: mov XMitPhase,#6 //XPFinish-1 + sjmp ContXMitB + +0: mov a,#Mark_Start +ContXMitB: setb XMitByte + inc XMitPhase + clr XMit1stNib +ContXMit: setb XMitHaveP + mov XMitNib,a + ajmp SendPrepd + +XPType: mov XMitXSumW ,#high XSum_Base + mov XMitXSumW+1,#low XSum_Base + mov a,XMitType +XMitXHexP: inc XMitPhase +XMitXHex: push 1 //r1 + push 3 //r3 + push B + mov r1,#XMitXSumW + push acc + acall AddXSum + pop acc + pop B + pop 3 //r3 + pop 1 //r1 +XMitHex: clr XMitByte + setb XMit1stNib + sjmp ContXMit + +XPSwCfg: mov a,SwConfigX + sjmp XMitXHexP + +XPData: mov a,XMitType + xrl a,#PktN_CfgA + jnz XPDatDone + mov r0,UserPktS +NxtBlock: mov a,r0 + xrl a,CAPktEnd + jz DoneAns + mov a,@r0 + dec @r0 + mov r2,a + acall RxBufInc + mov a,r0 + xrl a,CAPktEnd + jz InvalCR // Invalid CfgReq + mov a,r2 + jz DoneBlock + mov a,@r0 + inc @r0 + mov r0,a + mov a,@r0 + sjmp XMitXHex + +DoneBlock: acall RxBufInc + mov UserPktS,r0 + mov a,r0 + xrl a,CAPktEnd + jnz NxtBlock +DoneAns: mov CAPktEnd,a // Cancel CfgA pending alert + acall RxBufInc + acall RxBufInc + mov UserPktS,r0 +XPDatDone: inc XMitPhase +XPXSumH: mov a,XMitXSumW +XMitHexP: inc XMitPhase + sjmp XMitHex + +XPXSumL: mov a,XMitXSumW+1 + sjmp XMitHexP + +XPEnd: mov a,#Mark_End + sjmp ContXMitB + +/******************************/ +StartXMiX: mov XMitType,a + clr a + mov XMitPhase,a + clr XMitHaveP + setb XMitting + setb TI // Start XMit now! + ret +/******************************/ +// I: A=text offset, O: Filled DispL+DispR, D: A,R0,R2 +DoScroll: mov ScrollPtr,a + mov r0,#TimScroll + mov a,T_ScrollF + sjmp StartTim +/******************************/ +// O: Filled DispL+DispR, D: A,B,R2 +DispAmmo: mov a,Ammo +// I: A=decimal, O: Filled DispL+DispR, D: A,B,R2 +DispDec: mov R2,a + clr c + subb a,#100 + jnc 0f + mov a,MaxDecimal +0: mov a,R2 + mov B,#10 + div aB + swap a + orl a,B +// I: A=hexadecimal, O: Filled DispL+DispR, D: A,R2 +DispHex: mov dptr,#FontHex + mov R2,a + swap a + anl a,#0x0F + movc a,@a+dptr + mov DispL,a + mov a,R2 + anl a,#0x0F +PutFontR: movc a,@a+dptr + mov DispR,a +Ret1: ret +/******************************/ +InitLED4: orl MiscP,#BMM_LEDM + jb BBS_QuietL,Ret1 + anl MiscP,#~BMM_LED0 + jnb BBS_IsTeam,0f + jnb BBS_TeamN,0f + xrl MiscP,#BMM_LED0|BMM_LED1 +0: mov r0,#TimLED4 + mov a,T_LED4 +/******************************/ +// I: R0=addr of byte, A=min time, O: @R0!=0, D:A +StartTim: add a,Timer + jnz 0f + inc a +0: mov @R0,a + ret +/******************************/ +// I: R0=addr of byte, C=1->success, D:A +QueryTim: mov a,@R0 + clr c + jz 0f + subb a,Timer + mov c,acc.7 + jnc 0f + clr a + mov @R0,a +0: ret +/******************************/ +RxBufInc2: dec r2 +// I: R0=RxAddr, O: R0=RxAddr+1 +RxBufInc: inc r0 + cjne r0,#RxBuf+RxBufSiz,0f + mov r0,#RxBuf +0: ret +/******************************/ +// I: @R1/W=xsum, A=Byte, O: @R1/W=xsum+Byte, D:A,B,R3 +AddXSum: push 2 //r2 + push acc + inc r1 + inc @r1 + mov a,@r1 + dec r1 + jnz 0f + inc @r1 +0: mov B,#XSum_Mul + mul aB + mov r2,a + mov r3,B + mov a,@r1 + mov B,#XSum_Mul + mul aB + add a,r3 + mov r3,a + pop acc + add a,r2 + inc r1 + mov @r1,a + dec r1 + mov a,r3 + addc a,#0 + mov @r1,a + pop 2 //r2 + ret +// I: R0=SrcWord, O: R0=ConvDecW1, A=LOW [R0/W], D:R1,R2 +ConvDecW: + inc sp + mov r1,sp + inc sp + mov a,@r0 + mov @r1,a + inc r0 + inc r1 + mov a,@r0 + mov @r1,a + mov dptr,#CDW_Tab + mov r2,#4 + mov r0,#ConvDecW1 +3: xchd a,@r0 + swap a + mov @r0,a + inc r0 + clr a + xchd a,@r0 + swap a + mov @r0,a +2: mov a,#1 + movc a,@a+dptr + mov B,a + mov a,@r1 + clr c + subb a,B + push acc + dec r1 + clr a + movc a,@a+dptr + mov B,a + mov a,@r1 + subb a,B + jc 1f + mov @r1,a + pop acc + inc r1 + mov @r1,a + inc @r0 + sjmp 2b + +1: dec sp + inc dptr + inc dptr + inc r1 + mov a,@r0 + dec r0 + djnz r2,3b + dec sp + dec sp + ret +/******************************/ + +ScrBase: // Every text offset must >0 !!! +FontHex: db Font_0,Font_1,Font_2,Font_3,Font_4,Font_5,Font_6,Font_7 + db Font_8,Font_9,Font_A,Font_B,Font_C,Font_D,Font_E,Font_F +ReloadS: db Font_R,Font_E,Font_L,Font_O,Font_A,Font_D,0 +CfgAS: db Font_C,Font_O,Font_N,Font_F,Font_I,Font_G + db Font_A,Font_N,Font_S,0 +CfgRS: db Font_C,Font_O,Font_N,Font_F,Font_I,Font_G + db Font_U,Font_R,Font_E,Font_D,0 + if ($-ScrBase>=0x100) ScrBase equ 0 +/******************************/ +CDW_Tab: dw 1000,100,10,1 + +LoadContn: + db 12 // Reload countdown + db 40 // Dead state countdown + db 15 // Maximum # of shots per one series + db 40 // Ammo # in one clip + db 40 // Remaining ammo in the current clip + db 4 // 4LED-Dead -> Dead cycle divisor + db 100 // Startup info cycle delay + db 48 // Reload cycle delay + db 8 // Laser firing + db 2 // Inter-Laser delay + db 24 // Additional series start delay period + db 32 // 1 of RY-LED switch period + db 25 // Scroll of one letter + db 50 // Scroll of 1st two letters + db 24 // 4LED-Dead (and Dead) cycle delay + db 110 // TimedDisp delay (temporary, non-scrolling) + if ($-LoadContn!=LoadPartS) LoadPartS equ 0 diff --git a/project/LaserGame/ListItem.pm b/project/LaserGame/ListItem.pm new file mode 100755 index 0000000..a0f2c8f --- /dev/null +++ b/project/LaserGame/ListItem.pm @@ -0,0 +1,54 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::LaserGame' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::LaserGame::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; + +use My::Web; + + +our @ListItem=( + "name"=>"LaserGame", + "platform"=>"amiga", + "priority"=>550, + "icon"=>"hw-icon.jpeg", + "download"=>"LaserGame.lha", + "link-Intel 8051 source file"=>"LaserGun.a51", + "summary"=>"Firmware and config tool for shooting gun", + "license"=>"PD", + "maintenance"=>"obsolete-Config tool is written for the discontinued Amiga platform.", + "language"=>"i8051 asm, 680x0 asm", + "description"=><<"HERE", +

LaserGame is a clone of commercial shoot'n'run game. Each player has its +own hardware with multiple infra detecting sensor and one laser/infra gun. +Shooting is visually targeting by red laser diode while the shooting +information is being emitted by infrared.

+

Its Amiga communication tool will receive shooting statistics while being +also capable of remote hardware configuration.

+

Hardware part done by +@{[ a_href 'http://www.pavouk.org/','Pavel "Pavouk" Ruzicka' ]}.

+HERE + ); + +1; diff --git a/project/LaserGame/Makefile.am b/project/LaserGame/Makefile.am new file mode 100644 index 0000000..c848438 --- /dev/null +++ b/project/LaserGame/Makefile.am @@ -0,0 +1,24 @@ +# $Id$ +# automake source for the Makefile of project/LaserGame/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl \ + LaserGame.png diff --git a/project/LaserGame/hw-icon.jpeg b/project/LaserGame/hw-icon.jpeg new file mode 100644 index 0000000..b893746 Binary files /dev/null and b/project/LaserGame/hw-icon.jpeg differ diff --git a/project/LaserGame/hw.jpeg b/project/LaserGame/hw.jpeg new file mode 100644 index 0000000..75c8405 Binary files /dev/null and b/project/LaserGame/hw.jpeg differ diff --git a/project/List.html.pl b/project/List.html.pl new file mode 100755 index 0000000..0e0e588 --- /dev/null +++ b/project/List.html.pl @@ -0,0 +1,162 @@ +#! /usr/bin/perl +# +# $Id$ +# List of projects Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::List; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +Wrequire 'My::Project'; + + +My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Project List', + "args_check"=>{ + "platform"=>'^(?:platform)?$', + }, + "rel_up"=>top_dir(), + "rel_start"=>top_dir(), + "footer_ids"=>0, + ); +My::Web->heading(); + +my $CGI=CGI->new(); + +print My::Project->views(($W->{"args"}{"platform"} ? "BriefPlatform" : "BriefUnified")); +print My::Project->platforms(undef()) if $W->{"args"}{"platform"}; + +my %item=( My::Project::item_hash_read() ); + +# $col{"name"}{"show"}=1 +# $col{"name"}{"format"}=sub { "<".$_[0].">"; } +# $col{"name"}{""}="Project name"; +# @col_order + +my @row_order=qw(-priority); +my @col_order=qw(name summary license maintenance language); +my %col; + +sub format_url ($) { return (!$_[0] ? "" : 'X'); } + +$col{"name"}{"format"}=sub { + $_[0]=~s#]*>([^<]*)#$1#g; + return "" + .(!$My::Web::W->{"args"}{"W"} ? "" : $item{$_[1]}{"priority"}.":") + .$_[0].""; + }; + +$col{"license"}{"format"}=sub { + my %known=( + "PD"=>"PD", + "GPL"=>"GPL", + "LGPL"=>"LGPL", + ); + return $known{$_[0]} if $known{$_[0]}; + return $_[0]; + }; + +$col{"maintenance"}{"format"}=sub { + return ($_[0]=~/^([^-]*)/)[0]; + }; + +$col{"online-demo"}{"format"}=\&format_url; +$col{"download"}{"format"}=\&format_url; +$col{"name"}{""}="Project Name"; +$col{"summary"}{""}="Abstract"; +$col{"license"}{""}="Copying"; +$col{"maintenance"}{""}="State"; +$col{"language"}{""}="Language"; + +# Fill in cols not contained in @col_order +if (0) { + my %col_order=map(($_=>1),@col_order); + push @col_order,map({ ($col_order{$_} ? () : $_); } keys(%{{ map(($_=>1),map((keys(%{$item{$_}})),keys(%item)))}})); + } + +my $print_one_platform=sub ($) +{ +my($platform)=@_; + + print ''."\n"; + print ''; + for my $col (@col_order) { + next if defined $col{$col}{"show"} && !$col{$col}{"show"}; + print ''; + } + print ''."\n"; + my @rows_ordered=sort { + for my $order_by (@row_order,"name") { + my $order_by=$order_by; + my $minus=($order_by=~s/^(-)//)[0]; + # FIXME: 'cmp' or '<=>'? + my $r=($item{$a}{$order_by} <=> $item{$b}{$order_by}); + $r=-$r if $minus; + return $r if $r; + } + return 0; + } map(($platform && $item{$_}{"platform"} ne $platform ? () : ($_)),keys(%item)); + for my $row (@rows_ordered) { + print ''; + for my $col (@col_order) { + next if defined $col{$col}{"show"} && !$col{$col}{"show"}; + print ''; + } + print ''."\n"; + if ($CGI->param("description_opt")) { + print ''; + print ''; + print ''."\n"; + print ''."\n"; + } + } + print '
'.($col{$col}{""} || "[$col]").'
'; + if (!$col{$col}{"format"}) { + print(($item{$row}{$col} || "")); + } + else { + print(&{$col{$col}{"format"}}($item{$row}{$col},$row)); + } + print '
'.$item{$row}{"description"}.'
 
'."\n"; +}; + + +if (!$W->{"args"}{"platform"}) { + &{$print_one_platform}(undef()); + } +else { + my @platforms=@My::Project::platforms; + while (@platforms) { + my $platform_sym =shift @platforms; + my $platform_name=shift @platforms; + print ''; + print "

$platform_name

"; + print '
'."\n"; + &{$print_one_platform}($platform_sym); + } + } + + +My::Web->footer(); diff --git a/project/Makefile.am b/project/Makefile.am index 59c3e05..85a159e 100644 --- a/project/Makefile.am +++ b/project/Makefile.am @@ -20,7 +20,7 @@ include $(top_srcdir)/Makefile-head.am SUBDIRS= \ step \ - icp \ + Islet \ FordFulk \ Heat \ kix \ @@ -54,11 +54,41 @@ SUBDIRS= \ cvsutil \ cvsbranchdiff \ ppp9k \ - LaceMail \ - line9k + PerlMail \ + line9k \ + captive \ + PortDiag \ + CasioA \ + LaserGame \ + ShortRel \ + TraceFS \ + AutoGen \ + gsmperl \ + 332 \ + lynxilla \ + wayback \ + kewensis \ + QueryDev \ + SClock \ + ResRAM \ + ssht \ + postget \ + middleman \ + phphash \ + energie \ + MyWeb \ + pgsqlsubstr \ + int13sniff \ + libtool \ + muttsort \ + gladewsrc \ + etherealmmse \ + etherealwsp \ + libxml2reader EXTRA_DIST+= \ - list.cgi.pl - -#noinst_DATA+= \ -# index.html + Index.html.pl \ + ChangeLog.txt.pl \ + Pod2Html.html.pl \ + List.html.pl \ + Rel.pl diff --git a/project/Nokia61/index.html.pl b/project/MyWeb/Index.html.pl similarity index 67% rename from project/Nokia61/index.html.pl rename to project/MyWeb/Index.html.pl index bb28341..2f48d0c 100755 --- a/project/Nokia61/index.html.pl +++ b/project/MyWeb/Index.html.pl @@ -1,7 +1,7 @@ #! /usr/bin/perl # # $Id$ -# Main page of 'My::Project::Nokia61' +# Main page of 'My::Project::MyWeb' # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,25 +18,22 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +package project::MyWeb::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::Nokia61::ListItem; +Wuse 'My::Project'; +Wuse 'project::MyWeb::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::Nokia61::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::MyWeb::ListItem::ListItem, ); -print <<'HERE'; - -HERE - My::Web->footer(); diff --git a/project/MyWeb/ListItem.pm b/project/MyWeb/ListItem.pm new file mode 100755 index 0000000..56d1289 --- /dev/null +++ b/project/MyWeb/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::MyWeb' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::MyWeb::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; + +use My::Web; + + +our @ListItem=( + "name"=>"My::Web", + "platform"=>"web", + "priority"=>250, + "cvs"=>"www/www.jankratochvil.net", + "link-Example web"=>a_href('http://www.jankratochvil.net/'), + "summary"=>a_href('http://www.perl.org/','Perl')." web framework", + "license"=>"GPL", + "maintenance"=>"ready", + "language"=>"Perl", + "description"=><<"HERE", +

Each web author has his own web framework reusable for other web developers +as a generic engine. Here is mine. I am not a fool to expect you would use +it.

+HERE + ); + +1; diff --git a/project/MyWeb/Makefile.am b/project/MyWeb/Makefile.am new file mode 100644 index 0000000..abc4f09 --- /dev/null +++ b/project/MyWeb/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/MyWeb/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/Nokia61/Index.html.pl b/project/Nokia61/Index.html.pl new file mode 100755 index 0000000..82b1953 --- /dev/null +++ b/project/Nokia61/Index.html.pl @@ -0,0 +1,55 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::Nokia61' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Nokia61::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::Nokia61::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::Nokia61::ListItem::ListItem, + ); + +do { My::Web::make("make -s $_") if ! -f $_; } for ("./Nokia61"); +print <<"HERE"; + + + + + + + +
+ + @{[ img 'Nokia61.jpeg','Illustration' ]}
+HERE + +My::Web->footer(); diff --git a/project/Nokia61/ListItem.pm b/project/Nokia61/ListItem.pm index 6ce277b..d5b717a 100755 --- a/project/Nokia61/ListItem.pm +++ b/project/Nokia61/ListItem.pm @@ -18,29 +18,33 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Nokia Game "Rotation"", - "priority"=>7, + +our @ListItem=( + "name"=>"Rotation", + "platform"=>"web", + "priority"=>480, + "icon"=>"Nokia61-icon.jpeg", "download"=>"Nokia61.c", - "summary"=>"Logical game solver", + "summary"=>"Nokia logical game "Rotation" solver", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C, PHP", - "description"=>"" - .'

At least Nokia 3210 offers game Rotation, this little software will' - .' tell you the optimal solution steps for the given game board situation.' - .' The goal is to get board with' - .' 1 2 3, 4 5 6, 7 8 9,' - .' in rows.

' + "description"=><<"HERE", +

At least Nokia 3210 offers game Rotation, this little software will +tell you the optimal solution steps for the given game board situation. +The goal is to get board with +1 2 3, 4 5 6, 7 8 9, +in rows.

+HERE ); 1; diff --git a/project/Nokia61/Makefile.am b/project/Nokia61/Makefile.am index ac789b1..a7798b9 100644 --- a/project/Nokia61/Makefile.am +++ b/project/Nokia61/Makefile.am @@ -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 diff --git a/project/Nokia61/Nokia61-icon.jpeg b/project/Nokia61/Nokia61-icon.jpeg new file mode 100644 index 0000000..e270820 Binary files /dev/null and b/project/Nokia61/Nokia61-icon.jpeg differ diff --git a/project/Nokia61/Nokia61.jpeg b/project/Nokia61/Nokia61.jpeg new file mode 100644 index 0000000..82a1158 Binary files /dev/null and b/project/Nokia61/Nokia61.jpeg differ diff --git a/project/PerlMail/Index.html.pl b/project/PerlMail/Index.html.pl new file mode 100755 index 0000000..f9048f7 --- /dev/null +++ b/project/PerlMail/Index.html.pl @@ -0,0 +1,57 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::PerlMail' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::PerlMail::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::PerlMail::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::PerlMail::ListItem::ListItem, + ); + + +print <<"HERE"; +

Features list

+
    +
  • Powerful filtering by @{[ a_href 'http://www.perl.org/','Perl' ]} rules
  • +
  • Safe mails transfer to remote user workstation while using possibly dynamic IP
  • +
  • Event driven immediate response, no polling (IMAP/POP3 poll)
  • +
  • No risk of SMTP error mails during remote workstation connection problems
  • +
  • SMS-forwarder featuring + @{[ a_href 'http://search.cpan.org/author/JARIAALTO/Lingua-EN-Squeeze-1998.1204/','Lingua::EN::Squeeze' ]}, + MIME decoding, HTML conversion
  • +
  • Outgoing mail headers mangling by per-recipient rules
  • +
  • @{[ a_href 'http://www.mutt.org/','Mutt' ]} mailer integration
  • +
  • @{[ a_href 'http://www.nokia.com/phones/9110i','Nokia Communicator' ]} contacts directory conversion
  • +
+HERE + + +My::Web->footer(); diff --git a/project/PerlMail/ListItem.pm b/project/PerlMail/ListItem.pm new file mode 100755 index 0000000..c0bb03b --- /dev/null +++ b/project/PerlMail/ListItem.pm @@ -0,0 +1,54 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::PerlMail' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::PerlMail::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; + +use My::Web; + + +our @ListItem=( + "name"=>"PerlMail", + "platform"=>"unixuser", + "priority"=>640, + "cvs"=>"PerlMail", + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "link-README"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/PerlMail/README?rev=HEAD", + "summary"=>"Perl mail processor - ".a_href('http://www.procmail.org/','procmail')."(1) successor", + "license"=>"GPL", + "maintenance"=>"ready", + "language"=>"Perl", + "description"=><<"HERE", +

Successor to @{[ a_href 'http://www.procmail.org/','procmail' ]}(1) +and @{[ a_href 'http://search.cpan.org/author/SIMON/Mail-Audit-2.1/','Mail::Audit' ]}. +It supports @{[ a_href 'http://www.perl.org/','Perl' ]}-rules filtering, dynamic client IP, +mobile SMS forwarding, @{[ a_href 'http://www.mutt.org/','Mutt' ]} integration, +@{[ a_href 'http://www.nokia.com/phones/9110i','Nokia Communicator' ]} contacts directory integration.

+

Use if you like: + @{[ CGI::escapeHTML(q{store "=spam" if ($_=mimehead(body_first())->mime_attr("Content-Type")) && m#text/html#i;}) ]} +

+HERE + ); + +1; diff --git a/project/PerlMail/Makefile.am b/project/PerlMail/Makefile.am new file mode 100644 index 0000000..5b04f16 --- /dev/null +++ b/project/PerlMail/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/PerlMail/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/Pod2Html.html.pl b/project/Pod2Html.html.pl new file mode 100755 index 0000000..7214962 --- /dev/null +++ b/project/Pod2Html.html.pl @@ -0,0 +1,46 @@ +#! /usr/bin/perl +# +# $Id$ +# URL redirector of &My::Web::a_href Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Pod2Html; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "header_only"=>1, + "args_check"=>{ + "cvs"=>'^[\w\d][\w\d/.]*$', + }, + ); + +$W->{"r"}->send_http_header("text/html"); +local *F; +open F,"lynx -source ".$W->{"project_viewcvs"}."*checkout*/".$W->{"args"}{"cvs"}."?rev=HEAD" + ." |pod2html -" + ." |"; +print while ; +close F; diff --git a/project/PortDiag/Index.html.pl b/project/PortDiag/Index.html.pl new file mode 100755 index 0000000..12d64e8 --- /dev/null +++ b/project/PortDiag/Index.html.pl @@ -0,0 +1,43 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::PortDiag' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::PortDiag::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::PortDiag::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::PortDiag::ListItem::ListItem, + ); + + +print centerimg "PortDiag","PortDiag Snapshot"; + + +My::Web->footer(); diff --git a/project/PortDiag/ListItem.pm b/project/PortDiag/ListItem.pm new file mode 100755 index 0000000..29da200 --- /dev/null +++ b/project/PortDiag/ListItem.pm @@ -0,0 +1,53 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::PortDiag' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::PortDiag::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; + +use My::Web; + + +our @ListItem=( + "name"=>"PortDiag", + "platform"=>"amiga", + "priority"=>470, + "icon"=>"PortDiag-icon", + "download"=>"PortDiag.lha", + "link-source file"=>"PortDiag.asm", + "aminet"=>"hard/hack/PortDiag", + "summary"=>"Hardware I/O port diagnostics utility", + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"680x0 asm", + "description"=><<"HERE", +

PortDiag is generally used for low-level hardware watching and modifying. +It has support for all the bits of the four CIA ports, digital and analog parts +of the game ports, serial port TXD and RXD signals and selective system +allocation of this hardware.

+

Hardware issues and images by the courtesy of +@{[ a_href 'http://www.pavouk.org/','Pavel "Pavouk" Ruzicka' ]}.

+HERE + ); + +1; diff --git a/project/PortDiag/Makefile.am b/project/PortDiag/Makefile.am new file mode 100644 index 0000000..08328cd --- /dev/null +++ b/project/PortDiag/Makefile.am @@ -0,0 +1,24 @@ +# $Id$ +# automake source for the Makefile of project/PortDiag/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl \ + PortDiag.png diff --git a/project/PortDiag/PortDiag-icon.png b/project/PortDiag/PortDiag-icon.png new file mode 100644 index 0000000..4f81388 Binary files /dev/null and b/project/PortDiag/PortDiag-icon.png differ diff --git a/project/PortDiag/PortDiag.asm b/project/PortDiag/PortDiag.asm new file mode 100644 index 0000000..a6cc02b --- /dev/null +++ b/project/PortDiag/PortDiag.asm @@ -0,0 +1,1017 @@ +;############################################### +;### SPECIAL WARNING FOR NORMAL PROGRAMMERS: ### +;############################################### +;###### Please don't read this source !!! ###### +;##### It is completely ALTERNATIVELY made ##### +;### from scratch. Reading such thing may and ## +;### possibly WILL leave permanent damage to ### +;################ your _mind_. ################# +;##### Special recommendation for Lemming. ##### +;############################################### + +;DEBUG equ 1 + + include "ssmac.h" + +WARN_DDR_MASK equ $FFF800FF +WARN_PR_MASK equ $00000001 + +ciaa equ $bfe001 +ciab equ $bfd000 +CIABaseA4 equ ciab +BaseA4 equ $dff000 +TEXT_PEN equ 1 +BGND_PEN equ 0 + + dv.b ST_joy0daty + dv.b ST_joy0datx + dv.b ST_joy1daty + dv.b ST_joy1datx + dv.b ST_pot0daty + dv.b ST_pot0datx + dv.b ST_pot1daty + dv.b ST_pot1datx + dv.l DefCIAIO + dv.l SigMask + dv.l MyWindow + dv.l StdFont + dv.l potgobase + dv.l diskbase + dv.l miscbase + dv.l OrigWPtr + dv.l VisualInfo + dv.w GameAlloced + dbuf ScrTitBuf,80 + dv.b CleanServ + dv.b Signaled + dv.b InitCounters + dv.b DiskAlloc + dv.b PortAdd + + start + + move.l 4.w,a6 + addq.b #1,TDNestCnt(a6) + gett RzPortName,a1 + call FindPort + tst.l d0 + beq.s NoPortFound + move.l d0,a1 + move.l MP_SIGTASK(a1),a1 + moveq #1<<6,d0 + rol.l #8,d0 + call Signal + call Permit + dtl ,a0 + bra.s SSExitError + +NoPortFound lea RzPort(pc),a1 + move.l ThisTask(a6),MP_SIGTASK(a1) + call AddPort + call Permit + stv PortAdd + lea StdAttr(pc),a0 + call gfx,OpenFont + put.l d0,StdFont + beq.s OpenWinFail + dtl ,a1 + call exec,OpenResource + put.l d0,diskbase + beq.s OpenWinFail + dtl ,a1 + call OpenResource + put.l d0,miscbase + beq.s OpenWinFail + sub.l a0,a0 + call intuition,LockPubScreen + move.l d0,ScrLock + bne.s LockScrOK +OpenWinFail dtl ,a0 +SSExitError jump ss,ExitError + +LockScrOK move.l d0,a0 + sub.l a1,a1 + call gadtools,GetVisualInfoA + put.l d0,VisualInfo + beq.s OpenWinFail + move.l d0,d5 + lea AGamePort(pc),a0 + call CreateContext + lea GNGadgets(pc),a3 + clr.l -(sp) + clr.l -(sp) + push #GA_Immediate +GGNG_Loop tst.l d0 + beq.s OpenWinFail + move.l d0,a0 + move.l a3,a1 + tst.b gng_GadgetID+1(a1) + bmi.s GGNG_Skip + move.l sp,4(sp) +GGNG_Skip lea gng_VisualInfo(a3),a3 + move.l d5,(a3)+ + moveq #BUTTON_KIND,d0 + move.l sp,a2 + call CreateGadgetA + tst.w (a3) + bne.s GGNG_Loop + tst.l d0 + beq.s OpenWinFail + lea 1*8+4(sp),sp + lea NewMyWindow(pc),a0 +;;; move.w #CUSTOMSCREEN,nw_Type(a0) + clr.l -(sp) + dt ScrTitle, + tpea ScrTitle + push #WA_ScreenTitle + push sp + push #WA_AutoAdjust + moveq #0,d0 + move.w NewMyWindow+nw_Width(pc),d0 + push d0 + push #WA_InnerWidth + move.w NewMyWindow+nw_Height(pc),d0 + push d0 + push #WA_InnerHeight + move.l sp,a1 + call intuition,OpenWindowTagList + put.l d0,MyWindow + beq OpenWinFail + get.l sv_thistask,a0 + put.l pr_WindowPtr(a0),OrigWPtr + move.l d0,pr_WindowPtr(a0) + lea 4*8+4(sp),sp + move.l d0,a0 + move.l wd_UserPort(a0),d6 + move.l wd_RPort(a0),d2 + sub.l a1,a1 + call gadtools,GT_RefreshWindow + lea BorList(pc),a2 + move.w (a2)+,d0 + get.l intuitionbase,a6 +NextBorder lea (a2,d0.w),a1 + move.l d2,a0 + moveq #0,d0 + moveq #0,d1 + call DrawBorder + move.w (a2)+,d0 + bne.s NextBorder + get.l StdFont,a0 + move.l d2,a1 + call gfx,SetFont + move.l d2,a0 + lea MyWinITexts(pc),a1 + moveq #0,d0 + moveq #0,d1 + call intuition,PrintIText + dtl ,a1 + call exec,OpenResource + put.l d0,potgobase + beq OpenWinFail + get.l intuitionbase,a6 + bsr ActivateScreen + call ss,TrackSignal + moveq #0,d2 + bset d0,d2 + put.l d2,SigMask + move.l CIABaseA4Ptr(pc),a4 + move.b ciaa+ciaddra-CIABaseA4(a4),d0 + rol.w #8,d0 + move.b ciaa+ciaddrb-CIABaseA4(a4),d0 + rol.l #8,d0 + move.b ciab+ciaddra-CIABaseA4(a4),d0 + rol.l #8,d0 + move.b ciab+ciaddrb-CIABaseA4(a4),d0 + put.l d0,DefCIAIO + stv.b CleanServ + moveq #INTB_VERTB,d0 + lea IntStruct(pc),a1 + move.l v,IS_DATA(a1) + call exec,AddIntServer +LoopIDCMP lea SetSelected(pc),a1 + bsr DoRoutUpdate + get.l MyWindow,a2 + move.l wd_RPort(a2),d3 + move.l d3,a1 + moveq #TEXT_PEN,d0 + call gfx,SetAPen + move.l d3,a1 + moveq #BGND_PEN,d0 + call SetBPen + move.l joy0dat(a4),d2 + geta ST_joy0daty,a0 + moveq #64,d0 + moveq #125,d1 + lea G12l+gg_GadgetID(pc),a2 + lea G12r+gg_GadgetID(pc),a3 + bsr ProcCounterLR ;joy0daty + moveq #64,d0 + moveq #114,d1 + lea G11l+gg_GadgetID(pc),a2 + lea G11r+gg_GadgetID(pc),a3 + bsr ProcCounterLR ;joy0datx + move.w #216,d0 + moveq #125,d1 + lea G22l+gg_GadgetID(pc),a2 + lea G22r+gg_GadgetID(pc),a3 + bsr ProcCounterLR ;joy1daty + move.w #216,d0 + moveq #114,d1 + lea G21l+gg_GadgetID(pc),a2 + lea G21r+gg_GadgetID(pc),a3 + bsr ProcCounterLR ;joy1datx + move.l pot0dat(a4),d2 + moveq #64,d0 + move.w #147,d1 + bsr.s ProcCounter ;pot0daty + moveq #64,d0 + move.w #136,d1 + bsr.s ProcCounter ;pot0datx + move.w #216,d0 + move.w #147,d1 + bsr.s ProcCounter ;pot1daty + move.w #216,d0 + move.w #136,d1 + bsr.s ProcCounter ;pot1datx + stv.b InitCounters + clrv.b Signaled + get.l SigMask,d0 + move.l d6,a0 + move.b MP_SIGBIT(a0),d1 + bset d1,d0 + or.w #SIGBREAKF_CTRL_C!SIGBREAKF_CTRL_E,d0 + call exec,Wait + btst #SIGBREAKB_CTRL_C,d0 + beq.s TestFlagE +SSReportBreak moveq #err_break,d0 +SSReportError jump ss,ReportError + + +PC_Return tstv.b InitCounters + beq.s PC_Cont + cmp.l d0,d0 + rts + +ProcCounter rol.l #8,d2 + cmp.b (a0)+,d2 + beq.s PC_Return +PC_Cont move.l a0,d5 + move.b d2,-(a0) + move.l d3,a1 + call Move + move.l d3,a1 + moveq #RP_JAM2,d0 + call SetDrMd + moveq #0,d0 + move.b d2,d0 + move.w d0,-(sp) + move.l sp,a1 + subq #4,sp + move.l a2,d4 + move.l sp,a2 + dtl <%02x>,a0 + call ss,FormatStr + move.l d4,a2 + move.l d3,a1 + move.l sp,a0 + moveq #2,d0 + call gfx,Text + addq #6,sp + move.l d5,a0 + move.l sp,d0 +Return2 rts + +ActivateScreen move.l ScrLock(pc),a0 + jump ScreenToFront + +TestFlagE btst #SIGBREAKB_CTRL_E,d0 + beq.s RetryIDCMP + get.l MyWindow,a0 + call intuition,ActivateWindow + get.l MyWindow,a0 + call WindowToFront + bsr.s ActivateScreen +RetryIDCMP move.l d6,a0 + call gadtools,GT_GetIMsg + tst.l d0 + beq LoopIDCMP + move.l d0,a1 + movem.l im_Class(a1),d2/d3/a3 + call GT_ReplyIMsg + btst #9,d2 ;bit(IDCMP_CLOSEWINDOW) + bne.s Return2 + moveq #0,d0 + move.l CIABaseA4Ptr(pc),a4 + btst #6,d2 ;bit(IDCMP_GADGETUP) + beq.s NoGadUp + move.b gg_GadgetID+1(a3),d0 + addq.b #4,d0 + bcc.s RetryIDCMP + move.b DefCIAIO(v,d0.w),d1 + add.w d0,d0 + add.w CIAddrTab(pc,d0.w),a4 + move.b d1,(a4) +SafeSetCIA nop + move.b (a4),(a4) + bra.s RetryIDCMP + +CIAprTab dc.w ciaa+ciapra-CIABaseA4 + dc.w ciaa+ciaprb-CIABaseA4 + dc.w ciab+ciapra-CIABaseA4 + dc.w ciab+ciaprb-CIABaseA4 +CIAddrTab dc.w ciaa+ciaddra-CIABaseA4 + dc.w ciaa+ciaddrb-CIABaseA4 + dc.w ciab+ciaddra-CIABaseA4 + dc.w ciab+ciaddrb-CIABaseA4 +CIAEndTab + +NoGadUp btst #5,d2 ;bit(IDCMP_GADGETDOWN) + beq.s RetryIDCMP + move.b gg_GadgetID+1(a3),d0 + beq.s RetryIDCMP + subq.b #1,d0 + cmp.b #64,d0 + bcc.s OtherButtonDown + move.w d0,d1 + lsr.w #3,d0 + add.w d0,d0 + lea Warn_DDR_Mask(pc),a0 + subq.w #8,d0 + bcc.s ItsddrChange + addq #4,a0 + move.w CIAEndTab(pc,d0.w),d2 + btst d1,(a4,d2.w) + bne.s ItsddrChange +CallScrBeep bsr.s DoScrBeep + bra RetryIDCMP + +DoScrBeep move.l ScrLock(pc),a0 ;(#66) + jump intuition,DisplayBeep + +ItsddrChange tstv.l Arg_Force + bne.s NoWarnBit + move.l (a0),d3 + btst d1,d3 + beq.s NoWarnBit + mpush d0/d1/a0 + dtl.lc ,a0 + dt.lc + dt.lc + dt.lc <> + dt.lc + dt.lc + dt.lc <> + dt.lc + dt.l + dtl ,a2 + call ss,SimpleRequest + subq.l #1,d0 + mpop d0/d1/a0 + bne RetryIDCMP + bclr d1,d3 + move.l d3,(a0) +NoWarnBit add.w CIAddrTab(pc,d0.w),a4 + bchg d1,(a4) + bra SafeSetCIA + +Warn_DDR_Mask dc.l WARN_DDR_MASK,WARN_PR_MASK + +OtherButtonDown bne.s NoWritePotgo +;+++ Pressed "Start potgo" +++ (#65) + moveq #1,d0 ;START + moveq #1,d1 ;START + call potgo,WritePotgo + bra RetryIDCMP + +NoWritePotgo sub.b #66,d0 + bmi.s CallScrBeep + bne.s NoTXD + opt nochkimm ;(#67) + move.b adkconr+BaseA4,d0 + opt chkimm + and.b #ADKF_UARTBRK>>8,d0 + bchg #ADKB_UARTBRK-8,d0 + lsl.b #4,d0 + bset #ADKB_UARTBRK-8,d0 + opt nochkimm + move.b d0,adkcon+BaseA4 + opt chkimm + bra RetryIDCMP + +NoTXD subq.b #1,d0 + cmp.b #8,d0 + bcc.s NoPotgoBits + moveq #0,d1 ;(#68)..(#75) + bset d0,d1 + rol.w #8,d1 + get.l potgobase,a6 + move.w $28(a6),d0 + and.w d1,d0 + eor.w d1,d0 + call WritePotgo + bra RetryIDCMP + +NoPotgoBits subq.b #8,d0 + bne NoASerial + moveq #MR_SERIALPORT,d2 + lea ASerial+gg_GadgetID(pc),a2 + dtl ,a3 +DoAParallel move.l a2,d7 + bsr.s ClearScrTit + geta ScrTitBuf,a0 +CopySerParName move.b (a3)+,(a0)+ + bne.s CopySerParName + lea 6(a0),a4 + subq #1,a0 + dtl ,a1 +CopySerParSuff move.b (a1)+,(a0)+ + bne.s CopySerParSuff + move.l d7,a2 + tst.b (a2) + bne.s DoFreeSerPar + lea -1(a0),a3 + bsr.s SerParHalf + addq.l #1,d2 + bsr.s SerParHalf + dtl ,a0 + moveq #-1,d0 + move.l d7,a2 +CopySerParSucc move.b (a0)+,(a4)+ + bne.s CopySerParSucc + bsr SetSelected + bra.s DoScrWinTitle + +ClearScrTit get.l MyWindow,a0 + moveq #-1,d0 + move.l d0,a1 + sub.l a2,a2 + jump intuition,SetWindowTitles + +DoFreeSerPar bsr.s FreeSerParRout + gett GivenSys,a0 + moveq #0,d0 + bra.s CopySerParSucc + +SerParHalf move.l d2,d0 + lea IntName(pc),a1 + move.l 4.w,a0 + addq.b #1,TDNestCnt(a0) + call misc,AllocMiscResource + tst.l d0 + beq.s JumpExecPermit + move.l d0,a0 + moveq #31,d0 +CopyLimName move.b (a0)+,(a3)+ + dbeq d0,CopyLimName + clr.b (a3) + bsr.s JumpExecPermit + move.l d2,d0 + and.b #~1,d0 + cmp.l d0,d2 + beq.s DontFreeRest + bsr.s JumpMiscFree +DontFreeRest addq #4,sp + bsr DoScrBeep +DoScrWinTitle geta ScrTitBuf,a2 + bra DoScrTitle + +FreeSerParRout move.l d2,d0 + bsr.s JumpMiscFree + move.l d2,d0 + addq.l #1,d0 +JumpMiscFree jump misc,FreeMiscResource + +JumpExecPermit jump exec,Permit + +NoASerial moveq #MR_PARALLELPORT,d2 + lea AParallel+gg_GadgetID(pc),a2 + dtl ,a3 + subq.b #2,d0 + bcs DoAParallel + bne NoADisk + lea ADisk+gg_GadgetID(pc),a2 + tst.b (a2) + bne ADiskDoFree + move.l a2,d7 + get.l MyWindow,a0 + get.l intuitionbase,a6 + cmp.w #39,LIB_VERSION(a6) + bcs.s StupidGfx2 + move.l a0,a3 + clr.l -(sp) + push sp + push #WA_BusyPointer + push sp + push #WA_PointerDelay + move.l sp,a1 + call SetWindowPointerA + move.l a3,a0 +StupidGfx2 moveq #-1,d4 + move.l d4,a1 + dtl ,a2 + call SetWindowTitles + get.l diskbase,a6 + moveq #3,d2 +LoopADiskUnit move.l d2,d0 + call AllocUnit + tst.l d0 + sne d1 + move.b d1,d0 + roxr.b #1,d0 + roxl.b #1,d3 + bsr PushSw + dbra d2,LoopADiskUnit + put.b d3,DiskAlloc + get.l sv_thistask,a2 + lea pr_MsgPort(a2),a2 +RetryGetUnit lea DRUnit(pc),a1 + move.l a2,a0 + move.l a0,MN_REPLYPORT(a1) + call disk,GetUnit + tst.l d0 + bne.s GotUnit + move.l 4.w,a6 +RetryGiveReply move.l a2,a0 + call WaitPort + move.l a2,a0 + call GetMsg + tst.l d0 + beq.s RetryGiveReply + bra.s RetryGetUnit + +GotUnit move.l d7,a2 + moveq #-1,d0 + bsr SetSelected + dtl ,a0 + move.l sp,a1 + geta ScrTitBuf,a2 + call ss,FormatStr + lea 4*4(sp),sp + get.l intuitionbase,a6 + cmp.w #39,LIB_VERSION(a6) + bcs.s SetTitnRet + clr.l -(sp) + clr.l -(sp) + push #WA_Pointer + move.l a3,a0 + move.l sp,a1 + call SetWindowPointerA + lea (1*8+4)+(2*8+4)(sp),sp +SetTitnRet get.l MyWindow,a0 + move.l d4,a1 + call SetWindowTitles + bra RetryIDCMP + +ADiskDoFree bsr FreeDiskRes + moveq #0,d0 + bsr SetSelected + dtl.c ,a2 + dt GivenSys, +DoScrTitle get.l intuitionbase,a6 + moveq #-1,d4 + bra.s SetTitnRet + +NoADisk subq.b #1,d0 + bne RetryIDCMP + lea AGamePort+gg_GadgetID(pc),a2 + get.l potgobase,a6 + tst.b (a2) + bne.s ADoFreeGame + move.w #$5501,d0 + move.w d0,d2 + call AllocPotBits + and.w d2,d0 + beq.s AGameFailed + put.w d0,GameAlloced + moveq #4,d2 + ror.w #2,d0 +LoopPushRol bsr.s PushRolSw + dbra d2,LoopPushRol + moveq #-1,d0 + bsr SetSelected + bsr ClearScrTit + dtl ,a0 + move.l sp,a1 + geta ScrTitBuf,a2 + call ss,FormatStr + lea 5*4(sp),sp + bra.s DoScrTitle + +PushRolSw rol.w #2,d0 + scs d1 +PushSw neg.b d1 + ext.w d1 + lsl.w #2,d1 + dt + dt NoMsg, + gett NoMsg,a0 + sub.w d1,a0 + move.l (sp),a1 + move.l a0,(sp) + jmp (a1) + +AGameFailed bsr DoScrBeep + dtl ,a2 + bra.s DoScrTitle + +ADoFreeGame get.w GameAlloced,d0 + clrv.w GameAlloced + call FreePotBits + moveq #0,d0 + bsr SetSelected + dtl ,a2 + bra DoScrTitle + +FreeDiskRes call disk,GiveUnit + get.b DiskAlloc,d3 + ror.b #4,d3 + moveq #3,d2 +LoopFreeUnit rol.b #1,d3 + bcc.s SkipFreeUnit + move.l d2,d0 + call FreeUnit +SkipFreeUnit dbra d2,LoopFreeUnit + rts + +Cleanup move.l 4.w,a6 + tstv.b PortAdd + beq.s NoPortAdd + clrv.b PortAdd + lea RzPort(pc),a1 + call RemPort +NoPortAdd tstv.b CleanServ + beq.s NoCleanServ + clrv.b CleanServ + lea IntStruct(pc),a1 + moveq #INTB_VERTB,d0 + call RemIntServer +NoCleanServ lea ADisk+gg_GadgetID(pc),a2 + tst.b (a2) + beq.s NoFreeDisk + clr.b (a2) + bsr.s FreeDiskRes +NoFreeDisk lea ASerial+gg_GadgetID(pc),a2 + tst.b (a2) + beq.s NoFreeSerial + clr.b (a2) + moveq #MR_SERIALPORT,d2 + bsr FreeSerParRout +NoFreeSerial lea AParallel+gg_GadgetID(pc),a2 + tst.b (a2) + beq.s NoFreeParallel + clr.b (a2) + moveq #MR_PARALLELPORT,d2 + bsr FreeSerParRout +NoFreeParallel get.w GameAlloced,d0 + beq.s NoFreeGamePort + clrv.w GameAlloced + call potgo,FreePotBits +NoFreeGamePort get.l MyWindow,d0 + beq.s NoMyWindow + clrv.l MyWindow + get.l sv_thistask,a0 + get.l OrigWPtr,pr_WindowPtr(a0) + move.l d0,a4 + move.l 4.w,a6 + addq.b #1,TDNestCnt(a6) +ClearWinPort move.l wd_UserPort(a4),a0 + call GetMsg + tst.l d0 + beq.s WinPortCleared + move.l d0,a1 + call ReplyMsg + bra.s ClearWinPort + +WinPortCleared move.l a4,a0 + moveq #0,d0 + call intuition,ModifyIDCMP + call exec,Permit + move.l a4,a0 + call intuition,CloseWindow +NoMyWindow get.l StdFont,d0 + beq.s NoCloseFont + clrv.l StdFont + move.l d0,a1 + call gfx,CloseFont +NoCloseFont lea AGamePort(pc),a1 + move.l (a1),a0 + clr.l (a1) + call gadtools,FreeGadgets + get.l VisualInfo,a0 + clrv.l VisualInfo + call FreeVisualInfo + sub.l a0,a0 + lea ScrLock(pc),a0 + move.l (a0),a1 + clr.l (a0) + jump intuition,UnlockPubScreen + +GadTable dc.w AA0l+gg_GadgetID-*-2 + dc.w AA1l+gg_GadgetID-*-2 + dc.w AA2l+gg_GadgetID-*-2 + dc.w AA3l+gg_GadgetID-*-2 + dc.w AA4l+gg_GadgetID-*-2 + dc.w AA5l+gg_GadgetID-*-2 + dc.w AA6l+gg_GadgetID-*-2 + dc.w AA7l+gg_GadgetID-*-2 + dc.w AB0l+gg_GadgetID-*-2 + dc.w AB1l+gg_GadgetID-*-2 + dc.w AB2l+gg_GadgetID-*-2 + dc.w AB3l+gg_GadgetID-*-2 + dc.w AB4l+gg_GadgetID-*-2 + dc.w AB5l+gg_GadgetID-*-2 + dc.w AB6l+gg_GadgetID-*-2 + dc.w AB7l+gg_GadgetID-*-2 + dc.w BA0l+gg_GadgetID-*-2 + dc.w BA1l+gg_GadgetID-*-2 + dc.w BA2l+gg_GadgetID-*-2 + dc.w BA3l+gg_GadgetID-*-2 + dc.w BA4l+gg_GadgetID-*-2 + dc.w BA5l+gg_GadgetID-*-2 + dc.w BA6l+gg_GadgetID-*-2 + dc.w BA7l+gg_GadgetID-*-2 + dc.w BB0l+gg_GadgetID-*-2 + dc.w BB1l+gg_GadgetID-*-2 + dc.w BB2l+gg_GadgetID-*-2 + dc.w BB3l+gg_GadgetID-*-2 + dc.w BB4l+gg_GadgetID-*-2 + dc.w BB5l+gg_GadgetID-*-2 + dc.w BB6l+gg_GadgetID-*-2 + dc.w BB7l+gg_GadgetID-*-2 + dc.w AA0r+gg_GadgetID-*-2 + dc.w AA1r+gg_GadgetID-*-2 + dc.w AA2r+gg_GadgetID-*-2 + dc.w AA3r+gg_GadgetID-*-2 + dc.w AA4r+gg_GadgetID-*-2 + dc.w AA5r+gg_GadgetID-*-2 + dc.w AA6r+gg_GadgetID-*-2 + dc.w AA7r+gg_GadgetID-*-2 + dc.w AB0r+gg_GadgetID-*-2 + dc.w AB1r+gg_GadgetID-*-2 + dc.w AB2r+gg_GadgetID-*-2 + dc.w AB3r+gg_GadgetID-*-2 + dc.w AB4r+gg_GadgetID-*-2 + dc.w AB5r+gg_GadgetID-*-2 + dc.w AB6r+gg_GadgetID-*-2 + dc.w AB7r+gg_GadgetID-*-2 + dc.w BA0r+gg_GadgetID-*-2 + dc.w BA1r+gg_GadgetID-*-2 + dc.w BA2r+gg_GadgetID-*-2 + dc.w BA3r+gg_GadgetID-*-2 + dc.w BA4r+gg_GadgetID-*-2 + dc.w BA5r+gg_GadgetID-*-2 + dc.w BA6r+gg_GadgetID-*-2 + dc.w BA7r+gg_GadgetID-*-2 + dc.w BB0r+gg_GadgetID-*-2 + dc.w BB1r+gg_GadgetID-*-2 + dc.w BB2r+gg_GadgetID-*-2 + dc.w BB3r+gg_GadgetID-*-2 + dc.w BB4r+gg_GadgetID-*-2 + dc.w BB5r+gg_GadgetID-*-2 + dc.w BB6r+gg_GadgetID-*-2 + dc.w BB7r+gg_GadgetID-*-2 + dc.w G13l+gg_GadgetID-*-2 + dc.w G13r+gg_GadgetID-*-2 + dc.w G14l+gg_GadgetID-*-2 + dc.w G14r+gg_GadgetID-*-2 + dc.w G23l+gg_GadgetID-*-2 + dc.w G23r+gg_GadgetID-*-2 + dc.w G24l+gg_GadgetID-*-2 + dc.w G24r+gg_GadgetID-*-2 + dc.w S1l+gg_GadgetID-*-2 + dc.w S2l+gg_GadgetID-*-2 + dc.w G13m+gg_GadgetID-*-2 + dc.w G23m+gg_GadgetID-*-2 + dc.w G14m+gg_GadgetID-*-2 + dc.w G24m+gg_GadgetID-*-2 + +ProcCounterLR bsr ProcCounter + beq.s Return1ShEq + ror.b #2,d2 + scs d0 + bsr.s ChkSelected + rol.b #1,d2 + scs d0 + rol.b #1,d2 + scs d1 + eor.b d1,d0 + move.l a3,a2 +ChkSelected cmp.b (a2),d0 +Return1ShEq beq.s Return1 +SetSelected mpush d2/d3/a0/a1/a3 + move.b d0,(a2) + get.l MyWindow,a3 + move.l wd_RPort(a3),a1 + cmp.b #76,1(a2) + bcc.s NoImage + move.l a1,a0 + lea ImgZero(pc),a1 + move.w -gg_GadgetID+gg_LeftEdge(a2),d0 + move.w -gg_GadgetID+gg_TopEdge(a2),d1 + move.l -gg_GadgetID+gg_GadgetRender(a2),a3 + cmp.l a1,a3 + bne.s SS_DoInpOut + tst.b (a2) + beq.s SS_HaveImage + lea ImgOne(pc),a1 + bra.s SS_HaveImage + +NoImage moveq #RP_COMPLEMENT,d0 + call gfx,SetDrMd + move.l wd_RPort(a3),a0 + moveq #3,d0 + cmp.w #39,LIB_VERSION(a6) + bcs.s StupidGfx + call SetWriteMask ;failures ignored +StupidGfxJump move.l wd_RPort(a3),a1 + lea -gg_GadgetID+gg_LeftEdge(a2),a0 + move.w (a0)+,d0 ;LeftEdge->xmin + move.w (a0)+,d1 ;TopEdge->ymin + move.w (a0)+,d2 + add.w d0,d2 + subq.w #1,d2 ;xmax + move.w (a0),d3 + add.w d1,d3 + subq.w #1,d3 ;ymax + call RectFill +Ret_SetSelected mpop d2/d3/a0/a1/a3 +Return1 rts + +SS_DoInpOut lea ImgInput(pc),a1 + tst.b (a2) + beq.s SS_HaveImage + lea ImgOutput(pc),a1 +SS_HaveImage call intuition,DrawImage + get.l gfxbase,a6 + bra.s Ret_SetSelected + +StupidGfx move.b d0,rp_Mask(a0) + bra.s StupidGfxJump + +DoRoutUpdate lea CIABaseA4,a4 +CIABaseA4Ptr equ *-4 + lea GadTable(pc),a0 + lea CIAprTab(pc),a3 + moveq #7,d7 +ChkCIALoop move.w (a3)+,d0 + move.b (a4,d0.w),d2 + bsr.s ChkEight + dbra d7,ChkCIALoop + get.l potgobase,a4 + move.b $28(a4),d2 ;$28(potgobase)/W=Contents of POTGO/POTINP + bsr.s ChkEight + lea BaseA4,a4 +BaseA4Ptr equ *-4 + move.b potinp(a4),d2 + move.b d2,d0 + and.b #$05,d2 + and.b #$50,d0 + lsr.b #3,d0 + or.b d0,d2 + btst #ADKB_UARTBRK-8,adkconr(a4) + sne d0 ;TXD + roxr.b #1,d0 + roxl.b #1,d2 + btst #11-8,serdatr(a4) + sne d0 ;RXD + roxr.b #1,d0 + roxl.b #1,d2 + moveq #5,d3 + bra.s Chk8Loop + +ChkEight moveq #7,d3 +Chk8Loop move.w (a0)+,d0 + lea (a0,d0.w),a2 + ror.b d2 + scs d0 + cmp.b (a2),d0 + beq.s Chk8Okay + jsr (a1) +Chk8Okay dbra d3,Chk8Loop + rts + +IntRoutine tst.b Signaled(a1) + bne.s IntReturnQuick + move.l a1,v + mpush d2-d4/d7/a2-a4 + move.l sp,d4 + lea DoSignal(pc),a1 + bsr DoRoutUpdate + move.l joy0dat(a4),d0 + vcmp.l ST_joy0daty,d0 + bne.s DoSignal + move.l pot0dat(a4),d0 + vcmp.l ST_pot0daty,d0 + bne.s DoSignal + bra.s IntReturn + +DoSignal get.l SigMask,d0 + get.l sv_thistask,a1 + stv.b Signaled + call exec,Signal + move.l d4,sp +IntReturn mpop d2-d4/d7/a2-a4 +IntReturnQuick move.l BaseA4Ptr(pc),a0 + cmp.l d0,d0 + rts + +IntStruct dc.l 0,0 + dc.b NT_INTERRUPT,-128 + dc.l IntName + dc.l 0 ;IS_DATA + dc.l IntRoutine + +IntName dc.b 'PortDiag',0 + even + +DRUnit dc.l 0,0 + dc.b NT_MESSAGE,0 + dc.l IntName +DRReplyPort dc.l 0 + dc.w DRU_SIZE + + dc.l 0,0 + dc.b NT_INTERRUPT,-128 + dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE + + dc.l 0,0 + dc.b NT_INTERRUPT,-128 + dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE + + dc.l 0,0 + dc.b NT_INTERRUPT,-128 + dc.l IntName,0,0 ;LN_NAME,IS_DATA,IS_CODE + +RzPort dc.l 0,0 + dc.b NT_MSGPORT,-128 + dc.l RzPortName + dc.b PA_IGNORE,0 + dc.l 0 +RzPortHead dc.l RzPortTail +RzPortTail dc.l 0,RzPortHead + dc.b NT_MESSAGE,0 + + dt RzPortName, + +GNGadgets +GNGDefaultAA dc.w 44,78,72,13 + dc.l DefaultTxt,StdAttr + dc.w 252 + dc.l PLACETEXT_IN,0 + +GNGDefaultAB dc.w 196,78,72,13 + dc.l DefaultTxt,StdAttr + dc.w 253 + dc.l PLACETEXT_IN,0 + +GNGDefaultBA dc.w 348,78,72,13 + dc.l DefaultTxt,StdAttr + dc.w 254 + dc.l PLACETEXT_IN,0 + +GNGDefaultBB dc.w 500,78,72,13 + dc.l DefaultTxt,StdAttr + dc.w 255 + dc.l PLACETEXT_IN,0 + +GNGStartPotgo dc.w 318,106,134,15 + dc.l SPotgoTxt,StdAttr + dc.w 65 + dc.l PLACETEXT_IN,0 + + dc.w 0 + + dt DefaultTxt, + dt SPotgoTxt, + + include "PortDiagWin.asm" + +ScrLock equ NewMyWindow+nw_Screen + +BorList dc.w AABorder-*-2 + dc.w ABBorder-*-2 + dc.w BABorder-*-2 + dc.w BBBorder-*-2 + dc.w G1Border-*-2 + dc.w G1Border1-*-2 + dc.w G1Border2-*-2 + dc.w G1Border3-*-2 + dc.w G1Border4-*-2 + dc.w G2Border-*-2 + dc.w G2Border1-*-2 + dc.w G2Border2-*-2 + dc.w G2Border3-*-2 + dc.w G2Border4-*-2 + dc.w PotgoBorder-*-2 + dc.w SerialBorder-*-2 + dc.w AllocBorder-*-2 + dc.w 0 + + dt <$VER: PortDiag 1.0 (4.10.95)> + + tags + template + dv.l Arg_Force + exitrout Cleanup + finish + end diff --git a/project/PortDiag/PortDiag.lha b/project/PortDiag/PortDiag.lha new file mode 100644 index 0000000..820fc7e Binary files /dev/null and b/project/PortDiag/PortDiag.lha differ diff --git a/project/PortDiag/PortDiag.png b/project/PortDiag/PortDiag.png new file mode 100644 index 0000000..063c525 Binary files /dev/null and b/project/PortDiag/PortDiag.png differ diff --git a/project/QueryDev/Index.html.pl b/project/QueryDev/Index.html.pl new file mode 100755 index 0000000..498db71 --- /dev/null +++ b/project/QueryDev/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::QueryDev' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::QueryDev::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::QueryDev::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::QueryDev::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/QueryDev/ListItem.pm b/project/QueryDev/ListItem.pm new file mode 100755 index 0000000..e00b521 --- /dev/null +++ b/project/QueryDev/ListItem.pm @@ -0,0 +1,50 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::QueryDev' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::QueryDev::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; + +use My::Web; + + +our @ListItem=( + "name"=>"QueryDev", + "platform"=>"amiga", + "priority"=>150, + "download"=>"QueryDev.lha", + "link-source file"=>"QueryDev.asm", + "link-aminet README"=>"QueryDev.README", + "summary"=>"Detect disk device name from its volume name", + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"680x0 asm", + "description"=><<"HERE", +

QueryDev detects the device name from the given volume name. Volume must be +locked in the system. Useful for DiskCopy which has the parameter DEVICE and +you want to copy the diskette from any drive. QueryDev writes the detected +device name to the specified variable.

+HERE + ); + +1; diff --git a/project/QueryDev/Makefile.am b/project/QueryDev/Makefile.am new file mode 100644 index 0000000..b4a1946 --- /dev/null +++ b/project/QueryDev/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/QueryDev/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/QueryDev/QueryDev.README b/project/QueryDev/QueryDev.README new file mode 100644 index 0000000..2c34825 --- /dev/null +++ b/project/QueryDev/QueryDev.README @@ -0,0 +1,14 @@ +Short: Volume name -> device name +Author: short@k332.feld.cvut.cz (Jan Kratochvil) +Uploader: short@k332.feld.cvut.cz (Jan Kratochvil) +Type: util/cli + +Description: + QueryDev detects the device name from the given volume name. Volume must +be locked in the system. Useful for DiskCopy which has the parameter DEVICE +and you want to copy the diskette from any drive. QueryDev writes the +detected device name to the specified variable. + +Requirements: + Kickstart version V37 (2.04) or higher and ss.library V5.0 or higher (from +package SSLib*.lha). diff --git a/project/QueryDev/QueryDev.asm b/project/QueryDev/QueryDev.asm new file mode 100644 index 0000000..fb2521c --- /dev/null +++ b/project/QueryDev/QueryDev.asm @@ -0,0 +1,65 @@ +;DEBUG equ 1 + + include "SSMac.h" + + clistart + + moveq #LDF_VOLUMES+LDF_DEVICES+LDF_READ,d1 + call dos,LockDosList + move.l d0,d1 + move.l d0,d4 + get.l Arg_Volume,d2 + moveq #LDF_VOLUMES,d3 + call FindDosEntry + tst.l d0 + bne.s EntryFound + dtl ,a0 +VolumeError geta Arg_Volume,a1 + jump ss,ExitError + +EntryFound move.l d0,a2 + move.l dl_Task(a2),a2 + moveq #LDF_DEVICES,d2 +NextDevice move.l d4,d1 + call NextDosEntry + dtl ,a0 + move.l d0,d4 + beq.s VolumeError + move.l d0,a0 + cmp.l dvi_Task(a0),a2 + bne.s NextDevice + move.l dvi_Name(a0),d2 + moveq #LDF_VOLUMES+LDF_DEVICES+LDF_READ,d1 + call UnLockDosList + lsl.l #2,d2 + move.l d2,a0 + get.l Arg_VarName,d1 + bne.s SomeVarName + dtl ,a1 + move.l a1,d1 +SomeVarName push d1 + moveq #0,d3 + move.b (a0)+,d3 + move.l a0,d2 + moveq #1,d4 + lsl.l #GVB_GLOBAL_ONLY,d4 + tstv.l Arg_Global + bne.s GlobalVar + lsl.l #GVB_LOCAL_ONLY-GVB_GLOBAL_ONLY,d4 +GlobalVar call SetVar + tst.l d0 + bne.s Return + dtl ,a0 + move.l sp,a1 + jump ss,DosError + +Return addq #4,sp + rts + + tags + template + dv.l Arg_Volume + dv.l Arg_VarName + dv.l Arg_Global + finish + end diff --git a/project/QueryDev/QueryDev.lha b/project/QueryDev/QueryDev.lha new file mode 100644 index 0000000..6e9769d Binary files /dev/null and b/project/QueryDev/QueryDev.lha differ diff --git a/project/Rel.pl b/project/Rel.pl new file mode 100755 index 0000000..fd39944 --- /dev/null +++ b/project/Rel.pl @@ -0,0 +1,71 @@ +#! /usr/bin/perl +# +# $Id$ +# List of projects Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +use Apache::Constants qw(MOVED); +Wrequire 'My::Project'; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "header_only"=>1, + "args_check"=>{ + "rel"=>'^(?:prev|next)$', + "project"=>'^\w+$', + }, + ); + +my %item=( My::Project::item_hash_read() ); +my @platforms=@My::Project::platforms; +my @projects=(); +# Do not sort by platforms: +# while (@platforms) +{ + my $platform_sym =shift @platforms; + my $platform_name=shift @platforms; + push @projects,sort { + ($item{$b}{"priority"} <=> $item{$a}{"priority"}) + or + (lc($item{$a}{"name"}) cmp lc($item{$b}{"name"})); + } + ( # Do not sort by platform: map({ $item{$_}{"platform"} ne $platform_sym ? () : ($_); } # ) + keys(%item) + ); + } +my $target=undef(); +for (0..$#projects) { + next if $projects[$_] ne $W->{"args"}{"project"}; + $target=$projects[$_-1] if $_>0 && $W->{"args"}{"rel"} eq "prev"; + $target=$projects[$_+1] if $_<$#projects && $W->{"args"}{"rel"} eq "next"; + last if $target; + } + +$W->{"r"}->status(MOVED); +$W->{"r"}->header_out("Location"=>"http://".&{$W->{"web_hostname_sub"}}() +# .":7680" # DEBUG + ."/project/".(!$target ? "" : "$target/")); diff --git a/project/ResRAM/Index.html.pl b/project/ResRAM/Index.html.pl new file mode 100755 index 0000000..5280008 --- /dev/null +++ b/project/ResRAM/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::ResRAM' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::ResRAM::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::ResRAM::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::ResRAM::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/ResRAM/ListItem.pm b/project/ResRAM/ListItem.pm new file mode 100755 index 0000000..6fc4ef0 --- /dev/null +++ b/project/ResRAM/ListItem.pm @@ -0,0 +1,50 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::ResRAM' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::ResRAM::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; + +use My::Web; + + +our @ListItem=( + "name"=>"ResRAM", + "platform"=>"amiga", + "priority"=>530, + "download"=>"ResRAM.lha", + "link-source file"=>"ResRAM.asm", + "link-aminet README"=>"ResRAM.README", + "summary"=>"Reset-persisent bootable RAM filesystem", + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"680x0 asm", + "description"=><<"HERE", +

ResRAM is generally used for the RAM disks which are not required to be +written to. They are being used for fast booting when no harddisk is +available. On ResRAM execution it scans the given files which are loaded to the +memory and a reset-surviving resident module is installed.

+HERE + ); + +1; diff --git a/project/ResRAM/Makefile.am b/project/ResRAM/Makefile.am new file mode 100644 index 0000000..587004a --- /dev/null +++ b/project/ResRAM/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/ResRAM/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/ResRAM/ResRAM.README b/project/ResRAM/ResRAM.README new file mode 100644 index 0000000..8ee2fe8 --- /dev/null +++ b/project/ResRAM/ResRAM.README @@ -0,0 +1,11 @@ +Short: Reset surviving RAM FileSys (V37+&ss.lib) + +Description: + ResRAM is generally used for the RAM disks which are not required to be +written to - for example RAD disks used for fast booting when no harddisk is +available. When ResRAM is run, it scans given files which are loaded to the +memory and a reset-surviving resident module is installed. + +Requirements: + ResRAM executable requires Kickstart version 37 (2.0) or higher and the +ss.library V5.0 or higher (from package SSLib*.lha). diff --git a/project/ResRAM/ResRAM.asm b/project/ResRAM/ResRAM.asm new file mode 100644 index 0000000..254cdb4 --- /dev/null +++ b/project/ResRAM/ResRAM.asm @@ -0,0 +1,3038 @@ +;DEBUG equ 1 +;DEBUGX equ 1 ;Requires silly CPU (680[01]0) +;WaitDbg equ 1 ;Wait for RMB after each debug message +;ModDebug equ 1 ;Do (Abs|Img)Module debugging + +PathLen equ 256 +StdBootPri equ 15 +StdTaskPri equ 10 +StdStackSize equ 512 + +GV_DosBase equ $204 + + ifd ModDebug +waitit macro + opt nochkimm + push d0 +\@a move.w d0,$dff180 + addq.w #1,d0 + btst.b #2,$dff016 + bne.s \@a +\@b move.w d0,$dff180 + subq.w #1,d0 + btst.b #2,$dff016 + beq.s \@b + pop d0 + opt chkimm + endm + else +waitit macro + endm + endc + + ifd DEBUGX +amsg macro ;Text + opt w- + bsr DPrintf + opt w+ + bra.s \@a +\@b dc.b '\1' + ifeq NARG-1 + dc.b 10 + endc + dc.b 0 + even +\@a + endm + else +amsg macro + endm + endc + + include "SSMac.h" + +_LVOAddBootNode equ _LVOexpansionUnused + +;Main part: +;My ResidentTag# +;Word NULL - LongAlign# +;Code# +;Temporary variables +;Static variables# +;ResCmds SegLists+checksums# +;NULL - stop of ResCmds# +;Resident SegLists+checksums# +;MyResident pointer# +;Resident pointers# +;ResidentList successor +;KickMemHeader successor +;KickMemHeader(w/o successor)# +;KickMem(|s) [1-3]# +;RES disk data# +;DosHandler name# +;Volume name# +;ResCmds names# + +MyFORBID macro ;[exec] + ifne NARG + move.l 4.w,a6 + endc + addq.b #1,TDNestCnt(a6) + endm + + rsreset ;FileChain for ReadFiles +FC_MinNode rs.b MLN_SIZE +FC_FileSize rs.b 0 ;FileSize (1 Long) +FC_DirList rs.b MLH_SIZE +FC_ProtBits rs.b 1 ;Protection Bits (b7=1 -> dir) +FC_FileName rs.b 0 ;FileName (ASCIIZ) +FC_SIZEOF rs.b 0 ;w/o FileName + + rsreset +RFC_FileSize rs.l 1 ;Size of file/dir in bytes +RFC_ProtBits rs.b 1 ;Protection bits (b7=1 -> dir) +RFC_FileName rs.b 0 ;FileName (ASCIIZ) +RFC_SIZEOF rs.b 0 ;w/o FileName + + rsreset ;Resident chain +RC_Next rs.l 1 ;^Next chain or NULL +RC_Type rs.w 1 ;Type RCT_#? +RC_CmdName rs.b 0 ;RCT_Cmd -> ^FileName of the PathName +RC_Resident rs.b 0 ;!=RCT_Cmd -> ^ResidentTag +RC_Tracker rs.l 1 ;File tracker +RC_CheckSum rs.b 0 ;Segment values sum (LONG) +RC_CheckSummed rs.w 1 ;BOOL value for summing +RC_Hunks rs.w 1 ;# of hunks +RC_SIZEOF rs.b 0 ;w/o (hunk sizes|hunk pointers) + +RCT_Cmd equ -1 +RCT_Lib equ 0 +RCT_KickMod equ 1 + + dbuf Anchor,ap_SIZEOF+PathLen + dv.l AnyTrk ;A! - Must be first + dv.l ChipTrk ;A! + dv.l ResMemory ;A! - Tracker of handler's memory + dbuf Root,FC_SIZEOF+1 + dv.l RootLock + dv.l ResList ;Fwd-Linked list of residents + dv.l VolName ;B! + dv.l DevName ;B! + dv.l BootPri ;B! + dv.l OldCurDir + dv.l InhibitEnd ;Address of terminating 0/':' or NULL + dv.l LinPool + dbuf.l EOFRegs,9 +HunkBuf equ EOFRegs ;Size=20 bytes + dbuf AbsHeader,56 + dv.w MEntries + dv.w UnitNum + dbuf StDevName,6 + dbuf StVolName,9 + dv.b Advisory + + start + + get.l sv_thistask,a0 + put.l pr_CurrentDir(a0),OldCurDir + get.l Arg_Verbose,d0 + beq.s NoneVerbose + move.l d0,a2 + moveq #0,d2 +VerbParseMLoop move.b (a2)+,d0 + beq.s VerbParseDone + move.b d0,d3 + call utility,ToUpper + gett VerbParseTab,a1 +VerbParseCLoop move.b (a1)+,d1 + bne.s VerbParseChar + dtl ,a0 + move.w d3,-(sp) ;I hope RawDoFmt'll ignore b8-b15... + bra ErrorA1SS + +VerbParseChar cmp.b (a1)+,d0 + bne.s VerbParseCLoop + or.b d1,d2 + addq.b #2,d1 + sne d1 + and.b d1,d2 ;Clear if 254 (None) + bra.s VerbParseMLoop + +VerbParseDone put.l d2,Arg_Verbose +NoneVerbose geta BootPri+4,a4 + moveq #StdBootPri,d1 + get.l Arg_BootPri,d0 + beq.s BootPriStd + move.l d0,a0 + move.l (a0),d1 +BootPriStd move.l d1,-(a4) + ext.w d1 + ext.l d1 + cmp.l (a4),d1 + dtl ,a0 + bne.s ErrorSSA4 + move.l #RT_SIZE+2+ResidentCode+ResidentVars+12+ML_SIZE+ME_SIZE+RFC_SIZEOF+1,d6 ;RAM disk size + geta StDevName,a3 + moveq #'0',d4 + moveq #'0'-1,d5 + moveq #LDF_DEVICES!LDF_READ,d1 + moveq #LDF_DEVICES!LDF_READ,d3 + call dos,LockDosList + move.l d0,d7 + get.l Arg_Device,d0 + beq DeviceStd + move.l d0,a2 + dt InvalidName, + tpea InvalidName + move.l a2,-(a4) +TestDevNameLoop tst.b (a2) + beq.s TestDevError + cmp.b #':',(a2)+ + bne.s TestDevNameLoop + tst.b (a2) + beq.s TestDevTerm +TestDevError moveq #LDF_DEVICES!LDF_READ,d1 + call UnLockDosList + pop a0 +ErrorSSA4 move.l a4,a1 + bra ErrorSS + +TestDevTerm sub.l (a4),d6 + add.l a2,d6 ;ASCIIZ name length + clr.b -(a2) ;Cut out ':' + move.l (a4),d2 + move.l d7,d1 + call FindDosEntry + tst.l d0 + dt DevExists, + tpea DevExists + bne.s TestDevError + addq #8,sp + bsr.s DevNumDigit + bra DevStdOkay + +FindFreeNum move.l 4.w,a6 + MyFORBID + move.l KickTagPtr(a6),d0 + beq.s DevNumNoTags +DevNumTagLoop bclr.l #31,d0 + move.l d0,a0 +DevNumTgLoop move.l (a0)+,d0 + beq.s DevNumNoTags + bmi.s DevNumTagLoop + move.l d0,a1 + move.l RT_NAME(a1),a1 + moveq #ResNumOne-ResName-1,d0 + lea ResName(pc),a2 +ResNameLoop move.b (a1)+,d1 + beq.s DevNumTgLoop + cmp.b (a2)+,d1 + dbne d0,ResNameLoop + bne.s DevNumTgLoop + cmp.b (a2)+,d4 + bne.s DevNumTgLoop + cmp.b (a2)+,d5 + bne.s DevNumTgLoop + tst.b (a2) + bne.s DevNumTgLoop +DevNumNoTags call Permit + get.l dosbase,a6 + tst.w d0 + beq Return +DevNumDigit cmp.b #'9',d5 + bne.s DevNumDigitL + cmp.b #'9',d4 + bne.s DevNumDigitH + dt MaxDisks, + tpea MaxDisks + bra TestDevError + +DevNumDigitH addq.b #1,d4 + moveq #'0'-1,d5 +DevNumDigitL addq.b #1,d5 + bra.s FindFreeNum + +DeviceStd move.l a3,-(a4) + move.l MyDiskTypeAddr(pc),(a3) +DevNumLoop bsr.s DevNumDigit + lea 3(a3),a2 + cmp.b #'0',d4 + beq.s DevNum1Null + move.b d4,(a2)+ + bra.s Digit2Force + +DevNum1Null cmp.b d4,d5 + beq.s Digit2Null +Digit2Force move.b d5,(a2) +Digit2Null move.l a3,d2 + move.l d7,d1 + call FindDosEntry + tst.l d0 + bne.s DevNumLoop +DevNumOkay move.l a3,a2 +DevNumLength tst.b (a2)+ + bne.s DevNumLength + sub.l (a4),a2 + add.l a2,d6 +DevStdOkay moveq #LDF_DEVICES!LDF_READ,d1 + call UnLockDosList + put.b d4,UnitNum + put.b d5,UnitNum+1 + get.l Arg_Name,d0 + move.l d0,a0 + bne.s VolumeCustom + geta StVolName,a0 + move.l a0,a1 + move.l #'ResR',(a1)+ ;Standard volume name + move.w #'am',(a1)+ + lea 3(a3),a2 +VolNameEnd move.b (a2)+,(a1)+ + bne.s VolNameEnd +VolumeCustom move.l a0,-(a4) +TestVolName tst.b (a0)+ + bne.s TestVolName + sub.l (a4),a0 + add.l a0,d6 + + moveq #64,d0 + lsl.l #6,d0 ;4KBytes Quantum + moveq #MEMF_PUBLIC,d1 + call ss,TrackLinPool + put.l d0,LinPool + geta Root+LN_PRED,a1 + move.l a1,-(a1) + addq #FC_DirList,a1 + bsr InitDir ;@A4=Parent/Current dir + getad Anchor,a0,d2 + move.l #(APF_DOWILD!APF_DODOT)<<24!PathLen,ap_Flags(a0) + get.l Arg_Files,d1 + call dos,MatchFirst + tst.l d0 + beq.s FileScanFirst + cmp.l #ERROR_NO_MORE_ENTRIES,d0 +ErrNoMorePtr equ *-4 + bne.s ErrorScan + vpush Arg_Files + dtl ,a0 +ErrorA1SS move.l sp,a1 +ErrorSS jump ss,ExitError + +ErrorScan dtl ,a0 + vpush Arg_Files +SSDosErrorA1 move.l sp,a1 + jump ss,DosError + +PrintDirName btstv.b #VerbB_Dirs,Arg_Verbose+3 + beq Return + vpea Anchor+ap_Buf + dtl ,a0 + move.l sp,a1 + call ss,Printf +ReturnSPinc addq #4,sp + rts + +FileScanFirst get.l Anchor+ap_Current,a0 + move.l an_Lock(a0),d1 + call DupLock + put.l d0,RootLock + beq.s ErrorScan + tstv.l Arg_Verbose + beq.s FileScanLoop + dtl <',$9B,'0 p>,a0 + call ss,Puts + +FileScanLoop tstv.l Anchor+ap_Info+fib_DirEntryType + bpl.s IsDir + btstv.b #VerbB_Files,Arg_Verbose+3 + sne d7 + beq.s FileVerbOff + bsr.s FileHeader +FileVerbOff tstv.b Anchor+ap_Info+fib_Protection+3 + bpl IsFile + tst.b d7 + beq.s NextFile + dtl ,a0 + call PutsNL + bra.s NextFile + +FileHeader geta Anchor+ap_Buf,a0 + call ss,Puts + dtl < - >,a0 + jump Puts + +IsDir bclrv.b #APB_DIDDIR,Anchor+ap_Flags + bne WasDir + bsetv.b #APB_DODIR,Anchor+ap_Flags + tstv.b Anchor+ap_Info+fib_FileName + beq.s ClimbedUp + bsr AllocateFC + call ss,TestStack + push a4 + bsr InitDir +ClimbedUp bsr PrintDirName + +NextFile call ss,TestBreak + getad Anchor,a0,d1 + call dos,MatchNext + tst.l d0 + beq.s FileScanLoop + cmp.l ErrNoMorePtr(pc),d0 + bne ErrorScan + bsr FlushStdout + get.l ResList,d3 + beq ListPreNull ;No resident modules -> No detaching +;Calculate size of the parts for detaching + geta ResMemory,a4 +ListPreSize move.l d3,a2 + move.l (a2)+,d3 ;RC_Next + addq #RC_Hunks-RC_Type,a2 + move.w (a2)+,d0 ;RC_Hunks + bra.s HunkSizeInto + +HunkSize move.l (a2)+,d1 + addq.l #2,d1 + move.l a4,a0 + lsl.l #2,d1 + bcs.s HunkSizeChip + subq #4,a0 +HunkSizeChip add.l d1,-(a0) +HunkSizeInto dbra d0,HunkSize + tst.l d3 + bne.s ListPreSize +;Allocate detach part + moveq #MEMF_CHIP,d1 + move.l sp,a2 + dtl ,a3 + dt PublicMsg, +GetDetaches push d1 + move.l -(a4),d2 + beq.s NoPart + addq.l #ME_SIZE,d6 ;(Any|Chip)Detach entry + gett DetachMsg,a0 + move.l a3,a1 + bsr AllocMemTopF + move.l d1,(a4) + move.l (sp),d1 + move.l d0,(sp) + addq #5,a3 +NoPart subq.l #MEMF_CHIP,d1 ;CHIP,void + bcc.s GetDetaches +;Fill in hunk pointers + get.l ResList,d2 +NextPtrMain move.l d2,a0 + move.l (a0)+,d2 ;RC_Next + addq #RC_Hunks-RC_Type,a0 + move.w (a0)+,d0 + geta ResMemory,a2 ;Trashed long + bra.s HunkPtrsInto + +HunkPtrsLoop move.l (a0),d1 + move.l sp,a3 + lsl.l #2,d1 + bcc.s HunkPtrsAny + addq #4,a3 +HunkPtrsAny move.l (a3),a1 + move.l d1,(a1) + addq.l #8,(a1)+ + move.l a1,d3 + lsr.l #2,d3 + move.l d3,(a2) + move.l a1,a2 + clr.l (a1)+ + move.l a1,(a0)+ + add.l d1,a1 + move.l a1,(a3) +HunkPtrsInto dbra d0,HunkPtrsLoop + tst.l d2 + bne.s NextPtrMain + addq #8,sp ;Trash destination addresses +;LoadSeg the file + vmovev.l ResList,EOFRegs +LoadSegLoop get.l EOFRegs,a4 ;previously D2 + addq.l #8,d6 ;SegList+Checksum + move.l (a4)+,d4 ;RC_Next + move.w (a4)+,d3 ;RC_Type + bmi.s LoadSegCmd + addq.l #4,d6 ;^ResidentTag +LoadSegCmd move.l (a4),a2 ;RC_Tracker + lea trk_ext(a2),a2 + move.l (v),a6 + btstv.b #VerbB_LoadFiles,Arg_Verbose+3 + beq.s SkipLoadSegInfo + move.l a2,a1 + dtl ,a0 + call Printf +SkipLoadSegInfo move.l (a2),a0 ;trk_ext + move.l -(a2),d2 ;trk_data + moveq #OPEN_OLD,d0 + moveq #0,d1 + call TrackOpenBufFH + move.l d4,d2 + move.l d0,a2 + addq #RC_SIZEOF-RC_Tracker,a4 + movemv.l d2-d6/a2/a4/a6/sp,EOFRegs + moveq #0,d4 + moveq #0,d5 +;A4=Hunk pointer table +;A2=File tracker +;D2=Next RC +;D3.W=Type +;D4=Current hunk #*4 - modifiable +;D5=Ptr to current hunk - (A2,D4.l) or NULL for no current hunk - modifiable +HunkMainLoop movemv.l d4/d5,EOFRegs+2*4 + vmovem.l EOFRegs+5*4,a2/a4/a6 + lea FileEnd(pc),a0 + move.l a0,bh_eofhook(a2) + call BGetLong + lea HunkError(pc),a0 + move.l a0,bh_eofhook(a2) + bclr.l #HUNKB_ADVISORY,d0 + snev Advisory + sub.w #HUNK_NAME,d0 + bcs BadHunk + cmp.w #HUNK_RELRELOC32-HUNK_NAME+1,d0 + bcc BadHunk + lsl.l #1,d0 + move.w HunkTable(pc,d0.w),d1 + swap d0 + lsl.w #2,d0 + bne HunkError + jsr HunkTable(pc,d1.w) + bra.s HunkMainLoop + +hunk macro ;HUNK_#?[,] + ifne _hunk-\1 + fail Mismatched hunk numbers! + endc + ifeq NARG-1 + dc.w BadHunk-HunkTable + else + dc.w hunk_\2-HunkTable + endc +_hunk set _hunk+1 + endm +_hunk set 1000 +HunkTable + hunk HUNK_NAME,skipcnt ;1000 + hunk HUNK_CODE,main ;1001 + hunk HUNK_DATA,main ;1002 + hunk HUNK_BSS,main ;1003 + hunk HUNK_RELOC32,rel32 ;1004 + hunk HUNK_RELOC16 ;1005 + hunk HUNK_RELOC8 ;1006 + hunk HUNK_EXT ;1007 + hunk HUNK_SYMBOL,symbol ;1008 + hunk HUNK_DEBUG,skipcnt ;1009 + hunk HUNK_END,end ;1010 + hunk HUNK_HEADER ;1011 + hunk 1012 ;???? + hunk HUNK_OVERLAY ;1013 + hunk HUNK_BREAK ;1014 + hunk HUNK_DREL32,rel16 ;1015 + hunk HUNK_DREL16 ;1016 + hunk HUNK_DREL8 ;1017 + hunk HUNK_LIB ;1018 + hunk HUNK_INDEX ;1019 + hunk HUNK_RELOC32SHORT,rel16 ;1020 + hunk HUNK_RELRELOC32,rrel16 ;1021 + ifne _hunk-HUNK_RELRELOC32-1 + fail Invalid number of hunks! + endc + +FileEnd vmovem.l EOFRegs,d2-d6/a2/a4/a6/sp + tst.l d5 + bne HunkError + move.l a4,a3 + lsr.l #2,d4 + cmp.w -(a4),d4 ;RC_Hunks + bne HunkError + subq #RC_Hunks-RC_Tracker,a4 + move.l (a4),a0 ;RC_Tracker + call FreeObject ;Non-buffered tracker + move.w d4,d7 + tst.w d3 ;RC_Type + bmi.s LoadEndCmd + move.l a3,d5 +FindResInto dbra d4,FindResLoop + push bh_name(a2) + dtl ,a0 + bra ErrorA1SS + +LoadEndCmd move.l bh_name(a2),d1 + call dos,FilePart + move.l d0,(a4)+ ;RC_CmdName + bra.s LoadEnd + +FindResLoop move.l (a3)+,a0 + move.l -8(a0),d0 ;Size of the hunk + moveq #RT_SIZE+8,d1 + sub.l d1,d0 + bcs.s FindResInto + lsr.l #1,d0 + move.w d0,d1 + swap d0 +FindResTag1 cmp.w #RTC_MATCHWORD,(a0)+ +FindResTag2 dbeq d1,FindResTag1 + dbeq d0,FindResTag1 + bne.s FindResInto + move.l a0,d0 + subq.l #2,d0 + cmp.l (a0),d0 + bne.s FindResTag2 + tst.w d3 ;RC_Type + bne.s KickMod + move.b RT_FLAGS-RT_MATCHTAG(a0),d0 + and.b #$80,d0 + or.b #RTF_AFTERDOS,d0 + move.b d0,RT_FLAGS-RT_MATCHTAG(a0) + move.b #-128,RT_PRI-RT_MATCHTAG(a0) +KickMod move.l (a0),(a4)+ ;RC_Resident + move.l d5,a3 +LoadEnd move.l a2,a0 + call ss,FreeObject + moveq #0,d3 + tst.w (a4) + beq.s CalcNoSum + subq.w #1,d7 +CalcSumMod move.l (a3)+,a0 + move.l -8(a0),d0 + lsr.l #2,d0 + subq.l #3,d0 + bmi.s CalcSumModInto + move.w d0,d1 + swap d0 +CalcSumIt add.l (a0)+,d3 + dbra d1,CalcSumIt + dbra d0,CalcSumIt +CalcSumModInto dbra d7,CalcSumMod + seq d0 + sub.b d0,d3 +CalcNoSum move.l d3,(a4)+ ;RC_CheckSum + move.l (a4),d0 + lsr.l #2,d0 + subq.l #1,d0 + move.l d0,(a4) + tst.l d2 + bne LoadSegLoop + bsr FlushStdout +ListPreNull move.l d6,d2 + gett BlockMsg,a0 + dtl
,a1 + bsr AllocMemTop + put.l d1,ResMemory + move.l d0,d5 + move.l d0,a1 + move.w #RTC_MATCHWORD,(a1)+ ;RT_MATCHWORD + move.l #(RTF_COLDSTART<<24)!(1<<16),d7 ;RT_[FVTP]#? + lea ResName-ResidentPart+RT_SIZE-RT_MATCHTAG+2(a1),a0 + move.l a0,d2 + lea ResID-ResidentPart+RT_SIZE-RT_MATCHTAG+2(a1),a2 + lea ResInit-ResidentPart+RT_SIZE-RT_MATCHTAG+2(a1),a3 + movem.l d0/d4/d7/a0/a2/a3,(a1) + lea RT_SIZE-RT_MATCHTAG+2(a1),a1 + lea ResidentPart(pc),a0 + move.l #ResidentCode,d0 + lea ResidentCode+ResidentVars(a1),a3 + call exec,CopyMem + get.w UnitNum,ResNumOne-V-ResidentVars(a3) + get.w UnitNum,ResNumTwo-V-ResidentVars(a3) + lea -ds_SIZEOF(a3),a2 + move.l a2,d1 + call dos,DateStamp ;dosbase used below! + get.l ResList,d0 + beq.s NoList1 +Cmds1Loop move.l d0,a0 + move.l (a0)+,d0 ;RC_Next + tst.w (a0)+ ;RC_Type + bpl.s NoCmdNode1 + addq #RC_SIZEOF-RC_CmdName,a0 + move.l (a0),(a3)+ ;RC_SIZEOF - SegList + move.l -(a0),(a3)+ ;RC_CheckSum +NoCmdNode1 tst.l d0 + bne.s Cmds1Loop +NoList1 clr.l (a3)+ + get.l ResList,d0 + beq.s NoList3 +Libs2Loop move.l d0,a0 + move.l (a0)+,d0 ;RC_Next + tst.w (a0)+ ;RC_Type + bmi.s NoLibNode2 + addq #RC_SIZEOF-RC_Resident,a0 + move.l (a0),(a3)+ ;SegList + move.l -(a0),(a3)+ ;LibChkSum +NoLibNode2 tst.l d0 + bne.s Libs2Loop +NoList3 push a3 ;STACK=^Resident list + move.l a3,-(a2) ;ResListPtr + move.l d5,(a3)+ ;My resident struct + + get.l ResList,d0 + beq.s NoList2 +Libs1Loop move.l d0,a0 + move.l (a0)+,d0 ;RC_Next + tst.w (a0)+ ;RC_Type + bmi.s NoResMod + move.l (a0),(a3)+ ;RC_Resident +NoResMod tst.l d0 + bne.s Libs1Loop +NoList2 move.l a3,-(a2) ;ResListSucc + clr.l (a3)+ + clr.l (a3)+ ;LN_SUCC + push a3 ;STACK=^Resident list succ + clr.l (a3)+ ;LN_PRED + move.w #NT_KICKMEM<<8,(a3)+ ;LN_TYPE+LN_PRI + move.l d2,(a3)+ ;LN_NAME + get.w MEntries,(a3)+ ;ME_NUMENTRIES + geta AnyTrk,a0 + moveq #2,d0 +MEntryLoop move.l (a0)+,d1 + beq.s NoMEntry + move.l d1,a4 + move.l trk_data(a4),(a3)+ ;ME_ADDR + move.l trk_ext(a4),(a3)+ ;ME_LENGTH +NoMEntry dbra d0,MEntryLoop + move.l a3,-(a2) ;RootPtr + clr.l -(a2) ;NumLocks + clr.l -(a2) ;VolumeNode + move.l MyDiskTypeAddr(pc),-(a2) ;id_DiskType + moveq #64,d0 + lsl.l #3,d0 + move.l d0,-(a2) ;id_BytesPerBlock + move.l a3,a1 + move.l -(a1),d0 ;Length + move.l d0,d7 + add.l -(a1),d7 + lsr.l #8,d0 + lsr.l #1,d0 ;BlockSize=512 + addq.l #1,d0 + move.l d0,-(a2) ;id_NumBlocksUsed + move.l d0,-(a2) ;id_NumBlocks + moveq #ID_WRITE_PROTECTED,d0 + move.l d0,-(a2) ;id_DiskState + clr.l -(a2) ;id_UnitNumber + clr.l -(a2) ;id_NumSoftErrors + + mpush a1/a2 + get.l RootLock,d1 + call dos,CurrentDir + geta Root,a2 + bsr ReadFiles + bsr FlushStdout + mpop a1/a2 + + move.l a3,-(a2) ;DosHName + geta DevName,a1 + move.l (a1),a0 +LenDosHName tst.b (a0)+ + bne.s LenDosHName + sub.l (a1),a0 + move.w a0,d0 + subq.w #1,d0 + move.b d0,(a3)+ + move.l (a1),a0 + bra.s CopyDosHNameI + +CopyDosHNameL move.b (a0)+,(a3)+ +CopyDosHNameI dbra d0,CopyDosHNameL + + move.l a3,-(a2) ;VolumeName + move.l -(a1),a0 ;VolName +CopyVolName move.b (a0)+,(a3)+ + bne.s CopyVolName + + move.l a3,-(a2) ;CmdsNames + get.l ResList,d0 + beq.s NoCmdsNoNames +CmdNamesLoop move.l d0,a0 + move.l (a0)+,d0 + tst.w (a0)+ ;RC_Type + bpl.s NoCmdName + move.l (a0)+,a0 ;RC_CmdName +CopyCmdName move.b (a0)+,(a3)+ + bne.s CopyCmdName +NoCmdName tst.l d0 + bne.s CmdNamesLoop +NoCmdsNoNames + move.l d5,a0 + move.w #(RT_SIZE+2+ResidentCode)>>2-1,d1 + moveq #0,d0 +GenSumMain sub.l (a0)+,d0 + dbra d1,GenSumMain + move.l a2,a0 +GenSumMainE sub.l (a0)+,d0 + cmp.l a0,d7 + bne.s GenSumMainE + move.l d0,-(a2) ;AnySum + get.l BootPri,-(a2) ;VarBootPri + +;### Write out the AbsModule (if wished) ### +;-HEADER- 00000000 00000001 00000000 00000000 *Length* --CODE-- +;*Length* 74Ln6014 0000ABCD 00000000 00000000 00000000 00000000 + move.l (v),a6 + pop a4 ;-(A4)=KickMem, ResListSucc + get.l Arg_GenAbs,d0 + beq GenDisk + btstv.b #VerbB_SizeMod,Arg_Verbose+3 + beq.s NoModVerb + push d0 + dtl ,a0 + move.l sp,a1 + call Printf + bsr FlushStdout + move.l (v),a6 + pop d0 +NoModVerb move.l d0,a0 + moveq #OPEN_NEW,d0 + moveq #0,d1 + call TrackOpenBuf + move.l d0,a3 + geta AbsHeader,a0 + move.l HeaderPtr(pc),(a0) + addq.w #1,10(a0) + moveq #AbsHdrLength+3,d0 + geta AnyTrk,a2 + moveq #2,d1 + move.l #$60147400!(21+AbsRawLength>>2),d2 +OutAbsLenLoop tst.l (a2)+ + beq.s OutAbsLenInto + addq.w #2,d0 + addq.b #2,d2 +OutAbsLenInto dbra d1,OutAbsLenLoop + move.w d0,22(a0) + subq.w #1,d0 + move.w d0,30(a0) + move.w #HUNK_CODE,26(a0) + swap d2 + move.l d2,32(a0) + move.w #$ABCD,38(a0) + moveq #56,d0 + call BWrite + lea AbsModule(pc),a0 + move.l #AbsRawLength,d0 + call BWrite + lea _LVOBPutLong(a6),a1 + bsr GenerateEnd + move.l #HUNK_END,(a0)+ + move.l #HUNK_OVERLAY,(a0)+ + clr.l (a0)+ + clr.l (a0)+ + move.l #HUNK_BREAK,(a0)+ + move.l a0,d0 + sub.l d3,d0 + move.l d3,a0 + call BWrite + bsr ClosenCleanup + +;### Generate AbsModule to the disk (if wished) ### +GenDisk get.l Arg_GenDisk,d2 + beq PrepHandler + moveq #LDF_DEVICES+LDF_READ,d1 + call dos,LockDosList + move.l d0,d1 + move.l d2,a3 + moveq #':',d4 + moveq #LDF_DEVICES,d3 +NextChar move.b (a3)+,d0 + beq DiskErrorSP + cmp.b d4,d0 + bne.s NextChar + clr.b -(a3) + call FindDosEntry + tst.l d0 + beq NoDosEntry + move.l d0,a0 + move.l dn_Startup(a0),d0 + beq NoDosEntry + lsl.l #2,d0 + move.l d0,a0 + push (a0)+ ;fssm_Unit + push (a0)+ ;fssm_Device + move.l (a0)+,d0 ;fssm_Environ + push (a0) ;fssm_Flags + lsl.l #2,d0 + move.l d0,a0 + move.l (a0)+,d6 ;de_TableSize + cmp.l #128,(a0) ;de_SizeBlock + bne.s NoDosEntry + push de_HighCyl-de_SizeBlock(a0) + push de_LowCyl-de_SizeBlock(a0) + push de_Surfaces-de_SizeBlock(a0) + moveq #MEMF_PUBLIC,d0 + subq.l #8,d6 + subq.l #4,d6 + bmi.s NoBufMemType + move.l de_BufMemType-de_SizeBlock(a0),d0 +NoBufMemType put.l d0,sv_memattr + move.l de_BlocksPerTrack-de_SizeBlock(a0),d0 + moveq #3,d1 ;Min. are 3 Blocks/Track + cmp.l d1,d0 + bcs.s NoDosEntry + lsl.l #8,d0 + lsl.l #1,d0 + move.l d0,d6 ;TrackBuffer size + get.l utilitybase,a0 + lea _LVOUMult32(a0),a0 + pop d1 ;de_Surfaces + jsr (a0) + pop d1 ;de_LowCyl + move.l d0,d7 ;Cylinder size + jsr (a0) + exg.l d0,d7 ;Position offset<->Cylinder size + pop d1 ;de_HighCyl + addq.l #1,d1 + jsr (a0) + sub.l d7,d0 + moveq #64,d5 + lsl.l #3,d5 ;BootBlock size 512 + geta AnyTrk,a0 + moveq #2,d3 +LoopDiskTrk move.l (a0)+,d1 + beq.s NoDiskTrk + move.l d1,a1 + add.l trk_ext(a1),d5 + subq.l #8,d5 +NoDiskTrk dbra d3,LoopDiskTrk + mpush d0/d5 + push d2 + dtl ,a0 + cmp.l d5,d0 + bcs ErrorA1SS + lea 12(sp),sp + moveq #0,d3 +NoDosEntry moveq #LDF_DEVICES+LDF_READ,d1 + call UnLockDosList +DiskErrorSP push d2 +DiskError moveq #err_lock,d0 + move.l (sp),a1 + subq.l #LDF_DEVICES,d3 + beq ReportSS + move.b d4,(a3) + move.l d2,d1 + moveq #DOSTRUE,d2 + call Inhibit + tst.l d0 + beq.s DiskError + move.l (v),a6 + put.l a3,InhibitEnd + tstv.l Arg_NoDiskReq + bne.s SkipDiskReq + dtl.lc ,a0 + dt.lc + dt.l + move.l sp,a1 + dtl ,a2 + call ss,SimpleRequest + move.l d0,d1 + moveq #err_break,d0 + tst.l d1 + beq ReportSS +SkipDiskReq btstv.b #VerbB_SizeMod,Arg_Verbose+3 + beq.s NoDiskModVerb + dtl ,a0 + move.l sp,a1 + call Printf + bsr FlushStdout +NoDiskModVerb addq #4,sp + move.l d6,d1 + moveq #OPEN_NEW,d0 + move.l d2,a0 + call ss,TrackBufHandle + move.l d0,a3 + lea RawDiskWrite(pc),a0 + move.l a0,bh_writefunc(a3) + mpop d1/a0 ;fssm_Flags,fssm_Device + pop d0 ;fssm_Unit + add.l a0,a0 + add.l a0,a0 + addq.l #1,a0 + sub.l a1,a1 + sub.l a2,a2 + call TrackDevice + move.l d1,bh_handle(a3) + move.w #TD_FORMAT,IO_COMMAND(a1) + move.l d7,IO_OFFSET(a1) + lea _LVOBPutLong(a6),a1 + moveq #(ImgResList-BootImage)>>2,d0 + lsl.l #2,d0 + lea BootImage(pc),a0 + call BWrite + bsr.s GenerateEnd + move.l a0,d0 + move.l d3,a0 + sub.l a0,d0 + moveq #512-(ImgResList-BootImage)-4,d3 + sub.l d0,d3 + call BWrite + lsr.l #2,d3 +FillBoot moveq #0,d0 + call BPutLong + dbra d3,FillBoot + bsr.s ClosenCleanup + +;### Prepare handler to be resident ### +PrepHandler pop a3 ;^ResList + get.l Arg_Reboot,d0 + beq.s NoReboot + pea ImgRebootNow(pc) +NoReboot tstv.l Arg_NoRun + bne Return + tst.l d0 + bne.s WellReboot + pea AbsNextRes(pc) +WellReboot geta AnyTrk,a0 + moveq #2,d1 +KillMemTrks move.l (a0)+,d0 + beq.s NoMemTrk + move.l d0,a1 + clr.b trk_type(a1) +NoMemTrk dbra d1,KillMemTrks + move.l 4.w,a6 + lea KickMemPtr(a6),a2 + MyFORBID + move.l (a2),-(a4) ;KickMemPtr + move.l a4,(a2)+ + move.l (a2),d0 ;KickTagPtr + beq.s NoNextReses + bset.l #31,d0 +NoNextReses move.l d0,-(a4) + bra EndMainInit + + ifd DEBUG +EXIT jump ss,ExitCleanup + endc + +;################ +;### Routines ### +;################ + +GenerateEnd geta HunkBuf,a0 + move.l a0,d3 + move.l 4(sp),(a0)+ + move.l a4,(a0)+ + moveq #2,d7 + geta AnyTrk,a2 + push a3 +OutAddrLoop move.l (a2)+,d0 + beq.s OutAddrNo + move.l d0,a3 + move.l trk_ext(a3),(a0)+ + move.l trk_data(a3),(a0)+ +OutAddrNo dbra d7,OutAddrLoop + pop a3 + rts + +ClosenCleanup geta AnyTrk,a2 + moveq #2,d7 +OutDataLoop move.l (a2)+,d0 + beq.s OutNoTrk + move.l d0,a0 + move.l trk_ext(a0),d0 + subq.l #8,d0 + move.l trk_data(a0),a0 + addq #8,a0 + call BWrite +OutNoTrk dbra d7,OutDataLoop + btstv.b #VerbB_SizeMod,Arg_Verbose+3 + beq.s NoModSizeVerb + move.l a3,a2 + call BTell + move.l d0,d1 + lsr.l #8,d1 + addq.l #2,d1 + lsr.l #2,d1 + mpush d0/d1 + move.l sp,a1 + dtl.l < %lu bytes (%luKB)>,a0 + call Printf + addq #8,sp +NoModSizeVerb move.l a3,a0 + jump FreeObject + +;Inputs: A2=Source A3=Destination +ReadFiles tst.l (a2) + beq Return + move.l (v),a6 +ReadFilesRout move.l a3,a4 ;As ptr where to fill in DirSize + lea FC_FileSize(a2),a1 + move.l (a1)+,d2 + moveq #3,d1 +PutLongA rol.l #8,d2 + move.b d2,(a3)+ + dbra d1,PutLongA + addq #MLH_SIZE-MLH_TAIL,a1 + move.b (a1)+,(a3)+ + move.l a3,a0 +CopyReadName move.b (a1)+,(a3)+ + bne.s CopyReadName + tst.b FC_ProtBits(a2) ;FileSize (-1 for dir) + bmi.s CopyDir + btstv.b #VerbB_LoadFiles,Arg_Verbose+3 + beq.s SkipLoadInfo + push a0 + move.l sp,a1 + dtl ,a0 + call Printf + pop a0 +SkipLoadInfo moveq #OPEN_OLD,d0 + call TrackOpen + move.l d1,a0 ;Copy tracker for ChkRead + move.l d2,d0 ;Prepare FileSize + move.l d1,d2 ;Copy tracker for FreeObject + move.l a3,a1 ;Get dest + add.l d0,a3 ;Add FileSize to dest + call ChkRead + move.l d2,a0 + call FreeObject +NextObject move.l (a2),a2 + bra.s ReadFiles + +CopyDir call TestStack + moveq #ACCESS_READ,d0 + call TrackLock + push d1 + move.l d0,d1 + call dos,CurrentDir + mpush d0/a2/a4 + push a3 + move.l d2,a2 + bsr.s ReadFiles + ; a3/d0/a2/a4 + mpop d0/d1/a2/a4 + sub.l a3,d0 + neg.l d0 + moveq #3,d2 +PutLongB rol.l #8,d0 + move.b d0,(a4)+ + dbra d2,PutLongB ;DirSize filled + + call dos,CurrentDir + pop a0 + call ss,FreeObject + bra.s NextObject + +IsFile moveq #-1,d3 ;Do checksumming flag + geta Anchor+ap_Info+fib_Comment,a2 + move.l a2,a1 +PreCommentLoop tst.b (a2) + beq.s CommentEnd + cmp.b #':',(a2)+ + bne.s PreCommentLoop + clr.b -1(a2) + dtl <4ResRAM>,a0 + bsr CompareString + tst.l d0 + bne.s CommentEnd +CommentSpcLoop cmp.b #' ',(a2)+ + beq.s CommentSpcLoop + subq #1,a2 + move.l a2,a0 +CommentEndLoop tst.b (a2) + beq.s CommentEndOK + cmp.b #'!',(a2)+ + bne.s CommentEndLoop + clr.b -(a2) + moveq #0,d3 ;'!'=>No checksumming +CommentEndOK tst.b (a0) + beq.s CommentEnd + dt FullExtTable, + dt PureCmdMsg, ;RCT_Cmd + dt MinExtTable, ;RCT_Lib + dt ;RCT_Lib + dt.c ;RCT_KickMod + dt WordNull,<',0,'> + gett FullExtTable,a3 + bsr.s GetExtNum + tst.b (a3) + beq.s CommentEnd + tst.l d5 + beq MakeFile + subq.l #2,d5 + bra.s ChecknCorrect + +GetExtNum move.l a0,a2 + moveq #0,d5 +GetExtNumLoop move.l a3,a0 + move.l a2,a1 + bsr CompareString + tst.l d0 + beq Return + addq.l #1,d5 +SkipExtName tst.b (a3)+ + bne.s SkipExtName + tst.b (a3) + bne.s GetExtNumLoop + rts + +CommentEnd moveq #FIBF_PURE!FIBF_EXECUTE,d0 + vand.b Anchor+ap_Info+fib_Protection+3,d0 + moveq #RCT_Cmd,d5 + gett PureCmdMsg,a3 + cmp.b #FIBF_PURE,d0 + beq.s CheckResident + geta Anchor+ap_Info+fib_FileName,a0 + call ss,GetExtension + gett MinExtTable,a3 + bsr.s GetExtNum + tst.b (a3) + beq MakeFile + tst.l d5 +ChecknCorrect shi d0 + add.b d0,d5 ;Library=Device +CheckResident geta Anchor+ap_Buf,a2 + moveq #0,d1 + bsr LinAlloc + move.l d0,a0 +CopyOpen move.b (a2)+,(a0)+ + bne.s CopyOpen + move.l d0,d2 + get.l Anchor+ap_Last,a0 + move.l an_Lock(a0),d1 + call dos,CurrentDir + geta Anchor+ap_Info+fib_FileName,a0 + moveq #OPEN_OLD,d0 + call ss,TrackOpen + push d1 + move.l d1,a0 + move.l d2,trk_ext(a0) ;Full PathName of the file + geta HunkBuf,a1 + move.l a1,a2 + moveq #20,d0 + call ChkTryRead + moveq #20,d1 + cmp.l d0,d1 + bne TryHunksFail + cmp.l #HUNK_HEADER,(a2)+ +HeaderPtr equ *-4 + bne TryHunksFail + tst.l (a2)+ + bne TryHunksFail + tst.w (a2) + bne TryHunksFail + move.l (a2)+,d1 + beq TryHunksFail + tst.l (a2)+ + bne TryHunksFail + addq.l #1,(a2) + cmp.l (a2),d1 + bne TryHunksFail + move.l d1,d4 + lsl.l #2,d1 + move.l d1,d2 + addq.l #8,d1 + addq.l #RC_SIZEOF-8,d1 + bsr LinAllocInt + move.l d0,a1 + geta ResList,a2 + move.l (a2),(a1)+ ;RC_Next + move.w d5,(a1)+ ;RC_Type + move.l (sp),(a1)+ ;RC_Tracker + move.w d3,(a1)+ ;RC_CheckSummed + move.w d4,(a1)+ ;RC_Hunks + move.l d0,d3 + move.l d2,d0 + move.l (sp),a0 + push a1 + call ChkTryRead + pop a0 + cmp.l d0,d2 + bne TryHunksFail + moveq #8,d1 ;SegList+CheckSum + move.w d4,d2 + subq.l #1,d4 +TestHunkFlg move.l (a0)+,d0 + rol.l #2,d0 + add.l d0,d1 + and.w #3,d0 + sub.l d0,d1 + addq.l #8,d1 + subq.l #3,d0 + dbeq d4,TestHunkFlg + beq TryHunksFail + move.l d3,(a2) + btstv.b #VerbB_LoadSeg,Arg_Verbose+3 + beq.s NoFileInfo + move.w d2,-(sp) + push d1 + tst.b d7 + bne.s HeaderWritten + bsr FileHeader +HeaderWritten bsr.s WriteFileInfo + dtl <; LoadSeg=%lu; Hunks=%u>,a0 + move.l sp,a1 + call Printf + pop d0 + vcmp.l Anchor+ap_Info+fib_Size,d0 + bls.s LoadSegSqueeze + dtl <; Large BSS part!!!>,a0 + call Puts +LoadSegSqueeze addq #2,sp + bra.s DoMsgCR + +NoFileInfo tst.b d7 + beq.s NoMsgCR + bsr.s WriteFileInfo +DoMsgCR bsr.s WriteOutCR +NoMsgCR tst.w d5 + bpl.s NotCmdIsNoName + geta Anchor+ap_Info+fib_FileName,a0 + move.l a0,d0 +TestResNameLen tst.b (a0)+ + bne.s TestResNameLen + sub.l d0,a0 + add.l a0,d6 +NotCmdIsNoName addq #4,sp ;Discard the file tracker + bra NextFile + +WriteOutCR gett WordNull,a0 + jump PutsNL + +WriteFileInfo move.l a3,a0 + call Puts + tst.l d3 + bne.s HasChkSum + dtl < (don''t checksum)>,a0 + call Puts +HasChkSum dtl <; Size=%lu>,a0 + geta Anchor+ap_Info+fib_Size,a1 + jump Printf + +LinAlloc move.l a2,a0 +TestGlobLen tst.b (a0)+ + bne.s TestGlobLen + sub.l a2,a0 + add.l a0,d1 +LinAllocInt get.l LinPool,a0 + jump ss,LinearAlloc ;1/3 may be LinearAllocN, but ... + +TryHunksFail pop a0 + call FreeObject +MakeFile tst.b d7 + beq.s NoFileVerbose + moveq #-1,d3 + gett FullExtTable,a3 + bsr.s WriteFileInfo + bsr.s WriteOutCR +NoFileVerbose bsr.s AllocateFC + get.l Anchor+ap_Info+fib_Size,(a1) ;FC_FileSize + add.l (a1),d6 + bra NextFile + +AllocateFC geta Anchor+ap_Info+fib_FileName,a2 + moveq #FC_SIZEOF,d1 + bsr.s LinAlloc + move.l a4,a0 + move.l d0,a1 + lea FC_ProtBits(a1),a2 + call exec,AddTail + lea FC_DirList-FC_ProtBits(a2),a1 + move.l a2,d0 + get.b Anchor+ap_Info+fib_Protection+3,(a2)+ + geta Anchor+ap_Info+fib_FileName,a0 +CopyFileNameA move.b (a0)+,(a2)+ + bne.s CopyFileNameA + sub.l d0,a2 + add.l a2,d6 + addq.l #RFC_ProtBits,d6 + rts ;A1=FC_FileSize/FC_DirList + +WasDir tstv.b Anchor+ap_Info+fib_FileName + beq ClimbedUp + tstv.l Arg_EmptyDirs + bne.s ClimbUp + cmp.l LH_TAILPRED(a4),a4 ;Is list empty? + beq.s RemoveThatNode +ClimbUp move.l a4,a0 + lea DirItemCmp(pc),a1 + call ss,SortList +NoDirLength pop a4 + geta Anchor+ap_Buf,a2 + move.l a2,d1 + call dos,FilePart + cmp.l d0,a2 + bne.s LongerPath + clr.b (a2) + bra ClimbedUp + +LongerPath move.l d0,a0 + clr.b -(a0) + bra ClimbedUp + +RemoveThatNode lea -FC_DirList(a4),a1 + call exec,Remove + lea FC_FileName-FC_DirList(a4),a0 +DirNameLength tst.b (a0)+ + bne.s DirNameLength + sub.l a4,a0 + sub.l a0,d6 + addq.l #FC_SIZEOF-FC_DirList-RFC_SIZEOF,d6 + bra.s NoDirLength + +;Inputs: A1=FC_DirList +InitDir move.l a1,a4 + addq #4,a1 + move.l a1,(a4) + clr.l (a1)+ + move.l a4,(a1)+ + bset.b #7,(a1) + rts + +;Inputs: A0=^^Node1 A1=^^Node2, Results: D0=-1/0/1 (Node1<=>Node2) +DirItemCmp move.l (a0),a0 + move.l (a1),a1 + lea FC_ProtBits(a0),a0 + lea FC_ProtBits(a1),a1 + tst.b (a0)+ + smi d0 + tst.b (a1)+ + smi d1 + sub.b d1,d0 + beq.s CompareString + bpl Return + moveq #-1,d0 + rts + +CompareString push a6 + call utility,Stricmp + pop a6 + rts + +AllocMemTop moveq #0,d1 +AllocMemTopF addqv.w #1,MEntries + addq.l #8,d2 + addq.l #MEM_BLOCKMASK,d2 + and.w #~MEM_BLOCKMASK,d2 + or.l #MEMF_PUBLIC!MEMF_REVERSE!MEMF_KICK,d1 + mpush d1/a0/a1 + bclrv.b #err_memory,sv_errsw+3 + move.l d2,d0 + call ss,TrackAllocMem + bsetv.b #err_memory,sv_errsw+3 + tst.l d0 + bne.s AllocMemTopE + move.l d2,d0 + move.l (sp),d1 + eor.w #MEMF_KICK!MEMF_LOCAL,d1 + call TrackAllocMem +AllocMemTopE addq #4,sp + mpop a0/a1 + btstv.b #VerbB_Mem,Arg_Verbose+3 + beq.s NoMemVerbose + push d1 + mpush d0/d2 + push a1 + dt.c DetachMsg, + dt.l BlockMsg,<%s memory block allocated at $%08lx, size $%08lx> + move.l sp,a1 + call Printf + addq #4,sp + mpop d0/d2 + pop d1 +NoMemVerbose addq #8,d0 + rts + +FlushStdout get.l stdout,d1 + jump dos,Flush + +Cleanup get.l OldCurDir,d1 + call dos,CurrentDir + get.l RootLock,d1 + call UnLock + getad Anchor,a0,d1 + call MatchEnd ;after CurrentDir! + tstv.l Arg_Verbose + beq.s C_NoVerb + dtl <',$9B,' p>,a0 + call ss,Puts + bsr.s FlushStdout +C_NoVerb get.l InhibitEnd,d0 + beq Return + move.l d0,a0 + move.b #':',(a0) + get.l Arg_GenDisk,d1 + moveq #DOSFALSE,d2 + jump Inhibit + +hunk_main tst.l d5 + bne HunkError + move.l (a4,d4.l),d5 + push d0 + call BGetLong + move.l d5,a3 + move.l -8(a3),d6 + cmp.l #(HUNK_BSS-HUNK_NAME)<<17,(sp)+ + beq.s DoBSS + lsl.l #2,d0 + sub.l d0,d6 + add.l d0,a3 + move.l d5,a0 + call BRead +DoBSS lsr.l #2,d6 + subq.l #2,d6 + move.w d6,d0 + swap d6 + bra.s CPUClearInto +CPUClearLoop clr.l (a3)+ +CPUClearInto dbra d0,CPUClearLoop + dbra d6,CPUClearLoop + rts + +hunk_end tst.l d5 + beq HunkError + moveq #0,d5 ;No CurrHunk + addq.l #4,d4 ;HunkNum+=4 + rts + +hunk_rrel16 moveq #-1,d0 + bra.s HunkReloc +hunk_rel16 moveq #1,d0 + bra.s HunkReloc +hunk_rel32 moveq #0,d0 +HunkReloc tst.l d5 + beq.s HunkError + move.l d5,a3 + move.l -8(a3),d6 + subq.l #8,d6 + move.l d0,d2 ;RelocType + lea _LVOBGetLong(a6),a1 + beq.s MainRelocLoop + addq #6,a1 +MainRelocLoop jsr (a1) + tst.l d0 + beq.s RelocDone + move.l d0,d2 + jsr (a1) + lsl.l #2,d0 + move.l (a4,d0.l),d3 + bra.s RelocInto + +RelocLoop2 swap d2 +RelocLoop1 jsr (a1) + cmp.l d6,d0 + bcc.s HunkError + lea (a3,d0.l),a0 + tst.w d2 + bpl.s NotRelRel + move.l a3,d0 + sub.l d0,(a0) +NotRelRel add.l d3,(a0) +RelocInto dbra d2,RelocLoop1 + swap d2 + dbra d2,RelocLoop2 + bra.s MainRelocLoop + +RelocDone call BTell + ror.b #2,d0 + bcc Return + jump BGetWord + +hunk_symbol call BGetLong + tst.l d0 + beq Return + addq.l #1,d0 + bsr.s RelSeekLongs + bra.s hunk_symbol + +BadHunk tstv.b Advisory + beq.s HunkError +hunk_skipcnt call BGetLong +RelSeekLongs lsl.l #2,d0 + jump BRelSeek + +HunkError moveq #err_read,d0 + get.l EOFRegs+5*4,a0 ;A2=BufFH + move.l bh_name(a0),a1 +ReportSS jump ss,ReportError + +RawDiskWrite move.l bh_bufsize(a0),d1 + cmp.l d1,d0 + bcc.s RDW_Larger + move.l d1,d0 +RDW_Larger move.l a1,d1 + mpush d0/d2/a2/a4 + bset.b #0,bh_arg1+3(a0) + bne.s RDW_OtherWrite + move.w #255,d2 + moveq #0,d0 +RDW_SumLoop add.l (a1)+,d0 + bcc.s RDW_SkipX + addq.l #1,d0 +RDW_SkipX dbra d2,RDW_SumLoop + not.l d0 + move.l d0,-1020(a1) +RDW_OtherWrite move.l bh_handle(a0),a1 ;DeviceTracker + move.l trk_data(a1),a2 ;IoRequest + move.l d1,IO_DATA(a2) ;^Buffer + move.l (sp),IO_LENGTH(a2) + sub.l a0,a0 + call ss,ChkDoIO + pop d0 + add.l d0,IO_OFFSET(a2) + mpop d2/a2/a4 + rts + +;### AbsModule header ### +AbsModule ;D2=Position in file to seek/2 +AbsModFH equ AbsModule-16 + ifd ModDebug + lea AbsDosName(pc),a1 + call exec,OldOpenLibrary + move.l d0,d6 + else + move.l GV_DosBase(a2),d6 + endc + move.l AbsModFH(pc),d7 + moveq #OFFSET_BEGINNING,d3 + move.l d7,d1 + lsl.l #2,d2 + move.l d6,a6 + call Seek + call IoErr + tst.l d0 + bne.s AbsExitErr + lea AbsModTab(pc),a3 + move.l sp,d5 + clr.l -(sp) +AbsAllocLoop move.l (a3)+,d0 + beq.s AbsAllocEnd + move.l (a3)+,a1 + move.l d0,d3 + call exec,AllocAbs + move.l d6,a6 + move.l d0,d2 + beq.s AbsAllocFail + push d0 + push d3 + move.l d7,d1 + addq #8,d2 + subq #8,d3 + call Read + cmp.l d0,d3 + beq.s AbsAllocLoop +AbsExitErrFree pop d0 + beq.s AbsExitErr + pop a1 + call exec,FreeMem + bra.s AbsExitErrFree + +AbsExitErr moveq #-1,d0 + rts + +AbsAllocFail moveq #103,d1 + call SetIoErr + bra.s AbsExitErrFree + +EndMainInit move.l a3,(a2)+ + call SumKickData + move.l d0,(a2) + call Permit + jump CacheClearU + +AbsAllocEnd move.l d5,sp + move.l 4.w,a6 + lea KickMemPtr(a6),a2 + MyFORBID + move.l AbsKickSucc(pc),a0 + move.l (a2),-(a0) ;KickMemPtr + move.l a0,(a2)+ + move.l (a2),d0 ;KickTagPtr + beq.s AbsNoNextReses + bset.l #31,d0 +AbsNoNextReses move.l d0,-(a0) + move.l AbsResList(pc),a3 + bsr.s EndMainInit + +AbsNextRes move.l (a3)+,d0 + ble.s AbsNoNextRes + move.l d0,a2 + move.l RT_NAME(a2),d2 + move.l d2,a1 + call FindResident + bsr.s AbsChkEnd + lea LibList(a6),a0 + bsr.s AbsChkList + lea DeviceList(a6),a0 + bsr.s AbsChkList + move.l a2,a1 + moveq #0,d1 + call InitResident + bra.s AbsNextRes + +AbsChkList move.l d2,a1 + MyFORBID + call FindName + call Permit +AbsChkEnd tst.l d0 + beq.s AbsReturn + addq #4,sp + bra.s AbsNextRes + +AbsNoNextRes moveq #0,d0 +AbsReturn rts + + ifd ModDebug +AbsDosName dc.b 'dos.library',0 + even + endc + +AbsResList equ *+(*-AbsModule)&2 +AbsKickSucc equ AbsResList+4 +AbsModTab equ AbsKickSucc+4 + +AbsHdrLength equ (AbsResList-AbsModule+24)>>2 +AbsRawLength equ AbsResList-AbsModule + +;### BootBlock of the bootimage disk ### + +BootImage dc.l 'DOS'<<8,0,0 + move.l a1,d4 ;IoRequest + move.w #CMD_READ,IO_COMMAND(a1) + move.l #1024,IO_OFFSET(a1) + lea ImgModTab(pc),a3 + lea BootImage+512(pc),a4 + lea BootImage+1024(pc),a5 + move.l 4.w,a6 +ImgAllocLoop move.l (a3)+,d0 + beq ImgAllocEnd + move.l (a3)+,a1 + move.l a1,d2 + move.l d0,d3 + call AllocAbs + tst.l d0 + beq.s ImgAllocFail + addq #8,d2 + subq #8,d3 + move.l a5,d0 + sub.l a4,d0 + cmp.l d0,d3 + bcc.s ImgCopyBuf + move.l d3,d0 +ImgCopyBuf move.l a4,a0 + add.l d0,a4 + move.l d2,a1 + add.l d0,d2 + sub.l d0,d3 + call CopyMemQuick + move.l d3,d7 + and.w #~511,d3 + eor.l d3,d7 + bsr.s ImgReadDisk + cmp.l a4,a5 + bne.s ImgAllocLoop + push d2 + lea BootImage+512(pc),a4 + move.l a4,d2 + moveq #64,d3 + lsl.l #3,d3 ;One sector + bsr.s ImgReadDisk + pop d2 + move.l d2,a1 + move.l a4,a0 + add.l d7,a4 + move.l d7,d0 + call CopyMemQuick + bra.s ImgAllocLoop + +ImgReadDisk move.l d4,a1 + move.l d2,IO_DATA(a1) + add.l d3,d2 + move.l d3,IO_LENGTH(a1) + call DoIO + move.l d4,a1 + move.l IO_OFFSET(a1),d1 + add.l d3,IO_OFFSET(a1) + tst.l d0 + beq ImgReturn + push d0 + mpush d1/d3 + lea ImgReadFailMsg(pc),a0 + bra.s ImgDoAlert + +ImgAllocFail mpush d2/d3 + lea ImgAllocFailMsg(pc),a0 +;A0=Printf-string, SP=Printf-data +ImgDoAlert move.l sp,a1 + lea -80(sp),sp + move.l sp,a3 + lea ImgAlertHdr(pc),a2 +ImgAlertPrefix move.b (a2)+,(a3)+ + bne.s ImgAlertPrefix + subq.l #1,a3 + call RawDoFmt + move.l d0,a0 + clr.b (a0) + sub.l sp,d0 + moveq #82,d1 + sub.l d0,d1 + lsl.w #2,d1 + move.w d0,-(sp) + lea ImgIntuiName(pc),a1 + call OldOpenLibrary + move.l d0,a6 + moveq #-1,d0 + moveq #29,d1 + move.l sp,a0 + call DisplayAlert + move.l 4.w,a6 + bra.s ImgRebootNow + +ImgAllocEnd lea KickMemPtr(a6),a2 + move.l ImgKickSucc(pc),a0 + MyFORBID + move.l (a2),-(a0) ;KickMemPtr + move.l a0,(a2)+ + move.l (a2),d0 ;KickTagPtr + beq.s ImgNoNextReses + bset.l #31,d0 +ImgNoNextReses move.l d0,-(a0) + move.l ImgResList(pc),(a2)+ + call SumKickData + move.l d0,(a2) + call CacheClearU +ImgRebootNow jump ColdReboot + +ImgReadFailMsg dc.b 'Read(offs=%lu, len=%lu) error %ld!',0 +ImgAlertHdr dc.b 16,'ResRAM boot: ',0 +ImgPutChar move.b d0,(a3)+ + clr.b (a3) +ImgReturn rts + +ImgAllocFailMsg dc.b 'AllocAbs($%08lx,$%08lx) fail!',0 +ImgIntuiName dc.b 'intuition.library',0 + +ImgResList equ *+(4-(*-BootImage)&3)&3 +ImgKickSucc equ ImgResList+4 +ImgModTab equ ImgKickSucc+4 + + ifgt ImgResList-BootImage+36-512 + fail + endc + +;### Code, which will be copied to the resident memory ### +lerr macro + moveq #255-ERROR_\1,d1 + endm + +ResidentPart dc.l 16 +ResSegList dc.l 0 + +Res move.l 4.w,a6 + amsg + lea V(pc),v + + move.l ThisTask(a6),a0 + lea pr_MsgPort(a0),a0 + move.l a0,(v) ;ProcPort + + bsr GetPacketInt + + lsl.l #2,d4 + move.l d4,a0 + move.l (v),dn_Task(a0) + moveq #-1,d0 + moveq #0,d1 + bsr ReplyInt + + amsg + + lea DosName(pc),a1 + call OldOpenLibrary + put.l d0,DOSbase + beq DoOpenDOSAlert ;ZF=1! + move.l d0,a6 + get.l VolumeName,d1 + moveq #DLT_VOLUME,d2 + call MakeDosEntry + lea HInitFail1(pc),a3 + bsr AlertD0Mem + move.l d0,a0 + move.l d0,d1 + lsr.l #2,d0 + geta VolumeNode,a1 + move.l d0,(a1) + addq #dl_Task,a0 + move.l (v),(a0) + addq #dl_VolumeDate-dl_Task,a0 + movem.l GDateStamp(v),d0/d2-d3 + movem.l d0/d2-d3,(a0) + move.l -(a1),dl_DiskType-dl_VolumeDate(a0) ;id_DiskType + call AddDosEntry + bsr AlertD0 + amsg + + get.l CmdsNames,a2 + lea SkipCmdName(pc),a3 ;Okay, we may ignore it + geta FirstSegment,a4 +AddSegLoop move.l (a4),d2 + beq.s OpenUtil + amsg + addq #8,a4 ;Skip ResCmd checksum + move.l a2,d1 + moveq #CMD_INTERNAL,d3 + call AddSegment + bsr AlertD0 +SkipCmdName tst.b (a2)+ + bne.s SkipCmdName + bra.s AddSegLoop + +OpenUtil lea UtilName(pc),a1 + call exec,OldOpenLibrary + addq.l #AO_UtilityLib-AO_DOSLib,d7 + lea HInitFail2(pc),a3 ;VolumeNode from DosList + bsr AlertD0 + put.l d0,UTILITYbase + +MainLoop pea MainLoop(pc) + put.l sp,ErrSP + amsg + bsr.s GetPacket + amsg + lea FuncTable(pc),a2 +TableLoop move.w (a2)+,d7 + move.w (a2)+,d0 + beq.s NotInTable + ext.l d0 + cmp.l d0,d1 + bne.s TableLoop + amsg +NotInTable jmp (a2,d7.w) + +;Returns: D0/A1=ExecMsg, A2=DosPacket, D1=dp_Type, D2-D4=dp_Arg[1-3] +GetLoop move.l (v),a0 + call WaitPort +GetPacket move.l (v),a0 +GetPacketInt call GetMsg + tst.l d0 + beq.s GetLoop + move.l d0,a0 + move.l LN_NAME(a0),a0 + move.l dp_Type(a0),d1 + movem.l dp_Arg1(a0),d2-d4 + put.l a0,CurrPacket + rts + +;--------------- +F_INFO ;(lock,info):bool + ifd DEBUGX + amsg ,0 + bsr PrintLockName + amsg <)> + endc + move.l d3,d2 +;--------------- +F_DISK_INFO ;(info):bool + amsg + lsl.l #2,d2 + move.l d2,a0 + movem.l MyInfoData(v),d0-d7/a1 + movem.l d0-d7/a1,(a0) +;--------------- +F_IS_FILESYSTEM ;():bool + amsg +ReplyF0 moveq #-1,d0 +ReplyX0 moveq #0,d1 +;--------------- +ReplyPacket mpush d0/d1 + move.l sp,a1 + amsg + get.l ErrSP,sp +ReplyInt amsg + get.l CurrPacket,a2 + move.l (a2),a1 ;dp_Link (ExecMsg) +ReplyDie move.l d0,dp_Res1(a2) + move.l d1,dp_Res2(a2) + move.l dp_Port(a2),a0 ;Port for replying + move.l (v),dp_Port(a2) + jump PutMsg +;--------------- +F_CURRENT_VOLUME ;(arg1):volume + ifd DEBUGX + amsg ,0 + bsr PrintLockName + amsg <)> + endc + get.l VolumeNode,d0 + bra.s ReplyX0 +;--------------- +F_SAME_LOCK ;(lock1,lock2):bool + ifd DEBUGX + amsg ,0 + bsr PrintLockName + amsg <,>,0 + move.l d3,a0 + bsr PrintLockNameX + amsg <)> + endc + lsl.l #2,d2 + move.l d2,a0 + move.l fl_Key(a0),d0 + lsl.l #2,d3 + move.l d3,a0 + cmp.l fl_Key(a0),d0 + beq.s ReplyF0 +Reply00 moveq #0,d0 + bra.s ReplyX0 +;--------------- +F_NIL + ifd DEBUGX + move.w d1,-(sp) + move.l sp,a1 + amsg + addq #2,sp + endc + lerr ACTION_NOT_KNOWN +Reply0XN not.b d1 +Reply0X moveq #0,d0 + bra.s ReplyPacket +;--------------- +F_FINDOUTPUT ;(fh,lock,name):bool +F_DELETE_OBJECT ;(lock,name):bool +F_CREATE_DIR ;(lock,name):lock +F_SET_PROTECT ;(,lock,name,mask):bool +F_SET_COMMENT ;(,lock,name,comment):bool +F_RENAME_OBJECT ;(slock,sname,dlock,dname):bool +F_RENAME_DISK ;(name):bool +F_SET_DATE ;(,lock,name,stamp):bool +F_SET_OWNER ;(,,lock,userinf):bool +F_MAKE_LINK ;(lock,name,dest!#,soft):bool + lerr DISK_WRITE_PROTECTED + bra.s Reply0XN +;--------------- +F_FINDUPDATE ;(fh,lock,name):bool + moveq #-1,d6 + bra.s FindUpdateJmp +;--------------- +F_FINDINPUT ;(fh,lock,name):bool + amsg + moveq #0,d6 +FindUpdateJmp push d2 + move.l d3,d2 + move.l d4,d3 + bsr.s LocateMain + pop a1 +JumpFhFromLock ;D0=arg1 A1=fh, A0=^DiskObject + tst.b RFC_ProtBits(a0) + bpl.s FindInputFile + move.l d0,d2 + bsr.s FreeLockMain +ObjWrongType lerr OBJECT_WRONG_TYPE + bra.s Reply0XN + +FindInputFile add.l a1,a1 + add.l a1,a1 + clr.l fh_Interactive(a1) + move.l d0,fh_Arg1(a1) + bra.s ReplyF0 +;--------------- +F_FREE_LOCK ;(lock):bool + amsg +F_END ;(arg1):bool + ifd DEBUGX + amsg ,0 + bsr PrintLockName + amsg <)> + endc + pea ReplyF0(pc) +;--------------- +FreeLockMain subqv.l #1,NumLocks + lsl.l #2,d2 + move.l d2,a1 + jump FreeVec +;--------------- +F_LOCATE_OBJECT ;(lock,name,mode):lock + amsg + lerr OBJECT_IN_USE + addq.l #-ACCESS_READ,d4 + bne.s Reply0XN + pea ReplyX0(pc) +;--------------- +;Inputs: D2=^Lock D3=Name D6=FindUpdate? +LocateMainNoUpd moveq #0,d6 +LocateMain + ifd DEBUGX + amsg ,0 + bsr PrintLockName + move.l d3,a0 + add.l a0,a0 + add.l a0,a0 + moveq #0,d0 + move.b (a0)+,d0 + lea -30(sp),sp + move.l sp,a1 + bra.s CopyDbgInto +CopyDbgLoop move.b (a0)+,(a1)+ +CopyDbgInto dbra d0,CopyDbgLoop + clr.b (a1) + push sp + move.l sp,a1 + amsg <,%s)> + lea 34(sp),sp + endc + + lsl.l #2,d3 + move.l d3,a1 + moveq #0,d3 + move.b (a1)+,d3 + + move.l a1,a0 + move.w d3,d0 + bra.s ColInto +ColLoop cmp.b #':',(a0)+ +ColInto dbeq d0,ColLoop + bne.s ColSkip + move.l a0,a1 + move.w d0,d3 +ColSkip + get.l RootPtr,a0 + lsl.l #2,d2 + beq.s LockInRoot + amsg + move.l d2,a2 + move.l fl_Key(a2),a0 +LockInRoot tst.b RFC_ProtBits(a0) + bpl.s ObjWrongType ;Given lock is to file + +NextComponent amsg + moveq #108,d4 ;Name buffer size + geta NameBuffer,a2 + move.l a2,a4 + lerr INVALID_COMPONENT_NAME + bra.s NameLoopInto + +NameLoop move.b (a1)+,d5 + cmp.b #'/',d5 + beq.s SlashFound + subq.l #1,d4 + beq Reply0XN + move.b d5,(a2)+ +NameLoopInto dbra d3,NameLoop + amsg + cmp.l a2,a4 + beq.s LockInternal + amsg + bsr.s FindDirItem + amsg +;--------------- +;Inputs: A0=^Object, Results: D0=Lock (BPTR) +LockInternal mpush d1/a0-a1 + ifd DEBUGX + amsg ,0 + push a2 + bsr PrintObjName + pop a2 + amsg <)> + endc + moveq #fl_SIZEOF,d0 + moveq #MEMF_PUBLIC,d1 + call AllocVec + moveq #ERROR_NO_FREE_STORE,d1 + tst.l d0 + beq Reply0X + addqv.l #1,NumLocks + move.l d0,a0 + clr.l (a0)+ ;fl_Link + move.l 4(sp),(a0)+ ;fl_Key + moveq #ACCESS_READ,d1 + move.l d1,(a0)+ ;fl_Access + move.l (v),(a0)+ ;fl_Task + get.l VolumeNode,(a0) ;VolumeNode->fl_Volume + lsr.l #2,d0 + mpop d1/a0-a1 + amsg + rts +;--------------- +;End>Empty>Lock CurrDir (A0) +; Else >Lock FileName in CurrDir +;/ >Empty>Parent of CurrDir->A0 +; Else >Find FileName in CurrDir->A0 (must be DIR) + +SlashFound amsg + cmp.l a2,a4 + bne.s NoParent + amsg + bsr.s GetEntryParent + beq.s ObjNotFound + amsg + bra.s NextComponent + +NoParent amsg + bsr.s FindDirItem + amsg + bra.s LockInRoot + +;--------------- +;Inputs: A2=^End of filename A4=^NameBuffer A0=CurrDir D6=FindUpdate? +;Results: D0/A0=^DirEntry D5=Size A4=LastDir, Destroys: D2/D4 +FindDirItem clr.b (a2) + ifd DEBUGX + mpush a0-a2 + push a4 + move.l sp,a1 + amsg ,0 + addq #4,sp + bsr PrintObjName + amsg <)> + mpop a0-a2 + endc + moveq #3,d2 +GetLongC lsl.l #8,d5 + move.b (a0)+,d5 + dbra d2,GetLongC + tst.b (a0)+ ;RFC_ProtBits + bpl ObjWrongType +SkipNameB tst.b (a0)+ + bne.s SkipNameB + move.l d5,d4 + add.l a0,d4 + +FindFileLoop cmp.l d4,a0 ;D4=Address after current dir + bcs.s StillInDir + lerr DISK_WRITE_PROTECTED + tst.l d6 + bne Reply0XN +ObjNotFound lerr OBJECT_NOT_FOUND + bra Reply0XN + +StillInDir move.l a0,d0 + moveq #3,d2 +GetLongA lsl.l #8,d5 + move.b (a0)+,d5 + dbra d2,GetLongA + addq #RFC_FileName-RFC_ProtBits,a0 + mpush d0-d1/a0-a1/a6 + move.l a4,a1 + call UTILITY,Stricmp + move.l d0,d2 + mpop d0-d1/a0-a1/a6 +SkipNameC tst.b (a0)+ + bne.s SkipNameC + add.l d5,a0 + tst.l d2 + bne.s FindFileLoop + move.l d0,a0 + rts +;--------------- +;Inputs: A0=^Entry, Results: A0=^Parent entry, ZF=EQ if no parent +GetEntryParent mpush d0-d2/a1-a2 + get.l RootPtr,a2 + sub.l a1,a1 ;Parent of Root is 0 +NextEntry amsg + cmp.l a0,a2 + beq.s ParentReturn + move.l a2,d2 + moveq #3,d0 +GetLongB lsl.l #8,d1 + move.b (a2)+,d1 + dbra d0,GetLongB + move.b (a2)+,d0 ;RFC_ProtBits +ReachEndName tst.b (a2)+ + bne.s ReachEndName + amsg + add.l d1,a2 + tst.b d0 + bpl.s NextEntry + amsg + cmp.l a2,a0 + bcc.s NextEntry + amsg + sub.l d1,a2 + move.l d2,a1 ;Current is parent + bra.s NextEntry + +ParentReturn amsg + move.l a1,a0 + move.l a0,d0 + mpop d0-d2/a1-a2 + rts +;--------------- +F_FH_FROM_LOCK ;(fh,lock):bool + amsg + exg d2,d3 +F_PARENT_FH ;(arg1):lock + amsg +F_PARENT ;(lock):lock + amsg +F_COPY_DIR_FH ;(arg1):lock + amsg +F_COPY_DIR ;(lock):lock + ifd DEBUGX + amsg ,0 + bsr PrintLockName + amsg <)> + endc + lsl.l #2,d2 + move.l d2,a0 + move.l fl_Key(a0),a0 + move.w d1,d0 + lsl.w #2,d0 + and.w d1,d0 + beq.s DoCopyDir ;COPY_DIR(|_FH) + amsg ;PARENT(|_FH) + bsr.s GetEntryParent + beq Reply00 + amsg +DoCopyDir bsr LockInternal + amsg + cmp.w #ACTION_FH_FROM_LOCK,d1 + bne ReplyX0 + move.l d3,a1 + bra JumpFhFromLock +;--------------- +F_SEEK ;(arg1,pos,mode):oldpos/-1 + amsg +F_READ ;(arg1,&buf,len):len/-1 + ifd DEBUGX + amsg ,0 + bsr PrintLockName + amsg <)> + endc + lsl.l #2,d2 + move.l d2,a1 + move.l (a1)+,d5 ;fl_Link - Current position + move.l (a1),a0 ;fl_Key + moveq #3,d2 +GetLongD lsl.l #8,d0 + move.b (a0)+,d0 + dbra d2,GetLongD + tst.b (a0)+ ;RFC_ProtBits + bpl.s ObjIsFile + amsg + lerr OBJECT_WRONG_TYPE +ReplyFXN not.b d1 +ReplyFX moveq #-1,d0 + bra ReplyPacket +;--------------- +F_WRITE ;(arg1,&buf,len):len + lerr DISK_WRITE_PROTECTED + bra.s ReplyFXN +;--------------- +ObjIsFile cmp.w #ACTION_SEEK,d1 + beq.s ActionIsSeek + sub.l d5,d0 ;D0=Remaining bytes +SkipNameA tst.b (a0)+ + bne.s SkipNameA + add.l d5,a0 ;a0=^1st byte for copy + cmp.l d0,d4 + bcc.s DoReadFile + amsg + move.l d4,d0 +DoReadFile add.l d0,-(a1) + move.l d0,d2 + move.l d3,a1 + call CopyMem + amsg + move.l d2,d0 + bra ReplyX0 + +ActionIsSeek lerr SEEK_ERROR + addq.l #1,d4 + beq.s SeekDone ;OFFSET_BEGINNING=-1 + subq.l #1,d4 + beq.s SeekCurrent ;OFFSET_CURRENT=0 + subq.l #1,d4 + bne.s ReplyFXN ;OFFSET_END=1 + amsg + add.l d0,d3 ;End-of-File +SeekDone cmp.l d3,d0 + bcs.s ReplyFXN + move.l -(a1),d0 ;Old position + move.l d3,(a1) ;fl_Link + bra ReplyX0 + +SeekCurrent amsg + add.l d5,d3 ;fl_Link + bra.s SeekDone +;--------------- +F_EXAMINE_FH ;(arg1,fib):bool + amsg +F_EXAMINE_OBJECT ;(lock,fib):bool + amsg +F_EXAMINE_NEXT ;(lock,fib):bool + ifd DEBUGX + amsg ,0 + bsr PrintLockName + amsg <)> + endc + lsl.l #2,d2 + move.l d2,a0 + lsl.l #2,d3 + move.l d3,a1 + move.l fl_Key(a0),a2 + pea ReplyF0(pc) + cmp.w #ACTION_EXAMINE_NEXT,d1 + bne.s ExamineMain + lerr NO_MORE_ENTRIES + move.l (a1),d3 ;fib_DiskKey + beq Reply0XN ;ExNext without Examine + moveq #3,d2 +GetLongF lsl.l #8,d0 + move.b (a2)+,d0 + dbra d2,GetLongF + tst.b (a2)+ ;RFC_ProtBits + bpl ObjWrongType +SkipNameD tst.b (a2)+ + bne.s SkipNameD + add.l a2,d0 ;D0=End of this directory + cmp.l fl_Key(a0),d3 + beq.s FirstEntryIn ;A2=Entry to process + move.l d3,a2 + moveq #3,d2 +GetLongG lsl.l #8,d3 + move.b (a2)+,d3 + dbra d2,GetLongG + addq #RFC_FileName-RFC_ProtBits,a2 +SkipNameE tst.b (a2)+ + bne.s SkipNameE + add.l d3,a2 +FirstEntryIn cmp.l a2,d0 + beq Reply0XN ;No more entries + +;Inputs: A2=^DirEntry A1=^FileInfoBlock +ExamineMain move.l a2,(a1)+ ;fib_DiskKey + moveq #3,d1 +GetLongE lsl.l #8,d0 + move.b (a2)+,d0 + dbra d1,GetLongE + moveq #ST_FILE,d1 + moveq #0,d2 + move.b (a2)+,d2 + move.l d0,d4 + subq.l #1,d4 + asr.l #8,d4 + asr.l #1,d4 + addq.l #1,d4 + bclr.l #7,d2 + beq.s EntryTypeDone + moveq #0,d0 ;Size of directory is zero... + moveq #1,d4 ;... but the block size is 1 <- Magic + moveq #ST_USERDIR,d1 + tst.b (a2) + bne.s EntryTypeDone + moveq #ST_ROOT,d1 + get.l VolumeName,a2 +EntryTypeDone move.l d1,(a1)+ ;fib_DirEntryType + lea fib_Protection-fib_FileName(a1),a3 + move.l a2,d3 +TestNameLength tst.b (a2)+ + bne.s TestNameLength + sub.l d3,a2 + exg d3,a2 + move.b d3,(a1)+ +CopyFileNameB move.b (a2)+,(a1)+ ;RFC_FileName->fib_FileName + bne.s CopyFileNameB + move.l d2,(a3)+ ;fib_Protection /vvv-MORE MAGIC!!! + move.l d1,(a3)+ ;fib_EntryType (=fib_DirEntryType???) + move.l d0,(a3)+ ;fib_Size + move.l d4,(a3)+ ;fib_NumBlocks + geta GDateStamp,a0 + move.l (a0)+,(a3)+ ;GDateStamp->fib_DateStamp + move.l (a0)+,(a3)+ + move.l (a0),(a3)+ + clr.b (a3) ;fib_Comment + bra ReplyF0 +;--------------- +F_DIE ;():bool + amsg + lerr OBJECT_IN_USE + tstv.l NumLocks + bne Reply0XN + amsg + moveq #-1,d0 + moveq #0,d1 + bsr ReplyInt + amsg + get.l UTILITYbase,a1 + call exec,CloseLibrary +HInitFail2 moveq #LDF_VOLUMES!LDF_WRITE,d1 + call DOS,LockDosList + amsg + get.l VolumeNode,d2 + lsl.l #2,d2 + move.l d2,d1 + amsg + call RemDosEntry + amsg + moveq #LDF_VOLUMES!LDF_WRITE,d1 + call UnLockDosList + amsg +HInitFail1 amsg + MyFORBID exec + amsg + get.l ResListPtr,a2 + move.l (a2),d1 + moveq #31,d2 + move.l ResModules(a6),d0 + beq.s DieResModEnd +DieResModChunk amsg + move.l d0,a0 +DieResModLoop amsg + move.l (a0),d0 + beq.s DieResModEnd + amsg + bclr.l d2,d0 + bne.s DieResModChunk + amsg + cmp.l (a0)+,d1 + bne.s DieResModLoop + amsg + move.l a0,d0 + bset.l d2,d0 + move.l d0,-(a0) +DieResModEnd amsg + get.l ResListSucc,a1 + lea KickTagPtr(a6),a0 + move.l (a0)+,d0 + bne.s DieTagInto + amsg +DieTagNotFound amsg + and.w #$7FFF,KickTagPtr(a6) + addq #4,a1 + lea KickMemPtr(a6),a0 +DieMemLoop amsg + move.l (a0),d0 ;LN_SUCC + beq.s DieSumKick + cmp.l d0,a1 + beq.s DieMemFound + move.l d0,a0 + bra.s DieMemLoop + +DieTagFound amsg + move.l (a1),-(a0) + bra.s DieTagNotFound + +DieTagLoop amsg + move.l (a0)+,d0 + beq.s DieTagNotFound + bpl.s DieTagLoop + bclr.l d2,d0 +DieTagInto amsg + cmp.l d0,a2 + beq.s DieTagFound + move.l d0,a0 + bra.s DieTagLoop + +DieMemFound amsg + move.l (a1),(a0) +DieSumKick call SumKickData + move.l d0,KickCheckSum(a6) + call CacheClearU + amsg +DiePortLoop amsg + move.l (v),a0 + call GetMsg + tst.l d0 + beq.s DiePortOK + amsg + move.l d0,a1 ;ExecMsg + move.l LN_NAME(a1),a2 ;DosPacket + moveq #0,d0 + lerr OBJECT_IN_USE + not.b d1 + amsg + bsr ReplyDie + amsg + bra.s DiePortLoop + +DiePortOK amsg + get.l DevNode,a0 + clr.l dn_Task(a0) + clr.l dn_SegList(a0) + amsg + call Permit + amsg + get.l VolumeNode,d1 + lsl.l #2,d1 + call DOS,FreeDosEntry + amsg + move.l a6,a1 + call exec,CloseLibrary + amsg + get.l ErrSP,sp + addq #4,sp + amsg + MyFORBID + get.l RootPtr,a0 + move.l -(a0),d0 ;ME_LENGTH + move.l -(a0),a1 ;ME_ADDR + amsg + call FreeMem + amsg + moveq #0,d0 + amsg + rts + +;--------------- +func macro ;Function + dc.w F_\1-*-4,ACTION_\1 + endm +FuncTable +; ACTION_#? ;Arg1 Arg2 Arg3 Res1 +; -------------------------------------------- +; STARTUP ;? startup devnode bool + func FINDINPUT ;fh lock name bool + func FINDUPDATE ;fh lock name bool + func READ ;arg1 &buf len len + func END ;arg1 bool + func SEEK ;arg1 pos mode oldpos + func EXAMINE_NEXT ;lock fib bool + func EXAMINE_OBJECT ;lock fib bool + func INFO ;lock info bool + func DISK_INFO ;info bool + func PARENT ;lock lock + func LOCATE_OBJECT ;lock name mode lock + func COPY_DIR ;lock lock + func FREE_LOCK ;lock bool + func CURRENT_VOLUME ;arg1 volume + func SAME_LOCK ;lock1 lock2 bool + func IS_FILESYSTEM ; bool + func FH_FROM_LOCK ;fh lock bool + func PARENT_FH ;arg1 lock + func EXAMINE_FH ;arg1 fib bool + func COPY_DIR_FH ;arg1 lock +;Write-protected functions + func WRITE ;arg1 &buf len len + func FINDOUTPUT ;fh lock name bool + func DELETE_OBJECT ;lock name bool + func CREATE_DIR ;lock name lock + func SET_PROTECT ; lock name mask bool + func SET_COMMENT ; lock name comment bool + func RENAME_OBJECT ;slock sname dlock dname bool + func RENAME_DISK ;name bool + func SET_DATE ; lock name stamp bool + func SET_OWNER ; lock userinf bool + func MAKE_LINK ;lock name dest!# soft bool + + func DIE ; bool + func NIL ;End-of-table mark + +;A0=Module with the checksum error +SumError mpush a0/a6 + lea ResIntuiName(pc),a1 + call exec,OldOpenLibrary + move.l #AT_DeadEnd!AG_OpenLib!AO_Intuition,d7 + bsr AlertD0 + move.l d0,a6 + move.l (sp),a0 + link a2,#-$100 + lea -252(sp),sp + move.l sp,a1 +SumErrLoop1 move.b (a0)+,(a1)+ + bne.s SumErrLoop1 + moveq #53,d0 + add.l sp,d0 + sub.l a1,d0 + lsl.b #2,d0 + clr.b (a1) + moveq #(SumErrMsgEnd-SumErrMsg)>>2-1,d1 + lea SumErrMsgEnd(pc),a0 +SumErrLoop2 push -(a0) + dbra d1,SumErrLoop2 + move.b d0,SumErrCenter-SumErrMsg(sp) + move.l sp,a0 + moveq #0,d0 ;Recovery + moveq #61,d1 + call DisplayAlert + tst.l d0 + beq.s UserReboot + unlk a2 + mpop a0/a6 + rts + +UserReboot move.l 4.w,a6 + not.l ChkBase(a6) + call CacheClearU + jump ColdReboot + +ResInit mpush d6/d7/a2/a3/a6 + ifd DEBUGX + call RawIOInit + endc + amsg + + move.l ResListSucc+V(pc),a0 + move.l (a0)+,d0 ;ResListSucc + add.l (a0),d0 ;KickMemSucc + lea ResidentPart-2-RT_SIZE(pc),a1 + move.w #(RT_SIZE+2+ResidentCode)>>2-1,d1 +ResSumLoop sub.l (a1)+,d0 + dbra d1,ResSumLoop + move.l RootPtr+V(pc),a0 + move.l -(a0),d1 ;ME_LENGTH + add.l -(a0),d1 ;ME_ADDR + lea AnySum+V(pc),a1 + clr.l VolumeNode-AnySum(a1) + clr.l NumLocks-AnySum(a1) +ResSumLoopE sub.l (a1)+,d0 + cmp.l a1,d1 + bne.s ResSumLoopE + tst.l d0 + beq.s ResSumOkay + lea ResName(pc),a0 + bsr SumError + +ResSumOkay amsg + lea FirstSegment+V(pc),a2 + move.l CmdsNames+V(pc),a0 +CmdSumsLoop move.l (a2)+,d0 + beq.s CmdSumsDone + bsr.s SumModInit +SkipResCmdName tst.b (a0)+ + bne.s SkipResCmdName + bra.s CmdSumsLoop + +SumModInit + ifd DEBUGX + push a0 + move.l sp,a1 + amsg + addq #4,sp + endc + moveq #0,d7 + tst.l (a2) + beq.s SumIncRet + amsg +SumOneModule lsl.l #2,d0 + move.l d0,a1 + move.l (a1)+,d0 + move.l -8(a1),d1 + lsr.l #2,d1 + subq.l #3,d1 + bmi.s SumOneHunkEnd + move.w d1,d6 + swap d1 +SumOneHunkLoop add.l (a1)+,d7 + dbra d6,SumOneHunkLoop + dbra d1,SumOneHunkLoop +SumOneHunkEnd tst.l d0 + bne.s SumOneModule + tst.l d7 + seq d1 + sub.b d1,d7 +SumIncRet cmp.l (a2)+,d7 + bne SumError + amsg + rts + +CmdSumsDone amsg + move.l ResListPtr+V(pc),a3 + addq #4,a3 ;Skip ^MyResident struct +ResSumsLoop move.l (a3)+,d0 + ble.s ResSumsDone + move.l d0,a0 + move.l RT_NAME(a0),a0 + move.l (a2)+,d0 + bsr.s SumModInit + bra.s ResSumsLoop + +ResSumsDone amsg + move.l DosHName+V(pc),a2 + moveq #0,d0 + move.b (a2),d0 + addq.l #2,d0 + moveq #MEMF_PUBLIC,d1 + call AllocVec + lea ResInitFail(pc),a3 + bsr AlertD0Mem + amsg + move.l d0,a0 + move.l d0,d6 + moveq #0,d0 + move.b (a2),d0 +DosNCopy move.b (a2)+,(a0)+ + clr.b (a0) + dbra d0,DosNCopy + amsg + + moveq #(DeviceNode_SIZEOF+FileSysStartupMsg_SIZEOF+de_Baud+1+DeviceNameEnd-DeviceName)>>1,d0 + lsl.l #1,d0 + move.l #MEMF_PUBLIC!MEMF_CLEAR,d1 + call AllocVec + bsr AlertD0 + amsg + move.l d0,a0 + exg d0,d6 + lea dn_StackSize+2(a0),a0 + move.w #StdStackSize,(a0)+ ;dn_StackSize + addq.l #8,(a0) + addq.l #StdTaskPri-8,(a0)+ ;dn_Priority + lea DeviceNode_SIZEOF-dn_Startup(a0),a1 + move.l a1,d1 + lsr.l #2,d1 + move.l d1,(a0)+ ;dn_Startup + lea ResSegList(pc),a1 + move.l d6,DevNode+V-ResSegList(a1) + move.l a1,d1 + lsr.l #2,d1 + move.l d1,(a0)+ ;dn_SegList + not.l (a0)+ ;dn_GlobalVec + lsr.l #2,d0 + move.l d0,(a0) ;dn_Name + addq #DeviceNode_SIZEOF-dn_Name+fssm_Device-FileSysStartupMsg,a0 + lea FileSysStartupMsg_SIZEOF-fssm_Device+de_Baud-DosEnvec(a0),a1 + move.l a1,d0 + lsr.l #2,d0 + move.l d0,(a0)+ ;fssm_Unit + lea FileSysStartupMsg_SIZEOF-fssm_Environ+DosEnvec(a0),a1 + move.l a1,d0 + lsr.l #2,d0 + move.l d0,(a0) ;fssm_Environ + moveq #DE_DOSTYPE,d0 + move.l d0,(a1)+ ;de_TableSize + lsl.l #3,d0 ;DE_DOSTYPE(=16)<<3=128 + move.l d0,(a1) ;de_SizeBlock + addq #de_Surfaces-de_SizeBlock,a1 + addq.l #1,(a1)+ ;de_Surfaces + addq.l #1,(a1)+ ;de_SectorPerBlock + addq.l #1,(a1) ;de_BlocksPerTrack + lea de_HighCyl-de_BlocksPerTrack(a1),a0 + move.l MyInfoData+id_NumBlocks+V(pc),(a0) + subq.l #1,(a0)+ ;de_HighCyl + addq.l #5,(a0)+ ;de_NumBuffers + addq.l #MEMF_PUBLIC,(a0)+ ;de_BufMemType + move.l #1<<31-1,(a0)+ ;de_MaxTransfer + not.l (a0)+ ;de_Mask + move.l VarBootPri+V(pc),(a0)+ ;de_BootPri + move.l #'RES'<<8,(a0)+ ;de_DosType +MyDiskTypeAddr equ *-4 + lea DeviceName(pc),a1 +CopyDevName move.b (a1)+,(a0)+ + bne.s CopyDevName + amsg + + lea ExpName(pc),a1 + call OldOpenLibrary + move.l #AG_OpenLib!AO_ExpansionLib,d7 + bsr.s AlertD0 + move.l d0,a6 + amsg + + call AllocConfigDev + lea ResInitCFail(pc),a3 + bsr.s AlertD0Mem + amsg + move.l d0,a1 + lea ResName(pc),a0 + move.l a0,LN_NAME(a1) + move.b #ERT_NEWBOARD!ERTF_DIAGVALID,cd_Rom+er_Type(a1) + lea MyDiagArea(pc),a0 + move.l a0,cd_Rom+er_Reserved0c(a1) ;er_Reserved0[c-f] + amsg + + move.l d6,a0 + move.b VarBootPri+3+V(pc),d0 + moveq #ADNF_STARTPROC,d1 + call AddBootNode + bsr.s AlertD0 + amsg +ResInitCFail move.l a6,a1 + call exec,CloseLibrary +ResInitFail amsg + mpop d6/d7/a2/a3/a6 +Return rts + +;### Debug part of the detach zone ### + + ifd DEBUGX +DPrintf mpush d0-d1/a0-a3/a6 + move.l 28(sp),a0 + addq #2,a0 + move.l 4.w,a6 + lea _LVORawPutChar(a6),a2 + MyFORBID + call RawDoFmt + call Permit + ifd WaitDbg +Wait1 btst.b #2,$dff016 + bne.s Wait1 +Wait2 btst.b #2,$dff016 + beq.s Wait2 + endc + mpop d0-d1/a0-a3/a6 + rts + +;Inputs: D2=Lock +PrintLockName tst.l d2 + bne.s LockNonNull + amsg ,0 + rts + +LockNonNull push d2 + move.l sp,a1 + amsg <$%08lx/>,0 + addq #4,sp + move.l d2,a0 +;Inputs: A0=Lock +PrintLockNameX add.l a0,a0 + add.l a0,a0 + move.l fl_Key(a0),a0 + +;Inputs: A0=^Object, Destroys: A0-A2 !!! VERY BIG STACK !!! +PrintObjName lea -30(sp),sp + move.l sp,a2 + lea RFC_FileName(a0),a1 + move.b #':',(a2)+ +CopyName move.b (a1)+,(a2)+ + bne.s CopyName + lea DPrintf(pc),a1 + move.w #$4E75,(a1) + bsr GetEntryParent + beq.s ReachedRoot + vcmp.l RootPtr,a0 + beq.s ReachedRoot + move.b #'/',(sp) + bsr.s PrintObjName +ReachedRoot lea DPrintf(pc),a1 + move.w #$48E7,(a1) + push sp + move.l sp,a1 + amsg <%s>,0 + lea 34(sp),sp + rts + endc + +; ### MyDiagArea - ptr to it is in ConfigDev structure ### +MyDiagArea dc.b DAC_BOOTTIME,0 ;da_Config,da_Flags + dc.w DiagAreaEnd-MyDiagArea ;da_Size + dc.w 0,DiagBootUp-MyDiagArea ;da_DiagPoint,da_BootPoint + dc.w ResName-MyDiagArea ;da_Name + dc.w 0,0 ;da_Reserved01,da_Reserved02 + +AlertD0Mem moveq #AG_NoMemory>>16,d7 + swap d7 +AlertD0 tst.l d0 + bne.s Return + move.l a6,(sp) + call exec,Alert + pop a6 + jmp (a3) + +DiagBootUp amsg + lea DosName(pc),a1 + call exec,FindResident +DoOpenDOSAlert move.l #AT_DeadEnd!AG_OpenLib!AO_DOSLib,d7 + bsr.s AlertD0 + move.l d0,a0 + move.l RT_INIT(a0),a0 + amsg + jmp (a0) +DosName dc.b 'dos.library',0 + +ResName dc.b 'ResRAM-Handler' + ifne (*-DosName)&1 + fail + endc +ResNumOne dc.b 0,0,0 + even +DiagAreaEnd + dc.b '$VER: ' +ResID dc.b 'ResRAM-Handler 1.0 (5.2.95)',0 +ExpName dc.b 'expansion.library',0 +UtilName dc.b 'utility.library',0 +DeviceName dc.b DeviceNameEnd-DeviceName-2,'none.device',0 +DeviceNameEnd + ifne (DeviceNode_SIZEOF+FileSysStartupMsg_SIZEOF+de_Baud+1+DeviceNameEnd-DeviceName)&1 + fail + endc +ResIntuiName dc.b 'intuition.library',0 + even +SumErrMsg dc.b 0,96,28,'!! SYSTEM IS NOW UNRELIABLE -' + dc.b ' COLD REBOOT RECOMMENDED !!',0,-1 + dc.b 0,32,48,'LMB - Continue',0,-1 + dc.b 480>>8,480&$FF,48,'RMB - ColdReboot',0,-1,0 +SumErrCenter dc.b 0,16,'ResRAM #' + ifne (*-SumErrMsg)&1 + fail + endc +ResNumTwo dc.b 0,0,': Invalid checksum on ' +SumErrMsgEnd + ifne (SumErrMsgEnd-SumErrMsg)&3 + fail + endc +V equ ResidentPart+(*-ResidentPart+3)&~3 +ResidentCode equ V-ResidentPart +SYSCNTold equ SYSCNT +SYSCNT set 0 + dv.l ProcPort + dv.l UTILITYbase + dv.l CurrPacket + dv.l ErrSP + dv.l DOSbase + dv.l DevNode + + dbuf NameBuffer,108 + dv.l VarBootPri + dv.l AnySum ;Checksum of the main part + dv.l CmdsNames ;^1st name of Resident Command + dv.l VolumeName ;APTR to ASCIIZ of volume name + dv.l DosHName ;APTR to BSTR of dos handler name + dbuf MyInfoData,id_SIZEOF +VolumeNode equ MyInfoData+id_VolumeNode ;BPTR +NumLocks equ MyInfoData+id_InUse + dv.l RootPtr ;APTR to root entry + dv.l ResListSucc ;ResidentList successor + dv.l ResListPtr ;^^MyResidentStruct + dbuf GDateStamp,ds_SIZEOF ;Global DateStamp + dbuf FirstSegment,0 ;Label of seg of first ResCmd + +ResidentVars equ SYSCNT +SYSCNT set SYSCNTold + +VerbOpt macro ;,, + ifc '\1','All' +VerbF_\1 equ 255 + else + ifc '\1','None' +VerbF_\1 equ 254 + else +VerbB_\1 equ _VerbOpt +VerbF_\1 equ 1<<_VerbOpt +_VerbOpt set _VerbOpt+1 + endc + endc + dt.c <',VerbF_\1,'\2> + dc.b ' \2: \3',10 + endm +_VerbOpt set 0 + + tags + template + dv.l Arg_Files + dv.l Arg_Device + dv.l Arg_Name + dv.l Arg_BootPri + dv.l Arg_EmptyDirs + dv.l Arg_GenAbs + dv.l Arg_GenDisk + dv.l Arg_NoDiskReq + dv.l Arg_NoRun + dv.l Arg_Reboot + dv.l Arg_Verbose + extrahelp + dc.b 'Resident RAM-Disk loader v1.0 --- (c) 1995 Short Software',10,10 + dc.b 'FILES - Directory/pattern for files to load',10 + dc.b ' (Wildcards in directory names aren''t supported)',10 + dc.b 'DEVICE - DOS device name of RES-Disk (def. RES:)',10 + dc.b 'NAME - Volume name of RES-Disk (def. ResRAM)',10 + dc.b 'BOOTPRI - Boot priority (def. 15)',10 + dc.b 'EMPTYDIRS - Don''t discard empty directories',10 + dc.b 'GENABS - Filename where an AbsModule should be written',10 + dc.b 'GENDISK - DOS device name for a boot image (e.g. DF0:)',10 + dc.b 'NODISKREQ - Suppress ''Insert disk...'' requester (only for GENDISK)',10 + dc.b 'NORUN - Don''t mount RES-Disk',10 + dc.b 'REBOOT - Reboot machine when the load succeeds',10 + dc.b ' (Doesn''t apply to AbsModules or boot images)',10 + dc.b 'VERBOSE - Verbosity switches (seq. of following letters):',10 + dt.c VerbParseTab,<> + VerbOpt All,A, + VerbOpt None,N, + VerbOpt Dirs,D, + VerbOpt Files,F, + VerbOpt LoadSeg,I, + VerbOpt LoadFiles,L, + VerbOpt Mem,M, + VerbOpt SizeMod,G, + endhelp + dt <> + defvar + exitrout Cleanup + finish + end diff --git a/project/ResRAM/ResRAM.lha b/project/ResRAM/ResRAM.lha new file mode 100644 index 0000000..e8ad917 Binary files /dev/null and b/project/ResRAM/ResRAM.lha differ diff --git a/project/SClock/Index.html.pl b/project/SClock/Index.html.pl new file mode 100755 index 0000000..8d24758 --- /dev/null +++ b/project/SClock/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::SClock' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::SClock::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::SClock::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::SClock::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/SClock/ListItem.pm b/project/SClock/ListItem.pm new file mode 100755 index 0000000..d67605c --- /dev/null +++ b/project/SClock/ListItem.pm @@ -0,0 +1,52 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::SClock' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::SClock::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; + +use My::Web; + + +our @ListItem=( + "name"=>"SClock", + "platform"=>"amiga", + "priority"=>140, + "download"=>"SClock.lha", + "link-source file"=>"SClock.asm", + "link-aminet README"=>"SClock.README", + "summary"=>"Detect disk device name from its volume name", + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"680x0 asm", + "description"=><<"HERE", +

SClock reads the current date and time from the remote machine and sets this +time on the local machine. You can save this time to battery backed up clock, +if present.

+

In fact this is the same work as does the standard AmiTCP command SynClock, +but SClock has no need for the TCP: device, the inet-handler and is much faster +(no REXX).

+HERE + ); + +1; diff --git a/project/SClock/Makefile.am b/project/SClock/Makefile.am new file mode 100644 index 0000000..14bf2ee --- /dev/null +++ b/project/SClock/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/SClock/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/SClock/SClock.README b/project/SClock/SClock.README new file mode 100644 index 0000000..89d9b6b --- /dev/null +++ b/project/SClock/SClock.README @@ -0,0 +1,13 @@ +Short: Better AmiTCP SynClock (V37+&ss.lib) + +Description: + SClock reads the current date and time from the remote machine and sets +this time on the local machine. You can save this time to battery backed up +clock, if present. + In fact this is the same work as does the standard AmiTCP command +SynClock, but SClock has no need for the TCP: device, the inet-handler and +is much faster (no REXX). + +Requirements: + Kickstart version V37 (2.04) or higher and ss.library V5.0 or higher (from +package SSLib*.lha). diff --git a/project/SClock/SClock.asm b/project/SClock/SClock.asm new file mode 100644 index 0000000..950b55f --- /dev/null +++ b/project/SClock/SClock.asm @@ -0,0 +1,144 @@ +;DEBUG equ 1 + +TimePort equ 13 ;Port of the "daytime" service + + include "SSMac.h" + + dbuf Date,dat_SIZEOF + dbuf DateStr,10 + dbuf TimeStr,9 + + start + + get.l Arg_Host,a0 + call bsdsocket,GetHostByName + moveq #2,d2 + tst.l d0 + beq NetErrorVar + move.l d0,a1 + addq #8,a1 ;h_(name|aliases) + move.l (a1)+,d0 ;h_addrtype + subq.l #2,d0 ;PF_INET + dtl ,a0 + bne.s ErrorSSNE1 + move.l (a1)+,d0 ;h_length + subq.l #4,d0 +ErrorSSNE1 bne ErrorSS + move.l (a1),a1 ;h_addr_list + move.l (a1),a1 + move.l (a1),d3 ;Address + moveq #2,d0 ;AF_INET + moveq #1,d1 ;SOCK_STREAM + moveq #0,d2 ;?Why??? + call bsdsocket,Socket + move.l d0,d4 + bmi.s NetErrorNE + clr.l -(sp) ;sin_zero + clr.l -(sp) ;sin_zero + push d3 ;sin_addr.s_addr + move.l #(4<<24)!(2<<16)!TimePort,-(sp) ;sin_(len|family|port) + move.l sp,a0 ;sockaddr_in + moveq #16,d1 ;sizeof(sockaddr_in) + call Connect + tst.l d0 +NetErrorNE bne NetError + lea -24(sp),sp + move.l sp,a0 + moveq #24,d1 + moveq #0,d2 + move.l d4,d0 + call Recv + move.l d0,d2 + addq.l #1,d0 + beq NetError + moveq #24,d1 + dtl ,a0 + cmp.l d1,d0 + bcs.s ErrorSSNE1 + lea 8(sp),a2 + geta DateStr,a1 + put.l a1,Date+dat_StrDate + move.w (a2),(a1)+ + move.l -(a2),d0 + moveq #'-',d1 + move.b d1,d0 + ror.l #8,d0 + move.l d0,(a1)+ + move.b d1,(a1)+ + lea 18(a2),a2 + move.b (a2)+,(a1)+ + move.b (a2),(a1) + addq #2,a1 + put.l a1,Date+dat_StrTime + lea 11(sp),a2 + moveq #7,d0 +CopyTime move.b (a2)+,(a1)+ + dbra d0,CopyTime + geta Date,a2 + move.l a2,d1 + call dos,StrToDate + tst.l d0 + bne.s ConvOkay + dtl ,a0 + geta Date+dat_StrDate,a1 + jump ss,DosError + +ConvOkay move.l (a2)+,d0 ;ds_Days + move.l #1440>>3,d1 + lsl.l #3,d1 + call utility,UMult32 + add.l (a2)+,d0 ;ds_Minute + moveq #60,d1 + call UMult32 + move.l (a2),d1 ;ds_Tick + divu #50,d1 + ext.l d1 + add.l d1,d0 + move.l d0,d2 + dtl ,a0 + move.w #IOTV_SIZE,a1 + moveq #UNIT_VBLANK,d0 + moveq #0,d1 + sub.l a2,a2 + call ss,TrackDevice + move.w #TR_SETSYSTIME,IO_COMMAND(a1) + move.l d2,IOTV_TIME+TV_SECS(a1) + move.l a1,a0 + move.l d1,a1 + call ChkDoIO + tstv.l Arg_Save + beq.s EXIT + dtl ,a1 + push a1 + call exec,OpenResource + move.l sp,a1 + dtl <%s not found>,a0 + tst.l d0 + beq.s ErrorSS + move.l d0,a6 + move.l d2,d0 + call WriteBattClock +EXIT jump ss,ExitCleanup + +NetError moveq #0,d2 +NetErrorVar clr.l -(sp) + call bsdsocket,Errno + push d0 + push #$8000001C + add.l d2,(sp) + move.l sp,a0 + call SocketBaseTagList + addq #4,sp + pop a0 + tst.l d0 + beq.s ErrorSS +ErrorUnknown dtl ,a0 +ErrorSS jump ss,ExitError + + tags + template + dv.l Arg_Host + dv.l Arg_Save + library bsdsocket,3 + finish + end diff --git a/project/SClock/SClock.lha b/project/SClock/SClock.lha new file mode 100644 index 0000000..6ca5f03 Binary files /dev/null and b/project/SClock/SClock.lha differ diff --git a/project/ShortRel/Index.html.pl b/project/ShortRel/Index.html.pl new file mode 100755 index 0000000..ff9f832 --- /dev/null +++ b/project/ShortRel/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::ShortRel' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::ShortRel::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::ShortRel::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::ShortRel::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/ShortRel/ListItem.pm b/project/ShortRel/ListItem.pm new file mode 100755 index 0000000..7d9e8ac --- /dev/null +++ b/project/ShortRel/ListItem.pm @@ -0,0 +1,52 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::ShortRel' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::ShortRel::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; + +use My::Web; + + +our @ListItem=( + "name"=>"ShortRel", + "platform"=>"amiga", + "priority"=>280, + "download"=>"ShortRel.lha", + "link-source file"=>"ShortRel.asm", + "link-aminet README"=>"ShortRel.README", + "aminet"=>"util/cli/ShortRel", + "summary"=>"Executable file relocations compressor", + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"680x0 asm", + "description"=><<"HERE", +

ShortRel loads the input file (must be an executable), converts relocations +(32-bit to 16-bit or vice versa), strips debug informaion (if requested) and +writes out the result. 16-bit relocations use 2 bytes per each one and 32-bit +relocations use 4 bytes. So conversion of any executable with many relocations +from 32-bit to 16-bit relocations saves 2 bytes per each one.

+HERE + ); + +1; diff --git a/project/ShortRel/Makefile.am b/project/ShortRel/Makefile.am new file mode 100644 index 0000000..ec2c257 --- /dev/null +++ b/project/ShortRel/Makefile.am @@ -0,0 +1,25 @@ +# $Id$ +# automake source for the Makefile of project/ShortRel/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl \ + ShrotRel.lha \ + ShortRel.asm diff --git a/project/ShortRel/ShortRel.README b/project/ShortRel/ShortRel.README new file mode 100644 index 0000000..3bfa039 --- /dev/null +++ b/project/ShortRel/ShortRel.README @@ -0,0 +1,16 @@ +Short: 32bit relocations <-> 16bit +Author: short@k332.feld.cvut.cz (Jan Kratochvil) +Uploader: short@k332.feld.cvut.cz (Jan Kratochvil) +Type: util/cli + +Description: + ShortRel loads the input file (must be an executable), converts +relocations (32-bit to 16-bit or vice versa), strips debug informaion (if +requested) and writes out the result. 16-bit relocations use 2 bytes per +each one and 32-bit relocations use 4 bytes. So conversion of any executable +with many relocations from 32-bit to 16-bit relocations saves 2 bytes per +each one. + +Requirements: + Kickstart version 37 (2.04) or higher and ss.library V5.0 or higher (from +package SSLib*.lha). diff --git a/project/ShortRel/ShortRel.asm b/project/ShortRel/ShortRel.asm new file mode 100644 index 0000000..dd70b08 --- /dev/null +++ b/project/ShortRel/ShortRel.asm @@ -0,0 +1,684 @@ +;DEBUG equ 1 + + include "SSMac.h" + + dv.l FileStart + dv.l Hunks + dv.l OldKeepDebug + dv.l RelocPool + dv.l BackupA2 + dv.l FirstInsert + dv.l LastInsert + dv.b FlgBufEnd + dv.b Advisory + + start + + get.l Arg_File,a0 + call LoadFile + put.l d0,FileStart + move.l d0,a2 + add.l -(a2),d0 + move.l d0,d7 + moveq #20,d0 + cmp.l (a2)+,d0 + bhi.s InvalidNE1 + lea (a2,d0.l),a3 + cmp.l #HUNK_HEADER,(a2)+ + bne.s InvalidNE1 + tst.l (a2)+ + bne.s InvalidNE1 + move.l (a2)+,d2 + beq Invalid + tst.l (a2)+ + bne.s InvalidNE1 + move.l (a2)+,d0 + addq.l #1,d0 + cmp.l d0,d2 + bne.s InvalidNE1 + dtl ,a6 + bsr.s CheckWordLimit + swap d0 + put.l d0,Hunks + lsl.l #3,d0 + call ss,TrackAllocPub + move.l d0,a4 + move.l d2,d0 + moveq #0,d4 + bsr CopyLongs + + moveq #0,d3 +MainHunkLoop + ifd DEBUG + push d4 + push d3 + push a2 + dtl ,a0 + move.l sp,a1 + call ss,Printf + lea 12(sp),sp + endc + cmp.l a2,d7 + beq.s FileEnd + move.l (a2)+,d0 + push d0 + ifd DEBUG + dtl.l ,a0 + move.l sp,a1 + call Printf + move.l (sp),d0 + endc + bclr.l #HUNKB_ADVISORY,d0 + snev Advisory + sub.w #HUNK_NAME,d0 + bcs.s BadHunk + cmp.w #HUNK_RELRELOC32-HUNK_NAME+1,d0 + bcc.s BadHunk + lsl.l #1,d0 + move.w HunkTable(pc,d0.w),d1 + swap d0 + lsl.w #2,d0 +InvalidNE1 bne Invalid + pop d0 + jsr HunkTable(pc,d1.w) + bra.s MainHunkLoop + +CheckWordLimit swap d0 + tst.w d0 + beq Return5 + push a0 + dtl ,a0 + bra ErrorSSA1 + +BadHunk tstv.b Advisory + beq Invalid + tst.l d4 + bne.s AdviSkip + move.l d0,(a3)+ +AdviSkip bsr GetLong + +FileEnd tstv.l Arg_NoEnd + beq.s PatchNoEnd + addq #4,a3 +PatchNoEnd geta Arg_To,a0 + move.l (a0),d0 + bne.s ArgToSpecified + move.l -4(a0),d0 + move.l d0,(a0) +ArgToSpecified move.l d0,a0 + moveq #OPEN_NEW,d0 + call ss,TrackOpen + move.l d1,d2 + get.l FileStart,a2 + move.l -4(a2),d4 + get.l FirstInsert,d3 + moveq #0,d5 + +FlushLoop tst.l d3 + beq.s FlushNoInsertX + move.l d3,a1 + move.l (a1)+,d1 ;Next + move.l (a1)+,d0 ;Point + sub.l a2,d0 + bne.s FlushNoInsert + move.l d1,d3 + move.l (a1)+,d0 ;Length + bra.s FlushSkip + +hunk macro ;HUNK_#?[,] + ifne _hunk-\1 + fail Mismatched hunk numbers! + endc + ifeq NARG-1 + dc.w BadHunk-HunkTable + else + dc.w hunk_\2-HunkTable + endc +_hunk set _hunk+1 + endm +_hunk set 1000 +HunkTable + hunk HUNK_NAME,skipcnt ;1000 + hunk HUNK_CODE,main ;1001 + hunk HUNK_DATA,main ;1002 + hunk HUNK_BSS,bss ;1003 + hunk HUNK_RELOC32,rel32 ;1004 + hunk HUNK_RELOC16 ;1005 + hunk HUNK_RELOC8 ;1006 + hunk HUNK_EXT ;1007 + hunk HUNK_SYMBOL,symbol ;1008 + hunk HUNK_DEBUG,skipcnt ;1009 + hunk HUNK_END,end ;1010 + hunk HUNK_HEADER ;1011 + hunk 1012 ;???? + hunk HUNK_OVERLAY ;1013 + hunk HUNK_BREAK ;1014 + hunk HUNK_DREL32,rel16 ;1015 + hunk HUNK_DREL16 ;1016 + hunk HUNK_DREL8 ;1017 + hunk HUNK_LIB ;1018 + hunk HUNK_INDEX ;1019 + hunk HUNK_RELOC32SHORT,rel16 ;1020 + hunk HUNK_RELRELOC32,rrel16 ;1021 + ifne _hunk-HUNK_RELRELOC32-1 + fail Invalid number of hunks! + endc + +FlushNoInsertX move.l a3,d0 + sub.l a2,d0 +FlushNoInsert move.l a2,a1 + add.l d0,a2 +FlushSkip move.l d2,a0 + add.l d0,d5 + call ss,ChkWrite + cmp.l a2,a3 + bne.s FlushLoop + + tstv.l Arg_Quiet + bne.s Return5 + + move.l d5,d0 + moveq #100,d1 + get.l utilitybase,a0 + jsr _LVOUMult32(a0) + move.l d4,d1 + jsr _LVOUDivMod32(a0) + pop d1 + move.w d0,-(sp) + get.l Arg_To,d3 + get.l Arg_File,d2 + mpush d1-d5 + lea 4(sp),a1 + dtl.l <%s =',62,' %s: %lu =',62,' %lu (%u%%)>,a0 + jump Printf + +hunk_rel16 moveq #-31,d2 + bra.s HunkReloc + +RelocRead16 moveq #0,d0 + move.w (a2)+,d0 +Return5 rts + +hunk_rel32 moveq #2,d2 +HunkReloc tst.l d3 + beq.s InvalidEQ1 +RelocLoop bsr.s RelocRead + beq.s RelocReturn + move.l d0,d1 + bsr.s RelocRead + vcmp.l Hunks,d0 + bcc Invalid + lsl.l #2,d0 + lea (a4,d0.l),a0 + move.l d1,d0 + tst.l d4 + bne.s RelocScan + lsl.l #2,d0 + move.l (a0),a1 + add.l d0,(a0) + tst.l d2 + bmi.s RelocCopy16 + move.l a2,a0 + add.l d0,a2 + call exec,CopyMemQuick + bra.s RelocLoop + +RelocCopy16 subq.l #1,d1 +RC16Loop clr.w (a1)+ + move.w (a2)+,(a1)+ + dbra d1,RC16Loop + bra.s RelocLoop + +RelocScan add.l d1,(a0) + rol.l d2,d0 + bsr SkipBytes + bra.s RelocLoop + +RelocRead cmp.l a2,d7 + beq InvalidEnd + tst.l d2 + bmi.s RelocRead16 + move.l (a2)+,d0 + rts + +RelocReturnRR cmp.l a3,d7 + beq.s InvalidEQ1 + clr.w (a3) + move.l a3,d0 + addq.l #3,d0 + and.w #~3,d0 + move.l d0,a3 +RelocReturn move.l a2,d0 + addq.l #3,d0 + and.w #~3,d0 + move.l d0,a2 + rts + +hunk_rrel16 tst.l d3 +InvalidEQ1 beq Invalid + moveq #-1,d2 + tst.l d4 + bne.s RRel16Loop + move.l d0,(a3)+ +RRel16Loop bsr.s RelocRead + tst.l d4 + bne.s SkipCpNum16 + move.w d0,(a3)+ +SkipCpNum16 tst.w d0 + beq.s RelocReturnRR + addq.l #1,d0 + lsl.l #1,d0 + bsr.s CopyBytes ;or SkipBytes if d4\ne0 + bra.s RRel16Loop + +hunk_skipcnt bsr.s SymInit + moveq #0,d2 + bsr.s RelocRead + tst.l d6 + beq.s SymbolSkip + move.l d0,(a3)+ +SymbolSkip push d4 + move.l d6,d4 + subq.l #1,d4 + subx.l d4,d4 + bsr.s CopyLongs + pop d4 +Return1 rts + +SymInit get.l Arg_KeepDebug,d6 + beq.s Return6 +PutnRet move.l d0,(a3)+ +Return6 rts + +hunk_symbol moveq #0,d2 + bsr.s SymInit +SkipSymbol bsr.s RelocRead + tst.l d6 + beq.s KeepNull + move.l d0,(a3)+ +KeepNull tst.l d0 + beq.s Return1 + addq.l #1,d0 + bsr.s SymbolSkip + bra.s SkipSymbol + +CopyLongs lsl.l #2,d0 +CopyBytes tst.l d4 + bne SkipBytes + move.l d7,d1 + sub.l a2,d1 + cmp.l d0,d1 + bcs InvalidEnd + move.l a2,a0 + move.l a3,a1 + add.l d0,a2 + add.l d0,a3 + cmp.l a0,a1 + beq.s Return1 + cmp.l a3,a0 + bcc.s JumpCopyMem + lsr.l #2,d0 + bcc.s CopyQuad + move.w (a0)+,(a1)+ +CopyQuad move.w d0,d1 + swap d0 + bra.s MyCopyInto + +MyCopyLoop move.l (a0)+,(a1)+ +MyCopyInto dbra d1,MyCopyLoop + dbra d0,MyCopyLoop + rts + +JumpCopyMem jump exec,CopyMem + +hunk_end tst.l d3 + beq Invalid +HunkEndJump tst.l d4 + beq.s Pass1Done + ifd DEBUG + dtl ,a0 + call ss,PutsNL + endc + moveq #64,d0 + lsl.l #4,d0 + moveq #96,d1 + lsl.l #3,d1 + moveq #0,d2 + call ss,TrackPool + put.l d0,RelocPool + push d3 + move.l d0,d3 + get.l Hunks,d2 + move.l d2,d0 + lsl.l #2,d0 + lea (a4,d0.l),a2 + push a4 + bra.s AllocRelocInto + +AllocRelocLoop move.l (a4),d0 + lsl.l #2,d0 + move.l d0,(a2)+ + beq.s NoAllocReloc + move.l d3,a0 + call PoolAlloc +NoAllocReloc move.l d0,(a4)+ +AllocRelocInto dbra d2,AllocRelocLoop + pop a4 + pop d3 + move.l d4,a2 + moveq #0,d4 + vmovev.l OldKeepDebug,Arg_KeepDebug + rts + +Pass1Done + ifd DEBUG + push d0 + dtl ,a0 + call ss,PutsNL + pop d0 + endc + put.l a2,BackupA2 + mpush d0/d7/a4 + get.l Hunks,d6 + move.l d6,d3 + lsl.l #2,d6 + move.l (v),a6 + lea (a4,d6.l),a2 ;A2=RelLengths, A4=RelEnds + moveq #0,d4 ;define to 16 if at least 1 32bit + moveq #0,d5 ;saved bytes by 16bit header + tstv.l Arg_Reloc32 + bne.s Only32Fake + get.l RelocPool,a0 + move.l d6,d0 + call PoolAlloc + push a3 + move.l d0,a3 + add.l d6,a3 + push a3 + bra.s NormalPtrsInto + +NormalPtrsLoop move.l (a2)+,d0 + sub.l d0,(a4) + move.l d0,d7 + move.l (a4)+,a0 + beq.s EmptyHunk + move.l a0,d2 + lsr.l #2,d0 + call SortLongs + moveq #0,d0 + move.l d2,a0 + move.l d7,d1 +EdgeLoop move.l d0,d2 + add.l d1,d2 + lsr.l #1,d2 + and.w #~3,d2 + cmp.l d0,d2 + beq.s EdgeFound + tst.w (a0,d2.l) + bne.s EdgeDown + move.l d2,d0 + move.l d1,d2 +EdgeDown move.l d2,d1 + bra.s EdgeLoop + +Only32Fake subq.l #1,d3 +Only32Loop move.l (a4),a0 + move.l (a2)+,d0 + sub.l d0,a0 + move.l a0,(a4)+ + lsr.l #2,d0 + call SortLongs + dbra d3,Only32Loop + bra.s FromFaked32 + +EdgeFound tst.w (a0,d0.l) + bne.s EdgeFix + addq.l #4,d0 +EdgeFix add.l d0,d5 + addq.l #8,d5 +EmptyHunk move.l d0,-(a3) ;real # of 16bit relocs + beq.s NormalPtrsInto + moveq #16,d4 + subq.l #8,d0 + bhi.s MoreThatTwo + sub.l d0,d5 + subq.l #8,d5 + subq.l #8,d5 + clr.l (a3) +MoreThatTwo sub.l d4,d5 +NormalPtrsInto dbra d3,NormalPtrsLoop ;A2=TotalEnd, A4=RelLengths + mpop a0/a3 +FromFaked32 move.l d6,d3 + lsr.l #2,d3 + subq.l #1,d3 + sub.l d6,a2 + sub.l d6,a2 ;A2=RelStarts, A4=RelLengths + sub.l d4,d5 + bmi.s Hunks32 + beq.s Hunks32 + tst.l d4 + beq.s Hunks32 + mpush d3/a0/a2/a4 + moveq #8,d0 +H16SizeLoop move.l -(a0),d1 + beq.s H16SizeSkip + lsr.l #1,d1 + addq.l #4,d1 + add.l d1,d0 +H16SizeSkip dbra d3,H16SizeLoop + and.w #~3,d0 + bsr ReserveReloc + movem.l 4(sp),d3/a0/a2/a4 + move.l #HUNK_DREL32,(a3)+ + dtl ,a6 +H16Loop move.l -(a0),d0 + sub.l d0,(a4)+ + lsr.l #2,d0 + move.l (a2),a1 + beq.s H16SkipAll + move.w d0,(a3)+ + subq.w #1,d0 + move.w 6(sp),(a3) ;Desthunk + sub.w d3,(a3)+ + +H16InLoop addq #2,a1 + move.w (a1)+,(a3)+ + dbra d0,H16InLoop + bsr CheckWordLimit ;# of relocs>65535 ?!? +H16SkipAll move.l a1,(a2)+ + dbra d3,H16Loop + clr.w (a3)+ + move.w a3,d0 + ror.w #2,d0 + bcc.s H16Aligned + clr.w (a3)+ +H16Aligned pop a3 + mpop d3/a0/a2/a4 +Hunks32 moveq #0,d0 + move.l d3,d2 + push a4 +H32SizeLoop move.l (a4)+,d1 + beq.s H32SizeInto + addq.l #8,d1 + add.l d1,d0 +H32SizeInto dbra d2,H32SizeLoop + pop a4 + tst.l d0 + beq.s HunksDone + addq.l #8,d0 + bsr.s ReserveReloc + move.l #HUNK_RELOC32,(a3)+ + move.l d3,d2 + moveq #0,d5 ;Current DestHunk +H32Loop move.l (a2)+,a0 + move.l (a4)+,d0 + beq.s H32Skip + move.l d0,d1 + lsr.l #2,d1 + move.l d1,(a3)+ + move.l d5,(a3)+ + move.l a3,a1 + add.l d0,a3 + call exec,CopyMemQuick +H32Skip addq.l #1,d5 + dbra d2,H32Loop + clr.l (a3)+ + pop a3 +HunksDone get.l RelocPool,a0 + call ss,FreeObject + get.l BackupA2,a2 + moveq #0,d3 + moveq #0,d4 + pop (a3) + tstv.l Arg_NoEnd + bne.s IsNoEnd + addq #4,a3 +IsNoEnd mpop d7/a4 +Return4 rts + +ReserveReloc add.l a3,d0 + vcmp.l BackupA2,d0 + bls.s ReserveReturn + sub.l a3,d0 + push d0 + addq.l #8,d0 + addq.l #4,d0 + call ss,TrackAllocPub + geta FirstInsert,a0 + get.l LastInsert,d1 + beq.s NoLastInsert + move.l d1,a0 +NoLastInsert move.l d0,(a0) + put.l d0,LastInsert + move.l d0,a1 + clr.l (a1)+ ;^NextInsert + move.l a3,(a1)+ ;^InsertPoint + pop (a1)+ ;^InsertLength + move.l a3,d0 + move.l a1,a3 +ReserveReturn move.l (sp),a0 + move.l d0,(sp) + jmp (a0) + +hunk_main bsr.s HunkMainInit + push a3 + bsr.s GetLong + move.l d0,d2 + bsr CopyLongs + move.w d2,d0 + swap d2 + move.l a3,d1 + cmp.l d0,d0 ;ZF=1 + bra.s SqueezeInto + +GetLong cmp.l a2,d7 + beq.s Invalid + move.l (a2)+,d0 + tst.l d4 + bne.s Return2 + move.l d0,(a3)+ +Return2 rts + +HunkMainInit tst.l d3 + beq.s WereFree + push d0 + move.l #HUNK_END,d0 + bsr HunkEndJump + pop d0 + tst.l d3 + bne.s HMI_Skip +WereFree tst.l d4 + beq PutnRet +HMI_Skip addq #4,sp + rts + +SqueezeLoop tst.l -(a3) +SqueezeInto dbne d0,SqueezeLoop + dbne d2,SqueezeLoop + beq.s TotalSqueeze + addq #4,a3 +TotalSqueeze sub.l a3,d1 + lsr.l #2,d1 + pop a0 + sub.l d1,(a0) +JumpFromBSS get.l Hunks,d0 + move.l a4,a0 + bra.s ClrHunkTabInto + +hunk_bss bsr.s HunkMainInit + bsr.s GetLong + bra.s JumpFromBSS + +ClrHunkTabLoop clr.l (a0)+ +ClrHunkTabInto dbra d0,ClrHunkTabLoop + move.l a2,d4 + vmovev.l Arg_KeepDebug,OldKeepDebug + clrv.l Arg_KeepDebug + moveq #-1,d3 +Return3 rts + +SkipBytes add.l d0,a2 + cmp.l a2,d7 + bcc.s Return3 +InvalidEnd move.l d7,a2 +Invalid vsub.l FileStart,a2 + push a2 + dtl ,a0 + vpush Arg_File +ErrorSSA1 move.l sp,a1 + jump ss,ExitError + + ifd DEBUG +EXIT jump ss,ExitCleanup + endc + + tags + template + dv.l Arg_File + dv.l Arg_To + dv.l Arg_KeepDebug + dv.l Arg_Reloc32 + dv.l Arg_NoEnd + dv.l Arg_Quiet + finish + end +ShortRel dvitype /bin.new.exp/dvitype RELOC32 +ShortRel gftodvi /bin.new.exp/gftodvi RELOC32 +ShortRel gftopk /bin.new.exp/gftopk RELOC32 +ShortRel gftype /bin.new.exp/gftype RELOC32 +ShortRel inimf /bin.new.exp/inimf RELOC32 +ShortRel initex /bin.new.exp/initex RELOC32 +ShortRel mft /bin.new.exp/mft RELOC32 +ShortRel pltotf /bin.new.exp/pltotf RELOC32 +ShortRel tftopl /bin.new.exp/tftopl RELOC32 +ShortRel vftovp /bin.new.exp/vftovp RELOC32 +ShortRel virmf /bin.new.exp/virmf RELOC32 +ShortRel virtex /bin.new.exp/virtex RELOC32 +ShortRel vptovf /bin.new.exp/vptovf RELOC32 +ShortRel MakeInfo /bin.new.exp/MakeInfo RELOC32 +ShortRel tr2tex /bin.new.exp/tr2tex RELOC32 +ShortRel dvi2tty /bin.new.exp/dvi2tty RELOC32 +ShortRel disdvi /bin.new.exp/disdvi RELOC32 +ShortRel DVIprint /bin.new.exp/DVIprint RELOC32 +ShortRel flib /bin.new.exp/flib RELOC32 +ShortRel PToFront /bin.new.exp/PToFront RELOC32 +ShortRel TeXindex /bin.new.exp/TeXindex RELOC32 +ShortRel ShowDVI /bin.new.exp/ShowDVI RELOC32 +ShortRel SpecialHost /bin.new.exp/SpecialHost RELOC32 +ShortRel bm2font /bin.new.exp/bm2font RELOC32 + + +A2=000EEE44, D3=00000000, D4=00000000 - Got HUNK_CODE +A2=00102524, D3=FFFFFFFF, D4=00102524 - Got HUNK_DREL32 +A2=00102E08, D3=FFFFFFFF, D4=00102524 - Got HUNK_RELOC32 +A2=00102E1C, D3=FFFFFFFF, D4=00102524 - Got HUNK_DATA +A2=00102524, D3=FFFFFFFF, D4=00000000 - Got HUNK_DREL32 +A2=00102E08, D3=FFFFFFFF, D4=00000000 - Got HUNK_RELOC32 +A2=00102E1C, D3=FFFFFFFF, D4=00000000 - Got HUNK_DATA +A2=00103308, D3=FFFFFFFF, D4=00103308 - Got HUNK_RELOC32 +A2=00103320, D3=FFFFFFFF, D4=00103308 - Got HUNK_BSS +A2=00103308, D3=FFFFFFFF, D4=00000000 - Got HUNK_RELOC32 +A2=00103320, D3=FFFFFFFF, D4=00000000 - Got HUNK_BSS +A2=00103328, D3=FFFFFFFF, D4=00103328 - Got HUNK_END +A2=00103328, D3=FFFFFFFF, D4=00000000 - Got HUNK_END +A2=0010332C, D3=00000000, D4=00000000 - bm2font => :t/shortrel.res: 83208 => 80888 (97%) diff --git a/project/ShortRel/ShortRel.lha b/project/ShortRel/ShortRel.lha new file mode 100644 index 0000000..417fcc1 Binary files /dev/null and b/project/ShortRel/ShortRel.lha differ diff --git a/project/TraceFS/Index.html.pl b/project/TraceFS/Index.html.pl new file mode 100755 index 0000000..6a6fe6b --- /dev/null +++ b/project/TraceFS/Index.html.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::TraceFS' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::TraceFS::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::TraceFS::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::TraceFS::ListItem::ListItem, + ); + + +print <<"HERE"; +@{[ centerimg "/project/captive/doc/ntdebug-windbg-boot","TraceFS Initialization" ]} +@{[ vskip "1ex" ]} +@{[ centerimg "/project/captive/doc/dia/TraceFS","TraceFS Hooking" ]} +HERE + + +My::Web->footer(); diff --git a/project/TraceFS/ListItem.pm b/project/TraceFS/ListItem.pm new file mode 100755 index 0000000..eaae33c --- /dev/null +++ b/project/TraceFS/ListItem.pm @@ -0,0 +1,53 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::TraceFS' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::TraceFS::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; + +use My::Web; + + +our @ListItem=( + "name"=>"TraceFS", + "platform"=>"w32", + "priority"=>610, + "icon"=>"TraceFS-icon", + "cvs"=>"captive/src/TraceFS", + "link-Documentation"=>"/project/captive/doc/CacheManager.html.pl#TraceFS", + "summary"=>"Microsoft Windows Kernel API Tracer", + "license"=>"GPL", + "maintenance"=>"ready", + "language"=>"C", + "description"=><<"HERE", +

Project allows wrapping of Microsoft Windows Kernel API calls of your chosen +kernel driver by your custom function code.

+

Although TraceFS was up to now used only for tracing of Windows NT Cache +Manager it can be easily used ever for any other NT kernel API tracing. You +need to provide appropriate function wrappers in the main source file. +Framework for thread synchronizations and debug tracing is provided to prevent +mangling of messages while running by multiple threads at once.

+HERE + ); + +1; diff --git a/project/TraceFS/Makefile.am b/project/TraceFS/Makefile.am new file mode 100644 index 0000000..c561b56 --- /dev/null +++ b/project/TraceFS/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/TraceFS/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/TraceFS/TraceFS-icon.png b/project/TraceFS/TraceFS-icon.png new file mode 100644 index 0000000..c97bc5e Binary files /dev/null and b/project/TraceFS/TraceFS-icon.png differ diff --git a/project/badblock_guess/index.html.pl b/project/badblock_guess/Index.html.pl similarity index 76% rename from project/badblock_guess/index.html.pl rename to project/badblock_guess/Index.html.pl index 2855f2c..c2122e6 100755 --- a/project/badblock_guess/index.html.pl +++ b/project/badblock_guess/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::badblock_guess::ListItem; +Wuse 'My::Project'; +Wuse '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'; diff --git a/project/badblock_guess/ListItem.pm b/project/badblock_guess/ListItem.pm index 1ff3438..37ea617 100755 --- a/project/badblock_guess/ListItem.pm +++ b/project/badblock_guess/ListItem.pm @@ -18,29 +18,34 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Recovery of Data from a Damaged Disk", - "priority"=>7, + +our @ListItem=( + "name"=>"badblock-guess", + "platform"=>"unixuser", + "priority"=>590, + "icon"=>"hdd-icon.jpeg", "download-compiled static binary"=>"badblock-guess", "download-gzipped compiled static binary"=>"badblock-guess.gz", - "link-CVS repository"=>"http://cvs.jankratochvil.net/viewcvs/badblock-guess/", - "download-CVS snapshot"=>"http://cvs.jankratochvil.net/viewcvs/badblock-guess/badblock-guess.tar.gz?tarball=1", - "link-README"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/badblock-guess/README?rev=HEAD", - "summary"=>"Data recovery", + "cvs"=>"badblock-guess", + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "link-README"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/badblock-guess/README?rev=HEAD", + "summary"=>"Data recovery from a damaged disk", "license"=>"GPL", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C", - "description"=>"" - .'

badblock-guess will try to find all readable sectors of the disk in minimal time.

' + "description"=><<"HERE", +

badblock-guess will recover all readable sectors of the disk in minimal time +while trying to prevent disk read retrying head recalibrations.

+HERE ); 1; diff --git a/project/badblock_guess/Makefile.am b/project/badblock_guess/Makefile.am index ef293ce..c759b6b 100644 --- a/project/badblock_guess/Makefile.am +++ b/project/badblock_guess/Makefile.am @@ -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/badblock_guess/hdd-icon.jpeg b/project/badblock_guess/hdd-icon.jpeg new file mode 100644 index 0000000..1afb9ba Binary files /dev/null and b/project/badblock_guess/hdd-icon.jpeg differ diff --git a/project/captive/CVS.html.pl b/project/captive/CVS.html.pl new file mode 100755 index 0000000..f129967 --- /dev/null +++ b/project/captive/CVS.html.pl @@ -0,0 +1,57 @@ +#! /usr/bin/perl +# +# $Id$ +# CVS page of 'My::Project::captive' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::CVS; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::captive::ListItem'; + + +my $W=My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::captive::ListItem::ListItem, + "before_project_data"=> + '

'.a_href('./','Captive Main Page').'

'."\n", + ); + + +print <<"HERE"; +

CVS Checkout Instructions

+
+cvs -d :pserver:pserver@{[ '@' ]}cvs.jankratochvil.net:/cvs login
+	Just hit ENTER (empty password)
+cvs -d :pserver:pserver@{[ '@' ]}cvs.jankratochvil.net:/cvs -z3 checkout captive
+cd captive
+cvs -d :pserver:pserver@{[ '@' ]}cvs.jankratochvil.net:/cvs -z3 checkout -r captive -kk reactos
+./autogen.pl
+make
+./src/client/cmdline/captive-cmdline --load-module=/var/lib/captive/ntoskrnl.exe --filesystem=/var/lib/captive/ntfs.sys --disk --blind /dev/hda1
+
+HERE + + +My::Web->footer(); diff --git a/project/captive/Index.html.pl b/project/captive/Index.html.pl new file mode 100755 index 0000000..7167397 --- /dev/null +++ b/project/captive/Index.html.pl @@ -0,0 +1,435 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::captive' +# Copyright (C) 2003 Jan Kratochvil +# +# 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::captive::ListItem'; + + +# Redirect foreign visitors to our root with that disgusting introduction ad. +{ + my $r=Apache->request(); + if (my $referer=$r->header_in("Referer")) { + Wuse 'WebConfig'; + require URI; + my $refuri=URI->new_abs($referer,$r->uri()); + if (1 + && $refuri->host() ne "localhost" + && $refuri->host() ne &{$WebConfig::WebConfig{"web_hostname_sub"}}) { + use Apache::Constants qw(REDIRECT); + $r->status(REDIRECT); + $r->header_out("Location"=>"http://".&{$WebConfig::WebConfig{"web_hostname_sub"}}()); + exit 0; + } + } + } + + +my $W=My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::captive::ListItem::ListItem, + "no_project_data"=>1, + "head_css"=>" +.reqpkg { font-style: italic; } +.stuff { font-style: italic; font-size: larger; margin-left: 20%; margin-right: 10%; } +.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; } +", + ); + + +print <<"HERE"; +

The First Read/Write NTFS for Free Operating Systems

+

The First Open Source MS-Windows Kernel API for Free OS

+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'?" + ." hal.dll.", + ); + +print rightimg((map("

$_

\n",($stuff[int rand @stuff])))[0], + 'captive-install-acquire-small','[ Captive Microsoft Windows Drivers Acquire Illustration ]', + "a_href_img"=>'captive-install-acquire'); + +print <<"HERE"; + + +@{[ vskip "3ex" ]} + +

+ Why did I install Microsoft Windows and write such a disgusting piece of code?
+ Expecting @{[ a_href $W->{"resume_url"},"yet another challenging task" ]}! +

+ +@{[ vskip "3ex" ]} + + + + + + +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
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.="
".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg}; + return $r; + }, + }, + { + "name"=>"Red Hat 8
Psyche i386
" + ."(".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.="
".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg}; + if ($pkg eq "captive-install") { + for (@libxml2_rh8_pkgs) { + $r.="
".&$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
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.="
".&$a_href_arch("dist/$filedev",$filedev) if $has_devel{$pkg}; + return $r; + }, + }, + { + "name"=>"Debian GNU/Linux
'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.="
".&$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)
(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; + }, + }, + ); + +for my $dist (@dist) { + print ""; + print ""; + for my $casel (1,2,3) { + $case=$casel; + print ""; + } + print "\n"; + } +print "\n"; +print ""; + print ""; + for my $case (1,23) { + print ""; + print join(", ",map("$_",@{$reqpkg{$case}})); + print ""; + } +print "\n"; +print <<"HERE"; +
DistributionInstallation Case #1
Filesystem and installer
(recommended)
Installation Case #2
Manual installation
(filesystem, expert user)
Installation Case #3
Command-line client
(no filesystem access)
".$dist->{"name"}.""; + print join("
",map({ my $pkg=$_; + my($file,$text)=&{$dist->{"out"}}($pkg,@{$version{$pkg}}); + (!defined $text ? ($file) || () : (&$a_href_arch("dist/$file",$text))); + } @{$pkg{$case}})); + print "
Package Requirements
+ +
+

Red Hat 8 Psyche upgrade of libxml2 package: + Upgrade only the packages already installed on your system to prevent + many dependency requirements - do not use "rpm -U", + use "rpm -F" instead:

+

+ rpm -F @{[ join(" ",@libxml2_rh8_pkgs) ]} +

+
+ +@{[ vskip "3ex" ]} + + +

Installation Notes

+ +

You should first run captive-install-acquire command to check your +available Microsoft Windows drivers versions. Now you can execute:

+ +
+

+ # mkdir /mnt/dosc
+ # mount -t captive-ntfs /dev/hda1 /mnt/dosc +

+
+ + +

Overview

+ +

'captive' is the base package. It contains debugging 'captive-cmdline' client.
+'captive-lufs' permits mounting NTFS as regular filesystem. It needs 'lufs'.
+'lufs' is a daemon to enable userland process to provide filesystem functions.

+ +

Any errors from 'captive-lufs' are written to '/var/log/messages'.

+ +

Needed drivers (at least ntoskrnl.exe+ntfs.sys) must be in '/var/lib/captive'.

+ +

'captive' package creates 'captive' user and 'captive' group on your system.

+ + +

Package Version Conflicts

+ +
+ +
@{[ a_href 'http://lufs.sourceforge.net/lufs/','lufs' ]}
+

'captive' version required: 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.

+ +
@{[ a_href 'http://linux-ntfs.sourceforge.net/','ntfsprogs' ]}
+

Original version >=200309071734 sufficient: +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 +1.7.1 while this project requires at least +@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/','snapshot' ]} version +@{[ a_href 'http://linux-ntfs.sourceforge.net/snapshots/ntfsprogs-200309071734.tar.bz2','200309071734' ]} +which is not packaged (.rpm/.deb) yet. Packaged versions are provided here for +your convenience.

+ +
+ + +

LUFS Kernel Driver Module

+ +

@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} (Linux Userland File +System) needs Linux kernel module driver (lufs.o) compatible with your +running Linux kernel. The binary driver is supplied already precompiled for many +Linux kernel versions in the binary packages above (.i386.rpm and +_i386.deb archives).

+ +

If you cannot mount(8) your NTFS filesystem you should run /usr/share/lufs/prepmod to see the reasons. It is always +recommended to upgrade to the latest stable kernel supplied by your GNU/Linux +distribution vendor. You may need to install package +kernel-source (Red Hat) or kernel-headers (Debian) matching your +Linux kernel version (rpm -q kernel) and re-run /usr/share/lufs/prepmod.

+ +

WARNING: This 'captive' package may modify your Linux kernel +sources matching your currently running kernel version. These minor +modifications may include a dependencies rebuild, compiling build tools, fixes of +several include files, etc. All the modifications are done at the mount(8) time +by the automatically executed /usr/share/lufs/prepmod script. +This behavior was not present in the original +@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} distribution +by @{[ a_href 'http://www.malinux.net/main/','Florin Malita' ]}.

+ + +HERE + + +print rightimg <<"HERE",'reactos','ReactOS',"a_href"=>'http://www.reactos.com/'; +

The First Open Source MS-Windows Kernel API for Free OS

+ +

Compatibility with the existing binary Microsoft Windows file system drivers has been + reached. Microsoft Windows kernel system components required by these drivers + were analyzed and successfully emulated in the GNU/Linux operating system. + The project brings the Microsoft Windows kernel emulation framework to support even + other types of Microsoft Windows drivers in the future. + The @{[ a_href 'http://www.reactos.com/','ReactOS' ]} + code base proved to be a big asset for this functionality.

+HERE + + +my @lists=qw(captive-announce-list captive-list captive-devel-list); + +print <<"HERE"; + +

Mailing Lists

+ +
+ + @{[ map("",@lists) ]} + + + + + @{[ map({ ""; } @lists) ]} + @{[ map({ ""; } @lists) ]} + @{[ + map((''),@lists) + ]} + +
$_
New version announcements
+ (low traffic, recommended)
User support,
bug reports
Development
".a_href(&{$W->{"mailman_url_sub"}}()."/listinfo/$_",'Mailman Infopage')."
".a_href(&{$W->{"pipermail_url_sub"}}()."/$_",'Archive')."
Subscribe?
+ + + + +
Email address:
Your new Mailman password:
Reenter your password:
+

+
+ +
+ + +@{[ vskip "3ex" ]} + +

See Also

+
    +
  • @{[ a_href 'Preview.html.pl','Technology Preview' ]}
  • +
  • @{[ a_href 'CVS.html.pl','CVS Repository' ]}
  • +
  • @{[ a_href 'doc/','Developer Documentation' ]}; highlights:
      +
    • @{[ a_href 'doc/About.html.pl#versions','Microsoft Windows Versions Compatibility' ]}
    • +
    • @{[ a_href 'doc/Architecture.html.pl#law','Laws and Licensing Conditions' ]}
    • +
    • @{[ a_href 'doc/Details.html.pl#sandbox','Sandboxing of W32 Filesystem' ]}
    • +
    • @{[ a_href 'doc/TODO.html.pl#todo_fsck','TODO: Fsck of NTFS' ]}
    • +
    • @{[ a_href 'doc/TODO.html.pl#todo_surprise','TODO: NTFS Support for Partition Surprise' ]}
    • +
    • @{[ a_href 'doc/Related.html.pl#LinuxNTFScompet','Related Projects - Linux NTFS' ]}
    • +
    • @{[ a_href 'doc/Related.html.pl#vmware','Related Projects - VMware Workstation' ]}
    • +
    • @{[ a_href 'doc/LinuxNTFS.html.pl',"Re: 7.7 Can't we write a wrapper for Windows' driver?" ]}
    • +
  • +
  • @{[ a_href 'http://cvs.jankratochvil.net/viewcvs/*checkout*/captive/TODO?rev=HEAD','Known Bugs' ]}
  • +
  • Man Pages
      + @{[ + 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,"
    • ".a_href("man/$file.pod.html",$file)."($section) - $name
    • \n"; + } + @r; + } + ]} +
  • +
  • @{[ a_href 'Resources.html.pl','Related Pages' ]}
  • +
  • @{[ a_href 'Thanks.html.pl','Thanks' ]}
  • +
+HERE + + +My::Web->footer(); diff --git a/project/captive/ListItem.pm b/project/captive/ListItem.pm new file mode 100755 index 0000000..daf5101 --- /dev/null +++ b/project/captive/ListItem.pm @@ -0,0 +1,57 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::captive' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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; + +use My::Web; + + +our @ListItem=( + "name"=>"Captive", + "platform"=>"unixuser", + "priority"=>666, + "summary"=>"NTFS filesystem, MS-Windows NT kernel emulation", + "license"=>"GPL", + "maintenance"=>"active", + "language"=>"i386 asm, C, Perl", + "icon"=>"captive-install-acquire-icon", + "cvs-of main tree"=>"captive", + "cvs-of branched ".a_href('http://www.reactos.com/','reactos')." subdir"=>"reactos:captive", + "cvs-of branched ".a_href('http://lufs.sourceforge.net/lufs/','lufs')=>"lufs:captive", + "cvs-of 'httpcaptive://' method"=>"gnome-vfs-httpcaptive:captive", + "cvs-of 'libntfs://' method"=>"ntfsprogs-gnomevfs", + "description"=><<"HERE", +

The first full read/write access to NTFS disk drivers was achieved in +the @{[ a_href 'http://www.winehq.com/','Wine' ]} way by using the original +Microsoft Windows ntfs.sys driver. It emulates the required subsystems of +the Microsoft Windows kernel by reusing one of the original +ntoskrnl.exe, @{[ a_href 'http://www.reactos.com/','ReactOS' ]} parts, or +this project's own reimplementations, on a case by case basis.

+

Involvement of the original driver files was chosen to achieve the best +and unprecedented filesystem compatibility and safety.

+HERE + ); + +1; diff --git a/project/mdsms/index.html.pl b/project/captive/Makefile.am old mode 100755 new mode 100644 similarity index 64% rename from project/mdsms/index.html.pl rename to project/captive/Makefile.am index 4419075..ca94e91 --- a/project/mdsms/index.html.pl +++ b/project/captive/Makefile.am @@ -1,7 +1,5 @@ -#! /usr/bin/perl -# # $Id$ -# Main page of 'My::Project::mdsms' +# automake source for the Makefile of project/captive/ subdir # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,19 +16,15 @@ # 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 project::mdsms::ListItem; - +include $(top_srcdir)/Makefile-head.am -My::Web->init_project( - "ListItem"=>\%My::Project::mdsms::ListItem, - ); +SUBDIRS= \ + doc -My::Web->footer(); +EXTRA_DIST+= \ + ListItem.pm \ + Index.html.pl \ + Thanks.html.pl \ + Resources.html.pl \ + Preview.html.pl \ + CVS.html.pl diff --git a/project/captive/Preview.html.pl b/project/captive/Preview.html.pl new file mode 100755 index 0000000..ca49f1d --- /dev/null +++ b/project/captive/Preview.html.pl @@ -0,0 +1,76 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project Preview page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Preview; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wrequire 'My::Project'; + + +My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Technology Preview', + "head_css"=>" +td { padding: 10px; text-align: center; } +table { border-collapse: collapse; border-style: solid; } +", + "WebConfig::heading_novskip"=>1, + ); +My::Web->heading(); +print My::Project->section("captive"); + +print "

Captive NTFS Technology Preview

\n"; + +sub preview_img ($$;$) +{ +my($file_base,$text,$comment)=@_; + + return <<"HERE"; + + + +
@{[ img $file_base,$text ]}
$text@{[ map((!$_ ? "" : "
$_"),$comment) ]}
+@{[ vskip "3ex" ]} +HERE +} + +print preview_img 'doc/ntdebug-ntfs','WinDbg Remote NT Kernel NTFS Debugging'; +print preview_img 'doc/dia/arch-all','Captive Components Architecture','' + .'Red color indicates Captive components for the most common LUFS use case.
' + .'Violet color indicates system components for the most common LUFS use case.'; +print preview_img 'doc/arch-captive','Captive Subsystems Architecture'; +print preview_img 'doc/arch-W32','Original Microsoft Windows Subsystems Architecture'; +print preview_img 'doc/ratio','Functions Reusal Ratio'; +print preview_img 'doc/fig/functype_patched_wrap_fromw32','Code Wrapping of a Call from Microsoft Windows Code'; +print preview_img 'doc/dia/inheritance','Sandboxing Scheme with GObject Inheritance'; +print preview_img 'doc/dia/parent-connector','Parent Connector for Sandbox Slave Restarts Handling'; +print preview_img 'doc/dia/cache-manager','NT Cache Manager Scheme'; +print preview_img 'doc/ntdebug-windbg-boot','Windows NT Remote Kernel Debug Mode During System Boot'; +print preview_img 'doc/dia/TraceFS','TraceFS Debugging Hook for NT Cache Manager Analysis'; +print preview_img 'captive-install-acquire','Captive Microsoft Windows Drivers Acquire Utility'; + + +My::Web->footer(); diff --git a/project/captive/Resources.html.pl b/project/captive/Resources.html.pl new file mode 100755 index 0000000..eb6aacb --- /dev/null +++ b/project/captive/Resources.html.pl @@ -0,0 +1,78 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project Resources page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wrequire 'My::Project'; + + +My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Internet Resources', + "WebConfig::heading_novskip"=>1, + ); +My::Web->heading(); +print My::Project->section("captive"); + + +print "

Captive NTFS Internet Resources

\n"; +print "
    \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
  • ".a_href($url,CGI::escapeHTML($text))."
  • \n"; + } +print "
\n"; + + +My::Web->footer(); diff --git a/project/captive/Thanks.html.pl b/project/captive/Thanks.html.pl new file mode 100755 index 0000000..346bbf8 --- /dev/null +++ b/project/captive/Thanks.html.pl @@ -0,0 +1,91 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project Thanks page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wrequire 'My::Project'; + + +My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Thanks', + "head_css"=>" +.name { font-style: italic; } +", + "WebConfig::heading_novskip"=>1, + "no_job"=>1, + ); +My::Web->heading(); +print My::Project->section("captive"); + + +print <<'HERE'; +

Captive NTFS Thanks

+ +
    +HERE + +sub name ($;$$) +{ +my($name,$pos,$why)=@_; + + my $r="
  • "; + $r.=''.$name.''; + $r.=", $pos" if $pos; + $r.=" - $why" if $why; + $r.="
  • \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 & McKenzie'), + 'preflight IT law analysis'; +print name a_href('http://www.ucw.cz/~mj/','Martin "MJ" Mares'); +print name "Lubomir Bulej"; +print name "Tomas Bures"; +print name a_href_cz('http://www.vellum.cz/','Lukas "Klokan" Horalek'),undef(),"services hosting"; +print name a_href('http://www-troja.fjfi.cvut.cz/~drab/','Martin Drab'),undef(), + "betatesting, ".a_href('http://lufs.sourceforge.net/lufs/','LUFS')." patches"; +print name a_href('http://www.pavouk.org/','Pavel "Pavouk" Ruzicka'),a_href('http://www.gtsgroup.cz/','GTS'), + "betatesting"; +print name "Jesse Glick",a_href("http://www.sun.com/","Sun Microsystems"),"betatesting"; +print name a_href_cz('http://vellum.cz/~mikc/','Michal "MIKC" Conos'),undef(), + "betatesting"; +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 "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'; +
  • Last but not least - Kind greetings to Danese Cooper, Open Source Diva!
  • +
+ +HERE + +My::Web->footer(); diff --git a/project/captive/apiref/.htaccess b/project/captive/apiref/.htaccess new file mode 100644 index 0000000..717ec6f --- /dev/null +++ b/project/captive/apiref/.htaccess @@ -0,0 +1 @@ +DirectoryIndex index.html diff --git a/project/captive/apiref/Makefile.am b/project/captive/apiref/Makefile.am new file mode 100644 index 0000000..ad8d991 --- /dev/null +++ b/project/captive/apiref/Makefile.am @@ -0,0 +1,41 @@ +# $Id$ +# automake source for the Makefile of project/captive/ API reference doc +# Copyright (C) 2003 Jan Kratochvil +# +# 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 index 0000000..16f5a3e --- /dev/null +++ b/project/captive/apiref/captive-apiref-calltype-reactos.html @@ -0,0 +1,62 @@ + +calltype_reactos

calltype_reactos

calltype_reactos —

Synopsis

+
+
+
+#define     CAPTIVE_CDECL
+#define     CAPTIVE_STDCALL
+

Description

+ +

Details

CAPTIVE_CDECL

#define CAPTIVE_CDECL    __attribute__((__cdecl__))
+

+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 CAPTIVE_CDECL. You must ifdef it by LIBCAPTIVE symbol as it +is not available during standalone reactos compilation. +

+This macro may be needed to pass control to W32 binary code.

+ +


CAPTIVE_STDCALL

#define CAPTIVE_STDCALL  __attribute__((__stdcall__))
+

+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 CAPTIVE_STDCALL. You must ifdef it by LIBCAPTIVE symbol as it +is not available during standalone reactos compilation. +

+This macro may be needed to pass control to W32 binary code.

+ +

diff --git a/project/captive/apiref/captive-apiref-init.html b/project/captive/apiref/captive-apiref-init.html new file mode 100644 index 0000000..4d08a9d --- /dev/null +++ b/project/captive/apiref/captive-apiref-init.html @@ -0,0 +1,59 @@ + +init

init

init —

Synopsis

+
+
+
+gboolean    captive_init                    (void);
+gboolean    captive_shutdown                (void);
+void        captive_log_init                (const struct captive_options *captive_options);
+

Description

+ +

Details

captive_init ()

gboolean    captive_init                    (void);

+Expects captive_options: Parsed by captive_options_parse(). +NULL value is forbidden. Field image_iochannel NULL value is forbidden. +

+Initializes libcaptive and loads the specified filesystem.

+ +

Returns : TRUE if successfuly initialized. +

captive_shutdown ()

gboolean    captive_shutdown                (void);

+Closes down libcaptive. It should flush all pending buffers and successfuly +close the filesystem. Variable captive_options->image_iochannel will not be set to NULL, +you should close such channel yourself.

+ +

Returns : TRUE if successfuly shutdown. +

captive_log_init ()

void        captive_log_init                (const struct captive_options *captive_options);

+ +

captive_options : + + +
diff --git a/project/captive/apiref/captive-apiref-ldr-exports.html b/project/captive/apiref/captive-apiref-ldr-exports.html new file mode 100644 index 0000000..4d8e717 --- /dev/null +++ b/project/captive/apiref/captive-apiref-ldr-exports.html @@ -0,0 +1,94 @@ + +ldr_exports

ldr_exports

ldr_exports —

Synopsis

+
+
+
+gboolean    captive_kernel_exports          (void);
+gboolean    captive_kernel_patches          (void);
+gboolean    captive_ModuleList_add_builtin  (const gchar *FullName_utf8,
+                                             ...);
+gboolean    captive_ModuleList_patch        (const gchar *FullName_utf8,
+                                             ...);
+

Description

+ +

Details

captive_kernel_exports ()

gboolean    captive_kernel_exports          (void);

+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 captive_ModuleList_add_builtin() to simulate PE headers exporting +our symbols; this export simulation is invocated from this function. +

+This function is generated automatically from exports.captivesym file +by captivesym.pl script. +

+Multiple calls of this function are forbidden. See also captive_kernel_patches().

+ +

Returns : TRUE if the export was successful. +

captive_kernel_patches ()

gboolean    captive_kernel_patches          (void);

+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 captive_ModuleList_patch() to modify existing module function +tables generated from captive_ModuleList_add_builtin(). +

+This function is generated automatically from exports.captivesym file +by captivesym.pl script. +

+Multiple calls of this function are forbidden. See also captive_kernel_exports().

+ +

Returns : TRUE if the export was successful. +

captive_ModuleList_add_builtin ()

gboolean    captive_ModuleList_add_builtin  (const gchar *FullName_utf8,
+                                             ...);

+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 (0-based) +Ordinal numbers of the functions in given @... stdargs order.

+ +

FullName_utf8 : String to fill in PMODULE_OBJECT->FullName. +
... : (const gchar *sym_name,void *sym_val) symbol list terminated by NULL. +
Returns : TRUE if the module was successfuly added. +

captive_ModuleList_patch ()

gboolean    captive_ModuleList_patch        (const gchar *FullName_utf8,
+                                             ...);

+Patches existing FullName_utf8 module to use for function named sym_name +pointer to the handler sym_val. If patchpoint is not NULL it gets assigned the original +pointer value (used for pass keyword in exports.captivesym). +

+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().

+ +

FullName_utf8 : String to find PMODULE_OBJECT by FullName. +
... : (const gchar *sym_name,void (*sym_val)(void),struct captive_ModuleList_patchpoint *patchpoint) symbol list terminated by NULL. +
Returns : TRUE if the module was successfuly added. +
diff --git a/project/captive/apiref/captive-apiref-ldr.html b/project/captive/apiref/captive-apiref-ldr.html new file mode 100644 index 0000000..93355b4 --- /dev/null +++ b/project/captive/apiref/captive-apiref-ldr.html @@ -0,0 +1,90 @@ + +ldr

ldr

ldr —

Synopsis

+
+
+
+NTSTATUS    captive_LdrpLoadAndCallImage    (PMODULE_OBJECT *ModuleObjectp,
+                                             struct captive_options_module *options_module,
+                                             PDRIVER_OBJECT DriverEntry_DriverObject,
+                                             PUNICODE_STRING DriverEntry_RegistryPath);
+NTSTATUS    captive_LdrLoadModule           (struct captive_options_module *options_module,
+                                             PMODULE_OBJECT *ModuleObjectp);
+G_CONST_RETURN gchar* captive_ModuleList_function_disable_find
+                                            (gconstpointer ExportAddress);
+void*       captive_Module_GetExportAddress (const gchar *ModuleName_utf8,
+                                             const gchar *FunctionName);
+void        captive_PoQueueShutdownWorkItem_hooklist_invoke
+                                            (void);
+

Description

+ +

Details

captive_LdrpLoadAndCallImage ()

NTSTATUS    captive_LdrpLoadAndCallImage    (PMODULE_OBJECT *ModuleObjectp,
+                                             struct captive_options_module *options_module,
+                                             PDRIVER_OBJECT DriverEntry_DriverObject,
+                                             PUNICODE_STRING DriverEntry_RegistryPath);

+Corresponds to reactos LdrpLoadAndCallImage() but it also provides arguments +to pass to PDRIVER_INITIALIZE call of module driver initialization.

+ +

ModuleObjectp : Returns PMODULE_OBJECT successfuly loaded. +
options_module : captive_options_module structure describing the module to load. +Loading of already loaded module is forbidden despite original +LdrpLoadAndCallImage(). +
DriverEntry_DriverObject : argument DriverObject of PDRIVER_INITIALIZE call. +
DriverEntry_RegistryPath : argument RegistryPath of PDRIVER_INITIALIZE call. +
Returns : STATUS_SUCCESS if the driver module was loaded and initialized +successfuly during this call. Ignore returned ModuleObjectp if function failed. +

captive_LdrLoadModule ()

NTSTATUS    captive_LdrLoadModule           (struct captive_options_module *options_module,
+                                             PMODULE_OBJECT *ModuleObjectp);

+Load and initialize module to reactos using host OS functions.

+ +

options_module : captive_options_module structure describing the module to load. +Loading of already loaded module is forbidden. +
ModuleObjectp : Returns initialized module object. +
Returns : STATUS_SUCCESS if the module was loaded successfuly during the call. +

captive_ModuleList_function_disable_find ()

G_CONST_RETURN gchar* captive_ModuleList_function_disable_find
+                                            (gconstpointer ExportAddress);

+ +

ExportAddress : +
Returns : + + +

captive_Module_GetExportAddress ()

void*       captive_Module_GetExportAddress (const gchar *ModuleName_utf8,
+                                             const gchar *FunctionName);

+ +

ModuleName_utf8 : +
FunctionName : + + +

captive_PoQueueShutdownWorkItem_hooklist_invoke ()

void        captive_PoQueueShutdownWorkItem_hooklist_invoke
+                                            (void);

+ +

diff --git a/project/captive/apiref/captive-apiref-macros.html b/project/captive/apiref/captive-apiref-macros.html new file mode 100644 index 0000000..8f3792e --- /dev/null +++ b/project/captive/apiref/captive-apiref-macros.html @@ -0,0 +1,273 @@ + +macros

macros

macros —

Synopsis

+
+
+
+#define     CAPTIVE_FAKEUSE
+#define     captive_newn                    (objp,n)
+#define     captive_new0n                   (objp,n)
+#define     captive_renewn                  (objp,n)
+#define     captive_new                     (objp)
+#define     captive_new0                    (objp)
+#define     captive_newn_alloca             (objp,n)
+#define     captive_new0n_alloca            (objp,n)
+#define     captive_new_alloca              (objp)
+#define     captive_new0_alloca             (objp)
+#define     captive_memdup                  (destp,srcp)
+#define     captive_va_arg                  (objp,ap)
+#define     CAPTIVE_MEMZERO                 (objp)
+#define     captive_printf_alloca           (format,args...)
+#define     captive_strdup_alloca           (string)
+#define     CAPTIVE_ROUND_DOWN              (pointer,fragment)
+#define     CAPTIVE_ROUND_DOWN64            (pointer,fragment)
+#define     CAPTIVE_ROUND_DOWN_EXCEEDING    (pointer,fragment)
+#define     CAPTIVE_ROUND_DOWN_EXCEEDING64  (pointer,fragment)
+#define     CAPTIVE_ROUND_UP                (pointer,fragment)
+#define     CAPTIVE_ROUND_UP64              (pointer,fragment)
+

Description

+ +

Details

CAPTIVE_FAKEUSE

#define CAPTIVE_FAKEUSE =0
+

+Prevent 'might be used uninitialized' warning. +Macro will fakes the use of the variable as sometimes GCC can't code flow +analyse C correctly. +

+

+g_some_type some_variable CAPTIVE_FAKEUSE;
+

+ +


captive_newn()

#define captive_newn(objp,n) ((objp)=g_new(typeof(*(objp)),(n)))
+

+Macro to allocate n objects of type *objp and to assign the resulting pointer to objp. +Allocated memory may contain garbage. +

+Returns: Initialized objp value as the memory of size sizeof(typeof(*objp))*n. +Value NULL is returned iff n==0;

+ +

objp : Variable with the pointer to the objects wished to be allocated. +Original value is discarded. +
n : Numbers of objects to be allocated. Value 0 is permitted (NULL assignment effect). +

captive_new0n()

#define captive_new0n(objp,n) ((objp)=g_new0(typeof(*(objp)),(n)))
+

+Macro to allocate n objects of type *objp and to assign the resulting pointer to objp. +Allocated memory is precleared. +

+Returns: Initialized objp value as the cleared memory of size sizeof(typeof(*objp))*n. +Value NULL is returned iff n==0;

+ +

objp : Variable with the pointer to the objects wished to be allocated and precleared. +Original value is discarded. +
n : Numbers of objects to be allocated. Value 0 is permitted (NULL assignment effect). +

captive_renewn()

#define     captive_renewn(objp,n)

+Macro to reallocate the original memory stored in objp +to the size n objects of type *objp and to assign the resulting pointer to objp. +New allocated space may contain garbage. Both objp and n can be nonexclusively +passed as zero. +

+Returns: Initialized objp value as the memory of size sizeof(typeof(*objp))*n. +Value NULL is returned iff n==0;

+ +

objp : Variable with the pointer to the objects wished to be reallocated. +Value NULL is permitted (g_malloc() effect). +
n : Numbers of objects to be allocated. Value 0 is permitted (g_free() effect). +

captive_new()

#define captive_new(objp) (captive_newn((objp),1))
+

+Macro to allocate one object of type *objp and to assign the resulting pointer to objp. +Allocated memory may contain garbage. Equivalent to captive_newn(objp,1) call. +

+Returns: Initialized objp value as the memory of size sizeof(typeof(*objp)). +Value NULL is never returned.

+ +

objp : Variable with the pointer to the object wished to be allocated. +Original value is discarded. +

captive_new0()

#define captive_new0(objp) (captive_new0n((objp),1))
+

+Macro to allocate one object of type *objp and to assign the resulting pointer to objp. +Allocated memory is precleared. Equivalent to captive_new0n(objp,1) call. +

+Returns: Initialized objp value as the cleared memory of size sizeof(typeof(*objp)). +Value NULL is never returned.

+ +

objp : Variable with the pointer to the object wished to be allocated and precleared. +Original value is discarded. +

captive_newn_alloca()

#define     captive_newn_alloca(objp,n)

+Macro to allocate n objects of type *objp and to assign the resulting pointer to objp. +Allocated memory may contain garbage. +

+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. +

+Returns: Initialized objp value as the memory of size sizeof(typeof(*objp))*n. +Value NULL is returned iff n==0;

+ +

objp : Variable with the pointer to the objects wished to be allocated. +Original value is discarded. +
n : Numbers of objects to be allocated. Value 0 is permitted (NULL assignment effect). +

captive_new0n_alloca()

#define     captive_new0n_alloca(objp,n)

+Macro to allocate n objects of type *objp and to assign the resulting pointer to objp. +Allocated memory is precleared. +

+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. +

+Returns: Initialized objp value as the cleared memory of size sizeof(typeof(*objp))*n. +Value NULL is returned iff n==0;

+ +

objp : Variable with the pointer to the objects wished to be allocated and precleared. +Original value is discarded. +
n : Numbers of objects to be allocated. Value 0 is permitted (NULL assignment effect). +

captive_new_alloca()

#define captive_new_alloca(objp) (captive_newn_alloca((objp),1))
+

+Macro to allocate one object of type *objp and to assign the resulting pointer to objp. +Allocated memory may contain garbage. Equivalent to captive_newn_alloca(objp,1) call. +

+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. +

+Returns: Initialized objp value as the memory of size sizeof(typeof(*objp)). +Value NULL is never returned.

+ +

objp : Variable with the pointer to the object wished to be allocated. +Original value is discarded. +

captive_new0_alloca()

#define captive_new0_alloca(objp) (captive_new0n_alloca((objp),1))
+

+Macro to allocate one object of type *objp and to assign the resulting pointer to objp. +Allocated memory is precleared. Equivalent to captive_new0n_alloca(objp,1) call. +

+Returns: Initialized objp value as the cleared memory of size sizeof(typeof(*objp)).

+ +

objp : Variable with the pointer to the object wished to be allocated and precleared. +Original value is discarded. +

captive_memdup()

#define     captive_memdup(destp,srcp)

+Macro to similiar to g_memdup() but the object size is detected automatically. +Size of destp object and srcp object must be the same. +

+You must free the allocated memory of destp by g_free(). +

+Returns: Initialized destp value as the copied memory of size sizeof(typeof(*srcp)).

+ +

destp : Variable with the pointer to the target object wished to be allocated. +Original value is discarded. +
srcp : Pointer to the source object to be copied to destp. +

captive_va_arg()

#define captive_va_arg(objp,ap) ((objp)=va_arg((ap),typeof(objp)))
+

+Automatically determines the size of objp. +Equivalent to objp=va_arg(ap,typeof(objp)) call. +

+Returns: Initialized objp value.

+ +

objp : Variable to be filled from the next argument of ap. +
ap : Initialized va_list type. +

CAPTIVE_MEMZERO()

#define CAPTIVE_MEMZERO(objp) (memset((objp),0,sizeof(*(objp))))
+

+Clears the sizeof(*objp) bytes of the given pointer with memset(). +Pass _pointer_ to the object to be cleared.

+ +

objp : Pointer to the variable to be cleared. +

captive_printf_alloca()

#define     captive_printf_alloca(format,args...)

+Format the given format string format as in sprintf(). +Output buffer is allocated automatically and it does not need to be deallocated +manually as it is managed by g_alloca(). +

+Returns: Formatted output string located in g_alloca() memory.

+ +

format : Format string. See the sprintf() documentation. +
args... : Arguments for format. See the sprintf() documentation. +

captive_strdup_alloca()

#define     captive_strdup_alloca(string)

+Macro to do g_strdup() equivalent in g_alloca() style. +

+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. +

+Returns: Duplicated string. You may modify its items if the length is not changed.

+ +

string : const gchar * string to duplicate. +

CAPTIVE_ROUND_DOWN()

#define     CAPTIVE_ROUND_DOWN(pointer,fragment)

+General pointer down-rounding macro. Already aligned pointer is left as is. +

+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS. +

+Returns: Down-rounded pointer to the integer multiple of fragment. +Resulting pointer has the same type as pointer.

+ +

pointer : Arbitrary pointer type. +
fragment : Amount of 'sizeof(char)' to align pointer down to. +This size will be typically a power of 2. +Value less or equal to 0 is forbidden. +

CAPTIVE_ROUND_DOWN64()

#define     CAPTIVE_ROUND_DOWN64(pointer,fragment)

+ +

pointer : +
fragment : + + +

CAPTIVE_ROUND_DOWN_EXCEEDING()

#define     CAPTIVE_ROUND_DOWN_EXCEEDING(pointer,fragment)

+Detects current non-aligned amount of data exceeding over integer multiple of fragment. +It will return value 0 for an aligned pointer. +

+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS. +

+Returns: gsize typed number of bytes exceeding over integer multiple of fragment.

+ +

pointer : Arbitrary pointer type. +
fragment : Amount of 'sizeof(char)' to detect down-alignment amount of pointer for. +This size will be typically a power of 2. +Value less or equal to 0 is forbidden. +

CAPTIVE_ROUND_DOWN_EXCEEDING64()

#define     CAPTIVE_ROUND_DOWN_EXCEEDING64(pointer,fragment)

+ +

pointer : +
fragment : + + +

CAPTIVE_ROUND_UP()

#define     CAPTIVE_ROUND_UP(pointer,fragment)

+General pointer up-rounding macro. Already aligned pointer is left as is. +

+glib NOTE: YOU MAY NOT STORE POINTERS IN INTEGERS. +

+Returns: Up-rounded pointer to the integer multiple of fragment. +Resulting pointer has the same type as pointer.

+ +

pointer : Arbitrary pointer type. +
fragment : Amount of 'sizeof(char)' to align pointer up to. +This size will be typically a power of 2. +Value less or equal to 0 is forbidden. +

CAPTIVE_ROUND_UP64()

#define     CAPTIVE_ROUND_UP64(pointer,fragment)

+ +

pointer : +
fragment : + + +
diff --git a/project/captive/apiref/captive-apiref-mm.html b/project/captive/apiref/captive-apiref-mm.html new file mode 100644 index 0000000..88f3f0f --- /dev/null +++ b/project/captive/apiref/captive-apiref-mm.html @@ -0,0 +1,85 @@ + +mm

mm

mm —

Synopsis

+
+
+
+gint        captive_flProtect_to_mmap_prot  (ULONG flProtect);
+gboolean    captive_mmap_map_new            (gconstpointer addr,
+                                             size_t len,
+                                             int mmap_prot);
+gint        captive_mmap_map_get            (gconstpointer addr);
+gboolean    captive_mmap_map_set            (gconstpointer addr,
+                                             int mmap_prot);
+

Description

+ +

Details

captive_flProtect_to_mmap_prot ()

gint        captive_flProtect_to_mmap_prot  (ULONG flProtect);

+Map reactos flProtect to mprotect(2)-compatible "prot" argument.

+ +

flProtect : reactos compatible constant such as PAGE_READWRITE. +
Returns : mmap(2) compatible prot argument. +

captive_mmap_map_new ()

gboolean    captive_mmap_map_new            (gconstpointer addr,
+                                             size_t len,
+                                             int mmap_prot);

+Initialize the protection map for the specified memory block. +Any existing protections in the specified block are forbidden. +

+This function does not do any mprotect(2) style, it just stores +the settings for the later OR operations by MmSetPageProtect(). +Caller is responsibel to set the same protections as the given mmap_prot.

+ +

addr : PAGE_SIZE aligned address of memory block. +NULL value is forbidden. +
len : PAGE_SIZE aligned length of memory block. +Value 0 is permitted. Value -1 is forbidden. +
mmap_prot : Protections for the memory block as specified by prot of mprotect(2). +
Returns : TRUE if the protection storage was successful. +

captive_mmap_map_get ()

gint        captive_mmap_map_get            (gconstpointer addr);

+Query the protection settings at addr address. +The given addr block of PAGE_SIZE must be already initialized +by captive_mmap_map_new().

+ +

addr : PAGE_SIZE aligned address of memory block. +NULL value is forbidden. +
Returns : Protections of the page as specified by prot of mprotect(2) +if successful. Value -1 if failed. +

captive_mmap_map_set ()

gboolean    captive_mmap_map_set            (gconstpointer addr,
+                                             int mmap_prot);

+Set the protection settings at addr address. +The given addr block of PAGE_SIZE must be already initialized +by captive_mmap_map_new().

+ +

addr : PAGE_SIZE aligned address of memory block. +NULL value is forbidden. +
mmap_prot : Protections for the memory block as specified by prot of mprotect(2). +
Returns : TRUE if the protections were successfuly set. +
diff --git a/project/captive/apiref/captive-apiref-ps-reactos.html b/project/captive/apiref/captive-apiref-ps-reactos.html new file mode 100644 index 0000000..22555cb --- /dev/null +++ b/project/captive/apiref/captive-apiref-ps-reactos.html @@ -0,0 +1,66 @@ + +ps_reactos

ps_reactos

ps_reactos —

Synopsis

+
+
+
+typedef     captive_KPCR;
+typedef     captive_PKPCR;
+captive_PKPCR captive_KeGetCurrentKPCR      (void);
+

Description

+ +

Details

captive_KPCR

typedef struct {
+	struct
+			/* newline to pass gtkdoc-scan */
+			_KTHREAD *CurrentThread;
+	} captive_KPCR;
+

+PCR (Processor Control Region) structure type. +Returned by captive_KeGetCurrentKPCR(). +

+This structure IS NOT binary compatible with reactos!

+ +


captive_PKPCR

typedef captive_KPCR *captive_PKPCR;
+

+ +


captive_KeGetCurrentKPCR ()

captive_PKPCR captive_KeGetCurrentKPCR      (void);

+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.

+ +

Returns : captive_PKPCR type pointer to valid captive_KPCR. +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. +
diff --git a/project/captive/apiref/captive-apiref-rtl-file.html b/project/captive/apiref/captive-apiref-rtl-file.html new file mode 100644 index 0000000..c068ca9 --- /dev/null +++ b/project/captive/apiref/captive-apiref-rtl-file.html @@ -0,0 +1,72 @@ + +rtl-file

rtl-file

rtl-file —

Synopsis

+
+
+
+gpointer    captive_rtl_file_mmap           (size_t *lenp,
+                                             const gchar *path,
+                                             int open_flags,
+                                             int mmap_prot,
+                                             int mmap_flags);
+void        captive_rtl_file_munmap         (gpointer base);
+gpointer    captive_rtl_file_read           (gint fd,
+                                             gsize *bufsizep);
+

Description

+ +

Details

captive_rtl_file_mmap ()

gpointer    captive_rtl_file_mmap           (size_t *lenp,
+                                             const gchar *path,
+                                             int open_flags,
+                                             int mmap_prot,
+                                             int mmap_flags);

+mmap(2) the whole file into memory.

+ +

lenp : returns the file length if successful. NULL pointer permitted. +
path : File pathname to open(2). +
open_flags : open(2) parameter flags such as O_RDONLY. +
mmap_prot : mmap(2) parameter prot such as PROT_READ. +
mmap_flags : mmap(2) parameter flags such as MAP_SHARED. +
Returns : address base with mmap(2)ed file (and lenp filled) or NULL if error. +

captive_rtl_file_munmap ()

void        captive_rtl_file_munmap         (gpointer base);

+munmap(2) the whole file and destroy all its resources.

+ +

base : file base address returned by captive_rtl_file_mmap(). NULL pointer forbidden. +

captive_rtl_file_read ()

gpointer    captive_rtl_file_read           (gint fd,
+                                             gsize *bufsizep);

+Reads the whole file into memory.

+ +

fd : file-descriptor to read data from. +
bufsizep : Returns the size of resulting data. +NULL pointer is permitted. +
Returns : address base of the memory being filled with file contents. +Free the area by g_free() if no longer used. +
diff --git a/project/captive/apiref/captive-apiref-signal.html b/project/captive/apiref/captive-apiref-signal.html new file mode 100644 index 0000000..ccc195d --- /dev/null +++ b/project/captive/apiref/captive-apiref-signal.html @@ -0,0 +1,51 @@ + +signal

signal

signal —

Synopsis

+
+
+
+gboolean    captive_signal_init             (void);
+

Description

+ +

Details

captive_signal_init ()

gboolean    captive_signal_init             (void);

+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 captive_mmap_map_get() returning PROT_EXEC bit set. +This bit should be set from MmAllocateSection() called from +ntoskrnl/ldr/loader.c/LdrPEProcessModule(). +

+Currently emulated set is the access to fs register offset 0 +where the exception stack top pointer is located.

+ +

Returns : TRUE if successful. +
diff --git a/project/captive/apiref/captive-apiref-storage.html b/project/captive/apiref/captive-apiref-storage.html new file mode 100644 index 0000000..478140c --- /dev/null +++ b/project/captive/apiref/captive-apiref-storage.html @@ -0,0 +1,86 @@ + +storage

storage

storage —

Synopsis

+
+
+
+extern      GIOChannel *captive_image_iochannel;
+extern      guint64 captive_image_size;
+guint64     captive_giochannel_size         (GIOChannel *channel);
+gboolean    captive_cdrom_init              (void);
+gboolean    captive_disk_init               (void);
+

Description

+ +

Details

captive_image_iochannel

extern GIOChannel *captive_image_iochannel;
+

+The readl GIOChannel to be used for accessing the disk image. +It may be either directly captive_options->image_iochannel +or the wrapper by giochannel-blind.

+ +


captive_image_size

extern guint64 captive_image_size;
+

+Size of captive_image_iochannel. Empty files are rejected and therefore +this value is always >0 after successful captive_init(). +Value is detected by captive_giochannel_size(captive_image_iochannel).

+ +


captive_giochannel_size ()

guint64     captive_giochannel_size         (GIOChannel *channel);

+ +

channel : +
Returns : + + +

captive_cdrom_init ()

gboolean    captive_cdrom_init              (void);

+Creates system device "\Device\CdRomd" providing readonly access +to the given captive_image_iochannel as emulation of CD-ROM driver. +

+libcaptive currently supports just one drive and thus "\Device\CdRom0" +is always created. It is forbidden to call this function twice.

+ +

Returns : TRUE if the initialization was successful. +

captive_disk_init ()

gboolean    captive_disk_init               (void);

+Creates system device "\Device\CaptiveHarddiskd" providing readwrite access +to the given captive_image_iochannel as emulation of harddisk driver. +reactos initializes "\Device\Harddiskd\Partition0" as the whole disk +and each partition it founds by IoReadPartitionTable() it will create +as "\Device\Harddiskd\Partition1", "\Device\Harddiskd\Partition2" etc. +

+libcaptive does not (yet?) support any partitions and it will always create +just the disk device for the whole given captive_image_iochannel. +As this behaviour is a bit specific we rather create some non-standard name +of the device; anyway I have seen some "\Device\HarddiskdVolumed" on W32 +system. +

+captive currently supports just one drive and thus "\Device\CaptiveHarddisk0" +is always created. It is forbidden to call this function twice.

+ +

Returns : TRUE if the initialization was successful. +
diff --git a/project/captive/apiref/captive-apiref-unicode-reactos.html b/project/captive/apiref/captive-apiref-unicode-reactos.html new file mode 100644 index 0000000..11cf220 --- /dev/null +++ b/project/captive/apiref/captive-apiref-unicode-reactos.html @@ -0,0 +1,60 @@ + +unicode_reactos

unicode_reactos

unicode_reactos —

Synopsis

+
+
+
+typedef     captive_ucs2;
+const captive_ucs2* captive_ucs4_to_ucs2_const
+                                            (const gunichar *string_ucs4);
+

Description

+ +

Details

captive_ucs2

typedef guint16 captive_ucs2;
+

+This type is separated from Gnome gunichar2 as captive_ucs2 MUST be used for UCS-2 +encoded strings in the opposite of gunichar2 beging used for UTF-16 encoded strings.

+ +


captive_ucs4_to_ucs2_const ()

const captive_ucs2* captive_ucs4_to_ucs2_const
+                                            (const gunichar *string_ucs4);

+Constant string conversion from 32-bit wchar_t to 16-bit wchar_t. +You may not modify the result in any way. +

+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 -fmerge-constants which +results in C non-conforming behaviour.

+ +

string_ucs4 : 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. +
Returns : const captive_ucs2 * converted string string_ucs4. +
diff --git a/project/captive/apiref/captive-apiref-unicode.html b/project/captive/apiref/captive-apiref-unicode.html new file mode 100644 index 0000000..d4ec3f8 --- /dev/null +++ b/project/captive/apiref/captive-apiref-unicode.html @@ -0,0 +1,218 @@ + +unicode

unicode

unicode —

Synopsis

+
+
+
+#define     captive_UnicodeString_to_utf8_alloca(string_UnicodeString)
+#define     captive_utf8_to_UnicodeString_alloca(string_utf8)
+gboolean    captive_validate_ucs4           (const gunichar *string_ucs4);
+gboolean    captive_validate_ucs2           (const captive_ucs2 *string_ucs2);
+gboolean    captive_validate_ucs2_fixlen    (const captive_ucs2 *string_ucs2,
+                                             glong string_ucs2_fixlen);
+gboolean    captive_validate_utf8           (const gchar *string_utf8);
+glong       captive_ucs2_strlen             (const captive_ucs2 *string_ucs2);
+gboolean    captive_validate_UnicodeString  (const UNICODE_STRING *string_UnicodeString);
+gboolean    captive_validate_UnicodeString_noterm
+                                            (const UNICODE_STRING *string_UnicodeString_noterm);
+gboolean    captive_validate_AnsiString     (const ANSI_STRING *string_AnsiString);
+gchar*      captive_UnicodeString_to_utf8_malloc
+                                            (const UNICODE_STRING *string_UnicodeString);
+PUNICODE_STRING captive_utf8_to_UnicodeString_malloc
+                                            (const gchar *string_utf8);
+const gunichar2* captive_ucs4_to_utf16_const
+                                            (const gunichar *string_ucs4);
+gboolean    captive_ucs2_compare            (const captive_ucs2 *string_a_ucs2,
+                                             const captive_ucs2 *string_b_ucs2);
+gboolean    captive_UnicodeString_compare   (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);
+gboolean    captive_ucs2_compare_insensitive
+                                            (const captive_ucs2 *string_a_ucs2,
+                                             const captive_ucs2 *string_b_ucs2);
+gboolean    captive_UnicodeString_compare_insensitive
+                                            (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);
+void        captive_FsRtlLegalAnsiCharacterArray_init
+                                            (void);
+

Description

+ +

Details

captive_UnicodeString_to_utf8_alloca()

#define     captive_UnicodeString_to_utf8_alloca(string_UnicodeString)

+alloca(3)-based conversion from PUNICODE_STRING to plain utf8 string. +

+Returns: const gchar * alloca(3)ed converted string string_UnicodeString.

+ +

string_UnicodeString : PUNICODE_STRING type of string to convert. +

captive_utf8_to_UnicodeString_alloca()

#define     captive_utf8_to_UnicodeString_alloca(string_utf8)

+alloca(3)-based conversion from plain utf8 string to PUNICODE_STRING. +

+Returns: PUNICODE_STRING alloca(3)ed converted string string_utf8.

+ +

string_utf8 : const gchar * string in utf8 to convert. +

captive_validate_ucs4 ()

gboolean    captive_validate_ucs4           (const gunichar *string_ucs4);

+Checks the validity of all 32-bit unicharacters of 0-terminated string. +It is required to have characters complying to g_unichar_validate().

+ +

string_ucs4 : const gunichar * type string to validate. +Invalid string input is forbidden. +
Returns : TRUE if the string is valid. +

captive_validate_ucs2 ()

gboolean    captive_validate_ucs2           (const captive_ucs2 *string_ucs2);

+Checks the validity of all 16-bit unicharacters of 0-terminated string. +It is required to have characters complying to g_unichar_validate().

+ +

string_ucs2 : const captive_ucs2 * type string to validate. +Invalid string input is forbidden. +UTF-16 encoded strings are forbidden. +
Returns : TRUE if the string is valid. +

captive_validate_ucs2_fixlen ()

gboolean    captive_validate_ucs2_fixlen    (const captive_ucs2 *string_ucs2,
+                                             glong string_ucs2_fixlen);

+Checks the validity of first string_ucs2_fixlen 16-bit unicharacters of string_ucs2. +It is required to have characters complying to g_unichar_validate(). +String length must be equal or larger than string_ucs2_fixlen;

+ +

string_ucs2 : const captive_ucs2 * type string to validate. +Invalid string input is forbidden. +UTF-16 encoded strings are forbidden. +
string_ucs2_fixlen : Number of characters from string_ucs2 to check. +captive_ucs2_strlen(string_ucs2)>=string_ucs2_fixlen is required. +Negative value is forbidden. +
Returns : TRUE if the string is valid. +

captive_validate_utf8 ()

gboolean    captive_validate_utf8           (const gchar *string_utf8);

+Checks the validity of all utf8 of 0-terminated string. +It is required to have characters complying to g_utf8_validate().

+ +

string_utf8 : const gchar * utf8 type string to validate. +Invalid string input is forbidden. +
Returns : TRUE if the string is valid. +

captive_ucs2_strlen ()

glong       captive_ucs2_strlen             (const captive_ucs2 *string_ucs2);

+Counts the number of characters (=2bytes) in strings_ucs2.

+ +

string_ucs2 : String of type const gunichar2 * in pure UCS-2 +Invalid string input is forbidden. UTF-16 encoded pairs are forbidden. +
Returns : string_ucs2 length in UCS-2 characters. +

captive_validate_UnicodeString ()

gboolean    captive_validate_UnicodeString  (const UNICODE_STRING *string_UnicodeString);

+Checks the internal consistency of the given string_UnicodeString. +It is required to have characters complying to g_unichar_validate(). +string_UnicodeString MUST be zero-terminated.

+ +

string_UnicodeString : PUNICODE_STRING type string to validate. +Invalid string input is forbidden. +
Returns : TRUE if the string is valid. +

captive_validate_UnicodeString_noterm ()

gboolean    captive_validate_UnicodeString_noterm
+                                            (const UNICODE_STRING *string_UnicodeString_noterm);

+Checks the internal consistency of the given string_UnicodeString. +It is required to have characters complying to g_unichar_validate(). +string_UnicodeString_noterm does not neet to be zero-terminated.

+ +

string_UnicodeString_noterm : PUNICODE_STRING type string to validate. +Invalid string input is forbidden. +
Returns : TRUE if the string is valid. +

captive_validate_AnsiString ()

gboolean    captive_validate_AnsiString     (const ANSI_STRING *string_AnsiString);

+Checks the internal consistency of the given string_AnsiString.

+ +

string_AnsiString : PANSI_STRING type string to validate. +Invalid string input is forbidden. +
Returns : TRUE if the string is valid. +

captive_UnicodeString_to_utf8_malloc ()

gchar*      captive_UnicodeString_to_utf8_malloc
+                                            (const UNICODE_STRING *string_UnicodeString);

+g_malloc()-based conversion from PUNICODE_STRING to plain utf8 string. +You must free the result with g_free() function.

+ +

string_UnicodeString : PUNICODE_STRING type of string to convert. +
Returns : const gchar * g_malloc()ed converted string string_UnicodeString. +

captive_utf8_to_UnicodeString_malloc ()

PUNICODE_STRING captive_utf8_to_UnicodeString_malloc
+                                            (const gchar *string_utf8);

+g_malloc()-based conversion from plain utf8 string to PUNICODE_STRING. +You must free the result with g_free() function.

+ +

string_utf8 : const gchar * string in utf8 to convert. +
Returns : PUNICODE_STRING g_malloc()ed converted string string_utf8. +

captive_ucs4_to_utf16_const ()

const gunichar2* captive_ucs4_to_utf16_const
+                                            (const gunichar *string_ucs4);

+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. +

+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 -fmerge-constants which +results in C non-conforming behaviour. +

+FIXME: UTF-16 encoding IS NOT IMPLEMENTED. +

+See also captive_ucs4_to_ucs2_const().

+ +

string_ucs4 : const gunichar * type of persistent string to convert. +This string MUST remain readable with the same content forever. +
Returns : const gunichar2 * converted string string_ucs4. +

captive_ucs2_compare ()

gboolean    captive_ucs2_compare            (const captive_ucs2 *string_a_ucs2,
+                                             const captive_ucs2 *string_b_ucs2);

+Compares case-sensitively string_a_ucs2 and string_b_ucs2.

+ +

string_a_ucs2 : First string of type const gunichar2 * in pure UCS-2. +Invalid string input is forbidden. UTF-16 encoded pairs are forbidden. +
string_b_ucs2 : Second string of type const gunichar2 * in pure UCS-2. +Invalid string input is forbidden. UTF-16 encoded pairs are forbidden. +
Returns : TRUE if string_a_ucs2 and string_b_ucs2 are the same. +

captive_UnicodeString_compare ()

gboolean    captive_UnicodeString_compare   (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);

+Compares case-sensitively string_a_UnicodeString and string_b_UnicodeString.

+ +

string_a_UnicodeString : First string of type PUNICODE_STRING. +Invalid string input is forbidden. +
string_b_UnicodeString : Second string of type PUNICODE_STRING. +Invalid string input is forbidden. +
Returns : TRUE if string_a_UnicodeString and string_b_UnicodeString are the same. +

captive_ucs2_compare_insensitive ()

gboolean    captive_ucs2_compare_insensitive
+                                            (const captive_ucs2 *string_a_ucs2,
+                                             const captive_ucs2 *string_b_ucs2);

+Compares case-insensitively string_a_ucs2 and string_b_ucs2.

+ +

string_a_ucs2 : First string of type const gunichar2 * in pure UCS-2. +Invalid string input is forbidden. UTF-16 encoded pairs are forbidden. +
string_b_ucs2 : Second string of type const gunichar2 * in pure UCS-2. +Invalid string input is forbidden. UTF-16 encoded pairs are forbidden. +
Returns : TRUE if string_a_ucs2 and string_b_ucs2 are the same. +

captive_UnicodeString_compare_insensitive ()

gboolean    captive_UnicodeString_compare_insensitive
+                                            (const UNICODE_STRING *string_a_UnicodeString,
+                                             const UNICODE_STRING *string_b_UnicodeString);

+Compares case-insensitively string_a_UnicodeString and string_b_UnicodeString.

+ +

string_a_UnicodeString : First string of type PUNICODE_STRING. +Invalid string input is forbidden. +
string_b_UnicodeString : Second string of type PUNICODE_STRING. +Invalid string input is forbidden. +
Returns : TRUE if string_a_UnicodeString and string_b_UnicodeString are the same. +

captive_FsRtlLegalAnsiCharacterArray_init ()

void        captive_FsRtlLegalAnsiCharacterArray_init
+                                            (void);

+Initialize FsRtlLegalAnsiCharacterArray character classes +by appropriate FSRTL_FAT_LEGAL etc. flags.

+ +

diff --git a/project/captive/apiref/ch01.html b/project/captive/apiref/ch01.html new file mode 100644 index 0000000..f3141cc --- /dev/null +++ b/project/captive/apiref/ch01.html @@ -0,0 +1,50 @@ + +Operation Captive

Operation Captive

+ +

Table of Contents

+
+
init - Init and cleanup code of libcaptive to be called by client application
+
ldr - ReactOS loader emulation of libcaptive
+
macros - General macros and typedefs used through Captive
+
mm - ReactOS Memory Manager emulation of libcaptive
+
ps_reactos - Processor support used for ReactOS files
+
unicode - Unicode add-ons to ReactOS ntoskrnl/rtl/unicode.c
+
unicode_reactos - Unicode support used for ReactOS files
+
storage - Storage drivers for ReactOS
+
ldr_exports - ReactOS loader to be used from ke/exports.c
+
calltype_reactos - Function call types definitions for ReactOS files
+
signal - UNIX signal handling for processor emulation for support of ntoskrnl
+
rtl-file - Internal file handling utilities
+
+ +
diff --git a/project/captive/apiref/home.png b/project/captive/apiref/home.png new file mode 100644 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 index 0000000..780e376 --- /dev/null +++ b/project/captive/apiref/index.html @@ -0,0 +1,32 @@ + +Operation Captive Reference Manual

Table of Contents

Operation Captive
diff --git a/project/captive/apiref/left.png b/project/captive/apiref/left.png new file mode 100644 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 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 index 0000000..85b3e2a Binary files /dev/null and b/project/captive/apiref/up.png differ diff --git a/project/captive/captive-install-acquire-icon.png b/project/captive/captive-install-acquire-icon.png new file mode 100644 index 0000000..c1c9c26 Binary files /dev/null and b/project/captive/captive-install-acquire-icon.png differ diff --git a/project/captive/captive-install-acquire-small.png b/project/captive/captive-install-acquire-small.png new file mode 100644 index 0000000..81fc36e Binary files /dev/null and b/project/captive/captive-install-acquire-small.png differ diff --git a/project/captive/captive-install-acquire.png b/project/captive/captive-install-acquire.png new file mode 100644 index 0000000..20d10d4 Binary files /dev/null and b/project/captive/captive-install-acquire.png differ diff --git a/project/captive/dist/captive-1.0-0.i386.rpm b/project/captive/dist/captive-1.0-0.i386.rpm new file mode 100644 index 0000000..7fed66b Binary files /dev/null and b/project/captive/dist/captive-1.0-0.i386.rpm differ diff --git a/project/captive/dist/captive-1.0-0.src.rpm b/project/captive/dist/captive-1.0-0.src.rpm new file mode 100644 index 0000000..a8f4f88 Binary files /dev/null and b/project/captive/dist/captive-1.0-0.src.rpm differ diff --git a/project/captive/dist/captive-1.0-0mdk91.i586.rpm b/project/captive/dist/captive-1.0-0mdk91.i586.rpm new file mode 100644 index 0000000..efed032 Binary files /dev/null and b/project/captive/dist/captive-1.0-0mdk91.i586.rpm differ diff --git a/project/captive/dist/captive-1.0-0rh8.i386.rpm b/project/captive/dist/captive-1.0-0rh8.i386.rpm new file mode 100644 index 0000000..ec57d77 Binary files /dev/null and b/project/captive/dist/captive-1.0-0rh8.i386.rpm differ diff --git a/project/captive/dist/captive-1.0.tar.gz b/project/captive/dist/captive-1.0.tar.gz new file mode 100644 index 0000000..418e6d6 Binary files /dev/null and b/project/captive/dist/captive-1.0.tar.gz differ diff --git a/project/captive/dist/captive-debuginfo-1.0-0.i386.rpm b/project/captive/dist/captive-debuginfo-1.0-0.i386.rpm new file mode 100644 index 0000000..45d820f Binary files /dev/null and b/project/captive/dist/captive-debuginfo-1.0-0.i386.rpm differ diff --git a/project/captive/dist/captive-install-1.0-0.i386.rpm b/project/captive/dist/captive-install-1.0-0.i386.rpm new file mode 100644 index 0000000..622f45e Binary files /dev/null and b/project/captive/dist/captive-install-1.0-0.i386.rpm differ diff --git a/project/captive/dist/captive-install-1.0-0mdk91.i586.rpm b/project/captive/dist/captive-install-1.0-0mdk91.i586.rpm new file mode 100644 index 0000000..3487310 Binary files /dev/null and b/project/captive/dist/captive-install-1.0-0mdk91.i586.rpm differ diff --git a/project/captive/dist/captive-install-1.0-0rh8.i386.rpm b/project/captive/dist/captive-install-1.0-0rh8.i386.rpm new file mode 100644 index 0000000..1199eac Binary files /dev/null and b/project/captive/dist/captive-install-1.0-0rh8.i386.rpm differ diff --git a/project/captive/dist/captive-install_1.0_i386.deb b/project/captive/dist/captive-install_1.0_i386.deb new file mode 100644 index 0000000..3642beb Binary files /dev/null and b/project/captive/dist/captive-install_1.0_i386.deb differ diff --git a/project/captive/dist/captive-lufs-1.0-0.i386.rpm b/project/captive/dist/captive-lufs-1.0-0.i386.rpm new file mode 100644 index 0000000..f7436df Binary files /dev/null and b/project/captive/dist/captive-lufs-1.0-0.i386.rpm differ diff --git a/project/captive/dist/captive-lufs-1.0-0mdk91.i586.rpm b/project/captive/dist/captive-lufs-1.0-0mdk91.i586.rpm new file mode 100644 index 0000000..e64db7c Binary files /dev/null and b/project/captive/dist/captive-lufs-1.0-0mdk91.i586.rpm differ diff --git a/project/captive/dist/captive-lufs-1.0-0rh8.i386.rpm b/project/captive/dist/captive-lufs-1.0-0rh8.i386.rpm new file mode 100644 index 0000000..390bafe Binary files /dev/null and b/project/captive/dist/captive-lufs-1.0-0rh8.i386.rpm differ diff --git a/project/captive/dist/captive-lufs_1.0_i386.deb b/project/captive/dist/captive-lufs_1.0_i386.deb new file mode 100644 index 0000000..5aa7db2 Binary files /dev/null and b/project/captive/dist/captive-lufs_1.0_i386.deb differ diff --git a/project/captive/dist/captive_1.0.dsc b/project/captive/dist/captive_1.0.dsc new file mode 100644 index 0000000..b3e8d84 --- /dev/null +++ b/project/captive/dist/captive_1.0.dsc @@ -0,0 +1,33 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Format: 1.0 +Source: captive +Version: 1.0 +Binary: captive-lufs, captive, captive-install +Maintainer: Jan Kratochvil +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: + 19f888db80898bc5f0da35290d56ac82 2391571 captive_1.0.tar.gz + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.3 (GNU/Linux) + +iD8DBQE/k4JbzD78uUT8djIRAgntAJ9VN4fCkGcmqspV41rY/bn2YV/+EQCfRqxU +hoNvaEIi5ynH5cmypsMZwq4= +=NxM7 +-----END PGP SIGNATURE----- diff --git a/project/captive/dist/captive_1.0.tar.gz b/project/captive/dist/captive_1.0.tar.gz new file mode 100644 index 0000000..e0e0936 Binary files /dev/null and b/project/captive/dist/captive_1.0.tar.gz differ diff --git a/project/captive/dist/captive_1.0_i386.changes b/project/captive/dist/captive_1.0_i386.changes new file mode 100644 index 0000000..4b774b7 --- /dev/null +++ b/project/captive/dist/captive_1.0_i386.changes @@ -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-install captive captive-lufs +Architecture: source i386 +Version: 1.0 +Distribution: unstable +Urgency: low +Maintainer: Jan Kratochvil +Changed-By: Jan Kratochvil +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 (1.0) unstable; urgency=low + . + * See package ChangeLog entries. +Files: + d4108fa374367afb408f06e3f51b21a4 743 contrib/base optional captive_1.0.dsc + 19f888db80898bc5f0da35290d56ac82 2391571 contrib/base optional captive_1.0.tar.gz + f5223c4aa0d378138ed1372652507fe8 345630 contrib/base optional captive_1.0_i386.deb + 4ba22e40f71761a8a371f8a15d046faa 21422 contrib/base optional captive-lufs_1.0_i386.deb + d35acc96ac941032925553e1ce4cea3f 55810 contrib/base optional captive-install_1.0_i386.deb + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.3 (GNU/Linux) + +iD8DBQE/k4JgzD78uUT8djIRArZuAJ0cWSJDPyvAI67VTWxksEoo6GRx+gCfY3gc +biGzf1ZgYYSuvi/IG7CEwzY= +=pNNG +-----END PGP SIGNATURE----- diff --git a/project/captive/dist/captive_1.0_i386.deb b/project/captive/dist/captive_1.0_i386.deb new file mode 100644 index 0000000..76b5415 Binary files /dev/null and b/project/captive/dist/captive_1.0_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 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 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 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 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 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 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 index 0000000..404c5fd --- /dev/null +++ b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2.dsc @@ -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 +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 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 index 0000000..5f696a5 --- /dev/null +++ b/project/captive/dist/gnome-vfs-httpcaptive_2.3.8captive2_i386.changes @@ -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 +Changed-By: Jan Kratochvil +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 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-1captive6.i386.rpm b/project/captive/dist/lufs-0.9.6-1captive6.i386.rpm new file mode 100644 index 0000000..de68f7f Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive6.i386.rpm differ diff --git a/project/captive/dist/lufs-0.9.6-1captive6.src.rpm b/project/captive/dist/lufs-0.9.6-1captive6.src.rpm new file mode 100644 index 0000000..9f90bb7 Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive6.src.rpm differ diff --git a/project/captive/dist/lufs-0.9.6-1captive6mdk91.i586.rpm b/project/captive/dist/lufs-0.9.6-1captive6mdk91.i586.rpm new file mode 100644 index 0000000..6d97730 Binary files /dev/null and b/project/captive/dist/lufs-0.9.6-1captive6mdk91.i586.rpm differ diff --git a/project/captive/dist/lufs-0.9.6captive6.tar.gz b/project/captive/dist/lufs-0.9.6captive6.tar.gz new file mode 100644 index 0000000..3ba914c Binary files /dev/null and b/project/captive/dist/lufs-0.9.6captive6.tar.gz differ diff --git a/project/captive/dist/lufs-debuginfo-0.9.6-1captive6.i386.rpm b/project/captive/dist/lufs-debuginfo-0.9.6-1captive6.i386.rpm new file mode 100644 index 0000000..74f3c28 Binary files /dev/null and b/project/captive/dist/lufs-debuginfo-0.9.6-1captive6.i386.rpm differ diff --git a/project/captive/dist/lufs_0.9.6captive6.dsc b/project/captive/dist/lufs_0.9.6captive6.dsc new file mode 100644 index 0000000..e65a494 --- /dev/null +++ b/project/captive/dist/lufs_0.9.6captive6.dsc @@ -0,0 +1,28 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Format: 1.0 +Source: lufs +Version: 0.9.6captive6 +Binary: lufs +Maintainer: Jan Kratochvil +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: + 106f7117b0ea67ce85f0528ca0cc619b 214704 lufs_0.9.6captive6.tar.gz + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.3 (GNU/Linux) + +iD8DBQE/kC5izD78uUT8djIRArCHAJ9G8lWAQeHVwvwCM73d0A0XHI4wNACeLPMb +yByHpJ/ii85kBgrQ8/2BEiM= +=uLrf +-----END PGP SIGNATURE----- diff --git a/project/captive/dist/lufs_0.9.6captive6.tar.gz b/project/captive/dist/lufs_0.9.6captive6.tar.gz new file mode 100644 index 0000000..2f1ff7b Binary files /dev/null and b/project/captive/dist/lufs_0.9.6captive6.tar.gz differ diff --git a/project/captive/dist/lufs_0.9.6captive6_i386.changes b/project/captive/dist/lufs_0.9.6captive6_i386.changes new file mode 100644 index 0000000..872230a --- /dev/null +++ b/project/captive/dist/lufs_0.9.6captive6_i386.changes @@ -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.6captive6 +Distribution: unstable +Urgency: low +Maintainer: Jan Kratochvil +Changed-By: Jan Kratochvil +Description: + lufs - lufs - Linux Userland File System +Changes: + lufs (0.9.6captive6) unstable; urgency=low + . + * See package ChangeLog entries. +Files: + ccee758dd73a778ec6d0dc14b9bf665a 613 base optional lufs_0.9.6captive6.dsc + 106f7117b0ea67ce85f0528ca0cc619b 214704 base optional lufs_0.9.6captive6.tar.gz + 0581c9d3a4826c1661a705ab8bbceaf4 141754 base optional lufs_0.9.6captive6_i386.deb + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.3 (GNU/Linux) + +iD8DBQE/kC5ozD78uUT8djIRAq33AKCGZBDgJazHocKIfmA0UqW9YednrQCfbLUg +aFO2ESsKFkhKhVEjGZnb1aw= +=HuH4 +-----END PGP SIGNATURE----- diff --git a/project/captive/dist/lufs_0.9.6captive6_i386.deb b/project/captive/dist/lufs_0.9.6captive6_i386.deb new file mode 100644 index 0000000..63aaa7d Binary files /dev/null and b/project/captive/dist/lufs_0.9.6captive6_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 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 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 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 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 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 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.2-0.i386.rpm b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.i386.rpm new file mode 100644 index 0000000..c8b6631 Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.i386.rpm differ diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.src.rpm b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.src.rpm new file mode 100644 index 0000000..dcf43c7 Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2-0.src.rpm differ diff --git a/project/captive/dist/ntfsprogs-gnomevfs-1.0.2.tar.gz b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2.tar.gz new file mode 100644 index 0000000..a594525 Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-1.0.2.tar.gz differ diff --git a/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0.2-0.i386.rpm b/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0.2-0.i386.rpm new file mode 100644 index 0000000..98ec4ba Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs-debuginfo-1.0.2-0.i386.rpm differ diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.dsc b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.dsc new file mode 100644 index 0000000..c4a59e4 --- /dev/null +++ b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.dsc @@ -0,0 +1,24 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Format: 1.0 +Source: ntfsprogs-gnomevfs +Version: 1.0.2 +Binary: ntfsprogs-gnomevfs +Maintainer: Jan Kratochvil +Architecture: i386 +Standards-Version: 3.5.2 +Build-Depends: debhelper (>> 3.0.0), + libgnomevfs2-dev, + libglib2.0-dev, + ntfsprogs-dev +Files: + 4087f57e2f6a38b2ec8956396b61bc24 312531 ntfsprogs-gnomevfs_1.0.2.tar.gz + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.3 (GNU/Linux) + +iD8DBQE/k4zXzD78uUT8djIRAqQKAJ0cxz6Uo7RBg1AXyXBBOgBzFOLsYwCgk1Pq +q4pv3fUOIAv8zUdOMVRYpV4= +=KIUE +-----END PGP SIGNATURE----- diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.tar.gz b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.tar.gz new file mode 100644 index 0000000..0cfce9f Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2.tar.gz differ diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.changes b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.changes new file mode 100644 index 0000000..15ec8b4 --- /dev/null +++ b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.changes @@ -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.2 +Distribution: unstable +Urgency: low +Maintainer: Jan Kratochvil +Changed-By: Jan Kratochvil +Description: + ntfsprogs-gnomevfs - NTFS filesystem library GNOME virtual file-system interface +Changes: + ntfsprogs-gnomevfs (1.0.2) unstable; urgency=low + . + * See package ChangeLog entries. +Files: + 770c049238a95f00920aff1f08cfdcce 594 main/base optional ntfsprogs-gnomevfs_1.0.2.dsc + 4087f57e2f6a38b2ec8956396b61bc24 312531 main/base optional ntfsprogs-gnomevfs_1.0.2.tar.gz + 5833cbaa6611d8afaaf8f10632755fc8 9896 main/base optional ntfsprogs-gnomevfs_1.0.2_i386.deb + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.2.3 (GNU/Linux) + +iD8DBQE/k4zczD78uUT8djIRAni7AJ4zzu9GWno8xcPJ/m/ySrMTLRxlmQCfZEs7 +GYgWB1y2Lm0QeHQtx+VRBRE= +=RhCE +-----END PGP SIGNATURE----- diff --git a/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.deb b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.deb new file mode 100644 index 0000000..8fcd67a Binary files /dev/null and b/project/captive/dist/ntfsprogs-gnomevfs_1.0.2_i386.deb differ diff --git a/project/captive/dist/ntfsprogs_200309071734captive1.dsc b/project/captive/dist/ntfsprogs_200309071734captive1.dsc new file mode 100644 index 0000000..9b6b0a3 --- /dev/null +++ b/project/captive/dist/ntfsprogs_200309071734captive1.dsc @@ -0,0 +1,20 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Format: 1.0 +Source: ntfsprogs +Version: 200309071734captive1 +Binary: ntfsprogs, ntfsprogs-dev +Maintainer: Jan Kratochvil +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 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 index 0000000..d60878f --- /dev/null +++ b/project/captive/dist/ntfsprogs_200309071734captive1_i386.changes @@ -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 +Changed-By: Jan Kratochvil +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 index 0000000..53b9fcb Binary files /dev/null and b/project/captive/dist/ntfsprogs_200309071734captive1_i386.deb differ diff --git a/project/captive/doc/APITypes.html.pl b/project/captive/doc/APITypes.html.pl new file mode 100755 index 0000000..9c0476c --- /dev/null +++ b/project/captive/doc/APITypes.html.pl @@ -0,0 +1,480 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc APITypes page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::APITypes; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: API Functions', + "rel_prev"=>'Details.html.pl', + "rel_next"=>'CallType.html.pl', + ); + + +print <<"HERE"; + + +

API Function Implementation Choices

+ +

For each function exported by W32 + ntoskrnl.exe 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:

+ + + + + + + + +
Function type ItemsPortion
@{[ a_href 'APITypes.html.pl#functype_pass','pass' ]} 81 26%
@{[ a_href 'APITypes.html.pl#functype_wrap','wrap' ]} 2 0%
@{[ a_href 'APITypes.html.pl#functype_native_reactos','native-ReactOS' ]} 113 36%
@{[ a_href 'APITypes.html.pl#functype_native_libcaptive','native-own' ]} 116 38%
Function Implementation Types Statistics
+ + @{[ doc_img 'ratio','Functions Reusal Ratio' ]} + +

As there are several choices to implement each function the usual + attempts/investigations ordering is listed in the sections below.

+ +

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 unpatched libraries must + contain already prepared content at the runtime. There is a problem + with patched libraries where it is necessary + to also fully implement the data symbol as + @{[ a_href 'APITypes.html.pl#functype_native','native implementation' ]} since there is no + possibility to @{[ a_href 'APITypes.html.pl#functype_pass','pass' ]} 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 patched + library itself such symbols should be usually only some constants (such as + KeNumberProcessors).

+ +

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 Ordinal. + 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 + Ordinal symbol reference type at all.

+ +

All the exporting magic is handled by custom script + captivesym processing the definition file + @{[ captive_srcfile 'src/libcaptive/ke/exports.captivesym' ]} + to produce the intermediate relaying code + src/libcaptive/ke/exports.c. For details of the + captivesym-specific source file syntax please + see its documentation: + @{[ a_href + '/project/Pod2Html.html.pl?cvs=captive/src/libcaptive/ke/captivesym.pl', + 'src/libcaptive/ke/captivesym.pl' ]} + +

Direct Pass to Original "ntoskrnl.exe"

+ +

Simple (standalone) functions such as + RtlTimeToSecondsSince1970() can be simply + passed to the original implementation in + ntoskrnl.exe 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 + GenericTable subsystem or + LargeMcb handling.

+ +

Pass from UNIX Code

+ +

Control flow begins in some standard UNIX code. Such code is always + using @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]} for all its + intracalls. Native functions + compiled from ReactOS sources use + their own @{[ a_href '#calltype','cdecl/stdcall/fastcall' ]} declarations + but these call type modifications are discarded during compilation for + this project by the LIBCAPTIVE + symbol.

+ +

UNIX code calls FUNCTIONNAME() 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' ]} for a given + function.

+ +

Original W32 code entry point is always trapped by a 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 + @{[ 'int $3' ]} instruction but it will invoke + SIGTRAP signal handler conflicting with + the possible debugger (gdb(1)) + control. This project uses the hlt + instruction, which also has a single-byte opcode as + @{[ 'int $3' ]} and it is a privileged + instruction forbidden to be used from the UNIX user space code. + hlt invokes + SIGSEGV signal which can be resolved by + a custom signal handler without any conflict with the possible + debugger control; gdb(1) needs the + following command to pass through such + SIGSEGV signal:

+ +
+

handle SIGSEGV nostop noprint pass

+
+ +

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 singlestep provided by + ptrace(2) syscall. However such + singlestep needs another controlling UNIX process and it would again + conflict with the debuggers such as + gdb(1). This project implements the + singlestep functionality by two consecutive breakpoints + (hlt instructions to be specific): + The first two instruction addresses of the W32 functions are called + slot #1 and + slot #2, the length of the first + function instruction has to be analyzed to get the right address of + slot #2. When the first breakpoint is + caught it is necessary to patch the original instruction back and also + patch another breakpoint in place of + slot #2. + During the slot #2 breakpoint + invocation the operation will be reverted — the breakpoint will be put + to slot #1 again and the instruction + of slot #2 will be restored to be able + to continue the execution of the function.

+ +

W32 function will finish in its specific + @{[ a_href '#calltype','cdecl/stdcall/fastcall call type' ]}, 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.html.pl#calltype_cdecl','cdecl call type' ]}.

+ + @{[ doc_img 'fig/functype_patched_pass_fromunix', + 'Function Type: pass from UNIX Code' ]} + +

Pass from W32 Code

+ +

This function type is similiar to the + @{[ a_href 'APITypes.html.pl#functype_pass_fromunix','previous one' ]} with the exception + of more complicated entry point. Unfortunately W32 libraries call their + own functions directly, using the call + instructions without any patchable jump table. Even the + call 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 + i386. This time the double-breakpoint + mechanism @{[ a_href 'APITypes.html.pl#functype_pass_fromunix','described above' ]} gets + handy since it will catch the entry point when the function gets + called. SIGSEGV handler gets invoked by + the hlt 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).

+ +

When the relay needs to call the original function it will reach + exactly the same breakpoint instruction as during the recent + SIGSEGV handling redirecting to this + calling relay. But this time the + through_w32_func 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.

+ +

Returning is not much interesting as the first + SIGSEGV handler did a straight jump + for the redirection purposes without any needed consequent + handling.

+ +

The jump table relay used for the callers from W32 code is + a different one than the relay being used for the callers + @{[ a_href 'APITypes.html.pl#functype_pass_fromunix','from UNIX code' ]}. UNIX code always + uses relay with external @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]} + but in this case a relay with the appropriate + @{[ a_href '#calltype','cdecl/stdcall/fastcall call type' ]} is used.

+ + @{[ doc_img 'fig/functype_patched_pass_fromw32', + 'Function Type: pass from W32 Code' ]} + + @{[ vskip() ]} + + + + + + + + + +
captivesym keywordpass
Native code function name (no implementation)
W32 traced code from UNIX function name FUNCNAME
W32 traced code from W32 function name FUNCNAME_cdecl/_stdcall/_fastcall
Entry/exit debug tracing from UNIX code yes
Entry/exit debug tracing from W32 code yes
Function Type pass Characteristics
+ +

Wrap of the Original "ntoskrnl.exe" Function

+ +

Wrapping of Call from UNIX Code

+ +

The code control flow has no special hardcore features since it is + very similiar to the direct pass to + W32 function from UNIX code. All the wrapping is done in the + standard UNIX @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]} manner. + Jump table debug dumping relays are provided twice — the + "outer" one to trace the parameters from the function caller + and the "inner" one to trace the call from the wrapper to the + original W32 code. The "inner" relay also calls the W32 code + with the appropriate cdecl/stdcall/fastcall call + type.

+ + @{[ doc_img 'fig/functype_patched_wrap_fromunix', + 'Function Type: wrap from UNIX Code' ]} + +

Wrapping of Call from W32 Code

+ +

This scheme is a combination of the + previous wrap of a call from + UNIX code and the direct pass from + the W32 code. The control is caught and redirected by + SIGSEGV handler from the breakpoint + placed at the entry to the original W32 function code. The second entry + to the original W32 function with the + through_w32_func field of this function + description already set is done from the "inner" jump table + relay with the appropriate + @{[ a_href '#calltype','cdecl/stdcall/fastcall call type' ]}.

+ + @{[ doc_img 'fig/functype_patched_wrap_fromw32', + 'Function Type: wrap from W32 Code' ]} + + @{[ vskip() ]} + +

Some functions can be passed to the original + code but they need their parameters to be checked/prepared. + Currently, such wrapping is only needed for the + ExAllocateFromPagedLookasideList() function + where it is required due to missing execution of + ntoskrnl.exe initialization execution, + 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 + ntoskrnl.exe 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 ntoskrnl.exe + versions.

+ + + + + + + + + + +
captivesym keywordwrap
Native UNIX wrapping code function name FUNCNAME_wrap
W32 traced wraping code from UNIX func. name FUNCNAME
W32 traced wrapping code from W32 func. name FUNCNAME_cdecl/_stdcall/...
W32 traced original code function name FUNCNAME_orig
Entry/exit debug tracing from UNIX code yes
Entry/exit debug tracing from W32 code yes
Function Type wrap Characteristics
+ +

Native Implementation

+ +

Native Implementation Called from UNIX Code

+ +

This is the simplest case of a function call as it is fully + handled only by the compiler and/or linker.

+ +

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 #define + since it would also rename any calling statements of such function in + the same C sources. One of the possibilities to solve would be to + utilize --redefine-sym feature of the + objcopy(1) 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 + ReactOS implementations. + + @{[ doc_img 'fig/functype_native_fromunix', + 'Function Type: native from UNIX Code' ]} + +

Native Implementation of + "unpatched" Library Function Called from W32 Code

+ + @{[ doc_img 'fig/functype_unpatched_native_fromw32', + 'Function Type: native of unpatched from W32 Code' ]} + +

Here comes the differentiation if the project deals either with + a patched or an + unpatched version of the library + (patched is a loaded W32 binary + library while unpatched 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 + patched library call may be handled + simply as unpatched library call even for + the patched libraries. Fortunately the + distinction is not much important as the project is prepared to + properly handle both cases.

+ +

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' ]} while the + relay will call the implementation of the native function in the + standard UNIX @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type' ]} manner.

+ +

Native Implementation of "patched" Library Function Called from W32 Code

+ + @{[ doc_img 'fig/functype_patched_native_fromw32', + 'Function Type: native of patched from W32 Code' ]} + +

The calling scheme is similiar to the + previous call of + unpatched library function from W32 + code but the call control is redirected from the entry point of the + original W32 binary implementation by the breakpoint and its + SIGSEGV handler as in + the case of passing control from W32 + call.

+ +

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.

+ + @{[ vskip() ]} + +

In all cases the final function implementation is a standard UNIX + code compiled from C 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.

+ +

$Wine project is listed mostly for a 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!).

+ +

Native Implementation + - ReactOS

+ +

Some functions are already implemented in the $ReactOS + project and they can be used as they are. Although it would be + possible to pass some function calls to the + original code 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.

+ +

Such functions can be found in + src/libcaptive/reactos/ subdirectory. + Some functions had to be adjusted for this project + - these modifications are compiled conditionally, depending on the + LIBCAPTIVE symbol existence.

+ +

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:

+ +
+

UNIMPLEMENTED;

+
+ +

Functions that were not possible to + @{[ a_href 'APITypes.html.pl#functype_pass','pass' ]} were reimplemented by this project + and placed in the project's implementation directories + @{[ a_href '#reactos_nocare','instead of extending' ]} $ReactOS code.

+ +

Native Implementation – Wine

+ +

Even though $Wine only implements the + Microsoft Windows NT user space, there + still are some common functions which could be copied from the $Wine + project.

+ +

Native Implementation – Project Specific

+ +

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.

+ + @{[ vskip() ]} + + + + + + + + +
captivesym keyword(none; just the symbol name)
Native code function name FUNCTIONNAME
Native traced code from W32 code func. name FUNCTIONNAME_cdecl/_std...
Entry/exit debug tracing from UNIX code no
Entry/exit debug tracing from W32 code yes
Function Type native Characteristics
+ +

Undefined Function

+ +

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 patched + libraries not listed in the captivesym exports + file are automatically set to be trapped as fatal program execution + errors.

+ +

It is not necessary to list the symbols as + undef as long as you are just loading the + W32 PE-32 code and the symbols belong to + patched library. On the other hand if you + are loading W32 .so code or if such symbol is + a part of unpatched library (and thus + being completely provided by the project) you need to list such symbol as + undef type to prevent unresolved symbol + reference.

+ + + + + + + + +
captivesym keywordundef
Native code function name (no implementation)
Native traced code function name FUNCTIONNAME_cdecl/_stdcall/_fastcall
Debug tracing message from UNIX code yes
Debug tracing message from W32 code yes
Function Type undef Characteristics
+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/About.html.pl b/project/captive/doc/About.html.pl new file mode 100755 index 0000000..444d98d --- /dev/null +++ b/project/captive/doc/About.html.pl @@ -0,0 +1,140 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc About page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::About; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: About', + "rel_prev"=>'Index.html.pl', + "rel_next"=>'Architecture.html.pl', + ); + + +print <<"HERE"; + + +

About

+ +

Reasons for the Implementation

+ +

Currently there is no possibility to any of the available $freespeech + ($freespeech used in the following text in the meaning of + "@{[ a_href 'http://www.gnu.org/philosophy/free-sw.html','free as in speech' ]}") + operating systems to reliably write to the most common disk partition + filesystem type – Microsoft NTFS. It would + be already supported a long time ago but there is no proper documentation of + NTFS filesystem data structures available. + Since Microsoft corporation continues in its + propagation of Microsoft Windows NT + (NT identifier used in the following text + applies to all the products of Microsoft + NT series such as + NT 4.0, + 2000 as NT-5.0 + and + XP as NT-5.1.) + based operating systems NTFS is the default + disk file system type for vendor preinstalled Microsoft Windows. + +

Unfortunately the NTFS 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 reliable reverse + engineered read-only access. However reliabile + read-write part of the access would require much better + knowledge of the NTFS data structures. + Currently only rewriting of already existing file data blocks is supported + by $LinuxNTFS — no file creation, no file deletion, no directory operations etc. + Also any future versions of NTFS filesystem + would require another major reverse engineering effort.

+ + +

Challenges of the Project

+ +

The ultimate goal of this project is definitely the + free implementation of @{[ a_href '#reliability','reliable' ]} read-write NTFS filesystem driver. This project chose to + solve this problem in the style of $Wine project by using the original binary + ntfs.sys and emulating all the required layers of + Microsoft Windows NT for it.

+ +

Unfortunately this effort is tainted by only partial and generally + insufficient documentation of API between filesystem driver + (ntfs.sys) and the + Microsoft Windows NT + ("@{[ a_href 'http://mail.gnu.org/archive/html/libtool/2000-09/msg00000.html','W32' ]}" + in the following text) kernel ntoskrnl.exe. Note + that this API is a different than the one being used in the $Wine project + since Wine implements only the user space + part of W32.

+ + +

Microsoft Windows Versions Compatibility

+ +

Currently this project supports only driver files of + Microsoft Windows XP (NT-5.1) + in the following releases:

+ +
    +
  • Microsoft Windows XP Service Pack 1a Checked Build U.S.
  • +
  • Microsoft Windows XP Service Pack 1a Free Build U.S.
  • +
  • Microsoft Windows XP (No Service Pack) Checked Build U.S.
  • +
  • Microsoft Windows XP (No Service Pack) Free Build U.S.
  • +
+ +

The latest list of supported driver files can be found in: + @{[ captive_srcfile 'src/install/acquire/w32-mod-id.captivemodid.xml' ]}

+ +

Microsoft Windows NTFS filesystem driver is capable of accessing even + the older formats of the filesystem. Porting to Microsoft Windows 2003 + Server is expected to be done soon. There can be also a danger of Microsoft + Windows upgrading NTFS disk filesystem where you would no longer be able + to access your NTFS disk by your original + Microsoft Windows version. + This upgrade does not happen as it occurs only during complete CD-ROM + Microsoft Windows system installation – such operation is not performed + by this project.

+ +

There is no problem technically obtaining the needed driver files of + Microsoft Windows XP as they are freely + downloadable at: + @{[ a_href 'http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp' ]}

+ There may be @{[ a_href 'Architecture.html.pl#law','legal reasons' ]} you would not be allowed + to use there files if you own license to a different version of + Microsoft Windows. Legal rights will very + depending on your country.

+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/Architecture.html.pl b/project/captive/doc/Architecture.html.pl new file mode 100755 index 0000000..0f982ca --- /dev/null +++ b/project/captive/doc/Architecture.html.pl @@ -0,0 +1,214 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Architecture page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Architecture; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: Architecture', + "rel_prev"=>'About.html.pl', + "rel_next"=>'Components.html.pl', + ); + + +print <<"HERE"; + + +

Architecture

+ +

The principle of the + project lies in the glue between + Microsoft Windows NT kernel space + environment and $gnulinux user space process environment:

+ + @{[ doc_img 'arch-W32','Microsoft Windows Subsystems Architecture' ]} + @{[ doc_img 'arch-captive','Captive Subsystems Architecture' ]} + +

Existing Emulation Projects

+ +

There were 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 ones. Therefore this project went + its own way of emulation:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@{[ a_href '#guestosnote','Guest-OS' ]}@{[ a_href '#hostosnote' ,'Host-OS' ]}ImplementsW32 kernel library
$Wine$gnulinuxW32 user spacentdll.dll
$ReactOSi386 hardwareW32 kernel and user spacentoskrnl.exe
this project$gnulinuxW32 kernelntoskrnl.exe
Emulation Projects Characteristics
+ +
+
Guest-OS
+
@{[ a_href 'http://www.vmware.com/support/reference/common/glossary/#guestos','Guest OS' ]}: + An operating system that runs inside a virtual machine.
+
Host OS
+
@{[ a_href 'http://www.vmware.com/support/reference/common/glossary/#hostos' ,'Host OS' ]}: + An operating system that runs on the host machine.
+
+ +

While $ReactOS provides the necessary W32 kernel subsystem emulation + code we also need to run such @{[ a_href '#guestosnote','Guest-OS' ]} in the + @{[ a_href '#hostosnote','Host-OS' ]} $gnulinux. Initially it was planned to + extend $Wine with the W32 kernel space emulation functionality but + fortunately Steven Edwards pointed to the $ReactOS + which better suits the needs of this project by its already implemented W32 + kernel space emulation.

+ +

The original reasons 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.

+ +

The most serious problem of $ReactOS is its dependence on the direct + i386 hardware instead of some + @{[ a_href '#hostosnote','Host-OS' ]} as required by the goals of this project. + W32 is designed to be hardware-independent using its + hal.dll. 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.

+ + + + + +

Some API functions are provided both by + ntdll.dll and + ntoskrnl.exe in W32. + Casper Hornstrup enlightened such functions + calling conventions have to be differentiated as + ntdll.dll lives in the user space (low address + space – below 0x80000000) and + ntoskrnl.exe in the kernel space (high address + space – above 0x80000000). Although they + contain slightly different set of symbols (functions) + ntdll.dll still can be considered as a user + space interface to the kernel space implementation by + ntoskrnl.exe.

+ +

Currently there are + no plans to ever extend the project's crossplatformity beyond the + i386 processor + (i386 used here as + @{[ a_href 'http://www.intel.com/','Intel' ]} architecture covering 32-bit + processors compatible with i386, + i486, ...).

+ + +

Laws and Licensing Conditions

+ +

If you are an authorized user of + Microsoft Windows NT 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.

+ +

Microsoft Service Pack

+ +

Sometimes you may have the legal license for + Microsoft Windows NT + but for various technical reasons you do not have the media and/or + installation ready at the place of intended use of this project.

+ +

Fortunately Microsoft provides + $freebeer update packages for its + Microsoft Windows products called + Service Packs; the latest one is + @{[ a_href 'http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp','Microsoft Windows XP Service Pack 1a' ]}.

+ +

This downloadable file contains the full versions of the essential + files needed for the current stage of this product: + ntfs.sys + and + ntoskrnl.exe. + It even contains + cdfs.sys and + fastfat.sys for testing purposes.

+ +

Service Pack also contains + EULA (End User License Agreement) paper disallowing any use of + Service Pack outside its original + intentions. According to the laws of some countries you need to be + authorized user of the + Microsoft Windows XP product to be + allowed to use the files contained in such + Service Pack without the bindings of its + EULA. Even the interpretation of such laws may vary.

+ +

It would be a breach of the law by the project author to provide + automatic (=hidden) functionality to download and extract the + Service Pack files. On the other hand it + is perfectly legal to ask user for his/her confirmation whether he/she is + really the authorized user of + Microsoft Windows XP product and + download/extract the Service Pack files + accordingly.

+ + @{[ doc_img 'captive-install-acquire-ask','Microsoft Windows Drivers Acquire Affirmation' ]} + + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/CacheManager.html.pl b/project/captive/doc/CacheManager.html.pl new file mode 100755 index 0000000..55faaee --- /dev/null +++ b/project/captive/doc/CacheManager.html.pl @@ -0,0 +1,329 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Cache Manager page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::CacheManager; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: NT Cache Manager', + "rel_prev"=>'Reverse.html.pl', + "rel_next"=>'Details.html.pl', + ); + + +print <<"HERE"; + + +

NT Cache Manager

+ +

Although there exist some 3rd party documents about + NT Cache Manager W32 subsystem such as + @{[ a_href 'http://www.osr.com/ntinsider/1996/cacheman.htm', + 'The NT Cache Manager Description' ]} or + @{[ a_href 'http://www.winntmag.com/Articles/Print.cfm?ArticleID=3864', + 'Learn About NT'."'".'s File-system Cache' ]} + they are definitely insufficient for compatible + NT Cache Manager reimplementation.

+ +

NT Cache Manager is about mapping + filesystem objects such as regular file data, filesystem bitmap or + journalling zone (log file). It is also being used by the filesystem for + mapping of virtual volume files representing the whole underlying + filesystem device.

+ +

The original W32 NT Cache Manager + is much more complicated as it must coordinate its effort with + other W32 subsystems like mapping of executable files + (ImageSectionObject), insufficient system + resources from NT Memory Manager + or general effort to perform caching features for system performance.

+ NT Cache Manager of this project has much + simpler goal - it just needs to provide compatible + NT Cache Manager functionality while + the other goals of its W32 counterpart are left to be successfuly handled + by UNIX OS in much more efficient way.

+ + @{[ doc_img 'dia/cache-manager', + 'NT Cache Manager Architecture' ]} + +

Cache Manager objects are always bound to + FCB (File Control Block). + FileObject (or its associated + HANDLE) serve only as reference + to FCB and there can be multiple + FileObject/HANDLE + items for one FCB. It is a bit misleading + you must use FileObject pointer while calling + most of the Cache Manager functions.

+ +

Before using any other Cache Manager functions you must first call + CcInitializeCacheMap(). You must give the + maximum mapped object offset. Each mapped object byte must have at most one + mapped memory location - no shared pages are allowed. Also any subsequent + mapping request is expected to be mapped into continuous memory region. + It implies you must reserve the memory region for possible future mapping + during the initial CcInitializeCacheMap() + moment sized according to the given maximum mapped object offset. + This is the approach currently implemented by this project although it + cannot be used for 3rd party ext2fsd.sys + driver as it initialized Cache Manager by the whole media device size + and it surprisingly succeeds for original + Microsoft Windows + Cache Manager. + I expect the space reservation should be postponed to the first mapping + request and expect no multiple mappings will be done in the case + of memory-exceeding CcInitializeCacheMap() + reservation request. CcSetFileSizes() + changing the reserved memory area size may assume no existing Map + or Pin mappings exist. Only in the case of + FO_STREAM_FILE (virtual device file) + it is permitted to extend mapped size even in the case of existing + (and dirty) Map or Pin mappings.

+ +

PCACHE_MANAGER_CALLBACKS argument can be + safely ignored:

+ +
+
AcquireForReadAhead()/ReleaseFromReadAhead()
+
+

As any readahead functionality is optional these entries are + never used by Cache Manager implementation of this project.

+
+ +
AcquireForLazyWrite()/ReleaseFromLazyWrite()
+
+

Even the write-behind functionality is optional for Cache Manager. + It is being done in asynchronous way in the original + Microsoft Windows + Cache Manager. + implementation and it is ignored by Cache Manager implementation of + this project.

+ +

Cache Manager does not need to write any data if not explicitely + requested by the driver. It is even expected to silently drop any + pending dirty data blocks during filesystem shutdown. + Forced dirty block write by function + CcFlushCache() should be written without + any wrapping surrounding + AcquireForLazyWrite()/ReleaseFromLazyWrite() + pair.

+
+
+ +

CcUninitializeCacheMap() is just + a suggestion for Cache Manager that driver will no longer reference + given SharedCacheMap. The uninitialization + can be postponed to any later moment in original + Microsoft Windows + Cache Manager + as it may be locked by existing + ImageSectionObject + of some file being executed etc. + It is fatal to destroy + SharedCacheMap + in the moment you see no other + references to it as the driver will access it for some moment + even after CcUninitializeCacheMap(). + I am not sure if it is a bug of the driver or whether there are some rules + how long after CcUninitializeCacheMap() + completion given SharedCacheMap still exists. + Fortunately it is safe to never destroy + SharedCacheMap and leave it leaked - everything + gets clean in the + @{[ a_href 'Details.html.pl#sandbox','sandboxed environment' ]} soon anyway.

+ +

There exist Map and Pin type objects for each + SharedCacheMap although they look very similiar. + Only these objects give you access to any memory data + — SharedCacheMap only reserved the space + to ensure continuous mapping of the forthcoming mappings but it did not map + any data into it.

+ +

Mapping of 'new' Map or Pin will create the new object only in the case + no such mapping exists now. Otherwise you will just get the reference to + the existing object with increased usecount.

+ +
+
Map
+
+

Map mapping is always at most one for each + SharedCacheMap. Base offset/length of such + mapping have no meaning as there can be only single Map.

+ +

Apparently Map size can be arbitrary long according + to its SharedCacheMap reserved space.

+ +

You cannot modify the memory mapped by Map in any way. + As it is the same memory area (address) as the pages used by Pin + objects you always access the last modified version by possible + Pin of the same page.

+
+ +
Pin
+
+

Pin mapping always represents just one physical page + (PAGE_SIZE &nspan; 4096 for i386). + Its base offset/length can be safely extended to be aligned to the + requested page.

+ +

Pin can have associated pair of oldest and newest + CcSetDirtyPinnedData() + and Cache Manager always tracks the lowest and highest + reported LSN is assumed to be + 0 if not set.

+ +

Any existing Pin mapping will be reused for further mappings + as long as it is not ThreadOwned. In the moment you use + CcSetBcbOwnerPointer() you will detach + the associated Pin pages from its + SharedCacheMap. + Although they will further act as valid Pin mappings they will be no + longer reused during new Pin mapping of the same page. + There can exist multiple Pin mappings of the same page (although + sharing the same memory space). This detaching must be implemented + even in the + @{[ a_href 'Details.html.pl#synchronous','single-threaded' ]} W32 implementation + of this project as it is affecting the behaviour of Cache Manager. + It was never + @{[ a_href 'CacheManager.html.pl#TraceFS','seen' ]} how to behave if multiple dirty Pin + mappings of the same page exist.

+
+
+ +

Only the pages not yet present in the memory must be read from the disk. + You must not read any pages you do not need to as the driver does not + expect it and it would corrupt its data buffers. There is just a strict + difference between CcPinRead() and + CcPinMappedData() function calls where + CcPinRead() is required to re-read its data + blocks even if they were currently already Map mapped (unless it was already + also Pin mapped at least once). On the opposite side + CcPinMappedData() must not re-read the given + blocks, moreover it blocks are required to be already Map mapped by the caller.

+ +

Cache Manager of this project will destroy Pin or Map mappings after + their last unreferencing (in opposite of + @{[ a_href 'sharedcachemap_leak','leaked SharedCacheMap' ]}). + Despite it any dirty pages may still be held as the pages + (including their SharedCacheMap. It may be also possible + original Microsoft Windows + Cache Manager + postpones Pin mapping destroy to later time but it does not matter.

+ + +

TraceFS NT Cache Manager Tracer

+ +

@{[ a_href '#cache_manager','Cache Manager behaviour' ]} would be hard + to analyze just by @{[ a_href '#reverse','reverse engineering' ]} as it + is pretty complicated code cooperating with many other W32 kernel + subsystems. It was chosen as easier way to trace it instead and validate + all the Cache Manager assumptions by Cache Manager simulator.

+ + @{[ doc_img 'dia/TraceFS','TraceFS Hooking' ]} + +

You must prepare your driver to be hooked + (ntfs.sys in this case):

+ +
+

@{[ captive_srcfile './src/TraceFS/hookfs.pl' ]} ntfs.sys ./src/TraceFS/TraceFS-W32/TraceFS.sys >hooked/ntfs.sys

+
+ +

This hooked/ntfs.sys file must be replaced + in the %System32%\\drivers directory. + Beware as + Microsoft Windows + has many backups of these system files such as + %System32%\\dllcache — delete them + all!

+ +

You also need to install + ./src/TraceFS/TraceFS-W32/TraceFS.sys + into %System32%\\drivers directory + and import TraceFS/TraceFS-W32/TraceFS.reg + registry file to initialize the debug driver during system boot.

+ +

You can now pray a bit and snap the resulting Cache Manager tracing + from WinDbg by + @{[ a_href 'Reverse.html.pl#WinDbg','W32 remote kernel debugging' ]}:

+ + @{[ doc_img 'ntdebug-windbg-boot','Successfuly connected WinDbg' ]} + +

The resulting trace file should be processed by + @{[ captive_srcfile './src/TraceFS/checktrace.pl' ]} Perl Cache Manager + implementation to validate its assumptions about Cache Manager behaviour. + Any seen incompatibilies will be reported — your target is to reach + as few error messages as possible.

+ +

KNOWN BUGS: Combination of message synchronization primitives and + implemented refusal to create journalling thread of + ntfs.sys + causes fatal system lockup in several advanced operations + such as setting compression attribute. Despite it more common operations + can be successfuly traced during the whole + Microsoft Windows + session including its final shutdown and such traces provide enough + material to be food to + @{[ captive_srcfile './src/TraceFS/checktrace.pl' ]} Perl Cache Manager + validator.

+ +

TraceFS for general API tracing

+ +

Although TraceFS was up to now used only for tracing of + NT Cache Manager it can be easily + used ever for any other NT kernel API tracing. You need to provide + appropriate function wrappers in the main source file + @{[ captive_srcfile './src/TraceFS/TraceFS-W32/TraceFS.c' ]}. + Original system functions being wrapped should be called with their + original name. Your wrapping functions should have the first letter + of their name replaced by character + 'T'. Therefore wrapping of + CcInitializeCacheMap() must be + done by your function + TcInitializeCacheMap(). + Prototypes of both the wrapping and wrapped functions must be the same. + You must also export all the wrapped functions by + @{[ captive_srcfile './src/TraceFS/TraceFS-W32/TraceFS.def' ]}. + @{[ captive_srcfile './src/TraceFS/hookfs.pl' ]} has no hardcoded + function names – it will hook exactly the exported entries.

+ +

Framework for thread synchronizations and debug tracing is provided to + prevent mangling of messages while running by multiple threads at once. + Testing was done just on uniprocessor machine, SMP kernel may need some + fixes.

+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/CallType.html.pl b/project/captive/doc/CallType.html.pl new file mode 100755 index 0000000..d1e3049 --- /dev/null +++ b/project/captive/doc/CallType.html.pl @@ -0,0 +1,163 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Calling Types page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::CallType; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: API Calling Conventions', + "rel_prev"=>'APITypes.html.pl', + "rel_next"=>'TODO.html.pl', + ); + + +print <<"HERE"; + + +

API Function Calling Conventions

+ +

Standard UNIX code compiled by GCC (GNU C Compiler) running on host + $gnulinux always uses @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl' ]} ABI (Application + Binary Interface) calling convention. This calling convention is also the + default declaration type of UNIX functions.

+ +

W32 uses three different calling conventions in its ABI. They are all + described in the + Microsoft documentation. + There is always necessary to have the proper function declaration + (prototype) in the caller scope to prevent all sorts of unexpected + crashes.

+ +

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) EBP 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...

+ +

EDI, ESI and + EBX registers are always saved on the stack. + They are stored on the stack in this particular order from bottom to top + addresses (using the push EBX, + push ESI, + push EDI 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.

+ +

W32 Calling Convention "cdecl"

+ +

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.

+ + @{[ doc_img 'fig/calltype_cdecl', + 'W32 Calling Convention cdecl Scheme' ]} + + + + + + + +
Arguments freed by caller
Arguments on the stack #0 ... #(n-1)
Arguments in the registers none
GCC attribute __attribute__((__cdecl__)) (default)
Calling Convention cdecl Characteristics
+ +

W32 Calling Convention "stdcall"

+ + @{[ doc_img 'fig/calltype_stdcall', + 'W32 Calling Convention stdcall Scheme' ]} + +

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.html.pl#calltype_cdecl','cdecl' ]} + instead.

+ + + + + + + +
Arguments freed by callee
Arguments on the stack #0 ... #(n-1)
Arguments in the registers none
GCC attribute __attribute__((__stdcall__))
Calling Convention stdcall Characteristics
+ +

W32 Calling Convention "fastcall"

+ +

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 ECX and + EDX 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.html.pl#calltype_cdecl','cdecl' ]} + instead.

+ +

GCC (GNU C 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 + __attribute__((__regparm__(3))). + W32 passes the arguments in registers in the order + ECX, EDX but + GCC passes them in registers EAX, + EDX, ECX. + This incompatibility is compensated at C source level in the + @{[ a_href '#functype','relaying code' ]} generated by + captivesym relay generator.

+ + @{[ doc_img 'fig/calltype_fastcall', + 'W32 Calling Convention fastcall Scheme' ]} + + + + + + + + + +
Arguments freed by callee
Arguments on the stack #2 ... #(n-1)
Arguments in the registers ECX=#0, + EDX=#1
GCC ≥3.4 attribute __attribute__((__fastcall__))
GCC <3.4 attr. emulation__attribute__((__stdcall__))
__attribute__((__regparm__(3) /* EAX,EDX,ECX */))
Calling Convention fastcall Characteristics
+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/Components.html.pl b/project/captive/doc/Components.html.pl new file mode 100755 index 0000000..c182074 --- /dev/null +++ b/project/captive/doc/Components.html.pl @@ -0,0 +1,279 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Components page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Components; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: Components', + "rel_prev"=>'Architecture.html.pl', + "rel_next"=>'Reverse.html.pl', + ); + + +print <<"HERE"; + + +

Project Components

+ + @{[ doc_img 'dia/arch-all','Project Components Architecture' ]} + +

Most of the work of this project is located in the single box called + "libcaptive" located in the center + of the scheme. This component implements the core W32 kernel API by + various methods described in this document. + The "libcaptive" box cannot be + further dissected as it is just an implementation of a set of + @{[ captive_srcfile 'src/libcaptive/ke/exports.captivesym','API functions' ]}. + It could be separated to several subsystems such as the + @{[ a_href '#cache_manager','Cache Manager' ]}, + Memory Manager, Object Manager, Runtime Library, I/O Manager + etc. but they have no interesting referencing structure.

+ +

As this project is in fact just a filesystem implementation every + story must begin at the device file and end at the filesystem operations + interface. The unified suppported interfaces are + @{[ a_href 'http://developer.gnome.org/doc/API/2.0/glib/','GLib' ]} + (the most low level portability, data-types and utility library for Gnome) + GIOChannel (for the device access) and the custom + libcaptive filesystem API. Each of these ends + can be connected either to some direct interface (such as the + captive-cmdline client), + @{[ a_href 'http://lufs.sourceforge.net/lufs/','Linux Userland File System (LUFS)' ]} + or as a general $GnomeVFS filter. + @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} will be used in + most cases as it offers standard filesystem interface by Linux kernel. + + You can also use $GnomeVFS as it 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 /dev/hda3 or /dev/discs/disc0/part3 to the fully accessible + filesystem (pretending being an "archive" in the device + reference). This device access can be specified by $GnomeVFS URLs such as: + file:///dev/hda3#captive-fastfat:/autoexec.bat

+ + captive-bug-replay serves just for debugging + purposes — you can 'replay' existing + file.captivebug.xml.gz automatically being + generated during W32 filesystem failure. This bugreport file will contain + all the touched data blocks of the device used in the moment of the + failure. captive-bug-replay will therefore + emulate internal virtual writable device out of these bugreported data. + +

If the passed device reference is requested by the user to be accessed + either in --ro (read-only) mode or in the + --rw (full read-write) mode there are no + further device layers needed. Just in the case of --blind 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.

+ + sandbox commit buffer is involved only in the + case @{[ a_href 'Details.html.pl#sandbox','sandboxing feature' ]} is active. It will + buffer any writes to the device during the sandbox run to prevent + filesystem damage if the driver would fail in the meantime. If the + filesystem gets finally successfully unmounted this sandbox buffer can be + safely flushed + to its underlying physical media. The buffer will be dropped + in the case of filesystem failure, of course. The filesystem should be + unmounted from time to time — it can be transparently unmounted and mounted + by commit of + captive-cmdline custom client. Currently you + cannot force remounting when using + @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} interface client + but it will be remounted after approx each 1MB data written automatically + due to @{[ a_href '#log_file_full','NTFS log file full' ]}. + + Now we need to transparently + @{[ captive_srcfile 'src/libcaptive/sandbox/sandbox.idl','connect' ]} + the device interface of GIOChannel type through + @{[ a_href 'Details.html.pl#sandbox','CORBA/ORBit' ]} to the sandboxed slave. + +

Such device is still only a UNIX style GLib GIOChannel type at this point. As we need to supply it + to the W32 filesystem driver we must convert it to the W32 I/O Device + with its capability of handling IRP + (I/O Request Packet; 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 Device can + represent either CD-ROM or + disk device type as different W32 filesystem + drivers require different media types — currently only + cdfs.sys requires + CD-ROM type.

+ +

W32 media I/O Device is accessed from the W32 filesystem driver. + The filesystem driver itself always creates volume object by + IoCreateStreamFileObject() representing the + underlying W32 media I/O 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 Device (already implemented by this project as an + interface to GIOChannel noted above).

+ +

The filesystem driver is called by the core W32 kernel implementation of + libcaptive in + @{[ a_href 'Details.html.pl#synchronous','synchronous way' ]} in single-shot manner instead of + the several reentrancies while waiting for the disk I/O completions as can + be seen in the original + Microsoft Windows NT. + 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' ]} outside of + the W32 emulated @{[ a_href 'guestosnote','Guest-OS' ]} environment. + For several cases needed only by ntfs.sys + there had to be supported asynchronous access — parallel execution + is emulated by GLib g_idle_add_full() + with g_main_context_iteration() called during + KeWaitForSingleObject().

+ +

libcaptive 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 + CreateFileA() is being implemented by several + libraries such as user32.dll as a relay + interface for the kernel function + IoCreateFile() implemented by this + project's libcaptive W32 kernel + emulation component.

+ +

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' ]} inspired by + the $GnomeVFS client interface adapted to the specifics of W32 kernel API. + This interface is supposed to be easily utilized by + a custom application accessing + the W32 filesystem driver.

+ +

@{[ a_href 'Details.html.pl#sandbox','CORBA/ORBit' ]} hits us again – we need to + @{[ captive_srcfile 'src/libcaptive/sandbox/sandbox.idl','translate' ]} + the @{[ a_href '#client_interface','custom filesystem API interface' ]} + out of the sandboxed slave to the UNIX space.

+ +

captive sandbox master provides the + functionality of covering any possible sandboxed slave restarts and its + communication. It is also capable of + demultiplexing single API operations + to multiple its connected sandbox slaves in transparent way + as each of them handles + @{[ a_href 'Details.html.pl#mounted_one','just one filesystem device' ]}.

+ +

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 filesystem service can be offered in several ways:

+ +
+
Custom client
+
+

One possibility would be to write + a custom client application + for this project such as file manager or a 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: + src/client/cmdline/cmdline-captive

+
+ +
@{[ a_href 'http://lufs.sourceforge.net/lufs/','Linux Userland File System (LUFS)' ]}
+
+

The most usable interface is the + @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} client + by liblufs-captivefs. + As @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} + already assigns separate process for each filesystem mount the + @{[ a_href '#demultiplexing_master','demultiplexing feature' ]} + is not utilized in this case.

+ +

@{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} + needs multiple operating threads (each UNIX kernel operation needs + one free lufsd slot/thread to not to fail immediately). + As libcaptive is + @{[ a_href 'Details.html.pl#synchronous','single-threaded' ]} all the operations + get always synchronized by + liblufs-captivefs + before their pass over to libcaptive.

+
+ +
@{[ a_href '#offered_gnomevfs','Gnome-VFS' ]}
+
+

This client allowing its filesystem access even without any + involvement of UNIX kernel from any $GnomeVFS aware client application + (such as gnome-vfs/tests/test-shell). + This @{[ a_href '#offered_gnomevfs','Gnome-VFS interface' ]} 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.

+
+
+ +

Unimplemented and deprecated methods for providing filesystem + service:

+ +
+
W32 filesystem in UNIX OS kernel
+
+

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.

+
+ +
Custom NFS server
+
+

The common approach + of filesystem implementations + 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 custom NFS server but the NFS protocol itself + has a lot of fundamental flaws and complicated code for backward + compatibility.

+
+
+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/Details.html.pl b/project/captive/doc/Details.html.pl new file mode 100755 index 0000000..be27aab --- /dev/null +++ b/project/captive/doc/Details.html.pl @@ -0,0 +1,504 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Details page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Details; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: Implementation Details', + "rel_prev"=>'CacheManager.html.pl', + "rel_next"=>'APITypes.html.pl', + ); + + +print <<"HERE"; + + +

Implementation Details

+ +

Choice of the Emulation Methods

+ +

The intent of the project was to get reliable read-write access to + NTFS partition. There are several possible + ways to achieve that:

+ +

Virtualmachine Running the Original W32 Subsystem

+ +

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 + Microsoft Windows NT inside virtual + machine emulator such as VMware.

+ +

pros: Full compatibility due to fully native codebase.

+ +

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 + Microsoft Windows NT product.

+ +

"ntoskrnl.exe" Inside Virtual Address Space

+ +

This solution was chosen by the project. Binary filesystem driver and + also ntoskrnl.exe binary file are required. + Unfortunately ntoskrnl.exe expects a 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.

+ +

Also the initialization code of ntoskrnl.exe 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 'APITypes.html.pl#functype_wrap','API functions wrapping' ]}. + +

pros: Lightweight, easier to debug.

+ +

cons: Possible incompatible emulation of + ntoskrnl.exe parts, missing documentation needed + for the implementation.

+ +

Filesystem Driver Inside Virtual Address Space

+ +

Unlike @{[ a_href 'Details.html.pl#method_ntoskrnl','previous method' ]} here we do not use + even ntoskrnl.exe as the complete kernel part of + W32 is emulated from the project source + files. cdfs.sys driver was successfuly ran + in this manner in the former versions of this project but the possibility + to run without ntoskrnl.exe was dropped since it + had no licensing gains (you need the original + Microsoft Windows NT files at least for + the filesystem driver itself) and the emulation of undocumented parts + reusable from ntoskrnl.exe binary was + a pain.

+ +

pros: Lightweight, easier to debug.

+ +

cons: Possible incompatible emulation of the whole + ntoskrnl.exe, its missing documentation.

+ + +

API Function Implementation Choices

+ +

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 'APITypes.html.pl#functype_pass','Direct pass to original ntoskrnl.exe' ]}, + @{[ a_href 'APITypes.html.pl#functype_wrap','Wrap of the original ntoskrnl.exe function' ]}, + @{[ a_href 'APITypes.html.pl#functype_native_reactos','Native implementation – $ReactOS' ]}, + @{[ a_href 'APITypes.html.pl#functype_native_wine','Native implementation – $Wine' ]} + or + @{[ a_href 'APITypes.html.pl#functype_native_libcaptive','Native implementation – project specific' ]}. + + + +

Sandboxing of W32 Filesystem

+ +

The emulated W32 environment running the original W32 filesystem driver + is separated from the rest of UNIX OS. It achieves the following goals:

+ +
    +
  • Restartable: W32 driver can be restartde in clean state if it crashed
  • +
  • Secure: Malicious W32 code cannot affect the security of UNIX OS
  • +
  • Stable: Buggy W32 cannot crash any part of UNIX OS
  • +
+ +

Sandboxing is provided with the following attributes:

+ +
    +
  • standalone UNIX process with separate memory space
  • +
  • chroot(2) in empty directory to prevent any UNIX OS filesystem access
  • +
  • setuid(2) to own user/group to prevent interaction with UNIX processes
  • +
  • setrlimit(2) to limit system resources available for W32 environment
  • +
  • the only connection with the UNIX OS by CORBA/ORBit RPC
  • +
+ +

This security is almost the same as provided by + emulated virtual machines such as + @{[ a_href 'http://www.vmware.com/solutions/security.html','VMware' ]}.

+ + @{[ doc_img 'dia/inheritance','Sandboxing Scheme' ]} + +

Project can be also used in non-sandboxed mode by + --no-sandbox option as it is easier to debug + without CORBA/ORBit RPC. In this case the + DirectorySlave/FileSlave + options are used directly instead of their + DirectoryParent/FileParent + peers.

+ + +

"patched" vs. "unpatched" Libraries

+ +

Library is called patched 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 only currently + patched library of this project is + ntoskrnl.exe.

+ +

Library is called unpatched if no original + binary code is needed since all of its functions are completely emulated by + @{[ a_href 'APITypes.html.pl#functype_native','the native implementations' ]} of this project. + The typical unpatched representative is + hal.dll 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 unpatched + native implementation of + ntoskrnl.exe but it no longer applies.

+ +

Memory Management

+ +

Original Microsoft Windows NT + architecture uses two address space areas – user space and kernel space. + User space is mapped in the range 0x00000000 + to 0x7FFFFFFF, kernel space is mapped in the + range 0x80000000 + (KERNEL_BASE in $ReactOS sources) to + 0xFFFFFFFF. All these virtual memory ranges + represent addresses after their MMU (Memory Management Unit) mapping, of + course. More discussion can be found in the + description + by Microsoft.

+ +

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 + 0x00000000 to + 0xFFFFFFFF 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 MmSafeCopyToUser()).

+ +

Unicode Strings and Characters

+ +

W32 platform uses 16-bit type wchar_t while $gnulinux uses a + 32-bit one. This can be problem during GCC (GNU C Compiler) + compilation of combination of native UNIX C sources (assuming 32-bit + GCC with 32-bit wchar_t) and + $ReactOS C sources (assuming W32 compiler with 16-bit + wchar_t) for literal wide strings + (C source file systax: L"wstring"). + Possibilities to solve this issue list:

+ +
    +
  • +

    Using -fshort-wchar GCC option and + strictly differentiate between compilation of + ReactOS code and UNIX code.

    + +

    pros: No source modifications needed, no runtime performance hit.

    + +

    cons: No type checking if some part of code has bad compilation + flags, complicated way to completely split + ReactOS and UNIX code.

    +
  • +
  • +

    Wrap all ReactOS literal constants + by some conversions function call (implemented as macro + REACTOS_UCS2() by this project).

    + +

    pros: Any forgotten/mistaken conversions are type-checked and warned + during the compilation by GCC.

    + +

    cons: All compiled ReactOS sources + files containing literal wide strings have to be wrapped/modified, + performance hit by runtime string conversions.

    + +

    This solution was chosen to get the internal sanity checking + benefit.

    +
  • +
+ +

Supported Binary Formats

+ +

The native W32 binary format is identified as + PE-32 (Portable Executable 32-bit), such + files have all the usual extensions such as + .sys, .exe, + .dll etc. PE-32 + 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 .PDB (Program DataBase) files in $gnulinux + ABI (Application Binary Interface) compatible way.

+ +

This project also supports transparent loading of UNIX + .so (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 -ggdb3 recommended). Beware of + possible compilation problems as Microsoft + C code expects exception 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' ]} when + such driver is running in the scope of this project. You can use the + following script of this project to compile W32 filesystem source files as + UNIX .so: + @{[ captive_srcfile 'src/w32-mod/ext2fsd.so-build.sh' ]}

+ +

Be aware of some differences if you use + PE-32 binary format file vs. + .so format file. + PE-32 use the appropriate W32 specific + @{[ a_href '#calltype','cdecl/stdcall/fastcall call types' ]}, + .so must be completely compiled in the standard + UNIX @{[ a_href 'CallType.html.pl#calltype_cdecl','cdecl call type semantics' ]}. + @{[ a_href 'APITypes.html.pl#functype_native','Native function implementations' ]} do not need + to be explicitely exported by captivesym 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 + .so file for the production version of the + original PE-32 binary file.

+ + +

At Most One Mounted Filesystem

+ +

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 possible complications during bug reports and the bug solving + itself. It was considered as a more sane way to support multiple W32 + mounted disks by completely separately running project instances in + a different UNIX processes communicating from their sandboxes via + @{[ a_href 'Details.html.pl#sandbox','CORBA sandbox interface' ]}. This sandboxing + feature is not yet deployed although its code is already prepared.

+ +

The project also does not support any state cleanup to be able to load + filesystem A, + cleanup A and load a different + filesystem B 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 + captive_shutdown() to flush all the pending + filesystem buffers to the disk. After calling + captive_shutdown() 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 'Details.html.pl#sandbox','CORBA sandbox interface' ]} control master.

+ +

Each sandbox executing the untrusted W32 binary filesystem driver code + is connected through its + @{[ a_href 'Details.html.pl#sandbox','CORBA sandbox interface' ]} at the point of upper + layer libcaptive-specific filesystem API, at + the point of the bottom layer of GIOChannel + device access and also for transfers of GLib logging + messages/warnings/errors out of the sandbox to the user.

+ + +

Multithreading and Multiple Processors

+ +

W32 platform stands on its 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 + Microsoft Windows NT kernel + (KeNumberProcessors symbol is always 1), + everything runs in the single initial thread/process and all the filesystem + operations are performed as synchronous + ("synchronous" by flags + FILE_SYNCHRONOUS_IO_ALERT, + FO_SYNCHRONOUS_IO, + IRP_SYNCHRONOUS_API, + IRP_SYNCHRONOUS_PAGING_IO, + forced TRUE result of + IoIsOperationSynchronous() + etc.). + For several cases needed only by ntfs.sys there + had to be supported asynchronous access + (STATUS_PENDING return code) – parallel + execution is emulated by GLib + g_idle_add_full() with + g_main_context_iteration() called during + KeWaitForSingleObject().

+ Since there is a possibility a real W32 parallel threading would + be yet needed in the future all the code that would be hit by W32 + multithreading capability is marked by + TODO:thread comment.

+ +

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 + KSPIN_LOCK etc. can be safely implemented as + no-operations.

+ +

Asynchronous callbacks registered for + IO_WORKITEMs are passed as GLib idle + functions by g_idle_add_full(). Although they + will probably never be executed during non-interactive project's batch + executions it is the 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 execution by + captive_shutdown().

+ +

Paranoia Checks

+ +

A 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.

+ +

Facilities for these practices can be seen in the standard + C include files for example as function + assert() which gets disabled by the + NDEBUG symbol used during the final optimized + executable compilation. This project uses Gnome GLib messaging subsystem + offering sanity checks discarded by symbols + G_DISABLE_ASSERT and + G_DISABLE_CHECKS. + Microsoft also produces two versions of + its products – regular customers use the "free build" (also + called "retail") while the programmers should develop their code + on the "checked build" product releases.

+ +

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.

+ +

Microsoft Windows NT code is written in + a foolproof style as it accepts even invalid input values, and which + it usually corrects. This makes long-term debugging a pain as it hides + sources of problems. "Checked build" 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.

+ +

This project has strict consistency checks across all the code to make + the debugging phase easy enough. Failed sanity check is not always + a 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...

+ +

Last but not least – never miss a possible sanity check as its + later removal is in an order of magnitude cheaper than an uncaught + invalid assumption. Failed assertion is not always a bug although it + has to be fixed, of course.

+ + +

STATUS_LOG_FILE_FULL

+ +

After writing approx. 1MB of data on NTFS test partition NTFS driver + returns for any further write requests + STATUS_LOG_FILE_FULL error code. + Apparently it is caused by the fact this project is + @{[ a_href 'Details.html.pl#synchronous','single-threaded' ]} and it ignores the spawn + of parallel journalling thread during ntfs.sys + initialization.

+ +

Fortunately ntfs.sys will clear its + journalling log file during filesystem unmount. This project will therefore + remount the volume if STATUS_LOG_FILE_FULL + is detected to workaround missing journalling thread.

+ +

Similiar behaviour can be seen during write of compressed files — + the file gets written uncompressed and its compression will proceed only + during the final filesystem unmount.

+ +

For these reasons it was mandatory to support + @{[ a_href 'Details.html.pl#parent_connector','transparent volume remounting' ]}.

+ + +

ParentConnector volume remounter

+ +

The sandbox master component of this project has control of restarting + its sandbox slaves containing the W32 filesystem. Target goal of + ParentConnector component is to transparently + provide persistent view of files and directories over the sandboxed slaves + being restarted.

+ +

In the case of read-only operations it would be simple as we could only + save our state of currently opened filesystem objects with their read + file/directory offset. Write operations can be handled as the read-only + ones as long as all the operations are successful. In the case of W32 + filesystem crash we loose all the past write operations. If we would redo + all the write operations we could very easily invoke the same crash. + Therefore we write:

+ +
+

Filesystem crash broke dirty object: FILE/PATH/NAME

+
+ +

message to syslog and refuse any further operations with this + object.

+ + @{[ doc_img 'dia/parent-connector','Parent Connector' ]} + +

HANDLE represents W32 object open in + existing W32 filesystem.HANDLE is created + on-demand according to the saved state of the object (such as its + pathname). Even the whole VFS sandbox slave + is spawn on-demand if some object operation requests it.

+ +

W32 filesystem crash can obviously occur at any moment - it generates + @{[ a_href 'http://developer.gnome.org/doc/API/2.0/gobject/','GObject' ]} + @{[ a_href 'http://developer.gnome.org/doc/API/2.0/gobject/gobject-Signals.html','signal' ]} + abort. Successful filesystem unmount + (even as the part of remount operation) must be first preceded by + detach signal to close all existing + W32 HANDLEs. After their close the filesystem + gets the unmount requests. Only in the case all the close operations + succeeded including the final filesystem unmount the signal + cease can be activated to notify all the + dirty (written) objects they are now clean. During this + cease signal the project will also + @{[ a_href '#safe_flush','flush' ]} the sandbox commit buffer to its + underlying media.

+ +

Objects never written remain in clean + state and they can be transparently reopened even if W32 filesystem crash + occurs.

+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/Index.html.pl b/project/captive/doc/Index.html.pl new file mode 100755 index 0000000..3e7262f --- /dev/null +++ b/project/captive/doc/Index.html.pl @@ -0,0 +1,163 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Index page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation', + "rel_next"=>'About.html.pl', + "rel_up"=>top_dir("/project/captive/"), + ); + + +print <<"HERE"; + + +

Captive NTFS Developer Documentation

+ + + + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/LinuxNTFS.html.pl b/project/captive/doc/LinuxNTFS.html.pl new file mode 100755 index 0000000..7d2393d --- /dev/null +++ b/project/captive/doc/LinuxNTFS.html.pl @@ -0,0 +1,90 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc LinuxNTFS page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::LinuxNTFS; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: Captive vs. Linux-NTFS', + "rel_prev"=>'Related.html.pl', + ); + + +print <<"HERE"; + + +

Re: @{[ a_href 'http://linux-ntfs.sourceforge.net/info/ntfs.html#7.7', + "7.7 Can't we write a wrapper for Windows' driver?" ]}

+ +

> It sounds like a great idea, to start with, but there are numerous + problems.

+ +

> The largest technical problem is joining the Windows + system DLL to the Linux VFS. It could be done, but it wouldn't be pretty.
+ Yep. :-)

+ +

> 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.
+ @{[ a_href 'Details.html.pl#sandbox','Nope' ]}, + @{[ 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' ]}.

+ +

> The next major problem is compatibility. + 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.
+ 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.)

+ +

> And it gets worse. The legal implications of + distributing Windows systems files would cause problems.
+ User must be careful to obey all licensing restrictions according to his + local country laws.
+ > 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.
+ It does not apply to this project due to the implemented + @{[ a_href 'Details.html.pl#sandbox','filesystem separation' ]}.

+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/Macros.pm b/project/captive/doc/Macros.pm new file mode 100755 index 0000000..a30562e --- /dev/null +++ b/project/captive/doc/Macros.pm @@ -0,0 +1,139 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc macros. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Macros; +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; + +use Exporter; +our @EXPORT=qw( + &doc_img &productname &captive_srcfile + $freespeech $freebeer $Wine $ReactOS $LinuxNTFS $GnomeVFS $GnomeVFSmodule $gnulinux + ); +our @ISA=qw(Exporter); + +BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +Wrequire 'My::Project'; + + +sub init ($%) +{ +my($class,%args)=@_; + + %args=( + "rel_start"=>top_dir("/project/captive/"), + "rel_up"=>top_dir("/project/captive/doc/"), + %args); + My::Web->init( + "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; } +", + "WebConfig::heading_novskip"=>1, + %args, + ); + My::Web->heading(); + print My::Project->section("captive"); + $class->navigate(); +} + +sub footer ($) +{ +my($class)=@_; + + print vskip "2ex"; + project::captive::doc::Macros->navigate("footer"); + My::Web->footer(); +} + +sub navigate ($;$) +{ +my($class,$where)=@_; + + print ''."\n"; + print ''."\n" for (qw(10 20 40 20 10)); + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print '
'; + print img "/My/arrow-left" ,"Previous document","a_href"=>$My::Web::W->{"rel_prev"} + if $My::Web::W->{"rel_prev"}; + print ''; + print img "/My/arrow-up" ,"Parent","a_href"=>$My::Web::W->{"rel_up"} + if $My::Web::W->{"rel_up"} && !($where && $where eq "footer"); + print ''; + print img "/My/arrow-right","Next document","a_href"=>$My::Web::W->{"rel_next"} + if $My::Web::W->{"rel_next"}; + print '
'."\n"; +} + +sub doc_img ($$) +{ +my($img_base,$caption)=@_; + + my $r=""; + $r.=''."\n"; + $r.="\t\n"; + $r.="\t\n"; + $r.='
".img($img_base,$caption)."
$caption
'."\n"; + $r.=vskip "2ex"; + return $r; +} + +sub captive_srcfile ($;$) +{ +my($filename,$text)=@_; + + a_href 'http://cvs.jankratochvil.net/viewcvs/*checkout*/captive/'.$filename.'?rev=HEAD', + ($text || $filename); +} + +our $freespeech=a_href 'http://www.gnu.org/philosophy/free-sw.html','Free'; +our $freebeer=a_href 'http://www.gnu.org/philosophy/free-sw.html','free (as in beer)'; + +sub productname +{ +my($url,$name)=@_; + + return ''.a_href($url,CGI::escapeHTML($name)).''; +} +our $Wine=productname 'http://www.winehq.com/','Wine'; +our $ReactOS=productname 'http://www.reactos.com/','ReactOS'; +our $LinuxNTFS=productname 'http://linux-ntfs.sourceforge.net/','Linux NTFS'; +our $GnomeVFS=productname 'http://developer.gnome.org/doc/API/gnome-vfs/','Gnome-VFS'; +our $GnomeVFSmodule=productname 'http://developer.gnome.org/doc/API/gnome-vfs/modules.html','Gnome-VFS-module'; +our $gnulinux='GNU/Linux'; + + +1; diff --git a/project/kix/index.html.pl b/project/captive/doc/Makefile.am old mode 100755 new mode 100644 similarity index 64% rename from project/kix/index.html.pl rename to project/captive/doc/Makefile.am index c5de223..3b62801 --- a/project/kix/index.html.pl +++ b/project/captive/doc/Makefile.am @@ -1,7 +1,5 @@ -#! /usr/bin/perl -# # $Id$ -# Main page of 'My::Project::kix' +# automake source for the Makefile of project/captive/ documentation # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,19 +16,14 @@ # 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 project::kix::ListItem; +include $(top_srcdir)/Makefile-head.am +SUBDIRS= \ + fig \ + dia -My::Web->init_project( - "ListItem"=>\%My::Project::kix::ListItem, - ); +EXTRA_DIST+= \ + Index.html.pl -My::Web->footer(); +CLEANFILES+= \ + *.gif diff --git a/project/captive/doc/Related.html.pl b/project/captive/doc/Related.html.pl new file mode 100755 index 0000000..ada3a87 --- /dev/null +++ b/project/captive/doc/Related.html.pl @@ -0,0 +1,122 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Related Projects page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Related; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: Related Projects', + "rel_prev"=>'TODO.html.pl', + "rel_next"=>'LinuxNTFS.html.pl', + ); + + +print <<"HERE"; + + +

Related Projects

+ +

The usual solution for file exchange between $freespeech operating systems + and Microsoft Windows NT is to use + FAT32 (vfat + 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.

+ +

$LinuxNTFS

+ +

Although this project takes a completely different approach and has + a different architecture, the final goal is the same as for this + project – reliable read-write NTFS + filesystem support. $LinuxNTFS goes the way of reverse engineering + filesystem data structures (and possibly + ntfs.sys 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.

+ +

Using $LinuxNTFS for read-only access to existing partition with + Microsoft Windows NT installation is + implemented for successful acquire of ntfs.sys, + ntoskrnl.exe and possibly even + fastfat.sys and/or + cdfs.sys files from the user's + NTFS partition.

+ +

@{[ a_href 'http://www.cgsecurity.org/ntfs.html', + 'NTPwd NTFS Driver' ]}

+ +

DOS based @{[ a_href 'http://www.gnu.org/licenses/gpl.html','GPL-2.0' ]} + read-write NTFS driver. Filesystem structures are reverse engineered in the + way of @{[ a_href 'Related.html.pl#LinuxNTFScompet','Linux-NTFS Project' ]}. As it is not very + actively maintained it reaches a lower level of + NTFS compatibility.

+ +

@{[ a_href 'http://www.vmware.com/download/workstation.html','VMware Workstation' ]}

+ +

The only real competition: Closed-source read/write @{[ '$299' ]} equivalent.

+ +

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 VMware virtual network card.

+ +

You need @{[ '$299' ]} for this product and you need to + give up your system security by running un@{[ a_href 'Details.html.pl#sandbox','sandbox' ]}ed + closed-source program in your GNU/Linux.

+ +

@{[ a_href 'http://www.winehq.com/','Wine Project' ]}

+ +

No code could be shared – Wine emulates only Microsoft Windows userland. + Filesystem drivers completely belong to Microsoft Windows kernelland.

+ + @{[ a_href 'http://www.sysinternals.com/ntw2k/freeware/ntfswin98.shtml','NTFS for Windows 98' ]} + +

Closed-source read-only-crippled @{[ '$0' ]} equivalent for Microsoft Windows.

+ +

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 NTFS for + Windows 98 as the same company also sells the following product sharing + the same codebase:

+ +

@{[ a_href 'http://www.winternals.com/products/repairandrecovery/ntfsdospro.asp', + 'NTFSDOS Professional' ]}

+ +

Closed-source read/write @{[ '$299' ]} equivalent for MS-DOS.

+ +

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.

+ + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/Reverse.html.pl b/project/captive/doc/Reverse.html.pl new file mode 100755 index 0000000..d444c87 --- /dev/null +++ b/project/captive/doc/Reverse.html.pl @@ -0,0 +1,188 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc Reverse Engineering page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::Reverse; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: Reverse Engineering', + "rel_prev"=>'Components.html.pl', + "rel_next"=>'CacheManager.html.pl', + ); + + +print <<"HERE"; + + +

Reverse Engineering

+ +

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 + Microsoft Windows XP environment.

+ +

All the W32 filesystem drivers are running in the W32 kernel address + space and this area of W32 API is not much documented by + Microsoft. 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 + @{[ 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' ]} + documentation and also various other 3rd party documentation resources such as + @{[ a_href 'http://www.osr.com/ntinsider/1996/cacheman.htm', + 'The NT Cache Manager Description' ]}, + @{[ a_href 'http://www.winntmag.com/Articles/Print.cfm?ArticleID=3864', + 'Learn About NT'."'".'s File-system Cache' ]}, + @{[ a_href 'http://www.ntfsd.org/archive/', + 'NT File System Developers mailing list archives' ]} + including various + @{[ a_href 'http://www.google.com/search?q=site%3Amicrosoft.com','fulltext searches' ]} + through Internet from case to case.

+ +

Sometimes no sufficient documentation was found and some code behaviour + had to be reverse engineered directly from the binaries of + ntoskrnl.exe, + cdfs.sys, + fastfat.sys + and primarily + ntfs.sys. + Up to now the code was disassembled by + @{[ a_href 'http://www.simtel.net/pub/pd/29498.html','IDA Freeware' ]} + and by + dumpbin.exe of + Microsoft Visual Studio. + dumpbin.exe is fortunately able to + interpret debug symbols from W32 .PDB + (Program DataBase) debug information files.

+ +

dumpbin.exe

+ +

You should use the following options for + dumpbin.exe:

+ +
+

dumpbin.exe /all /rawdata:none /disasm /pdbpath:verbose FILENAME.SYS

+
+ +

You should see the following line in the output:

+ +
+

PDB file found at '.\\FILENAME.pdb'

+
+ +

WinDbg Windows NT kernel debugging

+ +

WinDbg is downloadable from: + @{[ a_href 'http://www.microsoft.com/whdc/ddk/debugging/installx86.mspx' ]}

+ +

This is (the only?) tool able to debug filesystem drivers incl. + ntfs.sys. You will need two computers running + Microsoft Windows — one computer will run + WinDbg while the other one will be + frozen in remote Windows NT kernel debug mode. It does not matter which + Microsoft Windows version will be run + on the WinDbg side. Your goal is to + successfuly connect WinDbg:

+ + @{[ doc_img 'ntdebug-ntfs','WinDbg Remote NT Kernel NTFS Debugging' ]} + +

The most easy way to setup two computers is to use commercial + @{[ a_href 'http://www.vmware.com/download/workstation.html','VMware Workstation' ]} + where you can run two virtual machines simultaneously on single PC + hardware and you can connect them by a virtual serial port provided by + VMware.

+ +

WinDbg side setup

+ + @{[ doc_img 'ntdebug-vmware-windbg', + 'VMware virtual serial port' + .' of WinDbg side' ]} + +

You should setup WinDbg according + to:

+ + @{[ doc_img 'ntdebug-windbg-port','Port settings of WinDbg' ]} + @{[ doc_img 'ntdebug-windbg-sym','Symbols files location of WinDbg' ]} + + Symbols should point to the directory where + reside files extracted from the symbol archive for your version of + Microsoft Windows. In the case of the + recommended Microsoft Windows XP Service Pack 1 Checked Build + you should use: + @{[ a_href 'http://msdl.microsoft.com/download/symbols/packages/windowsxp/xpsp1sym_x86_chk.exe' ]}

+ +
+

# Rename xpsp1sym_x86_chk.exe contents .pdb files for WinDbg
+ @{[ CGI::escapeHTML(q{for i in *.pdb*;do ext="`echo $i|sed 's/^.*\.pdb\.\(.*\)$/\1/'`";if [ "$i" = "$ext" ];then echo "BAD:$i";break;fi;base="`echo $i|sed 's/\(\.pdb\)\..*$/\1/'`";echo "md $ext";echo "move /-y $i $ext\\$base";done|sort -u|sed 's/$/'`echo -ne '\r'`'/g' >/tmp/rename.bat}) ]}

+
+ +

The resulting rename.bat for + xpsp1sym_x86_chk.exe can be found at: + @{[ a_href 'xpsp1sym_x86_chk-rename.bat.zip' ]}

+ +

The resulting directory should contain at least + sys\\ntfs.pdb + and + exe\\ntoskrnl.pdb.

+ +

Your successfuly connected target (after the steps described + below) should look like:

+ + @{[ doc_img 'ntdebug-windbg-boot','Successfuly connected WinDbg' ]} + +

Setup of the side being kernel-debugged

+ + @{[ doc_img 'ntdebug-vmware-xpdebug', + 'VMware virtual serial port' + .' of the side being kernel-debugged' ]} + +

You must use the following options in your + c:\\boot.init command-line:

+ +
+

/debug /debugport=COM1 /baudrate=115200

+
+ +

After booting this boot.ini-entry + should freeze at this point + (if no WinDbg is waiting in the other + virtual machine):

+ + @{[ doc_img 'ntdebug-wait','Side being kernel-debugged waiting for WinDbg' ]} + + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/TODO.html.pl b/project/captive/doc/TODO.html.pl new file mode 100755 index 0000000..8085863 --- /dev/null +++ b/project/captive/doc/TODO.html.pl @@ -0,0 +1,88 @@ +#! /usr/bin/perl +# +# $Id$ +# Captive project doc TODO page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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::TODO; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +BEGIN { Wuse 'project::captive::doc::Macros'; } + + +project::captive::doc::Macros->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>'Captive NTFS Developer Documentation: TODO', + "rel_prev"=>'CallType.html.pl', + "rel_next"=>'Related.html.pl', + ); + + +print <<"HERE"; + + +

TODO: Fsck of NTFS

+ +

Currently this project does not support checking of data structures + of NTFS volume as being provided by chkdsk.exe + in W32 environment and fsck in UNIX OS.

+ +

W32 has its disk checking functionality split to + untfs.dll W32 userland library. + according to + @{[ a_href 'http://www.sysinternals.com/ntw2k/source/fmifs.shtml', + 'Chkdskx and Formatx' ]} + by @{[ a_href 'http://www.sysinternals.com/aboutus.shtml', + 'Mark Russinovich' ]}. + +

I assume its execution falls completely + @{[ a_href 'Architecture.html.pl#existing_emulation','out of scope' ]} + of this project as it is W32 userland.

+ +

This possibility was not yet investigated in any way.

+ + +

TODO: NTFS Support for + @{[ a_href '/project/surprise/','Partition Surprise' ]}

+ +

Although there currently exists + @{[ a_href 'http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html','ntfsresize' ]} + I am not sure whether it is really reliable for all NTFS filesystems. + @{[ a_href '/project/surprise/','Partition Surprise' ]} + is the only partition manager capable of safely resize the disk + by using just the original W32 filesystem driver by full rebuild of + filesystem metadata. + Almost no file data blocks would be moved even on these generic filesystems + as W32 supports FSCTL_MOVE_FILE request + according to + @{[ a_href 'http://www.sysinternals.com/ntw2k/info/defrag.shtml', + 'Inside Windows NT Disk Defragmenting' ]} + by @{[ a_href 'http://www.sysinternals.com/aboutus.shtml', + 'Mark Russinovich' ]}. + + +HERE + + +project::captive::doc::Macros->footer(); diff --git a/project/captive/doc/arch-W32.png b/project/captive/doc/arch-W32.png new file mode 100644 index 0000000..d93bda7 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 index 0000000..5e1a261 Binary files /dev/null and b/project/captive/doc/arch-W32.sxd differ diff --git a/project/captive/doc/arch-captive.png b/project/captive/doc/arch-captive.png new file mode 100644 index 0000000..8642292 Binary files /dev/null and b/project/captive/doc/arch-captive.png differ diff --git a/project/captive/doc/arch-captive.sxd b/project/captive/doc/arch-captive.sxd new file mode 100644 index 0000000..f7fddb1 Binary files /dev/null and b/project/captive/doc/arch-captive.sxd differ diff --git a/project/captive/doc/captive-install-acquire-ask.png b/project/captive/doc/captive-install-acquire-ask.png new file mode 100644 index 0000000..e3af274 Binary files /dev/null and b/project/captive/doc/captive-install-acquire-ask.png differ diff --git a/project/kware/index.html.pl b/project/captive/doc/dia/Makefile.am old mode 100755 new mode 100644 similarity index 64% rename from project/kware/index.html.pl rename to project/captive/doc/dia/Makefile.am index c7598e3..9a285e8 --- a/project/kware/index.html.pl +++ b/project/captive/doc/dia/Makefile.am @@ -1,7 +1,5 @@ -#! /usr/bin/perl -# # $Id$ -# Main page of 'My::Project::kware' +# automake source for the Makefile of project/captive/ documentation .dia-s # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,19 +16,16 @@ # 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 project::kware::ListItem; +include $(top_srcdir)/Makefile-head.am +EXTRA_DIST+= \ + cache-manager.dia \ + inheritance.dia \ + parent-connector.dia -My::Web->init_project( - "ListItem"=>\%My::Project::kware::ListItem, - ); +CLEANFILES+= \ + *.dia~ -My::Web->footer(); +#CLEANFILES+= \ +# *.png \ +# *.gif diff --git a/project/captive/doc/dia/TraceFS.dia b/project/captive/doc/dia/TraceFS.dia new file mode 100644 index 0000000..977bb63 --- /dev/null +++ b/project/captive/doc/dia/TraceFS.dia @@ -0,0 +1,740 @@ + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Cache Manager# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #...# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ntoskrnl.exe# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #TraceFS.sys# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #fastfat.sys# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ntfs.sys# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #hooked# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #TraceFS Cache Manager hooking# + + + + + + + + + + + + + + + + + + + + + diff --git a/project/captive/doc/dia/TraceFS.gif b/project/captive/doc/dia/TraceFS.gif new file mode 100644 index 0000000..bd90bcc Binary files /dev/null and b/project/captive/doc/dia/TraceFS.gif differ diff --git a/project/captive/doc/dia/TraceFS.png b/project/captive/doc/dia/TraceFS.png new file mode 100644 index 0000000..dbed736 Binary files /dev/null and b/project/captive/doc/dia/TraceFS.png differ diff --git a/project/captive/doc/dia/arch-all.dia b/project/captive/doc/dia/arch-all.dia new file mode 100644 index 0000000..a4a17ca --- /dev/null +++ b/project/captive/doc/dia/arch-all.dia @@ -0,0 +1,3968 @@ + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #cdfs.sys# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #fastfat.sys# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ext2fsd.sys# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[GIOChannel]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[CORBA/ORBit]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[GIOChannel]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[GIOChannel]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive +r/w-over-r/o buffer +[giochannel-blind]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #--ro/--rw# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #--blind# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[GIOChannel]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ntfs.sys# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive +storage/cdrom# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive +giognomevfs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[GnomeVFSHandle]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GnomeVFS# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive-bug-replay +[giochannel-blind]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[xmlTextReader]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[W32 block IRP]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[W32 block IRP]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[W32 fs IRP]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[W32 kernel API]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[libcaptive client API]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[CORBA/ORBit]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[libcaptive client API]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[libcaptive client API]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #libcaptive-gnomevfs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GnomeVFS# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GnomeVFS/test-shell# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive-cmdline +[custom client]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #--cdrom# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #--disk# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #.captivebug.xml.gz +[file]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #.captivebug.xml.gz +[file]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #[CORBA/ORBit]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #W32 +DbgPrint()# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #liblufs-captivefs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive +sandbox master# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #libcaptive/client# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #libcaptive# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive +storage/disk# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #captive +sandbox commit buffer +[giochannel-blind]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #lufsd +fsctl thread# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #lufsd +slot thread# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #user application# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Linux kernel# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #lufs +Linux kernel driver# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #syslog# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GLib +GIOUnixChannel# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #partition device +[file]# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ntoskrnl.exe# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #halcaptive# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ReactOS# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Sandboxed +Slave# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #opt. reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #N:1 reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/project/captive/doc/dia/arch-all.gif b/project/captive/doc/dia/arch-all.gif new file mode 100644 index 0000000..f8408ad Binary files /dev/null and b/project/captive/doc/dia/arch-all.gif differ diff --git a/project/captive/doc/dia/arch-all.png b/project/captive/doc/dia/arch-all.png new file mode 100644 index 0000000..74c2af2 Binary files /dev/null and b/project/captive/doc/dia/arch-all.png differ diff --git a/project/captive/doc/dia/cache-manager.dia b/project/captive/doc/dia/cache-manager.dia new file mode 100644 index 0000000..3efa82d --- /dev/null +++ b/project/captive/doc/dia/cache-manager.dia @@ -0,0 +1,1455 @@ + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #NT Cache Manager# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #page# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #dirty +dirty: <LSNoldest .. LSNnewest># + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #opt. reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #N:1 reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #W32 FileObject# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #W32 FCB# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #SharedCacheMap# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #pages: +start .. end# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Map BCB# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Pin BCB# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #page: +start + x# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Pin BCB# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #page: +start + y# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Pin BCB# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ThreadId owned +page: +start + x# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Pin BCB# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ThreadId owned +page: +start + x# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #clean# + + + + + + + + + + + + + + + + + + + + + diff --git a/project/captive/doc/dia/cache-manager.gif b/project/captive/doc/dia/cache-manager.gif new file mode 100644 index 0000000..c9ae2c6 Binary files /dev/null and b/project/captive/doc/dia/cache-manager.gif differ diff --git a/project/captive/doc/dia/cache-manager.png b/project/captive/doc/dia/cache-manager.png new file mode 100644 index 0000000..fc5c3f8 Binary files /dev/null and b/project/captive/doc/dia/cache-manager.png differ diff --git a/project/captive/doc/dia/inheritance.dia b/project/captive/doc/dia/inheritance.dia new file mode 100644 index 0000000..93ecf40 --- /dev/null +++ b/project/captive/doc/dia/inheritance.dia @@ -0,0 +1,2595 @@ + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Sandboxing/Inheritance# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Sandbox parent# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Sandboxed slave# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GObject# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GObject# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Vfs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ParentConnector# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #VfsParent# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Vfs stub# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CORBA# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Vfs servant# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CORBA# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GObject# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GObject# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Vfs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #VfsSlave# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GTypeInterface# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #DirectoryParent# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Directory# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Directory stub# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CORBA# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Directory servant# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #CORBA# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #DirectorySlave# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #Directory# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #opt. reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #N:1 reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #reference:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #inheritance:# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #W32 FileObject# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #W32 FCB# + + + + + + + + + + + + + + + + + + + + + + diff --git a/project/captive/doc/dia/inheritance.gif b/project/captive/doc/dia/inheritance.gif new file mode 100644 index 0000000..c34de03 Binary files /dev/null and b/project/captive/doc/dia/inheritance.gif differ diff --git a/project/captive/doc/dia/inheritance.png b/project/captive/doc/dia/inheritance.png new file mode 100644 index 0000000..4ac30b6 Binary files /dev/null and b/project/captive/doc/dia/inheritance.png differ diff --git a/project/captive/doc/dia/parent-connector.dia b/project/captive/doc/dia/parent-connector.dia new file mode 100644 index 0000000..625c305 --- /dev/null +++ b/project/captive/doc/dia/parent-connector.dia @@ -0,0 +1,1159 @@ + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #disconnected# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #broken# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #closed +clean# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #closed +dirty # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #opened +clean# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #opened +dirty# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #no VFS# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #VFS exists# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # cease# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #cease +abort # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #abort # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #abort # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #abort # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #detach # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #detach# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #write op.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #read op. +write op.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #read op. +write op.# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #shutdown: <detach> [unmount OK] <cease> +shutdown: <detach> [crash] <abort> +unsolicited: [crash] <abort> # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #ParentConnector interface +state machine# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #no HANDLE# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #HANDLE +exists# + + + + + + + + + + + + + + + + + + + + + diff --git a/project/captive/doc/dia/parent-connector.gif b/project/captive/doc/dia/parent-connector.gif new file mode 100644 index 0000000..337e430 Binary files /dev/null and b/project/captive/doc/dia/parent-connector.gif differ diff --git a/project/captive/doc/dia/parent-connector.png b/project/captive/doc/dia/parent-connector.png new file mode 100644 index 0000000..57356f2 Binary files /dev/null and b/project/captive/doc/dia/parent-connector.png differ diff --git a/project/cvsutil/index.html.pl b/project/captive/doc/fig/Makefile.am old mode 100755 new mode 100644 similarity index 60% rename from project/cvsutil/index.html.pl rename to project/captive/doc/fig/Makefile.am index f77cf06..b881b7f --- a/project/cvsutil/index.html.pl +++ b/project/captive/doc/fig/Makefile.am @@ -1,7 +1,5 @@ -#! /usr/bin/perl -# # $Id$ -# Main page of 'My::Project::cvsutil' +# automake source for the Makefile of project/captive/ documentation .fig-s # Copyright (C) 2003 Jan Kratochvil # # This program is free software; you can redistribute it and/or modify @@ -18,19 +16,20 @@ # 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 project::cvsutil::ListItem; - +include $(top_srcdir)/Makefile-head.am -My::Web->init_project( - "ListItem"=>\%My::Project::cvsutil::ListItem, - ); +EXTRA_DIST+= \ + 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 -My::Web->footer(); +CLEANFILES+= \ + *.png \ + *.gif diff --git a/project/captive/doc/fig/calltype_cdecl.fig b/project/captive/doc/fig/calltype_cdecl.fig new file mode 100644 index 0000000..dd0429b --- /dev/null +++ b/project/captive/doc/fig/calltype_cdecl.fig @@ -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 index 0000000..2a6fd0f --- /dev/null +++ b/project/captive/doc/fig/calltype_fastcall.fig @@ -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 index 0000000..a7fb9e2 --- /dev/null +++ b/project/captive/doc/fig/calltype_stdcall.fig @@ -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 index 0000000..4a2934a --- /dev/null +++ b/project/captive/doc/fig/functype_native_fromunix.fig @@ -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 index 0000000..82a7618 --- /dev/null +++ b/project/captive/doc/fig/functype_patched_native_fromw32.fig @@ -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 index 0000000..6d4c9c8 --- /dev/null +++ b/project/captive/doc/fig/functype_patched_pass_fromunix.fig @@ -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 index 0000000..71103f5 --- /dev/null +++ b/project/captive/doc/fig/functype_patched_pass_fromw32.fig @@ -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 index 0000000..4367e4f --- /dev/null +++ b/project/captive/doc/fig/functype_patched_wrap_fromunix.fig @@ -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 index 0000000..1493046 --- /dev/null +++ b/project/captive/doc/fig/functype_patched_wrap_fromw32.fig @@ -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 index 0000000..d9b6c7d --- /dev/null +++ b/project/captive/doc/fig/functype_unpatched_native_fromw32.fig @@ -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/ntdebug-ntfs.png b/project/captive/doc/ntdebug-ntfs.png new file mode 100644 index 0000000..e1ed114 Binary files /dev/null and b/project/captive/doc/ntdebug-ntfs.png differ diff --git a/project/captive/doc/ntdebug-vmware-windbg.png b/project/captive/doc/ntdebug-vmware-windbg.png new file mode 100644 index 0000000..abc4ba9 Binary files /dev/null and b/project/captive/doc/ntdebug-vmware-windbg.png differ diff --git a/project/captive/doc/ntdebug-vmware-xpdebug.png b/project/captive/doc/ntdebug-vmware-xpdebug.png new file mode 100644 index 0000000..fda7d4f Binary files /dev/null and b/project/captive/doc/ntdebug-vmware-xpdebug.png differ diff --git a/project/captive/doc/ntdebug-wait.png b/project/captive/doc/ntdebug-wait.png new file mode 100644 index 0000000..06a5888 Binary files /dev/null and b/project/captive/doc/ntdebug-wait.png differ diff --git a/project/captive/doc/ntdebug-windbg-boot.png b/project/captive/doc/ntdebug-windbg-boot.png new file mode 100644 index 0000000..e434c80 Binary files /dev/null and b/project/captive/doc/ntdebug-windbg-boot.png differ diff --git a/project/captive/doc/ntdebug-windbg-port.png b/project/captive/doc/ntdebug-windbg-port.png new file mode 100644 index 0000000..cf72fc3 Binary files /dev/null and b/project/captive/doc/ntdebug-windbg-port.png differ diff --git a/project/captive/doc/ntdebug-windbg-sym.png b/project/captive/doc/ntdebug-windbg-sym.png new file mode 100644 index 0000000..380e3c2 Binary files /dev/null and b/project/captive/doc/ntdebug-windbg-sym.png differ diff --git a/project/captive/doc/ratio.png b/project/captive/doc/ratio.png new file mode 100644 index 0000000..63fa8a6 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 index 0000000..c11280f Binary files /dev/null and b/project/captive/doc/ratio.sxi differ diff --git a/project/captive/doc/xpsp1sym_x86_chk-rename.bat.zip b/project/captive/doc/xpsp1sym_x86_chk-rename.bat.zip new file mode 100644 index 0000000..3f2ed57 Binary files /dev/null and b/project/captive/doc/xpsp1sym_x86_chk-rename.bat.zip differ diff --git a/project/captive/man/captive-cmdline.pod.html b/project/captive/man/captive-cmdline.pod.html new file mode 100644 index 0000000..d33914d --- /dev/null +++ b/project/captive/man/captive-cmdline.pod.html @@ -0,0 +1,199 @@ + + + +captive-cmdline - Command-line client for B<captive> NTFS disk access + + + + + +

+ + + + + +
+

+

+

NAME

+

captive-cmdline - Command-line client for captive(7) NTFS disk access

+

+

+
+

SYNOPSIS

+

+

+
+

DESCRIPTION

+

Simple ftp(1)-like client to access disks by Microsoft Windows drivers. +Use if lufs-captivefs(7) not available; also useful during debugging.

+

+

+
+

OPTIONS

+

All programs using captive(7) library share the common set of configuration +options:

+
+
--filesystem=pathname
+
+
+Pathname to .sys or .so filesystem module file. You will use exactly +once this option. Possible choices are +/usr/local/var/lib/captive/ntfs.sys +etc. +
+

+
--load-module=pathname
+
+
+Pathname to any W32 module to load w/o initialization. Multiple modules can be +loaded although in common case you will use just +/usr/local/var/lib/captive/ntoskrnl.exe +here. +
+

+
--ro
+
+
+Read/write mode: Any write access will be forbidden. You should set this mode +for cdfs.sys (CD-ROM filesystem). This option is mutually exclusive with +--blind and --rw. +
+

+
--blind
+
+
+Read/write mode: All writes are just simulated in memory (default). Microsoft +Windows filesystem driver will see no difference between --blind and --rw +although the UNIX image file/device will be open read/only as for --ro. +All the changes get 'written' as long as captive(7) program runs - all the +changes will be lost afterwards. This mode is the most suitable for debugging. +This option is mutually exclusive with --ro and --rw. +
+

+
--rw
+
+
+Read/write mode: Write directly to the image file/device. Standard read/write +disk mode. You should use --sandbox-server option in this case to have the +disk protected against Microsoft Windows filesystem driver crashes. Modified +disk image blocks are in --sandbox-server --rw mode buffered in the +memory and they get reflected to the disk only after successful completion +of all filesystem operations including filesystem unmount. +This option is mutually exclusive with --ro and --blind. +
+

+
--cdrom
+
+
+Media type: CD-ROM. You must set this media type for cdfs.sys. +Virtual Microsoft Windows block device driver used by Captive maps to +\Device\CdRom0. This option is mutually exclusive with --disk. +
+

+
--disk
+
+
+Media type: Disk (default). You must set this media type for all the Microsoft +Windows filesystem drivers except cdfs.sys. Virtual Microsoft Windows block +device driver used by Captive maps to \Device\CaptiveHarddisk0. +This option is mutually exclusive with --cdrom. +
+

+
--debug-messages
+
+
+Turn on debugging messages. Be prepared for substation debug output. +Use of --syslog feature is not recommended in this case. +
+

+
--sandbox-server=pathname
+
+
+Pathname to +/usr/local/sbin/captive-sandbox-server +program, turns on sandboxing. +You should always use this option in conjunction with --rw, see it for +details. Although this program is setuid root and it drops it privileges +to @CAPTIVE_SANDBOX_SETUID@ user. Your system gets protected by +chroot(2), setuid(2), setgid(2) and setrlimit(2) UNIX security +features against malicious Microsoft Windows drivers. You should never use this +option during debugging. +
+

+
--sandbox-server-ior=IOR
+
+
+Specify CORBA IOR of +/usr/local/sbin/captive-sandbox-server +program, turns on +sandboxing. Specified CORBA IOR should be the string starting by ``IOR:'' +text. This option is useful only for debugging. No sandbox restarting is +possible in this case. +
+

+
--no-sandbox
+
+
+Turn off sandboxing feature (default). No +/usr/local/sbin/captive-sandbox-server +is run. Microsoft Windows filesystem driver is run in native UNIX environment +without any CORBA separation. This option is recommended only for debugging. +It is dangerous to use --rw together, see its description for the details. +
+

+
--bug-pathname=pathname
+
+
+Pathname to strftime(3) for .captivebug.xml.gz bugreports. Every crash of +sandbox child gets bugreported to the specified file. You should attempt to +minimize the number of operations from the mount operation till the expected +crash to minimize the snapshot file size. --sandbox-server option is +required for --bug-pathname. +
+
+

!!! Be aware '.captivebug.xml.gz' will contain data from your disk drive !!!

+
+

+
--syslog
+
+
+Messages sent to syslog(3) instead of stderr. This option gets handy +for mount(8) operation as the messages would be lost otherway. +Watch our for possible ``Filesystem crash broke dirty object'' messages where +some written filesystem data got lost in the case of Microsoft Windows +filesystem driver crash. +
+

+
--syslog-facility=facility
+
+
+openlog(3) facility for --syslog. See facility section of +openlog(3) man page for details. Lowercased values such as daemon or +user are supported. +
+

+

+

+
+

SEE ALSO

+

captive(7), lufs-captivefs(7)

+

+

+
+

AUTHOR

+

Jan Kratochvil <project-captive@jankratochvil.net>, +
http://www.jankratochvil.net/

+ + + + diff --git a/project/captive/man/captive-install-acquire.pod.html b/project/captive/man/captive-install-acquire.pod.html new file mode 100644 index 0000000..4776636 --- /dev/null +++ b/project/captive/man/captive-install-acquire.pod.html @@ -0,0 +1,147 @@ + + + +captive-install-acquire - Find MS Windows XP driver files for B<NTFS> + + + + + +

+ + + + + +
+

+

+

NAME

+

captive-install-acquire - Find MS Windows XP driver files for NTFS

+

+

+
+

SYNOPSIS

+

+

+
+

DESCRIPTION

+

Program acquires the needed Microsoft Windows XP driver files. Multiple +methods of getting the driver files are supported. All the driver files are +stored to the directory +/usr/local/var/lib/captive/ +where they are +expected by mount.captive(8).

+

+

+
+

OPTIONS

+

Program will run interactively if no action options (--scan-disks, +--scan-disks-quick, --scan-path or --microsoft-com) are specified. +Otherwise the requested action(s) is proceeded in silent batch mode.

+
+
--text
+
+
+Disable Gnome user interface even if X Window System is available. +You must specify this option as the first one. This option has effect only for +interactive mode (no action options specified). +
+

+
-v|--verbose
+
+
+Display additional information during disks scanning. +
+

+
-n|--dry
+
+
+Perform all the operations but do not modify anything (no drivers are +stored to +/usr/local/var/lib/captive/ +directory). +
+

+
--modid-path=path
+
+
+Path to .captivemodid.xml database (default: +/usr/local/etc/w32-mod-id.captivemodid.xml). This file contains +identifications (md5sum(1)) of known compatible Microsoft Windows XP +driver files. captive-install-acquire(1) will ignore any files not +identified by this file although you may try to copy them to +/usr/local/var/lib/captive/ +manually for captive(7) clients. +
+

+
--scan-disks
+
+
+Scan all files on any local hard drive (mounted or unmounted) NTFS or +(mounted) FAT partitions. This scanning includes cabinet (.cab) +archives. This scanning can last for very long time. +
+

+
--scan-disks-quick
+
+
+Reduced version of --scan-disks. Only windows/system32 subdirectory in +the root of any local hard drive (mounted or unmounted) NTFS or (mounted) +FAT partition is investigated. This scan should find existing driver files +in already existing Microsoft Windows XP installations. +
+

+
--scan-path=path/URI
+
+
+Scan the specified path/URI for device driver files. You may use either +filename (/tmp/ntoskrnl.ex_), directory (/tmp/servicepack.cab), NTFS +disk file/directory (file:///dev/hda1#libntfs:/windows/system32) or remote +URI filename (http://server/path/to/ntfs.sys). Remote URI directory +(such as http://server/subdir/) is not supported. +
+
+

Possibly specified directory is always scanned recursively.

+
+

+
--microsoft-com
+
+
+You can download the best available version of needed drivers from +Microsoft. They can be found in Microsoft Windows XP Service Pack 1 +Checked Build (URL +http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/checkedbuild.asp) +
+
+

Legal: In some countries you need to have valid Microsoft Windows XP license +to use it.

+
+
+

Program will need to download approx 29MB of data (the cabinet file is 151MB; +1MB=1e6B here).

+
+

+

+

+
+

SEE ALSO

+

captive-install-fstab(1), captive(7), lufs-captivefs(7)

+

+

+
+

AUTHOR

+

Jan Kratochvil <project-captive@jankratochvil.net>, +
http://www.jankratochvil.net/

+ + + + diff --git a/project/captive/man/captive-install-fstab.pod.html b/project/captive/man/captive-install-fstab.pod.html new file mode 100644 index 0000000..2bec451 --- /dev/null +++ b/project/captive/man/captive-install-fstab.pod.html @@ -0,0 +1,91 @@ + + + +captive-install-fstab - Manage B<captive-ntfs> B</etc/fstab> entries + + + + + +

+ + + + + +
+

+

+

NAME

+

captive-install-fstab - Manage captive-ntfs /etc/fstab entries

+

+

+
+

SYNOPSIS

+

+

+
+

DESCRIPTION

+

Program will scan your local disk drive partitions (from /proc/partitions) +and it will add/remove appropriate file-system type captive-ntfs entries +in /etc/fstab.

+

Destination directory is chosen automatically as /mnt/captive-LABEL_NAME +where LABEL_NAME is the label used for the NTFS partition. Directory +/mnt/captive- may be used if no volume label is set. Different (numbered) +directory name is used if multiple disks have the same volume label set.

+

+

+
+

OPTIONS

+
+
-v|--verbose
+
+
+Display additional information during disks scanning. +
+

+
-n|--dry
+
+
+Perform all the operations but do not modify anything (file /etc/fstab). +You will probably use this option together with [-v|--verbose]. +
+

+
--add
+
+
+Add all the found NTFS disk drive partitions to /etc/fstab. +Any previous captive-ntfs entries will be deleted as described in +--remove option. +
+

+
--remove
+
+
+Remove all lines of filesystem type captive-ntfs and device name in +/dev directory. +
+

+

+

+
+

SEE ALSO

+

captive-install-acquire(1), captive(7), lufs-captivefs(7)

+

+

+
+

AUTHOR

+

Jan Kratochvil <project-captive@jankratochvil.net>, +
http://www.jankratochvil.net/

+ + + + diff --git a/project/captive/man/captive-sandbox-server.pod.html b/project/captive/man/captive-sandbox-server.pod.html new file mode 100644 index 0000000..0dfc4c4 --- /dev/null +++ b/project/captive/man/captive-sandbox-server.pod.html @@ -0,0 +1,64 @@ + + + +captive-sandbox-server - Security+safety wrapper for NTFS disk access + + + + + +

+ + + + + +
+

+

+

NAME

+

captive-sandbox-server - Security+safety wrapper for NTFS disk access

+

+

+
+

SYNOPSIS

+

captive-sandbox-server

+

+

+
+

DESCRIPTION

+

Program implementing separation of emulated Microsoft Windows NT kernel +environment from the rest of UNIX system. Your system gets protected by +chroot(2), setuid(2), setgid(2) and setrlimit(2) UNIX security +features against malicious Microsoft Windows drivers.

+

Use this program as argument of --sandbox-server option of captive(7). +Do not use this option/program during captive(7) debugging.

+

+

+
+

OPTIONS

+

No options are permitted for this command - it will display its CORBA/ORBit +connection properties on its standard output.

+

+

+
+

SEE ALSO

+

captive(7), captive-cmdline(1), lufs-captivefs(7)

+

+

+
+

AUTHOR

+

Jan Kratochvil <project-captive@jankratochvil.net>, +
http://www.jankratochvil.net/

+ + + + diff --git a/project/captive/man/captive.pod.html b/project/captive/man/captive.pod.html new file mode 100644 index 0000000..4ecb3b0 --- /dev/null +++ b/project/captive/man/captive.pod.html @@ -0,0 +1,198 @@ + + + +captive - Microsoft Windows NT kernel emulation for NTFS disk access + + + + + +

+ + + + + +
+

+

+

NAME

+

captive - Microsoft Windows NT kernel emulation for NTFS disk access

+

+

+
+

DESCRIPTION

+

captive(7) library 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.

+

This man page captive(7) show the common options of all captive +clients. You will always use a specific client such as +mount.captive(8) or captive-cmdline(1).

+

+

+
+

OPTIONS

+

All programs using captive(7) library share the common set of configuration +options:

+
+
--filesystem=pathname
+
+
+Pathname to .sys or .so filesystem module file. You will use exactly +once this option. Possible choices are +/usr/local/var/lib/captive/ntfs.sys +etc. +
+

+
--load-module=pathname
+
+
+Pathname to any W32 module to load w/o initialization. Multiple modules can be +loaded although in common case you will use just +/usr/local/var/lib/captive/ntoskrnl.exe +here. +
+

+
--ro
+
+
+Read/write mode: Any write access will be forbidden. You should set this mode +for cdfs.sys (CD-ROM filesystem). This option is mutually exclusive with +--blind and --rw. +
+

+
--blind
+
+
+Read/write mode: All writes are just simulated in memory (default). Microsoft +Windows filesystem driver will see no difference between --blind and --rw +although the UNIX image file/device will be open read/only as for --ro. +All the changes get 'written' as long as captive(7) program runs - all the +changes will be lost afterwards. This mode is the most suitable for debugging. +This option is mutually exclusive with --ro and --rw. +
+

+
--rw
+
+
+Read/write mode: Write directly to the image file/device. Standard read/write +disk mode. You should use --sandbox-server option in this case to have the +disk protected against Microsoft Windows filesystem driver crashes. Modified +disk image blocks are in --sandbox-server --rw mode buffered in the +memory and they get reflected to the disk only after successful completion +of all filesystem operations including filesystem unmount. +This option is mutually exclusive with --ro and --blind. +
+

+
--cdrom
+
+
+Media type: CD-ROM. You must set this media type for cdfs.sys. +Virtual Microsoft Windows block device driver used by Captive maps to +\Device\CdRom0. This option is mutually exclusive with --disk. +
+

+
--disk
+
+
+Media type: Disk (default). You must set this media type for all the Microsoft +Windows filesystem drivers except cdfs.sys. Virtual Microsoft Windows block +device driver used by Captive maps to \Device\CaptiveHarddisk0. +This option is mutually exclusive with --cdrom. +
+

+
--debug-messages
+
+
+Turn on debugging messages. Be prepared for substation debug output. +Use of --syslog feature is not recommended in this case. +
+

+
--sandbox-server=pathname
+
+
+Pathname to +/usr/local/sbin/captive-sandbox-server +program, turns on sandboxing. +You should always use this option in conjunction with --rw, see it for +details. Although this program is setuid root and it drops it privileges +to @CAPTIVE_SANDBOX_SETUID@ user. Your system gets protected by +chroot(2), setuid(2), setgid(2) and setrlimit(2) UNIX security +features against malicious Microsoft Windows drivers. You should never use this +option during debugging. +
+

+
--sandbox-server-ior=IOR
+
+
+Specify CORBA IOR of +/usr/local/sbin/captive-sandbox-server +program, turns on +sandboxing. Specified CORBA IOR should be the string starting by ``IOR:'' +text. This option is useful only for debugging. No sandbox restarting is +possible in this case. +
+

+
--no-sandbox
+
+
+Turn off sandboxing feature (default). No +/usr/local/sbin/captive-sandbox-server +is run. Microsoft Windows filesystem driver is run in native UNIX environment +without any CORBA separation. This option is recommended only for debugging. +It is dangerous to use --rw together, see its description for the details. +
+

+
--bug-pathname=pathname
+
+
+Pathname to strftime(3) for .captivebug.xml.gz bugreports. Every crash of +sandbox child gets bugreported to the specified file. You should attempt to +minimize the number of operations from the mount operation till the expected +crash to minimize the snapshot file size. --sandbox-server option is +required for --bug-pathname. +
+
+

!!! Be aware '.captivebug.xml.gz' will contain data from your disk drive !!!

+
+

+
--syslog
+
+
+Messages sent to syslog(3) instead of stderr. This option gets handy +for mount(8) operation as the messages would be lost otherway. +Watch our for possible ``Filesystem crash broke dirty object'' messages where +some written filesystem data got lost in the case of Microsoft Windows +filesystem driver crash. +
+

+
--syslog-facility=facility
+
+
+openlog(3) facility for --syslog. See facility section of +openlog(3) man page for details. Lowercased values such as daemon or +user are supported. +
+

+

+

+
+

SEE ALSO

+

mount.captive(8), captive-cmdline(1), captive-install-acquire(1)

+

+

+
+

AUTHOR

+

Jan Kratochvil <project-captive@jankratochvil.net>, +
http://www.jankratochvil.net/

+ + + + diff --git a/project/captive/man/lufs-captivefs.pod.html b/project/captive/man/lufs-captivefs.pod.html new file mode 100644 index 0000000..78d21bf --- /dev/null +++ b/project/captive/man/lufs-captivefs.pod.html @@ -0,0 +1,199 @@ + + + +lufs-captivefs - Linux Userland File System module for NTFS as filesystem + + + + + +

+ + + + + +
+

+

+

NAME

+

lufs-captivefs - Linux Userland File System module for NTFS as filesystem

+

+

+
+

DESCRIPTION

+

lufs-captivefs(7) module for Linux Userland File System (LUFS) enables +GNU/Linux system to access NTFS drives by Microsoft Windows drivers in +the most common way of kernel-level filesystem implementation.

+

{-c CHAN|--channels=CHAN} option of lufsmount(1) is respected +although the final filesystem operations are always processed in single-channel +mode. Do not set CHAN to 1 as it would invoke errors by LUFS kernel +driver.

+

+

+
+

OPTIONS

+

All programs using captive(7) library share the common set of configuration +options:

+
+
--filesystem=pathname
+
+
+Pathname to .sys or .so filesystem module file. You will use exactly +once this option. Possible choices are +/usr/local/var/lib/captive/ntfs.sys +etc. +
+

+
--load-module=pathname
+
+
+Pathname to any W32 module to load w/o initialization. Multiple modules can be +loaded although in common case you will use just +/usr/local/var/lib/captive/ntoskrnl.exe +here. +
+

+
--ro
+
+
+Read/write mode: Any write access will be forbidden. You should set this mode +for cdfs.sys (CD-ROM filesystem). This option is mutually exclusive with +--blind and --rw. +
+

+
--blind
+
+
+Read/write mode: All writes are just simulated in memory (default). Microsoft +Windows filesystem driver will see no difference between --blind and --rw +although the UNIX image file/device will be open read/only as for --ro. +All the changes get 'written' as long as captive(7) program runs - all the +changes will be lost afterwards. This mode is the most suitable for debugging. +This option is mutually exclusive with --ro and --rw. +
+

+
--rw
+
+
+Read/write mode: Write directly to the image file/device. Standard read/write +disk mode. You should use --sandbox-server option in this case to have the +disk protected against Microsoft Windows filesystem driver crashes. Modified +disk image blocks are in --sandbox-server --rw mode buffered in the +memory and they get reflected to the disk only after successful completion +of all filesystem operations including filesystem unmount. +This option is mutually exclusive with --ro and --blind. +
+

+
--cdrom
+
+
+Media type: CD-ROM. You must set this media type for cdfs.sys. +Virtual Microsoft Windows block device driver used by Captive maps to +\Device\CdRom0. This option is mutually exclusive with --disk. +
+

+
--disk
+
+
+Media type: Disk (default). You must set this media type for all the Microsoft +Windows filesystem drivers except cdfs.sys. Virtual Microsoft Windows block +device driver used by Captive maps to \Device\CaptiveHarddisk0. +This option is mutually exclusive with --cdrom. +
+

+
--debug-messages
+
+
+Turn on debugging messages. Be prepared for substation debug output. +Use of --syslog feature is not recommended in this case. +
+

+
--sandbox-server=pathname
+
+
+Pathname to +/usr/local/sbin/captive-sandbox-server +program, turns on sandboxing. +You should always use this option in conjunction with --rw, see it for +details. Although this program is setuid root and it drops it privileges +to @CAPTIVE_SANDBOX_SETUID@ user. Your system gets protected by +chroot(2), setuid(2), setgid(2) and setrlimit(2) UNIX security +features against malicious Microsoft Windows drivers. You should never use this +option during debugging. +
+

+
--sandbox-server-ior=IOR
+
+
+Specify CORBA IOR of +/usr/local/sbin/captive-sandbox-server +program, turns on +sandboxing. Specified CORBA IOR should be the string starting by ``IOR:'' +text. This option is useful only for debugging. No sandbox restarting is +possible in this case. +
+

+
--no-sandbox
+
+
+Turn off sandboxing feature (default). No +/usr/local/sbin/captive-sandbox-server +is run. Microsoft Windows filesystem driver is run in native UNIX environment +without any CORBA separation. This option is recommended only for debugging. +It is dangerous to use --rw together, see its description for the details. +
+

+
--bug-pathname=pathname
+
+
+Pathname to strftime(3) for .captivebug.xml.gz bugreports. Every crash of +sandbox child gets bugreported to the specified file. You should attempt to +minimize the number of operations from the mount operation till the expected +crash to minimize the snapshot file size. --sandbox-server option is +required for --bug-pathname. +
+
+

!!! Be aware '.captivebug.xml.gz' will contain data from your disk drive !!!

+
+

+
--syslog
+
+
+Messages sent to syslog(3) instead of stderr. This option gets handy +for mount(8) operation as the messages would be lost otherway. +Watch our for possible ``Filesystem crash broke dirty object'' messages where +some written filesystem data got lost in the case of Microsoft Windows +filesystem driver crash. +
+

+
--syslog-facility=facility
+
+
+openlog(3) facility for --syslog. See facility section of +openlog(3) man page for details. Lowercased values such as daemon or +user are supported. +
+

+

+

+
+

SEE ALSO

+

mount.captive(8), lufsmount(1), captive(7)

+

+

+
+

AUTHOR

+

Jan Kratochvil <project-captive@jankratochvil.net>, +
http://www.jankratochvil.net/

+ + + + diff --git a/project/captive/man/mount.captive.pod.html b/project/captive/man/mount.captive.pod.html new file mode 100644 index 0000000..79691ac --- /dev/null +++ b/project/captive/man/mount.captive.pod.html @@ -0,0 +1,106 @@ + + + +mount.captive - B<mount> interface for NTFS disk access + + + + + +

+ + + + + +
+

+

+

NAME

+

mount.captive - mount(8) interface for NTFS disk access

+

+

+
+

SYNOPSIS

+

mount.ntfs {image-file|device} mountdir +[-n] [-v] [-o options]

+

mount -t captive-ntfs +[-n] [-v] [-o options] +{image-file|device} dir

+

+

+
+

DESCRIPTION

+

mount.captive(8) provides mount(8) interface to lufs-captivefs(7) +by calling lufsmount(1) with appropriate arguments. You should never call +this command directly - use mount(8) instead.

+

mount.captive(8) (captive filesystem type) is never used - this command +is provided just as a base mount(8) interface to captive(7). You must always +use captive-fstype filesystem type such as captive-ntfs. Other supported +filesystem types are: +ntfs, fastfat, cdfs, ext2fsd

+

+

+
+

OPTIONS

+
+
{image-file|device}
+
+
+Pathname such as /dev/hda1 or /tmp/ntfs.bin. You should refer to the +partition name, not the whole device (/dev/hda is forbidden). +/dev/hda1 may correspond to /dev/ide/host0/bus0/target0/lun0/part1 +on your system. +
+

+
mountdir
+
+
+Existing empty target directory where {image-file|device} will be +mounted. +
+

+
-n
+
+
+Do not modify /etc/mtab. This option is currently not supported (ignored), +/etc/mtab is modified notwithstanding. +
+

+
-v
+
+
+Enable verbose mode. Command lufsmount(1) being called is shown. +
+

+
-o options
+
+
+Custom options passed to captive(7). See its manpage for details. Options +double-dashes (--) can be omitted for lufs-captivefs(7) or +mount.captive(8). +
+

+

+

+
+

SEE ALSO

+

lufs-captivefs(7), lufsmount(1)

+

+

+
+

AUTHOR

+

Jan Kratochvil <project-captive@jankratochvil.net>, +
http://www.jankratochvil.net/

+ + + + diff --git a/project/captive/reactos.png b/project/captive/reactos.png new file mode 100644 index 0000000..e1d6716 Binary files /dev/null and b/project/captive/reactos.png differ diff --git a/project/checkListItem.pl b/project/checkListItem.pl index b8c9814..dfb5529 100755 --- a/project/checkListItem.pl +++ b/project/checkListItem.pl @@ -18,10 +18,10 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +package project::checkListItem; 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; @@ -50,7 +50,7 @@ for my $ENTRIES (ENTRIES,ENTRIES_LOG) { my %item; for my $dir (keys(%dirs)) { - require "$dir/ListItem.pm"; + Wrequire "$dir/ListItem.pm"; my $item=eval('\%My::Project::'.$dir.'::ListItem'); do { warn "Broken $dir/List.pm"; next; } if !defined %$item; $item{$dir}=$item; diff --git a/project/checkstatic/index.html.pl b/project/checkstatic/Index.html.pl similarity index 69% rename from project/checkstatic/index.html.pl rename to project/checkstatic/Index.html.pl index a291c91..938f4fe 100755 --- a/project/checkstatic/index.html.pl +++ b/project/checkstatic/Index.html.pl @@ -18,19 +18,22 @@ # 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 -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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::checkstatic::ListItem; +Wuse 'My::Project'; +Wuse 'project::checkstatic::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::checkstatic::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::checkstatic::ListItem::ListItem, ); My::Web->footer(); diff --git a/project/checkstatic/ListItem.pm b/project/checkstatic/ListItem.pm index 91f0d26..c400142 100755 --- a/project/checkstatic/ListItem.pm +++ b/project/checkstatic/ListItem.pm @@ -18,29 +18,33 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"C Sources Symbol Attributes Checker", - "priority"=>7, - "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/checkstatic?rev=HEAD", - "summary"=>"Development tool", + +our @ListItem=( + "name"=>"checkstatic", + "platform"=>"unixdevel", + "priority"=>510, + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/checkstatic?rev=HEAD", + "summary"=>"C sources symbol attributes checker", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"Perl", - "description"=>"" - .'

Gives additional warnings not provided by GNU C Compiler' - .' such as dead code declared as global in separate file,' - .' missing static keywords etc.

' - .'

It can get very valuable during stripping functionality off of' - .' a big package for embedded resource-limited machines.

' + "description"=><<"HERE", +

Scripts gives additional warnings not provided by GNU C Compiler +such as dead code declared as global in separate file, +missing static keywords etc.

+

It can get very valuable during stripping functionality off of +a big package for embedded resource-limited machines.

+HERE ); 1; diff --git a/project/checkstatic/Makefile.am b/project/checkstatic/Makefile.am index a8e5c31..c1c4634 100644 --- a/project/checkstatic/Makefile.am +++ b/project/checkstatic/Makefile.am @@ -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/cvsbranchdiff/index.html.pl b/project/cvsbranchdiff/Index.html.pl similarity index 68% rename from project/cvsbranchdiff/index.html.pl rename to project/cvsbranchdiff/Index.html.pl index e85a1aa..58410d2 100755 --- a/project/cvsbranchdiff/index.html.pl +++ b/project/cvsbranchdiff/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::cvsbranchdiff::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/cvsbranchdiff/ListItem.pm b/project/cvsbranchdiff/ListItem.pm index 6e66bc3..7bae49b 100755 --- a/project/cvsbranchdiff/ListItem.pm +++ b/project/cvsbranchdiff/ListItem.pm @@ -18,27 +18,31 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"CVS Branching Utility", - "priority"=>6, - "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/cvsbranchdiff?rev=HEAD", - "summary"=>"CVS addon", + +our @ListItem=( + "name"=>"cvsbranchdiff", + "platform"=>"unixdevel", + "priority"=>490, + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/cvsbranchdiff?rev=HEAD", + "summary"=>"CVS Branching Utility", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"bash", - "description"=>"" - .'

During patching of foreign CVS trees you have to regularly import them' - .' as CVS does not support multiple repositories. There is a problem with' - .' new or removed files, this simple tool will take care of them.

' + "description"=><<"HERE", +

During patching of foreign CVS trees you have to regularly import them +as CVS does not support multiple repositories. There is a problem with +new or removed files, this simple tool will take care of them.

+HERE ); 1; diff --git a/project/cvsbranchdiff/Makefile.am b/project/cvsbranchdiff/Makefile.am index e821382..cffb9e2 100644 --- a/project/cvsbranchdiff/Makefile.am +++ b/project/cvsbranchdiff/Makefile.am @@ -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/cvsutil/Index.html.pl b/project/cvsutil/Index.html.pl new file mode 100755 index 0000000..f3f2bf3 --- /dev/null +++ b/project/cvsutil/Index.html.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::cvsutil' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::cvsutil::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::cvsutil::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::cvsutil::ListItem::ListItem, + ); + + +print <<"HERE"; +

There already exists package @{[ a_href 'http://www.red-bean.com/cvsutils/','CVS Utilities' ]} +with similiar features - this utility should be merged into it. +Pointed out by the courtesy of Jesse Glick.

+HERE + + +My::Web->footer(); diff --git a/project/cvsutil/ListItem.pm b/project/cvsutil/ListItem.pm index 50af733..24e93dd 100755 --- a/project/cvsutil/ListItem.pm +++ b/project/cvsutil/ListItem.pm @@ -18,29 +18,33 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"CVS General Utility", - "priority"=>7, - "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/cvsutil?rev=HEAD", - "summary"=>"CVS addon", + +our @ListItem=( + "name"=>"cvsutil", + "platform"=>"unixdevel", + "priority"=>500, + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/cvsutil?rev=HEAD", + "summary"=>"Clean CVS checkout working files or safely change CVS/Root", "license"=>"PD", "maintenance"=>"merge", "language"=>"Perl", - "description"=>"" - .'

Lists of specified types of files and safe settings of CVSROOT' - .' for already checkouted package.

' - .'

There exists package CVS Utilities' - .' doing similiar things and more - this utility should be merged into it.' - .' Pointed out by the courtesy of Jesse Glick.

' + "description"=><<"HERE", +

List the specified types of files and safe settings of CVSROOT +for already checkouted package. As an example of its many applications +can serve a handy prevention of grepping built files: + grep -w wanted_sym `cvsfiles` +

+HERE ); 1; diff --git a/project/cvsutil/Makefile.am b/project/cvsutil/Makefile.am index 4baa20e..63108f5 100644 --- a/project/cvsutil/Makefile.am +++ b/project/cvsutil/Makefile.am @@ -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/d1xnet/index.html.pl b/project/d1xnet/Index.html.pl similarity index 69% rename from project/d1xnet/index.html.pl rename to project/d1xnet/Index.html.pl index 817b479..02e3ecd 100755 --- a/project/d1xnet/index.html.pl +++ b/project/d1xnet/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::d1xnet::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/d1xnet/ListItem.pm b/project/d1xnet/ListItem.pm index 2ec7cfe..20a86b7 100755 --- a/project/d1xnet/ListItem.pm +++ b/project/d1xnet/ListItem.pm @@ -18,27 +18,31 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"D1X native TCP/IP support patch", - "priority"=>2, + +our @ListItem=( + "name"=>a_href('http://d1x.warpcore.org/','D1X').' TCP/IP', + "platform"=>"patch", + "priority"=>200, + "icon"=>"exit03.jpeg", "download"=>"d1x-tcpip-0.99.1.diff.gz", - "summary"=>"Network patch", + "summary"=>a_href('http://d1x.warpcore.org/','D1X').' native TCP/IP support patch', "license"=>"PD", "maintenance"=>"accepted", "language"=>"C module", - "description"=>"" - .'

No further mess with KaliNix,' - .' KIX or any other IPX layer convertor. This patch adds true TCP/IP networking' - .' capability to D1X version 1.30.

' + "description"=><<"HERE", +

No further mess with @{[ a_href 'ftp://linux.kali.net/outgoing/kalinix/','KaliNix' ]}, +KIX or any other IPX layer convertor. This patch adds true TCP/IP networking +capability to @{[ a_href 'http://d1x.warpcore.org/','D1X' ]} version 1.30.

+HERE ); 1; diff --git a/project/d1xnet/Makefile.am b/project/d1xnet/Makefile.am index c226e1f..c75fd5d 100644 --- a/project/d1xnet/Makefile.am +++ b/project/d1xnet/Makefile.am @@ -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/d1xnet/exit03.jpeg b/project/d1xnet/exit03.jpeg new file mode 100644 index 0000000..9dbb0d8 Binary files /dev/null and b/project/d1xnet/exit03.jpeg differ diff --git a/project/doswatch/index.html.pl b/project/doswatch/Index.html.pl similarity index 69% rename from project/doswatch/index.html.pl rename to project/doswatch/Index.html.pl index 1cd0733..fc056af 100755 --- a/project/doswatch/index.html.pl +++ b/project/doswatch/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::doswatch::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/doswatch/ListItem.pm b/project/doswatch/ListItem.pm index 38c99ac..e4796c9 100755 --- a/project/doswatch/ListItem.pm +++ b/project/doswatch/ListItem.pm @@ -18,32 +18,36 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"DOSWatcher - DOS File Access Snooper", - "priority"=>2, + +our @ListItem=( + "name"=>"DOSWatcher", + "platform"=>"dos", + "priority"=>390, "download"=>"doswatch.zip", - "summary"=>"DOS files snooper", + "summary"=>"DOS files access strace(1) equivalent", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"i386 asm", - "description"=>"" - .'

Resident program which displays all the file (and other) DOS function' - .' calls access on the secondary console. Useful for many failure discoveries' - .' for weird software packages with broken file/directory access.

' - .'
    ' - .'
  • Requires MDA/Hercules secondary adapter to be usable' - .'
  • Contains also MDABIOS, generic secondary adapter display layer' - .'
  • Can be run on primary-only VGA (with not much comfort, indeed)' - .'
' + "description"=><<"HERE", +

Resident program which displays all the file (and other) DOS function +calls access on the secondary console. Useful for many failure discoveries +for weird software packages with broken file/directory access.

+
    +
  • MDA/Hercules secondary adapter recommended for DOSWATCH
  • +
  • Package contains also MDABIOS - generic secondary adapter driver
  • +
  • MDABIOS features DOS commands accessible device "mda$"
  • +
  • DOSWATCH can be run on single VGA card (with not much comfort, indeed)
  • +
+HERE ); 1; diff --git a/project/doswatch/Makefile.am b/project/doswatch/Makefile.am index 7cbbe96..df5a81d 100644 --- a/project/doswatch/Makefile.am +++ b/project/doswatch/Makefile.am @@ -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/energie/Index.html.pl b/project/energie/Index.html.pl new file mode 100755 index 0000000..d9b5d90 --- /dev/null +++ b/project/energie/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::energie' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::energie::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::energie::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::energie::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/energie/ListItem.pm b/project/energie/ListItem.pm new file mode 100755 index 0000000..1c01fcb --- /dev/null +++ b/project/energie/ListItem.pm @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::energie' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::energie::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; + +use My::Web; + + +our @ListItem=( + "name"=>"PHP Web", + "platform"=>"web", + "priority"=>240, + "cvs"=>"www/www.energie.vellum.cz", + "link-Example web"=>a_href('http://www.energie.vellum.cz/'), + "summary"=>a_href('http://www.php.net/','PHP')." web framework", + "license"=>"GPL", + "maintenance"=>"obsolete-".a_href('http://www.php.net/','PHP')." is deprecated in favor of " + .a_href('http://www.perl.org/','Perl')." - use ".a_href("/project/MyWeb/","My::Web"), + "language"=>"PHP", + "description"=><<"HERE", +

Each web author has his own web framework reusable for other web developers +as a generic engine. Here is mine. I am not a fool to expect you would use +it.

+HERE + ); + +1; diff --git a/project/energie/Makefile.am b/project/energie/Makefile.am new file mode 100644 index 0000000..b04d980 --- /dev/null +++ b/project/energie/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/energie/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/etherealmmse/Index.html.pl b/project/etherealmmse/Index.html.pl new file mode 100755 index 0000000..f475ac6 --- /dev/null +++ b/project/etherealmmse/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::etherealmmse' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::etherealmmse::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::etherealmmse::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::etherealmmse::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/etherealmmse/ListItem.pm b/project/etherealmmse/ListItem.pm new file mode 100755 index 0000000..e56dc84 --- /dev/null +++ b/project/etherealmmse/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::etherealmmse' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::etherealmmse::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.ethereal.com/','Ethereal').' MMSE fix', + "platform"=>"patch", + "priority"=>360, + "icon"=>"elogo3d100x100", + "summary"=>'Fixed MMS Encapsulation protocol decoding', + "link-ChangeLog entry"=>'http://www.ethereal.com/cgi-bin/viewcvs.cgi/ethereal/packet-mmse.c#rev1.15', + "download-patch"=>'http://www.ethereal.com/cgi-bin/viewcvs.cgi/ethereal/packet-mmse.c.diff?r2=1.15&r1=1.14&diff_format=u', + "license"=>"GPL", + "maintenance"=>"accepted", + "sponsorship"=>a_href('http://www.atspraha.cz/','Advanced Telecom Services'), + "language"=>"C patch", + "description"=><<"HERE", +

Fixed a tiny bug in MMS Encapsulation protocol decoding.

+HERE + ); + +1; diff --git a/project/etherealmmse/Makefile.am b/project/etherealmmse/Makefile.am new file mode 100644 index 0000000..0bf001f --- /dev/null +++ b/project/etherealmmse/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/etherealmmse/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/etherealmmse/elogo3d100x100.png b/project/etherealmmse/elogo3d100x100.png new file mode 100644 index 0000000..17821f4 Binary files /dev/null and b/project/etherealmmse/elogo3d100x100.png differ diff --git a/project/etherealwsp/Index.html.pl b/project/etherealwsp/Index.html.pl new file mode 100755 index 0000000..6aef2ee --- /dev/null +++ b/project/etherealwsp/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::etherealwsp' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::etherealwsp::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::etherealwsp::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::etherealwsp::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/etherealwsp/ListItem.pm b/project/etherealwsp/ListItem.pm new file mode 100755 index 0000000..35a5616 --- /dev/null +++ b/project/etherealwsp/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::etherealwsp' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::etherealwsp::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.ethereal.com/','Ethereal').' WSP patch', + "platform"=>"patch", + "priority"=>350, + "icon"=>"elogo3d100x100", + "summary"=>'Enhanced WSP headers decoding', + "download-patch"=>'ethereal-2002-08-03-packet-wsp.c-contentlocation.diff', + "license"=>"GPL", + "maintenance"=>"ignored", + "sponsorship"=>a_href('http://www.atspraha.cz/','Advanced Telecom Services'), + "language"=>"C patch", + "description"=><<"HERE", +

Extended decoded headers for 'Content-Location'. This header +is used for MMS encoding in WSP.

+HERE + ); + +1; diff --git a/project/etherealwsp/Makefile.am b/project/etherealwsp/Makefile.am new file mode 100644 index 0000000..03e6153 --- /dev/null +++ b/project/etherealwsp/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/etherealwsp/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/etherealwsp/elogo3d100x100.png b/project/etherealwsp/elogo3d100x100.png new file mode 100644 index 0000000..17821f4 Binary files /dev/null and b/project/etherealwsp/elogo3d100x100.png differ diff --git a/project/etherealwsp/ethereal-2002-08-03-packet-wsp.c-contentlocation.diff b/project/etherealwsp/ethereal-2002-08-03-packet-wsp.c-contentlocation.diff new file mode 100644 index 0000000..e86ee3f --- /dev/null +++ b/project/etherealwsp/ethereal-2002-08-03-packet-wsp.c-contentlocation.diff @@ -0,0 +1,39 @@ +--- ethereal-2002-08-03/packet-wsp.c-orig Sat Aug 3 01:36:04 2002 ++++ ethereal-2002-08-03/packet-wsp.c Mon Aug 5 06:25:00 2002 +@@ -109,6 +109,7 @@ + static int hf_wsp_header_connection_str = HF_EMPTY; + static int hf_wsp_header_cache_control_field_name_str = HF_EMPTY; + static int hf_wsp_header_content_length = HF_EMPTY; ++static int hf_wsp_header_content_location = HF_EMPTY; + static int hf_wsp_header_age = HF_EMPTY; + static int hf_wsp_header_bearer_indication = HF_EMPTY; + static int hf_wsp_header_date = HF_EMPTY; +@@ -1724,7 +1725,13 @@ + hf_wsp_header_content_length, + headerType); + break; +- ++ ++ case FN_CONTENT_LOCATION: /* Content-Location */ ++ add_string_value_header (tree, header_buff, headerLen, ++ value_buff, valueType, valueLen, ++ hf_wsp_header_content_location, headerType); ++ break; ++ + case FN_DATE: /* Date */ + add_date_value_header (tree, header_buff, headerLen, + value_buff, valueType, valueLen, +@@ -4538,6 +4545,13 @@ + "Content-Length", HFILL + } + }, ++ { &hf_wsp_header_content_location, ++ { "Content-Location", ++ "wsp.header.content_location", ++ FT_STRING, BASE_NONE, NULL, 0x00, ++ "Content-Location", HFILL ++ } ++ }, + { &hf_wsp_header_date, + { "Date", + "wsp.header.date", diff --git a/project/fixhtml/index.html.pl b/project/fixhtml/Index.html.pl similarity index 55% rename from project/fixhtml/index.html.pl rename to project/fixhtml/Index.html.pl index 4524e36..bf399dc 100755 --- a/project/fixhtml/index.html.pl +++ b/project/fixhtml/Index.html.pl @@ -18,19 +18,32 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::fixhtml::ListItem; +Wuse 'My::Project'; +Wuse 'project::fixhtml::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::fixhtml::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::fixhtml::ListItem::ListItem, ); + +print <<"HERE"; +

If you download/grab the whole (or its part) of some web site (for example +by WebCopy tool), you will +probably want to browse it locally on your computer offline. Unfortunately +the authors are usually using server-name protocol reference or absolute +path referration which will broke on your local machine.

+HERE + + My::Web->footer(); diff --git a/project/fixhtml/ListItem.pm b/project/fixhtml/ListItem.pm index e5dbbbc..669e8f9 100755 --- a/project/fixhtml/ListItem.pm +++ b/project/fixhtml/ListItem.pm @@ -18,32 +18,30 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Converter of HTML Files URLs to Relative", - "priority"=>3, + +our @ListItem=( + "name"=>"fixhtml", + "platform"=>"unixuser", + "trivia"=>1, + "priority"=>20, "download"=>"fixhtml.pl", - "summary"=>"HTML converter", + "summary"=>"Convert HTML files URLs to relative", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"obsolete-".a_href('http://wget.sunsite.dk/','Wget')." option --convert-links does the same.", "language"=>"Perl", - "description"=>"" - .'

If you download/grab the whole (or its part) of some web site (for example' - .' by WebCopy tool), you will' - .' probably want to browse it locally on your computer offline. Unfortunately' - .' the authors are usually using server-name protocol reference or absolute' - .' path referration which will broke on your local machine.

' - .'

This software is derived from WebCopy and initially it was only' - .' its extension. I separated it afterwards - you really do not want to do' - .' the opposite, think twice before trying to integrate it back.

' + "description"=><<"HERE", +

Program translates the URL references in your downloaded web pages to be relative +and therefore browsable without Internet access.

+HERE ); 1; diff --git a/project/fixhtml/Makefile.am b/project/fixhtml/Makefile.am index d30b8b4..555f1b1 100644 --- a/project/fixhtml/Makefile.am +++ b/project/fixhtml/Makefile.am @@ -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/gladewsrc/Index.html.pl b/project/gladewsrc/Index.html.pl new file mode 100755 index 0000000..3b73d5c --- /dev/null +++ b/project/gladewsrc/Index.html.pl @@ -0,0 +1,46 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::gladewsrc' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::gladewsrc::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::gladewsrc::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::gladewsrc::ListItem::ListItem, + ); + + +print <<"HERE"; +

Patch got integrated to glade/main.c revision 1.10 (although +modified by Damon Chaplin).

+HERE + + +My::Web->footer(); diff --git a/project/gladewsrc/ListItem.pm b/project/gladewsrc/ListItem.pm new file mode 100755 index 0000000..dced5dd --- /dev/null +++ b/project/gladewsrc/ListItem.pm @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::gladewsrc' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::gladewsrc::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://glade.gnome.org/','Glade').' -w', + "platform"=>"patch", + "priority"=>310, + "icon"=>"glade-icon", + "summary"=>'Option --write-source for batch compilation', + "download-original patch"=>'glade-0.5.7-writesource.diff', + "link-ChangeLog entry"=>'http://cvs.gnome.org/bonsai/cvslog.cgi?file=glade%2Fglade/main.c&root=/cvs/gnome#1.10', + "license"=>"GPL", + "maintenance"=>"accepted", + "sponsorship"=>a_href('http://www.suse.com/','SuSE'), + "language"=>"C patch", + "description"=><<"HERE", +

Automatically generate {interface,support}.[ch] and other source files +by @{[ a_href 'http://glade.gnome.org/','Glade' ]}.

+HERE + ); + +1; diff --git a/project/gladewsrc/Makefile.am b/project/gladewsrc/Makefile.am new file mode 100644 index 0000000..f5f5772 --- /dev/null +++ b/project/gladewsrc/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/gladewsrc/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/gladewsrc/glade-0.5.7-writesource.diff b/project/gladewsrc/glade-0.5.7-writesource.diff new file mode 100644 index 0000000..d7ebd48 --- /dev/null +++ b/project/gladewsrc/glade-0.5.7-writesource.diff @@ -0,0 +1,162 @@ +diff -ru -x *.pot -x cat-id-tbl* glade-0.5.7-orig/glade/main.c glade-0.5.7/glade/main.c +--- glade-0.5.7-orig/glade/main.c Wed Dec 22 17:01:00 1999 ++++ glade-0.5.7/glade/main.c Sun Mar 12 20:44:11 2000 +@@ -36,14 +36,31 @@ + static void parse_command_line (int argc, + char *argv[], + GladeProjectWindow *project_window); ++static void post_command_line (GladeProjectWindow *project_window); + static void usage (void); + + ++/* Currently we handle only command-line arguments an XML file to load ++ and request for source build. ++ For Gnome we have to use popt, even though we have no options. */ ++ ++static gchar *arg_filename=NULL; ++static int arg_write_source=0; ++ + #ifdef USE_GNOME + static poptContext pctx; + + static struct poptOption options[] = { + { ++ "writesource", ++ 'w', ++ 0, ++ &arg_write_source, ++ 0, ++ N_("Whether to automatically (and only) build the source files"), ++ NULL ++ }, ++ { + NULL, + '\0', + 0, +@@ -95,6 +112,7 @@ + glade_show_property_editor (); + + parse_command_line (argc, argv, project_window); ++ post_command_line (project_window); + if (current_project == NULL) + glade_project_new (); + +@@ -104,15 +122,44 @@ + return 0; + } + ++static void ++post_command_line (GladeProjectWindow *project_window) ++{ ++ gchar *directory; ++ GladeProject *project; ++ GladeError *error; ++ ++ if (arg_filename) ++ { ++ directory = g_get_current_dir (); ++ arg_filename = glade_util_make_absolute_path (directory, arg_filename); ++ glade_project_window_open_project (project_window, arg_filename); ++ g_free (directory); ++ g_free (arg_filename); ++ } ++ if (arg_write_source) ++ { ++ if (!arg_filename) { ++ fprintf(stderr,_("Project name not specified, requited for \"--writesource\" option.\n")); ++ exit(1); ++ } ++ project = glade_project_view_get_project (GLADE_PROJECT_VIEW (project_window->project_view)); ++ g_return_if_fail (project != NULL); ++ error = glade_project_write_source (project); ++ if (error) { ++ fprintf(stderr,_("Error writing source, use GUI to fix it.\n")); ++ glade_error_free (error); ++ exit(1); ++ } ++ exit(0); ++ } ++} + +-/* Currently the only command-line argument we handle is an XML file to load. +- For Gnome we have to use popt, even though we have no options. */ + #ifdef USE_GNOME + static void + parse_command_line (int argc, char *argv[], + GladeProjectWindow *project_window) + { +- gchar *filename = NULL, *directory; + const gchar **args; + gint i; + +@@ -120,22 +167,13 @@ + + for (i = 0; args && args[i]; i++) + { +- if (filename == NULL) +- filename = (gchar*) args[i]; +- else +- usage (); ++ if (arg_filename == NULL) ++ arg_filename = (gchar*) args[i]; ++ else ++ usage (); + } + + poptFreeContext (pctx); +- +- if (filename) +- { +- directory = g_get_current_dir (); +- filename = glade_util_make_absolute_path (directory, filename); +- glade_project_window_open_project (project_window, filename); +- g_free (directory); +- g_free (filename); +- } + } + + #else +@@ -143,28 +181,18 @@ + parse_command_line (int argc, char *argv[], + GladeProjectWindow *project_window) + { +- gchar *filename = NULL, *directory; + gint i; + + /* GTK parses argc & argv and sets arguments to NULL if it has used them. */ + for (i = 1; i < argc; i++) + { +- if (argv[i]) +- { +- if (filename == NULL) +- filename = argv[i]; +- else +- usage (); +- } +- } +- +- if (filename) +- { +- directory = g_get_current_dir (); +- filename = glade_util_make_absolute_path (directory, filename); +- glade_project_window_open_project (project_window, filename); +- g_free (directory); +- g_free (filename); ++ if (!argv[i]) continue; ++ if (!strcmp(argv[i],"-w") || !strcmp(argv[i],"--writesource")) ++ arg_write_source = 1; ++ else if (arg_filename == NULL) ++ arg_filename = (gchar*) argv[i]; ++ else ++ usage (); + } + } + #endif +@@ -173,6 +201,6 @@ + static void + usage (void) + { +- fprintf (stderr, "Usage: glade [filename]\n"); ++ fprintf (stderr, "Usage: glade [-w|--writesource] []\n"); + exit (0); + } diff --git a/project/gladewsrc/glade-icon.png b/project/gladewsrc/glade-icon.png new file mode 100644 index 0000000..3c23cad Binary files /dev/null and b/project/gladewsrc/glade-icon.png differ diff --git a/project/gsmperl/Index.html.pl b/project/gsmperl/Index.html.pl new file mode 100755 index 0000000..3eecdc9 --- /dev/null +++ b/project/gsmperl/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::gsmperl' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::gsmperl::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::gsmperl::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::gsmperl::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/gsmperl/ListItem.pm b/project/gsmperl/ListItem.pm new file mode 100755 index 0000000..8aae4bb --- /dev/null +++ b/project/gsmperl/ListItem.pm @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::gsmperl' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::gsmperl::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.tektonica.com/projects/gsmsms/','GSM::SMS').' patch', + "platform"=>"patch", + "priority"=>520, + "cvs"=>"gsmperl/GSM:lace", + "summary"=>'Extension of '.a_href('http://www.tektonica.com/projects/gsmsms/','GSM::SMS') + .' for EMS+Alcatel', + "license"=>"PD", + "maintenance"=>"pending", + "sponsorship"=>a_href('http://www.atspraha.cz/','Advanced Telecom Services'), + "language"=>"Perl", + "description"=><<"HERE", +

Patch extends @{[ a_href 'http://www.tektonica.com/projects/gsmsms/','GSM::SMS' ]} +package by EMS and Alcatel-proprietary formats. Only picture/animations have +been implemented now, EMS/Alcatel ringtones are not yet supported.

+HERE + ); + +1; diff --git a/project/gsmperl/Makefile.am b/project/gsmperl/Makefile.am new file mode 100644 index 0000000..9d0b0b0 --- /dev/null +++ b/project/gsmperl/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/gsmperl/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/int13sniff/Index.html.pl b/project/int13sniff/Index.html.pl new file mode 100755 index 0000000..1d3c9c5 --- /dev/null +++ b/project/int13sniff/Index.html.pl @@ -0,0 +1,43 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::int13sniff' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::int13sniff::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::int13sniff::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::int13sniff::ListItem::ListItem, + ); + + +print centerimg "int13sniff-snap","Boot Snapshot"; + + +My::Web->footer(); diff --git a/project/int13sniff/ListItem.pm b/project/int13sniff/ListItem.pm new file mode 100755 index 0000000..3f0cbac --- /dev/null +++ b/project/int13sniff/ListItem.pm @@ -0,0 +1,50 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::int13sniff' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::int13sniff::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; + +use My::Web; + + +our @ListItem=( + "name"=>"Int13Sniff", + "platform"=>"unixdevel", + "priority"=>370, + "icon"=>"int13sniff-icon", + "summary"=>'Trace PC bootloader disk operations', + "download-source"=>'http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/surprise/surprise/misc/int13sniff.S?rev=HEAD', + "download-gzip(1)ped floppy image head"=>'int13sniff.bin.gz', + "link-parent Surprise project"=>"/project/surprise/", + "license"=>"GPL", + "maintenance"=>"ready", + "sponsorship"=>a_href('http://www.suse.com/','SuSE'), + "language"=>"i386 asm", + "description"=><<"HERE", +

Developer tool for PC boot loading analysis. Report all sectors being read +to display, back to its own floppy disk and/or to serial port(s).

+HERE + ); + +1; diff --git a/project/int13sniff/Makefile.am b/project/int13sniff/Makefile.am new file mode 100644 index 0000000..9bffbd2 --- /dev/null +++ b/project/int13sniff/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/int13sniff/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/int13sniff/int13sniff-icon.png b/project/int13sniff/int13sniff-icon.png new file mode 100644 index 0000000..248f14a Binary files /dev/null and b/project/int13sniff/int13sniff-icon.png differ diff --git a/project/int13sniff/int13sniff-snap.png b/project/int13sniff/int13sniff-snap.png new file mode 100644 index 0000000..88bf21f Binary files /dev/null and b/project/int13sniff/int13sniff-snap.png differ diff --git a/project/int13sniff/int13sniff.bin.gz b/project/int13sniff/int13sniff.bin.gz new file mode 100755 index 0000000..e8e5d95 Binary files /dev/null and b/project/int13sniff/int13sniff.bin.gz differ diff --git a/project/ircon/index.html.pl b/project/ircon/Index.html.pl similarity index 80% rename from project/ircon/index.html.pl rename to project/ircon/Index.html.pl index e70d307..da7c831 100755 --- a/project/ircon/index.html.pl +++ b/project/ircon/Index.html.pl @@ -18,22 +18,25 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::ircon::ListItem; +Wuse 'My::Project'; +Wuse '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'; +print <<"HERE";

Package consists of:

  • Linux kernel module implementing /dev/ircon device as hardware interface
  • @@ -58,6 +61,11 @@ print <<'HERE'; should be more intelligent and generate the signal itself as PC hardware simply is too slow to keep up strictly with the original frequencies and so in about 1 of 30 button presses it misses. Due to this the automatic Maspro tuning software (generating hundreds of button presses) is not usable.

    + +@{[ centerimg + ['ircon-parport-small.jpeg','Parallel Port Adapter',"a_href_img"=>'ircon-parport.jpeg'], + ['ircon-led-small.jpeg','Remote LED Transmitter',"a_href_img"=>'ircon-led.jpeg'] + ]} HERE My::Web->footer(); diff --git a/project/ircon/ListItem.pm b/project/ircon/ListItem.pm index cd4f448..51b2f0b 100755 --- a/project/ircon/ListItem.pm +++ b/project/ircon/ListItem.pm @@ -18,31 +18,34 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"IRCon - Infrared Remote Control", - "priority"=>5, + +our @ListItem=( + "name"=>"IRCon", + "platform"=>"unixuser", + "priority"=>580, + "icon"=>"ircon-icon.jpeg", "download"=>"ircon.tar.gz", "link-index of scanned images"=>"ircon-img/", "download-all scanned images"=>"ircon-img.tar", - "summary"=>"InfraRed control", + "summary"=>"InfraRed remote control hardware", "license"=>"PD", - "maintenance"=>"obsolete", - "reason"=>"Linux kernel driver no longer maintained. Superseded by LIRC", + "maintenance"=>"obsolete-Superseded by ".a_href('http://www.lirc.org/','LIRC'), "language"=>"C, Java", - "description"=>"" - .'

    Software package for custom simple hardware connected to PC parallel port' - .' and transmitting infrared singals to fake real remote TV/video controllers. Hardware' - .' is also equipped with receiver which is only used during development to grab and decode' - .' original signals.

    ' + "description"=><<"HERE", +

    Software package for custom simple hardware connected to PC parallel port +and transmitting infrared singals to fake real remote TV/video controllers. Hardware +is also equipped with receiver which is only used during development to grab and decode +original signals.

    +HERE ); 1; diff --git a/project/ircon/Makefile.am b/project/ircon/Makefile.am index d585b16..b7bf197 100644 --- a/project/ircon/Makefile.am +++ b/project/ircon/Makefile.am @@ -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/ircon/ircon-icon.jpeg b/project/ircon/ircon-icon.jpeg new file mode 100644 index 0000000..07ed8f4 Binary files /dev/null and b/project/ircon/ircon-icon.jpeg differ diff --git a/project/ircon/ircon-led-small.jpeg b/project/ircon/ircon-led-small.jpeg new file mode 100644 index 0000000..92880e2 Binary files /dev/null and b/project/ircon/ircon-led-small.jpeg differ diff --git a/project/ircon/ircon-led.jpeg b/project/ircon/ircon-led.jpeg new file mode 100644 index 0000000..4bcd442 Binary files /dev/null and b/project/ircon/ircon-led.jpeg differ diff --git a/project/ircon/ircon-parport-small.jpeg b/project/ircon/ircon-parport-small.jpeg new file mode 100644 index 0000000..e5ff7f3 Binary files /dev/null and b/project/ircon/ircon-parport-small.jpeg differ diff --git a/project/ircon/ircon-parport.jpeg b/project/ircon/ircon-parport.jpeg new file mode 100644 index 0000000..62398cd Binary files /dev/null and b/project/ircon/ircon-parport.jpeg differ diff --git a/project/kewensis/Index.html.pl b/project/kewensis/Index.html.pl new file mode 100755 index 0000000..cf4f889 --- /dev/null +++ b/project/kewensis/Index.html.pl @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::kewensis' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::kewensis::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::kewensis::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::kewensis::ListItem::ListItem, + ); + + +print <<"HERE"; + +@{[ vskip "3ex" ]} + +HERE + + +My::Web->footer(); diff --git a/project/kewensis/ListItem.pm b/project/kewensis/ListItem.pm new file mode 100755 index 0000000..ad74f7f --- /dev/null +++ b/project/kewensis/ListItem.pm @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::kewensis' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::kewensis::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; + +use My::Web; + + +our @ListItem=( + "name"=>"kewensis", + "platform"=>"web", + "priority"=>120, + "cvs"=>"kewensis", + "summary"=>a_href('http://www.ipni.org/','Plant Name Index').' custom engine', + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"PHP, Perl", + "description"=><<"HERE", +

    @{[ a_href 'http://www.ipni.org/','International Plant Name Index' ]} +provides information about plants in duplicated and unconveniently searchable +pages. You can download their database and run your own engine on it locally.

    +

    This engine allows you to modify the database to fix names of your own +plants and it groups synonyms of the same plant.

    +HERE + ); + +1; diff --git a/project/kewensis/Makefile.am b/project/kewensis/Makefile.am new file mode 100644 index 0000000..89d572f --- /dev/null +++ b/project/kewensis/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/kewensis/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/kewensis/out-edit.html b/project/kewensis/out-edit.html new file mode 100644 index 0000000..3466447 --- /dev/null +++ b/project/kewensis/out-edit.html @@ -0,0 +1,43 @@ + + + +Kewensis + + +
    +
    + +
    +
    +

     

    + + + + + +

     

    +
    + + +
    $Id$Valid XHTML 1.1!Valid CSS!
    + diff --git a/project/kewensis/out-list.html b/project/kewensis/out-list.html new file mode 100644 index 0000000..6f1139d --- /dev/null +++ b/project/kewensis/out-list.html @@ -0,0 +1,178 @@ + + + +Kewensis + + +
    +

    +

    +First Group: +   Max Groups: +

    +
    +
    +
    + + +

    +
    Group # 

    Join to this group:   + + + + +
    +
    +
    Odontoglossum crispum +Lindl.
    in Ann. & Mag. Nat. Hist. Ser. I. xv. (1845) 256.
    +


    + +

    Original Data

    +Notes: N. Granat +
    + + + + +
    + + + + + +
    + + + +
    + + + + +
    + + +
    +
    Group # 

    Join to this group:   + + + + +
    +
    +
    Odontoglossum alexandrae var. flaveolum +(Rchb.f.) B.S.Williams & T.Moore
    Orchid Album 1: tab. 43. 1882
    +

    +

    Linked Records

    +

    nomenclatural synonym:Odontoglossum crispum forma flaveolum Rchb.f.

    +
    + + + + +
    + + + + + +
    + + + +
    + + + + +
    + + + + +
    + + + + + +
    + + + + +
    + +
    Odontoglossum crispum forma flaveolum +Rchb.f.
    +

    +

    Linked Records

    +

    nomenclatural synonym(Main Record):Odontoglossum alexandrae var. flaveolum (Rchb.f.) B.S.Williams & T.Moore

    +
    + + + + +
    + + + + +
    + + + + + +
    + + + +
    + + + + +
    + + + + +
    + + + + + +
    +
    +
+ +
+
+ + +
+
+ + +
$Id$Valid XHTML 1.1!Valid CSS!
+ diff --git a/project/kix/Index.html.pl b/project/kix/Index.html.pl new file mode 100755 index 0000000..6522d39 --- /dev/null +++ b/project/kix/Index.html.pl @@ -0,0 +1,52 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::kix' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::kix::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::kix::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::kix::ListItem::ListItem, + ); + + +print <<"HERE"; +

You no longer need to run any foreign binaries on your system and connect +to remote/slow real @{[ a_href 'http://www.kali.net/','Kali' ]} server. +You also do not need to sign any papers to get binary-only your +own Kali server. Unfortunaly you cannot interconnect a game established +by using KIX with any other software (Kali, native IPX etc.).

+

Just compile, run and then add "-kali" option to your +@{[ a_href 'http://d1x.warpcore.org/','D1X' ]} to get it running. You +do not need IPX support anywhere (kernel, D1X, ...).

+HERE + + +My::Web->footer(); diff --git a/project/kix/ListItem.pm b/project/kix/ListItem.pm index fbfb31b..3a209d3 100755 --- a/project/kix/ListItem.pm +++ b/project/kix/ListItem.pm @@ -18,34 +18,29 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"KIX - KaliNix Replacement", - "priority"=>4, + +our @ListItem=( + "name"=>"KIX", + "platform"=>"unixuser", + "priority"=>110, "download"=>"kix.c", - "summary"=>"Network game server", + "summary"=>"Free protocol-compatible ".a_href('http://www.kali.net/','Kali').' server equivalent', "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C", - "description"=>"" - .'

Server which can be used on GNU/Linux as a replacement of' - .' KaliNix' - .' and thus no need to run some foreign binaries on your system and connection' - .' to remote/slow real Kali server' - .' and/or subscribing various papers to get (again binary-only) your' - .' own Kali server. Unfortunaly you cannot interconnect a game established' - .' by using KIX with any other software (Kali, native IPX etc.).

' - .'

Just compile, run and then add "-kali" option to your' - .' D1X to get it running. You' - .' do not need IPX support anywhere (kernel, D1X, ...).

' + "description"=><<"HERE", +

Server used on GNU/Linux as a replacement for proprietary +@{[ a_href 'ftp://linux.kali.net/outgoing/kalinix/','KaliNix' ]} network game server.

+HERE ); 1; diff --git a/project/kix/Makefile.am b/project/kix/Makefile.am index c9e04ea..fecdcd8 100644 --- a/project/kix/Makefile.am +++ b/project/kix/Makefile.am @@ -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/kware/Index.html.pl b/project/kware/Index.html.pl new file mode 100755 index 0000000..e980c65 --- /dev/null +++ b/project/kware/Index.html.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::kware' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::kware::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::kware::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::kware::ListItem::ListItem, + ); + + +print <<"HERE"; +

Currently only a few functions are implemented and the code is rather +an ugly hack than professional solution. I do not expect to ever develop +it into some clean software, take it as it is, improve it or let it be.

+HERE + + +My::Web->footer(); diff --git a/project/kware/ListItem.pm b/project/kware/ListItem.pm index b617182..45a5869 100755 --- a/project/kware/ListItem.pm +++ b/project/kware/ListItem.pm @@ -18,36 +18,36 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"KernelWare, Linux Kernel Drivers in Userland", - "priority"=>5, + +our @ListItem=( + "name"=>"KernelWare", + "platform"=>"unixdevel", + "priority"=>190, "download"=>"kware.tar.gz", - "summary"=>"Drivers debugging", + "summary"=>"Linux kernel drivers in userland for their debugging", "license"=>"PD", - "maintenance"=>"obsolete", - "reason"=>"The User-mode Linux Kernel", + "maintenance"=>"obsolete-" + .a_href('http://user-mode-linux.sourceforge.net/','The User-mode Linux Kernel')." is much more useful now.", "language"=>"C", - "description"=>"" - .'

Do you also find debugging of Linux kernel drivers a nightmare? Would you' - .' like to be able to run them as normal userland process including fancy' - .' gdb debugging and SIGSEGV-guarded operation?' - .' Here you are!

' - .'

KernelWare provides stub-style emulation of core kernel functions and' - .' is able to link with already pre-compiled modules. No special compilation' - .' flags needed, just link the .o module of the driver with' - .' KernelWare and you will get standard executable.

' - .'

Currently only a few functions are implemented and the code is rather' - .' an ugly hack than professional solution. I do not expect to ever develop' - .' it into some clean software, take it as it is, improve it or let it be.

' + "description"=><<"HERE", +

Do you also find debugging of Linux kernel drivers a nightmare? Would you +like to be able to run them as normal userland process including fancy +gdb debugging and SIGSEGV-guarded operation? +Here you are!

+

KernelWare provides stub-style emulation of core kernel functions and +is able to link with already pre-compiled modules. No special compilation +flags needed, just link the .o module of the driver with +KernelWare and you will get standard executable.

+HERE ); 1; diff --git a/project/kware/Makefile.am b/project/kware/Makefile.am index d33693b..60305f8 100644 --- a/project/kware/Makefile.am +++ b/project/kware/Makefile.am @@ -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/libtool/Index.html.pl b/project/libtool/Index.html.pl new file mode 100755 index 0000000..641b135 --- /dev/null +++ b/project/libtool/Index.html.pl @@ -0,0 +1,65 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::libtool' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::libtool::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::libtool::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::libtool::ListItem::ListItem, + ); + + +print <<"HERE"; +

When you include convenience library (.a) containing two conflicting name +objects (same basename from two different directories) only one of those two +object files will survive in ".libs/libA.lax/" arena:

+
+	rm -fr .libs/libA.lax/libB.a
+	mkdir .libs/libA.lax/libB.a
+	(cd .libs/libA.lax/libB.a && ar x /abs/path/to/A/B/.libs/libB.a)
+
+ +

The patch implements automatic renaming of "*.*" to "*-@{[ '$' ]}seqnum.*" +in such case:

+
+	libtool: link: warning: object name conflicts; renaming object files
+	libtool: link: warning: to ensure that they will not overwrite
+	(cd .libs/libA.lax/libB.a && ar xN 1 /abs/path/to/A/B/.libs/libB.a 'XconflictX.o' && mv -f 'XconflictX.o' 'XconflictX-1.o')
+	(cd .libs/libA.lax/libB.a && ar xN 2 /abs/path/to/A/B/.libs/libB.a 'XconflictX.o' && mv -f 'XconflictX.o' 'XconflictX-2.o')
+
+ +

Although renaming to a new name may be confusing IMO there is no better option. +The original (conflicting) name is not left there in any instance to prevent +misleading confusion of different object file found than expected.

+HERE + + +My::Web->footer(); diff --git a/project/libtool/ListItem.pm b/project/libtool/ListItem.pm new file mode 100755 index 0000000..eded704 --- /dev/null +++ b/project/libtool/ListItem.pm @@ -0,0 +1,46 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::libtool' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::libtool::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.gnu.org/software/libtool/libtool.html','GNU Libtool').' fix', + "platform"=>"patch", + "priority"=>620, + "summary"=>'Handle duplicate object file names', + "download-patch"=>'http://savannah.gnu.org/cgi-bin/cvsweb/libtool/ltmain.in.diff?r1=1.320&r2=1.321', + "license"=>"GPL", + "maintenance"=>"accepted", + "language"=>"sh patch", + "description"=><<"HERE", +

Patch fixis linking of convenience libraries (.a) containing two +conflicting name objects.

+HERE + ); + +1; diff --git a/project/libtool/Makefile.am b/project/libtool/Makefile.am new file mode 100644 index 0000000..58fc29f --- /dev/null +++ b/project/libtool/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/libtool/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/libxml2reader/Index.html.pl b/project/libxml2reader/Index.html.pl new file mode 100755 index 0000000..7a3ac83 --- /dev/null +++ b/project/libxml2reader/Index.html.pl @@ -0,0 +1,45 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::libxml2reader' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::libxml2reader::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::libxml2reader::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::libxml2reader::ListItem::ListItem, + ); + + +print <<"HERE"; +

Patch got integrated to xmlreader.c revision 1.50.

+HERE + + +My::Web->footer(); diff --git a/project/libxml2reader/ListItem.pm b/project/libxml2reader/ListItem.pm new file mode 100755 index 0000000..6d098b7 --- /dev/null +++ b/project/libxml2reader/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::libxml2reader' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::libxml2reader::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.xmlsoft.org/','libxml2').' fix', + "platform"=>"patch", + "priority"=>365, + "summary"=>'Fixed incomplete XML text nodes reading', + "link-ChangeLog entry"=>'http://cvs.gnome.org/bonsai/cvslog.cgi?file=libxml2/xmlreader.c&root=/cvs/gnome#1.50', + "link-Bugzilla entry"=>'http://bugzilla.gnome.org/show_bug.cgi?id=117702', + "download-my original patch"=>'http://bugzilla.gnome.org/showattachment.cgi?attach_id=18386', + "license"=>"PD", + "maintenance"=>"accepted", + "language"=>"C patch", + "description"=><<"HERE", +

xmlreader will sometimes return TEXT_NODE with only initial part of the +real content. The remaining part of such text node is lost.

+HERE + ); + +1; diff --git a/project/libxml2reader/Makefile.am b/project/libxml2reader/Makefile.am new file mode 100644 index 0000000..92c727a --- /dev/null +++ b/project/libxml2reader/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/libxml2reader/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/line9k/index.html.pl b/project/line9k/Index.html.pl similarity index 70% rename from project/line9k/index.html.pl rename to project/line9k/Index.html.pl index b803226..b16bbb7 100755 --- a/project/line9k/index.html.pl +++ b/project/line9k/Index.html.pl @@ -18,28 +18,35 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::line9k::ListItem; +Wuse 'My::Project'; +Wuse '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'; + +print <<"HERE";

Scheme for battery charger. Review/fixes by the courtesy of Pavouk. Connect serial port (such as /dev/ttyS0) to RS232 pins, your original mobile phone charge to AC pins. PS/2 keyboard fork of +5V/GND pins are required to power this hardware switch.

+ +@{[ centerimg "charger.jpeg","AC Switch Photo" ]} +@{[ vskip "3ex" ]} +@{[ centerimg "line9k","AC Switch Scheme" ]} HERE -print '
'.My::Web::img("line9k.gif","AC Switch Scheme").'
'."\n"; My::Web->footer(); diff --git a/project/line9k/ListItem.pm b/project/line9k/ListItem.pm index 6b60251..0e62897 100755 --- a/project/line9k/ListItem.pm +++ b/project/line9k/ListItem.pm @@ -18,27 +18,32 @@ # 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; +use My::Web; -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", - "summary"=>"pppd(8) script, charger scheme", + +our @ListItem=( + "name"=>"line9k", + "platform"=>"unixuser", + "priority"=>420, + "icon"=>"charger-icon.jpeg", + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/bin/line9k?rev=HEAD", + "summary"=>"Modem / Nokia 9110 GSM data gateway control, charger", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"bash, hardware", - "description"=>"" - .'

Waits for incoming PPP data connection, authorizes it and answers it.

' - .'

Scheme of computer controllde hardware charger for Nokia Communicator 9110 is supplied.' - .'It keeps the Nokia battery fit by automatically controlled battery charging cycles.

' + "description"=><<"HERE", +

Daemon waits for incoming PPP data connection, authorizes it and answers it.

+

Scheme of computer controllde hardware charger for Nokia Communicator 9110 is supplied. +It keeps the Nokia battery fit by automatically controlled battery charging cycles.

+HERE ); 1; diff --git a/project/line9k/Makefile.am b/project/line9k/Makefile.am index bf70f20..1945b4b 100644 --- a/project/line9k/Makefile.am +++ b/project/line9k/Makefile.am @@ -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 diff --git a/project/line9k/charger-icon.jpeg b/project/line9k/charger-icon.jpeg new file mode 100644 index 0000000..a201302 Binary files /dev/null and b/project/line9k/charger-icon.jpeg differ diff --git a/project/line9k/charger.jpeg b/project/line9k/charger.jpeg new file mode 100644 index 0000000..03ea87e Binary files /dev/null and b/project/line9k/charger.jpeg differ diff --git a/project/list.cgi.pl b/project/list.cgi.pl deleted file mode 100755 index eeadeef..0000000 --- a/project/list.cgi.pl +++ /dev/null @@ -1,161 +0,0 @@ -#! /usr/bin/perl -# -# $Id$ -# List of projects Perl template. -# Copyright (C) 2003 Jan Kratochvil -# -# 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 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 "../"; -use My::Web; -require CGI; - -use constant ENTRIES=>"CVS/Entries"; -use constant ENTRIES_LOG=>"CVS/Entries.Log"; - - -My::Web->init( - "title"=>'Project List', - ); -My::Web->heading(); - -my $CGI=CGI->new(); - -print <<'HERE'; -

Project List of Jan Kratochvil

- -

- - -

-HERE - -my %dirs; -for my $ENTRIES (ENTRIES,ENTRIES_LOG) { - local *E; - next if !open E,$ENTRIES; - while () { - chomp; - do { $dirs{$1}=1; next; } if m#^(?:A )?D/([^/]*)/#; - next if m#^/([^/]*)/# ; - next if /^D$/; - warn "File $ENTRIES contains invalid line \"$_\": $!"; - } - close E; - } - -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; - } - -# $col{"name"}{"show"}=1 -# $col{"name"}{"format"}=sub { "<".$_[0].">"; } -# $col{"name"}{""}="Project name"; -# @col_order - -my @row_order=qw(-priority); -my @col_order=qw(name summary license maintenance language); -my %col; - -sub format_url ($) { return (!$_[0] ? "" : 'X'); } - -$col{"name"}{"format"}=sub { - $_[0]=~s#]*>([^<]*)#$1#g; - return "".$_[0].""; - }; - -$col{"license"}{"format"}=sub { - my %known=( - "PD"=>"PD", - "GPL"=>"GPL", - "LGPL"=>"LGPL", - ); - return $known{$_[0]} if $known{$_[0]}; - return $_[0]; - }; - -$col{"online-demo"}{"format"}=\&format_url; -$col{"download"}{"format"}=\&format_url; -$col{"name"}{""}="Project Name"; -$col{"summary"}{""}="Abstract"; -$col{"license"}{""}="Copying"; -$col{"maintenance"}{""}="State"; -$col{"language"}{""}="Language"; - -# Fill in cols not contained in @col_order -if (0) { - my %col_order=map(($_=>1),@col_order); - push @col_order,map({ ($col_order{$_} ? () : $_); } keys(%{{ map(($_=>1),map((keys(%{$item{$_}})),keys(%item)))}})); - } - -print ''."\n"; - print ''; - for my $col (@col_order) { - next if defined $col{$col}{"show"} && !$col{$col}{"show"}; - print ''; - } - print ''."\n"; - my @rows_ordered=sort { - for my $order_by (@row_order,"name") { - my $order_by=$order_by; - my $minus=($order_by=~s/^(-)//)[0]; - my $r=($item{$a}{$order_by} cmp $item{$b}{$order_by}); - $r=-$r if $minus; - return $r if $r; - } - return 0; - } keys(%item); - for my $row (@rows_ordered) { - print ''; - for my $col (@col_order) { - next if defined $col{$col}{"show"} && !$col{$col}{"show"}; - print ''; - } - print ''."\n"; - if ($CGI->param("description_opt")) { - print ''; - print ''; - print ''."\n"; - print ''."\n"; - } - } -print '
'.($col{$col}{""} || "[$col]").'
'; - if (!$col{$col}{"format"}) { - print(($item{$row}{$col} || "")); - } - else { - print(&{$col{$col}{"format"}}($item{$row}{$col},$row)); - } - print '
'.$item{$row}{"description"}.'
 
'."\n"; - -My::Web->footer(); diff --git a/project/lynxilla/Index.html.pl b/project/lynxilla/Index.html.pl new file mode 100755 index 0000000..2d971c9 --- /dev/null +++ b/project/lynxilla/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::lynxilla' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::lynxilla::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::lynxilla::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::lynxilla::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/lynxilla/ListItem.pm b/project/lynxilla/ListItem.pm new file mode 100755 index 0000000..cbdc9f4 --- /dev/null +++ b/project/lynxilla/ListItem.pm @@ -0,0 +1,54 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::lynxilla' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::lynxilla::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; + +use My::Web; + + +our @ListItem=( + "name"=>"lynxilla", + "platform"=>"web", + "trivia"=>1, + "priority"=>460, + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/.userContent.css?rev=HEAD", + "summary"=>a_href('http://lynx.isc.org/','Lynx').' look&feel with ' + .a_href('http://www.mozilla.org/','Mozilla').' web compatibility', + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"CSS", + "description"=><<"HERE", +

@{[ a_href 'http://lynx.isc.org/','Lynx' ]} brings unified colors and fonts of all web pages. +Unfortunately it is not the one of those two browsers respected by broken websites. +To get back the unified look and feel of all the web pages while retaining the web compatibility +you can override CSS settings of your @{[ a_href 'http://www.mozilla.org/','Mozilla' ]} by placing +@{[ a_href 'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/.userContent.css?rev=HEAD", + 'userContent.css' ]} +as your local file: @{[ '$HOME/.mozilla/$USER/*/chrome/userContent.css' ]}

+HERE + ); + +1; diff --git a/project/lynxilla/Makefile.am b/project/lynxilla/Makefile.am new file mode 100644 index 0000000..bc638eb --- /dev/null +++ b/project/lynxilla/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/lynxilla/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/mdsms/Index.html.pl b/project/mdsms/Index.html.pl new file mode 100755 index 0000000..1a71f44 --- /dev/null +++ b/project/mdsms/Index.html.pl @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::mdsms' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::mdsms::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::mdsms::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::mdsms::ListItem::ListItem, + ); + + +print <<"HERE"; +

This software should be general-UNIX compatible. Please wait a minute when +you run it, under various UNIXes it may take some time to finish.

+

GSM network codes: GSM network code needs to be given as parameter during +sending of operator logo. Nice list of the codes you will find +@{[ a_href 'http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html','here' ]}.

+HERE + + +My::Web->footer(); diff --git a/project/mdsms/ListItem.pm b/project/mdsms/ListItem.pm index 4dc644f..b807a5a 100755 --- a/project/mdsms/ListItem.pm +++ b/project/mdsms/ListItem.pm @@ -18,42 +18,48 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Mobile Device SMS Tool", - "priority"=>8, - "download-sources .tar.gz"=>"mdsms-1.5.2.tar.gz", - "download-sources .tar.Z"=>"mdsms-1.5.2.tar.Z", - "download-i386 RPM package"=>"mdsms-1.5.2-0.i386.rpm", - "download-sources RPM package"=>"mdsms-1.5.2-0.src.rpm", + +our @ListItem=( + "name"=>"mdsms", + "platform"=>"unixuser", + "priority"=>600, + "icon"=>"siemens_m20t-icon.jpeg", + "download-i386 RPM package"=>"dist/mdsms-1.5.3-0.i386.rpm", + "download-sources RPM package"=>"dist/mdsms-1.5.3-0.src.rpm", + "download-sources .tar.gz"=>"dist/mdsms-1.5.3.tar.gz", + "download-sources .tar.Z"=>"dist/mdsms-1.5.3.tar.Z", "download-logos from KESSLER Wireless Design"=>"http://www.kessler-design.com/wireless/samples.php3", - "link-View CVS"=>"http://cvs.jankratochvil.net/viewcvs/mdsms/", - "summary"=>"Mobile communication", + "cvs"=>"mdsms", + "link-".a_href('http://freshmeat.net/','Freshmeat')=> + a_href('http://freshmeat.net/projects/mdsms/','Mobile Device SMS tool'), + "summary"=>"Mobile Device SMS Tool", "license"=>"GPL", - "maintenance"=>"finished", + "maintenance"=>"ready", + "sponsorship"=>join(", ", + a_href('http://www.tencom.cz/','TENcom Trade') + .'/'.a_href('http://www.sme.cz/default.asp?lng=en&ver=html','SME'), + a_href('http://www.readynote.com/','ReadyNote'), + a_href('http://www.atspraha.cz/','Advanced Telecom Services')), "language"=>"C", - "description"=>"" - .'

Sends NOL or NGG files as operator logo or group graphics through' - .' Nokia Communicator' - .' 9110 (9000/9000i is definitively not compatible). Usually you need' - .' to have either infra-red port in your computer or special FBUS cable to be able' - .' to use conventional logo-uploading tools (GNokii' - .' or one from KESSLER' - .' Wireless Design). This program uses only standard modem cable and integrated' - .' FaxModem capability of 9110.

' - .'

This software should be general-UNIX compatible. Please wait a minute when' - .' you run it, under various UNIXes it may take some time to finish.

' - .'

GSM network codes: GSM network code needs to be given as parameter during' - .' sending of operator logo. Nice list of the codes you will find' - .' here.

' + "description"=><<"HERE", +

Program sends NOL or NGG files as Nokia operator logo or group graphics through +@{[ a_href 'http://www.nokia.com/','Nokia' ]} @{[ a_href 'http://www.communicator.org/','Communicator' ]} +9110 (@{[ a_href 'http://www.nokia.com/phones/9000i','9000/9000i' ]} +is not compatible). Usually you need +to have either infra-red port in your computer or special FBUS cable to be able +to use conventional logo-uploading tools (such as @{[ a_href 'http://www.gnokii.org/','gnokii' ]}). +This program uses only standard modem cable and the integrated +FaxModem capability of 9110.

+HERE ); 1; diff --git a/project/mdsms/Makefile.am b/project/mdsms/Makefile.am index 3cc6842..8eb2d05 100644 --- a/project/mdsms/Makefile.am +++ b/project/mdsms/Makefile.am @@ -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/mdsms/dist/mdsms-1.5.3-0.i386.rpm b/project/mdsms/dist/mdsms-1.5.3-0.i386.rpm new file mode 100644 index 0000000..9373dd2 Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3-0.i386.rpm differ diff --git a/project/mdsms/dist/mdsms-1.5.3-0.src.rpm b/project/mdsms/dist/mdsms-1.5.3-0.src.rpm new file mode 100644 index 0000000..917d324 Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3-0.src.rpm differ diff --git a/project/mdsms/dist/mdsms-1.5.3.tar.Z b/project/mdsms/dist/mdsms-1.5.3.tar.Z new file mode 100644 index 0000000..804e262 Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3.tar.Z differ diff --git a/project/mdsms/dist/mdsms-1.5.3.tar.gz b/project/mdsms/dist/mdsms-1.5.3.tar.gz new file mode 100644 index 0000000..85bc518 Binary files /dev/null and b/project/mdsms/dist/mdsms-1.5.3.tar.gz differ diff --git a/project/mdsms/dist/mdsms-debuginfo-1.5.3-0.i386.rpm b/project/mdsms/dist/mdsms-debuginfo-1.5.3-0.i386.rpm new file mode 100644 index 0000000..7906bf8 Binary files /dev/null and b/project/mdsms/dist/mdsms-debuginfo-1.5.3-0.i386.rpm differ diff --git a/project/mdsms/mdsms-1.5.2-0.i386.rpm b/project/mdsms/mdsms-1.5.2-0.i386.rpm deleted file mode 100644 index 4a5c0d6..0000000 Binary files a/project/mdsms/mdsms-1.5.2-0.i386.rpm and /dev/null differ diff --git a/project/mdsms/mdsms-1.5.2-0.src.rpm b/project/mdsms/mdsms-1.5.2-0.src.rpm deleted file mode 100644 index 2a62771..0000000 Binary files a/project/mdsms/mdsms-1.5.2-0.src.rpm and /dev/null differ diff --git a/project/mdsms/mdsms-1.5.2.tar.Z b/project/mdsms/mdsms-1.5.2.tar.Z deleted file mode 100644 index 1974583..0000000 Binary files a/project/mdsms/mdsms-1.5.2.tar.Z and /dev/null differ diff --git a/project/mdsms/mdsms-1.5.2.tar.gz b/project/mdsms/mdsms-1.5.2.tar.gz deleted file mode 100644 index a541e7d..0000000 Binary files a/project/mdsms/mdsms-1.5.2.tar.gz and /dev/null differ diff --git a/project/mdsms/siemens_m20t-icon.jpeg b/project/mdsms/siemens_m20t-icon.jpeg new file mode 100644 index 0000000..8440ac5 Binary files /dev/null and b/project/mdsms/siemens_m20t-icon.jpeg differ diff --git a/project/middleman/Index.html.pl b/project/middleman/Index.html.pl new file mode 100755 index 0000000..e73a31a --- /dev/null +++ b/project/middleman/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::middleman' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::middleman::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::middleman::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::middleman::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/middleman/ListItem.pm b/project/middleman/ListItem.pm new file mode 100755 index 0000000..3504565 --- /dev/null +++ b/project/middleman/ListItem.pm @@ -0,0 +1,49 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::middleman' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::middleman::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://middle-man.sourceforge.net/','Middleman').' port', + "platform"=>"unixuser", + "priority"=>60, + "cvs"=>"middleman:lace", + "summary"=>'HTTP proxy ported to ' + .a_href('http://www.freebsd.org/','FreeBSD'), + "license"=>"PD", + "maintenance"=>"ready", + "sponsorship"=>a_href('http://www.jklabs.cz/','JKLabs'), + "language"=>"C patch", + "description"=><<"HERE", +HTTP proxy server @{[ a_href 'http://middle-man.sourceforge.net/','Middleman' ]} +capable of returned data mangling has been ported to +@{[ a_href 'http://www.freebsd.org/','FreeBSD' ]}. +HERE + ); + +1; diff --git a/project/middleman/Makefile.am b/project/middleman/Makefile.am new file mode 100644 index 0000000..152d864 --- /dev/null +++ b/project/middleman/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/middleman/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/mod_auth_tacacs/index.html.pl b/project/mod_auth_tacacs/Index.html.pl similarity index 68% rename from project/mod_auth_tacacs/index.html.pl rename to project/mod_auth_tacacs/Index.html.pl index 9490658..1f1b1b3 100755 --- a/project/mod_auth_tacacs/index.html.pl +++ b/project/mod_auth_tacacs/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::mod_auth_tacacs::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/mod_auth_tacacs/ListItem.pm b/project/mod_auth_tacacs/ListItem.pm index 997be01..e9a2b94 100755 --- a/project/mod_auth_tacacs/ListItem.pm +++ b/project/mod_auth_tacacs/ListItem.pm @@ -18,28 +18,34 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"mod_auth_tacacs TACACS+ test client", - "priority"=>2, + +our @ListItem=( + "name"=>a_href('http://sourceforge.net/projects/mod-auth-tacacs/','mod_auth_tacacs').' client', + "platform"=>"patch", + "priority"=>260, + "icon"=>"cisco-icon.jpeg", "download"=>"mod_auth_tacacs-2.0.2-gts1-checkout.diff.gz", "link-mod_auth_tacacs homepage"=>"http://sourceforge.net/projects/mod-auth-tacacs/", - "summary"=>"Network server security", + "summary"=>a_href('http://www.cisco.com/warp/public/614/7.html','Cisco TACACS+') + .' testing/debugging client for ' + .a_href('http://sourceforge.net/projects/mod-auth-tacacs/','mod_auth_tacacs'), "license"=>"PD", "maintenance"=>"accepted", "language"=>"C patch", - "description"=>"" - .'Patch implements: command-line client, dropped Makefile.in' - .' in favor of Makefile.am, --with-apache works now' - .' (whole configure.in rewritten)' + "description"=><<"HERE", +Patch implements: command-line client, dropped Makefile.in +in favor of Makefile.am, --with-apache works now +(whole configure.in rewritten) +HERE ); 1; diff --git a/project/mod_auth_tacacs/Makefile.am b/project/mod_auth_tacacs/Makefile.am index b564973..a08b8cf 100644 --- a/project/mod_auth_tacacs/Makefile.am +++ b/project/mod_auth_tacacs/Makefile.am @@ -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/mod_auth_tacacs/cisco-icon.jpeg b/project/mod_auth_tacacs/cisco-icon.jpeg new file mode 100644 index 0000000..7c68e75 Binary files /dev/null and b/project/mod_auth_tacacs/cisco-icon.jpeg differ diff --git a/project/mot2as/index.html.pl b/project/mot2as/Index.html.pl similarity index 58% rename from project/mot2as/index.html.pl rename to project/mot2as/Index.html.pl index 7352004..94dff41 100755 --- a/project/mot2as/index.html.pl +++ b/project/mot2as/Index.html.pl @@ -18,19 +18,30 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::mot2as::ListItem; +Wuse 'My::Project'; +Wuse 'project::mot2as::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::mot2as::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::mot2as::ListItem::ListItem, ); + +print <<"HERE"; +

Specifically it will care about: equ operation, dc.b strings, +; comments, @{[ '$' ]} for hex-radix, % for bin-radix, +local labels, : for label termination.

+HERE + + My::Web->footer(); diff --git a/project/mot2as/ListItem.pm b/project/mot2as/ListItem.pm index 30afeeb..917aba0 100755 --- a/project/mot2as/ListItem.pm +++ b/project/mot2as/ListItem.pm @@ -18,32 +18,32 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Motorola to AT&T/GNU Assembler Syntax Converter", - "priority"=>5, + +our @ListItem=( + "name"=>"mot2as", + "platform"=>"unixdevel", + "priority"=>50, "download"=>"mot2as.c", - "summary"=>"Asm syntax converter", + "summary"=>'Convert Motorola to AT&T/GNU assembler syntax', "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C", - "sponsorship"=>"Princip, a.s.", - "description"=>"" - .'

Do you need to compile under UNIX assembly sources for Motorola 68k family' - .' of processors? You have probably already found out that original Motorola' - .' syntax is not suitable for GNU assembler which uses a bit different (AT&T' - .' style) syntax. Using this very simple program you can convert between these two.

' - .'

Specifically it will care about: equ operation, dc.b strings,' - .' ; comments, $ for hex-radix, % for bin-radix,' - .' local labels, : for label termination.

' + "sponsorship"=>a_href('http://www.princip.cz/','Princip, a.s.'), + "description"=><<"HERE", +

Do you need to compile under UNIX assembly sources for Motorola 68k family +of processors? You have probably already found out that original Motorola +syntax is not suitable for GNU assembler which uses a bit different (AT&T +style) syntax. Using this very simple program you can convert between these two.

+HERE ); 1; diff --git a/project/mot2as/Makefile.am b/project/mot2as/Makefile.am index 63e2d77..3ee15d4 100644 --- a/project/mot2as/Makefile.am +++ b/project/mot2as/Makefile.am @@ -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/muttsort/Index.html.pl b/project/muttsort/Index.html.pl new file mode 100755 index 0000000..13e0596 --- /dev/null +++ b/project/muttsort/Index.html.pl @@ -0,0 +1,45 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::muttsort' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::muttsort::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::muttsort::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::muttsort::ListItem::ListItem, + ); + + +print <<"HERE"; +

Patch got integrated to thread.c revision 2.16.

+HERE + + +My::Web->footer(); diff --git a/project/muttsort/ListItem.pm b/project/muttsort/ListItem.pm new file mode 100755 index 0000000..81218d5 --- /dev/null +++ b/project/muttsort/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::muttsort' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::muttsort::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.mutt.org/','Mutt').' speedup', + "platform"=>"patch", + "priority"=>430, + "icon"=>"mutt_button", + "summary"=>'Mailbox reading phase acceleration', + "download-patch"=>'mutt-sort.diff', + "license"=>"GPL", + "maintenance"=>"accepted", + "language"=>"C patch", + "description"=><<"HERE", +

Mutt is pretty slow when opening a mailbox. Phase "Reading..." is hard to +speedup but "Sorting mailbox..." was rewritten from (n^2) complexity +to (n*log(n)). +HERE + ); + +1; diff --git a/project/muttsort/Makefile.am b/project/muttsort/Makefile.am new file mode 100644 index 0000000..7d61eaf --- /dev/null +++ b/project/muttsort/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/muttsort/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/muttsort/mutt-sort.diff b/project/muttsort/mutt-sort.diff new file mode 100644 index 0000000..51bb02e --- /dev/null +++ b/project/muttsort/mutt-sort.diff @@ -0,0 +1,109 @@ +Index: thread.c +=================================================================== +RCS file: /home/roessler/cvs/mutt/thread.c,v +retrieving revision 2.15 +diff -I! -ICVS -u -r2.15 thread.c +--- thread.c 2001/04/25 22:08:41 2.15 ++++ thread.c 2001/07/26 02:18:11 +@@ -535,23 +535,48 @@ + + HEADER *mutt_sort_subthreads (HEADER *hdr, sort_t *func) + { +- HEADER *top = NULL; +- HEADER *t; ++ static HEADER **array = NULL; ++ static unsigned array_size = 0, array_alloc = 0; ++ unsigned array_alloc_base; ++ unsigned items, item; + +- while (hdr) ++ if (!func || !hdr) ++ return hdr; ++ ++ array_alloc_base = array_alloc; ++ for (item = array_alloc_base; hdr; hdr = hdr->next) + { +- t = hdr; +- hdr = hdr->next; +- insert_message (&top, t, func); +- if (t->child) +- t->child = mutt_sort_subthreads (t->child, func); ++ if (item >= array_size) ++ { ++ array_size = 2 * MAX(array_size, 0x100); ++ safe_realloc ((void **) &array, array_size * sizeof (*array)); ++ } ++ array[item++] = hdr; ++ if (hdr->child) ++ { ++ array_alloc = item; ++ hdr->child = mutt_sort_subthreads (hdr->child, func); ++ } + } +- return top; ++ array_alloc = array_alloc_base; ++ ++ items = item - array_alloc_base; ++ qsort ((void *) (array + array_alloc_base), items, sizeof (*array), func); ++ ++ array[array_alloc_base ]->prev = NULL; ++ array[array_alloc_base + items-1]->next = NULL; ++ ++ for (item = array_alloc_base; item < array_alloc_base + items-1; item++) ++ { ++ array[item ]->next = array[item+1]; ++ array[item+1]->prev = array[item ]; ++ } ++ ++ return array[array_alloc_base]; + } + + void mutt_sort_threads (CONTEXT *ctx, int init) + { +- sort_t *usefunc = NULL; + HEADER *tmp, *CUR; + int i, oldsort; + +@@ -562,10 +587,6 @@ + oldsort = Sort; + Sort = SortAux; + +- /* if the SORT_LAST bit is set, we save sorting for later */ +- if (!(Sort & SORT_LAST)) +- usefunc = mutt_get_sort_func (Sort); +- + for (i = 0; i < ctx->msgcount; i++) + { + CUR = ctx->hdrs[i]; +@@ -580,7 +601,7 @@ + CUR->subject_changed = 1; + unlink_message (&CUR->parent->child, CUR); + CUR->parent = NULL; +- insert_message (&ctx->tree, CUR, usefunc); ++ insert_message (&ctx->tree, CUR, NULL); + } + else if (!CUR->threaded) + { +@@ -603,15 +624,19 @@ + * parent) during the initial threading. + */ + if (CUR->env->message_id) +- move_descendants (tmp ? &tmp->child : &ctx->tree, CUR, usefunc); ++ move_descendants (tmp ? &tmp->child : &ctx->tree, CUR, NULL); + } +- insert_message (tmp ? &tmp->child : &ctx->tree, CUR, usefunc); ++ insert_message (tmp ? &tmp->child : &ctx->tree, CUR, NULL); + CUR->threaded = 1; + } + } + + if (!option (OPTSTRICTTHREADS)) +- pseudo_threads (ctx, usefunc); ++ pseudo_threads (ctx, NULL); ++ ++ /* if the SORT_LAST bit is not set, sort the whole tree now */ ++ if (!(Sort & SORT_LAST)) ++ ctx->tree = mutt_sort_subthreads (ctx->tree, mutt_get_sort_func (Sort)); + + /* now that the whole tree is put together, we can sort by last-* */ + if (Sort & SORT_LAST) diff --git a/project/muttsort/mutt_button.png b/project/muttsort/mutt_button.png new file mode 100644 index 0000000..aa1f6fe Binary files /dev/null and b/project/muttsort/mutt_button.png differ diff --git a/project/netstat/index.html.pl b/project/netstat/Index.html.pl similarity index 80% rename from project/netstat/index.html.pl rename to project/netstat/Index.html.pl index 4132351..3296463 100755 --- a/project/netstat/index.html.pl +++ b/project/netstat/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::netstat::ListItem; +Wuse 'My::Project'; +Wuse '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'; diff --git a/project/netstat/ListItem.pm b/project/netstat/ListItem.pm index 37ff856..24b94a7 100755 --- a/project/netstat/ListItem.pm +++ b/project/netstat/ListItem.pm @@ -18,28 +18,31 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Program name display for net-tools-1.50/netstat", - "priority"=>3, + +our @ListItem=( + "name"=>"netstat -p", + "platform"=>"patch", + "priority"=>400, "download"=>"net-tools-1.50-progname.diff.gz", - "summary"=>"Network tool enhancement", + "summary"=>"Program name display for ".a_href('http://www.inka.de/sites/lina/linux/NetTools/','net-tools-1.50').'/netstat', "license"=>"PD", "maintenance"=>"accepted", "language"=>"C patch", - "description"=>"" - .'

After answering several questions on the mailing lists and several from' - .' my friends personally, I decided that there is missing some tool for GNU/Linux' - .' which would display PID (or simply the process) of the owner of some socket,' - .' either listening or communicating.

' + "description"=><<"HERE", +

After answering several questions on the mailing lists and several from +my friends personally, I decided that there is missing some tool for GNU/Linux +which would display PID (or simply the process) of the owner of some socket, +either listening or communicating.

+HERE ); 1; diff --git a/project/netstat/Makefile.am b/project/netstat/Makefile.am index 4f2da6e..6ca5708 100644 --- a/project/netstat/Makefile.am +++ b/project/netstat/Makefile.am @@ -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/oslik/index.html.pl b/project/oslik/Index.html.pl similarity index 72% rename from project/oslik/index.html.pl rename to project/oslik/Index.html.pl index 7630b06..8c8c379 100755 --- a/project/oslik/index.html.pl +++ b/project/oslik/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::oslik::ListItem; +Wuse 'My::Project'; +Wuse '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"; diff --git a/project/oslik/ListItem.pm b/project/oslik/ListItem.pm index deff81b..3f18c9c 100755 --- a/project/oslik/ListItem.pm +++ b/project/oslik/ListItem.pm @@ -18,27 +18,31 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Logical Puzzle in Prolog", - "priority"=>5, + +our @ListItem=( + "name"=>"oslik", + "platform"=>"unixdevel", + "trivia"=>1, + "priority"=>70, "download"=>"oslik/oslik.zip", - "summary"=>"Prolog example", + "summary"=>"Prolog example solving logical puzzle Oslik", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"Prolog", - "description"=>"" - .'

This is no game, just solution of one specific mathematical problem' - .' consisting of simple state search. Software is written equivalentnly' - .' both in C and Prolog for comparation.

' + "description"=><<"HERE", +

Solution calculator of a logical game / mathematical problem +consisting of simple state search. Software is written equivalentnly +both in C and Prolog for comparation.

+HERE ); 1; diff --git a/project/oslik/Makefile.am b/project/oslik/Makefile.am index c99d2ce..997d8eb 100644 --- a/project/oslik/Makefile.am +++ b/project/oslik/Makefile.am @@ -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/patchd2/index.html.pl b/project/patchd2/Index.html.pl similarity index 69% rename from project/patchd2/index.html.pl rename to project/patchd2/Index.html.pl index fee364b..3890e7f 100755 --- a/project/patchd2/index.html.pl +++ b/project/patchd2/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::patchd2::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/patchd2/ListItem.pm b/project/patchd2/ListItem.pm index d492d2e..6d2dad1 100755 --- a/project/patchd2/ListItem.pm +++ b/project/patchd2/ListItem.pm @@ -18,28 +18,30 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Patch Descent 2 to Avoid CD-ROM", - "priority"=>2, + +our @ListItem=( + "name"=>a_href('http://www.descent2.com/','Descent 2').' no-CD', + "platform"=>"dos", + "priority"=>160, + "icon"=>"d2-icon.jpeg", "download"=>"patchd2.zip", - "summary"=>"Patch for no-CD", + "summary"=>a_href('http://www.descent2.com/','Descent 2').' patch to avoid CD-ROM requirement', "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"i386 asm patch", - "description"=>"" - .'

Use this DOS' - .' program to patch/unpatch Descent 2 to not require CD-ROM to' - .' run. I need this as I have no CD-ROM installed in my computer. The exact' - .' bytes sequences needed was investigated by some-else hacker.

' + "description"=><<"HERE", +

Use this @{[ a_href 'http://www.calderathin.com/products/drdos/','DOS' ]} +program to patch/unpatch Descent 2 to not require CD-ROM to run.

+HERE ); 1; diff --git a/project/patchd2/Makefile.am b/project/patchd2/Makefile.am index 15690b7..5d19d4c 100644 --- a/project/patchd2/Makefile.am +++ b/project/patchd2/Makefile.am @@ -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/patchd2/d2-icon.jpeg b/project/patchd2/d2-icon.jpeg new file mode 100644 index 0000000..d891379 Binary files /dev/null and b/project/patchd2/d2-icon.jpeg differ diff --git a/project/pgsqlsubstr/Index.html.pl b/project/pgsqlsubstr/Index.html.pl new file mode 100755 index 0000000..81f807f --- /dev/null +++ b/project/pgsqlsubstr/Index.html.pl @@ -0,0 +1,46 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::pgsqlsubstr' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::pgsqlsubstr::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::pgsqlsubstr::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::pgsqlsubstr::ListItem::ListItem, + ); + + +print <<"HERE"; +

Although the patch is noted by Thomas G. Lockhart he is referring in me in +that text, believe me. :-)

+HERE + + +My::Web->footer(); diff --git a/project/pgsqlsubstr/ListItem.pm b/project/pgsqlsubstr/ListItem.pm new file mode 100755 index 0000000..dff23d9 --- /dev/null +++ b/project/pgsqlsubstr/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::pgsqlsubstr' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::pgsqlsubstr::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.postgresql.org/','PostgreSQL').'-6.3 fix', + "platform"=>"patch", + "priority"=>290, + "icon"=>"postgresql", + "summary"=>'Fixed substr() and substring() SQL functions', + "download-patch"=>'http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/backend/utils/adt/varlena.c.diff?r1=1.31&r2=1.32&f=u', + "link-ChangeLog entry"=>'http://developer.postgresql.org/cvsweb.cgi/pgsql-server/src/backend/utils/adt/varlena.c#rev1.32', + "license"=>"PD", + "maintenance"=>"accepted", + "language"=>"C patch", + "description"=><<"HERE", +

Fix off-by-one in the embedded substr() and substring() functions of +PostgreSQL engine.

+HERE + ); + +1; diff --git a/project/pgsqlsubstr/Makefile.am b/project/pgsqlsubstr/Makefile.am new file mode 100644 index 0000000..76e087c --- /dev/null +++ b/project/pgsqlsubstr/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/pgsqlsubstr/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/pgsqlsubstr/postgresql.png b/project/pgsqlsubstr/postgresql.png new file mode 100644 index 0000000..c70a41c Binary files /dev/null and b/project/pgsqlsubstr/postgresql.png differ diff --git a/project/phphash/Index.html.pl b/project/phphash/Index.html.pl new file mode 100755 index 0000000..3d28ad7 --- /dev/null +++ b/project/phphash/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::phphash' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::phphash::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::phphash::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::phphash::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/phphash/ListItem.pm b/project/phphash/ListItem.pm new file mode 100755 index 0000000..58b5543 --- /dev/null +++ b/project/phphash/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::phphash' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::phphash::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; + +use My::Web; + + +our @ListItem=( + "name"=>a_href('http://www.php.net/','PHP').'-3.0b6 fix', + "platform"=>"patch", + "priority"=>300, + "icon"=>"php", + "summary"=>'Avoid excessive use of memory for hashes', + "download-patch"=>'http://cvs.php.net/diff.php/php3/Attic/hash.c?r1=1.76&r2=1.77&ty=u', + "license"=>"PD", + "maintenance"=>"accepted", + "language"=>"C patch", + "description"=><<"HERE", +

Fixed a tiny bug in the hash initialization which caused excessive use of +memory. Fixed hash items deletion emulation by copying the hash except the item +being deleted.

+HERE + ); + +1; diff --git a/project/phphash/Makefile.am b/project/phphash/Makefile.am new file mode 100644 index 0000000..57e201b --- /dev/null +++ b/project/phphash/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/phphash/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/phphash/php.gif b/project/phphash/php.gif new file mode 100644 index 0000000..c187fb9 Binary files /dev/null and b/project/phphash/php.gif differ diff --git a/project/phphash/php.png b/project/phphash/php.png new file mode 100644 index 0000000..a049095 Binary files /dev/null and b/project/phphash/php.png differ diff --git a/project/pipebuf/index.html.pl b/project/pipebuf/Index.html.pl similarity index 56% rename from project/pipebuf/index.html.pl rename to project/pipebuf/Index.html.pl index c06b103..e3850af 100755 --- a/project/pipebuf/index.html.pl +++ b/project/pipebuf/Index.html.pl @@ -18,19 +18,31 @@ # 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 -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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::pipebuf::ListItem; +Wuse 'My::Project'; +Wuse 'project::pipebuf::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::pipebuf::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::pipebuf::ListItem::ListItem, ); + +print <<"HERE"; +

Progarm is implemented as two processes (no threads - no pthread libraries +needed, only IPC communication used). Features custom buffer sizes, prefill +(start writing of the first byte only after the WHOLE buffer has beel filled +up) and warning messages when buffer is getting emptied.

+HERE + + My::Web->footer(); diff --git a/project/pipebuf/ListItem.pm b/project/pipebuf/ListItem.pm index c6f2746..1b12092 100755 --- a/project/pipebuf/ListItem.pm +++ b/project/pipebuf/ListItem.pm @@ -18,31 +18,30 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"PipeBuf - Data Buffering Tool", - "priority"=>8, + +our @ListItem=( + "name"=>"pipebuf", + "platform"=>"unixuser", + "priority"=>440, "download"=>"pipebuf.c", - "summary"=>"Pipe buffer", + "summary"=>"UNIX pipe realtime buffering", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C", - "description"=>"" - .'

You can do a buffering of realtime data such as audio stream by inserting this program' - .' with traditional "UNIX filter" behaviour. It reads as fast as possible into' - .' its cache and also in the same time writes as fast as possible to the output. In fact' - .' it is implemented as two processes (no threads - no pthread libraries needed, only IPC' - .' communication used). Features custom buffer sizes, prefill (start writing of the first byte' - .' only after the WHOLE buffer has beel filled up) and warning messages when buffer is getting' - .' emptied.

' + "description"=><<"HERE", +

You can buffer realtime data such as audio stream by inserting this program +with traditional "UNIX filter" behaviour. It reads as fast as possible into +its cache and also in the same time writes as fast as possible to the output.

+HERE ); 1; diff --git a/project/pipebuf/Makefile.am b/project/pipebuf/Makefile.am index 1f51bd9..8646788 100644 --- a/project/pipebuf/Makefile.am +++ b/project/pipebuf/Makefile.am @@ -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/postget/Index.html.pl b/project/postget/Index.html.pl new file mode 100755 index 0000000..f97a35e --- /dev/null +++ b/project/postget/Index.html.pl @@ -0,0 +1,72 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::postget' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::postget::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::postget::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::postget::ListItem::ListItem, + ); + + +print <<"HERE"; + +
    +
  • +

    Store the + @{[ a_href $W->{"project_viewcvs"}."*checkout*/nethome/WWW/cgi-bin/postget.php?rev=HEAD",'downloaded file' ]} + as /home/lace/WWW/cgi-bin/postget.php.

    +
  • +
  • +

    Edit path to your priv directory in the stored + @{[ a_href $W->{"project_viewcvs"}."*checkout*/nethome/WWW/cgi-bin/postget.php?rev=HEAD",'postget.php' ]}. +

  • +
  • +

    Bookmark the following @{[ a_href 'http://freshmeat.net/','Freshmeat' ]} URL: + @{[ CGI::escapeHTML(q{http://localhost/~lace/cgi-bin/postget.php?_postget=http%3A%2F%2Ffreshmeat.net%2Flogin%2F&url=%2F&username=YOUR_USERNAME&password=_priv_postget.freshmeat.net.pwd&persistent=1}) ]} +

    +

    (Replace YOUR_USERNAME with your @{[ a_href 'http://freshmeat.net/','Freshmeat' ]} + account name.

    +
  • +
  • +

    Store your @{[ a_href 'http://freshmeat.net/','Freshmeat' ]} account password + to: ~/priv/postget.freshmeat.net.pwd

    +

    Protect it by 'chgrp nobody postget.freshmeat.net.pwd' and + 'chmod 640 postget.freshmeat.net.pwd' (it is not secure as long as + someone else can supply pages served by the same + @{[ a_href 'http://httpd.apache.org/','Apache webserver' ]}.

    +
  • +
+ +HERE + + +My::Web->footer(); diff --git a/project/postget/ListItem.pm b/project/postget/ListItem.pm new file mode 100755 index 0000000..ff499b8 --- /dev/null +++ b/project/postget/ListItem.pm @@ -0,0 +1,57 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::postget' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::postget::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; + +use My::Web; + + +our @ListItem=( + "name"=>"postget", + "platform"=>"web", + "trivia"=>1, + "priority"=>380, + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/WWW/cgi-bin/postget.php?rev=HEAD", + "summary"=>"Bookmark ".a_href('http://www.w3.org/TR/html4/interact/forms.html#h-17.13.1','POST') + .' forms, hide passwords', + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"PHP", + "description"=><<"HERE", +

You cannot bookmark pre-filled forms to your browser bookmarks. Although +browsers support storing of form data you still have to load the form page and +click its submit button. This script will allow you to:

+
    +
  • Store all @{[ a_href 'http://www.w3.org/TR/html4/interact/forms.html#h-17.13.1','POST' ]}ed + form data as @{[ a_href 'http://www.w3.org/TR/html4/interact/forms.html#h-17.13.1','GET' ]} data + (after '?' URL delimiter).
  • +
  • Replace all sensitive passwords by indirect references to your priv directory + to allow you to make your bookmark file itself public.
  • +
+HERE + ); + +1; diff --git a/project/postget/Makefile.am b/project/postget/Makefile.am new file mode 100644 index 0000000..58d0cb5 --- /dev/null +++ b/project/postget/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/postget/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/ppp9k/index.html.pl b/project/ppp9k/Index.html.pl similarity index 69% rename from project/ppp9k/index.html.pl rename to project/ppp9k/Index.html.pl index aaa0ba7..e056c4b 100755 --- a/project/ppp9k/index.html.pl +++ b/project/ppp9k/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::ppp9k::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/ppp9k/ListItem.pm b/project/ppp9k/ListItem.pm index 0c1a9e5..c5ff3f8 100755 --- a/project/ppp9k/ListItem.pm +++ b/project/ppp9k/ListItem.pm @@ -18,28 +18,32 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Nokia Communicator Leased Line", - "priority"=>6, - "download"=>"http://cvs.jankratochvil.net/viewcvs/*checkout*/nethome/home/lace/bin/ppp9k?rev=HEAD", - "summary"=>"Communication script", + +our @ListItem=( + "name"=>"ppp9k", + "platform"=>"unixuser", + "priority"=>410, + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "download"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/nethome/home/lace/bin/ppp9k?rev=HEAD", + "summary"=>"Connect device (Nokia Communicator) by serial PPP to your LAN", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"bash", - "description"=>"" - .'

Script will connect Nokia Communicator 9000i' - .' or 9110i through' - .' your local GNU/Linux PC Internet connection. You will also need' - .' Nokia Communicator utility Advanced PPP Settings.' + "description"=><<"HERE", +

Script will connect Nokia Communicator @{[ a_href 'http://www.nokia.com/phones/9000i','9000i' ]} +or @{[ a_href 'http://www.nokia.com/phones/9110i','9110i' ]} through +your local GNU/Linux PC Internet connection. You will also need +Nokia Communicator utility @{[ a_href 'http://www.mgroeber.de/nokia.htm','Advanced PPP Settings' ]}. +HERE ); 1; diff --git a/project/ppp9k/Makefile.am b/project/ppp9k/Makefile.am index 6aa772b..dadec1d 100644 --- a/project/ppp9k/Makefile.am +++ b/project/ppp9k/Makefile.am @@ -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/redirector_ad/index.html.pl b/project/redirector_ad/Index.html.pl similarity index 68% rename from project/redirector_ad/index.html.pl rename to project/redirector_ad/Index.html.pl index 4c72d1f..9a33401 100755 --- a/project/redirector_ad/index.html.pl +++ b/project/redirector_ad/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::redirector_ad::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/redirector_ad/ListItem.pm b/project/redirector_ad/ListItem.pm index a1efd03..17c9e6f 100755 --- a/project/redirector_ad/ListItem.pm +++ b/project/redirector_ad/ListItem.pm @@ -18,30 +18,33 @@ # 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; +use My::Web; -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", - "summary"=>"Banner killer", + +our @ListItem=( + "name"=>"redirector-ad", + "platform"=>"unixuser", + "priority"=>340, + "icon"=>"cnet-icon", + "cvs"=>"redirector-ad", + "summary"=>'Banner killer as '.a_href('http://www.squid-cache.org/','Squid').' redirector filter', + # FIXME: 'http://cvs.jankratochvil.net/viewcvs/' -> $W->{"project_viewcvs"} + "link-README"=>'http://cvs.jankratochvil.net/viewcvs/'."*checkout*/redirector-ad/README?rev=HEAD", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"Perl", - "description"=>"" - .'

Scripts that will simply discard graphical images referenced' - .' from web pages. Unlike other such packages it:

' - .'
    ' - .'
  • Does not need separate administration of another daemon
  • ' - .'
  • Does not do any page contents filtering (popups will still pass through!)
  • ' - .'
' + "description"=><<"HERE", +

Scripts discarding specified graphical images (read 'ads') referenced +from web pages. Unlike zillions of other such packages there +is no need for separate administration of another daemon.

+HERE ); 1; diff --git a/project/redirector_ad/Makefile.am b/project/redirector_ad/Makefile.am index 20a5c35..21cfd3a 100644 --- a/project/redirector_ad/Makefile.am +++ b/project/redirector_ad/Makefile.am @@ -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/redirector_ad/cnet-icon.png b/project/redirector_ad/cnet-icon.png new file mode 100644 index 0000000..8cc46aa Binary files /dev/null and b/project/redirector_ad/cnet-icon.png differ diff --git a/project/smbfs/Index.html.pl b/project/smbfs/Index.html.pl new file mode 100755 index 0000000..68ace61 --- /dev/null +++ b/project/smbfs/Index.html.pl @@ -0,0 +1,52 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::smbfs' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::smbfs::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::smbfs::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::smbfs::ListItem::ListItem, + ); + + +print <<"HERE"; +

Simple patch to increase virtual block size of SMB filesytem in Linux +kernel. It improved tranfer rate of cp command almost +by a factor of 2 (approx. 700KB -> 1300KB or something +like about it) in the local conditions. Now cp should be as fast +as cat redirected across networked filesystems.

+

Unfortunately the blocksize causes different (4 times smaller) sizes +reported by du command as it measures it in blocks +and not in kilobytes as some people think.

+HERE + + +My::Web->footer(); diff --git a/project/smbfs/ListItem.pm b/project/smbfs/ListItem.pm index e35dc74..d499dff 100755 --- a/project/smbfs/ListItem.pm +++ b/project/smbfs/ListItem.pm @@ -18,33 +18,30 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"SMB Kernel Filesystem Acceleration", - "priority"=>6, + +our @ListItem=( + "name"=>"smbfs patch", + "platform"=>"unixuser", + "trivia"=>1, + "priority"=>80, "download"=>"smbfs-2.1.132-blocksize.diff", - "summary"=>"SMB acceleration patch", + "summary"=>'Linux kernel smbfs acceleration patch', "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C patch", - "description"=>"" - .'

Simple patch to increase virtual block size of SMB filesytem in Linux' - .' kernel. For me it improved tranfer rate of cp command almost' - .' by a factor of 2 (approx. 700KB -> 1300KB or something' - .' like about it). Now cp should be as fast as cat' - .' redirected across networked filesystems.

' - .'

Unfortunately the blocksize causes different (4 times smaller) sizes' - .' reported by du command as it measures it in blocks' - .' and not in kilobytes as some people think.

' - + "description"=><<"HERE", +

Accelerate twice the copying transfer rate for client GNU/Linux from SMB +server share (Microsoft Windows). +HERE ); 1; diff --git a/project/smbfs/Makefile.am b/project/smbfs/Makefile.am index b00fdbb..2f7332f 100644 --- a/project/smbfs/Makefile.am +++ b/project/smbfs/Makefile.am @@ -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/smbfs/index.html.pl b/project/smbfs/index.html.pl deleted file mode 100755 index 1a54ee3..0000000 --- a/project/smbfs/index.html.pl +++ /dev/null @@ -1,36 +0,0 @@ -#! /usr/bin/perl -# -# $Id$ -# Main page of 'My::Project::smbfs' -# Copyright (C) 2003 Jan Kratochvil -# -# 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 project::smbfs::ListItem; - - -My::Web->init_project( - "ListItem"=>\%My::Project::smbfs::ListItem, - ); - -My::Web->footer(); diff --git a/project/sshpatch/index.html.pl b/project/sshpatch/Index.html.pl similarity index 80% rename from project/sshpatch/index.html.pl rename to project/sshpatch/Index.html.pl index f9083e5..9f75b3c 100755 --- a/project/sshpatch/index.html.pl +++ b/project/sshpatch/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::sshpatch::ListItem; +Wuse 'My::Project'; +Wuse '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'; diff --git a/project/sshpatch/ListItem.pm b/project/sshpatch/ListItem.pm index 0e516e6..f0aef26 100755 --- a/project/sshpatch/ListItem.pm +++ b/project/sshpatch/ListItem.pm @@ -18,29 +18,35 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"SSH-1 patch for KeepAliveData and OnDemandForward", - "priority"=>7, + +our @ListItem=( + "name"=>"SSH-1 patch", + "platform"=>"unixuser", + "priority"=>180, "download"=>"ssh-1.2.30-kadata+odforw.tar.gz", "download-SSH-1, version 1.2.30, .src.rpm"=>"ftp://ftp.fi.muni.cz/pub/ssh/local-fi.muni.cz/linux/ssh-1.2.30-1i.src.rpm", "download-SSH-1, version 1.2.30, .tar.gz"=>"ftp://ftp.fi.muni.cz/pub/ssh/ssh-1.2.30.tar.gz", - "summary"=>"SSH enhancement", + "summary"=>"SSH-1 KeepAliveData and OnDemandForward features", "license"=>"PD", - "maintenance"=>"update", - "reason"=>"OpenSSH is now preferred but this patch is not yet migrated.", + "maintenance"=>"update-".a_href('http://www.openssh.com/','OpenSSH').' is preferred although this patch is not migrated.', "language"=>"C patch", - "description"=>"" - .'This patch will protect your mostly idle SSH connection from broken masquerading firewalls' - .' and/or it will also provide _on-demand_ tunnelling.' + "description"=><<"HERE", +

    +
  • KeepAliveData: Protect your mostly idle SSH connection from broken + masquerading firewalls which forget and reset the idle connections.
  • +
  • OnDemandForward: Setup the connection only after the first client + connected to the local tunnel (-L) connection side.
  • +
+HERE ); 1; diff --git a/project/sshpatch/Makefile.am b/project/sshpatch/Makefile.am index 4b005ae..c15394f 100644 --- a/project/sshpatch/Makefile.am +++ b/project/sshpatch/Makefile.am @@ -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/ssht/Index.html.pl b/project/ssht/Index.html.pl new file mode 100755 index 0000000..319a299 --- /dev/null +++ b/project/ssht/Index.html.pl @@ -0,0 +1,78 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::ssht' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::ssht::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::ssht::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::ssht::ListItem::ListItem, + ); + + +my $cvsfile=sub ($) { +my($file)=@_; + + return a_href $W->{"project_viewcvs"}.'/*checkout*/ssht/hostintranet/etc-inittab?rev=HEAD', + CGI::escapeHTML($file); +}; + +print <<"HERE"; + +
    +
  • +

    Replace all strings hostintranet by the name of your firewalled + intranet machine (without any dots - it must be valid string token).

    +
  • +
  • +

    Replace all strings public.internet.com by the hostname of your + server in public Internet. Replace 1.2.3.4-IP-of-public.internet.com + with IP address of this host

    +
  • +
  • Generate new keypair by 'ssh-keygen -t dsa'.

    +

    Place its public key part to + @{[ &{$cvsfile}('public.internet.com/home-hostintranet-ssht/.ssh/authorized_keys') ]}.

    +

    Place its private key part to + @{[ &{$cvsfile}('hostintranet/public.internet.com--hostintranet-ssht--identity') ]}. + Protect this file by 'chmod 600 hostintranet/public.internet.com--hostintranet-ssht--identity'.

    +
  • +

    Append line from @{[ &{$cvsfile}('public.internet.com/etc-passwd') ]} + to the file /etc/passwd on your server in public Internet.

    +
  • +
  • +

    Append line from @{[ &{$cvsfile}('hostintranet/etc-inittab') ]} to + the file /etc/inittab on your firewalled intranet machine.

    +

    Execute 'init q' command there.

    +
  • +
+HERE + + +My::Web->footer(); diff --git a/project/ssht/ListItem.pm b/project/ssht/ListItem.pm new file mode 100755 index 0000000..90403f0 --- /dev/null +++ b/project/ssht/ListItem.pm @@ -0,0 +1,51 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::ssht' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::ssht::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; + +use My::Web; + + +our @ListItem=( + "name"=>"ssht", + "platform"=>"unixuser", + "priority"=>90, + "cvs"=>"ssht", + "summary"=>'Unattended intranet host accessibility by '.a_href('http://www.openssh.org/','SSH').' tunnel', + "license"=>"PD", + "maintenance"=>"ready", + "sponsorship"=>a_href('http://www.jklabs.cz/','JKLabs'), + "language"=>"bash", + "description"=><<"HERE", +

Do you need to admin remote host placed in the intranet behind firewall out of your contrl? +If the firewall performat NAT (masquerade) where you can connect from +the intranet to the outer world by @{[ a_href 'http://www.openssh.org/','SSH' ]} +you can use these security safe scripts.

+

If you are able to set up port forwarding on the firewall you do not need any such scripts. +In the case of HTTP-only proxy you cannot use these scripts - look elsewhere.

+HERE + ); + +1; diff --git a/project/ssht/Makefile.am b/project/ssht/Makefile.am new file mode 100644 index 0000000..c6838b9 --- /dev/null +++ b/project/ssht/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/ssht/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/step/index.html.pl b/project/step/Index.html.pl similarity index 70% rename from project/step/index.html.pl rename to project/step/Index.html.pl index 0c59086..7b16ae0 100755 --- a/project/step/index.html.pl +++ b/project/step/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::step::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/step/ListItem.pm b/project/step/ListItem.pm index 3c1266f..b158b67 100755 --- a/project/step/ListItem.pm +++ b/project/step/ListItem.pm @@ -18,27 +18,30 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"STEP - Student's Trainee Exchange Programme", - "priority"=>4, + +our @ListItem=( + "name"=>"STEP", + "platform"=>"web", + "priority"=>130, "download"=>"step.tar.gz", "summary"=>"Custom web database application", "license"=>"PD", "maintenance"=>"dead", "language"=>"PHP 3.0", - "description"=>"" - .'

Preview of a possible future web database solution for some lawyers association.' - .' Currently it remains as a source of some web development PHP 3.0' - .' codebase to be reused in other projects.

' + "description"=><<"HERE", +

Preview of a possible future web database solution for a lawyers association. +Currently it remains as a source of some web development @{[ a_href 'http://www.php.net/','PHP 3.0' ]} +codebase to be reused in other projects.

+HERE ); 1; diff --git a/project/step/Makefile.am b/project/step/Makefile.am index 4a0f95c..c89769e 100644 --- a/project/step/Makefile.am +++ b/project/step/Makefile.am @@ -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/surprise/index.html.pl b/project/surprise/Index.html.pl similarity index 67% rename from project/surprise/index.html.pl rename to project/surprise/Index.html.pl index e51279f..f233afd 100755 --- a/project/surprise/index.html.pl +++ b/project/surprise/Index.html.pl @@ -18,21 +18,26 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::surprise::ListItem; +Wuse 'My::Project'; +Wuse 'project::surprise::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::surprise::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::surprise::ListItem::ListItem, ); -print '
'.My::Web::img("surprise-gnome-0.gif","Gnome client").'
'."\n"; + +print centerimg "surprise-gnome-0","Gnome client"; + My::Web->footer(); diff --git a/project/surprise/ListItem.pm b/project/surprise/ListItem.pm index 1d2b900..f5eb31a 100755 --- a/project/surprise/ListItem.pm +++ b/project/surprise/ListItem.pm @@ -18,31 +18,45 @@ # 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; +use My::Web; -our %ListItem=( + +our @ListItem=( "name"=>"Partition Surprise", - "priority"=>9, + "platform"=>"unixuser", + "priority"=>650, + "icon"=>"surprise-gnome-0-icon", "download-Page on SourceForge.net"=>"http://sourceforge.net/project/showfiles.php?group_id=10546", "download-ISO Image from SourceForge.net"=>"http://surprise.sourceforge.net/download/surprise-rel7.iso.zip", "link-Homepage on SourceForge.net"=>"http://surprise.sourceforge.net/", "link-Project Page on SourceForge.net"=>"http://sourceforge.net/projects/surprise/", - "summary"=>"Partition manager", + "summary"=>"GPLed Partition Magic clone", "license"=>"GPL", + "sponsorship"=>a_href('http://www.suse.com/','SuSE'), "maintenance"=>"update", - "ownership"=>"Coauthor; development team of 5 people", + "ownership"=><<"HERE", +Member of the development team: +
    +
  • @{[ a_href 'http://atrey.karlin.mff.cuni.cz/~jack/','Jan Kara' ]}
  • +
  • @{[ a_href 'http://atrey.karlin.mff.cuni.cz/~kral/','Daniel Kral' ]}
  • +
  • @{[ a_href 'http://www.jankratochvil.net/','Jan Kratochvil' ]}
  • +
  • @{[ a_href 'http://www.ucw.cz/~robert/','Robert Spalek' ]}
  • +
  • @{[ a_href 'http://kiwi.ms.mff.cuni.cz/~tom/','Tomas Tichy' ]}
  • +
+HERE "language"=>"C", - "description"=>"" - .'

Partition Surprise is a GPL partition managing software for Linux. Partition' - .'resizes, moves and conversions is implemented. Limited support of operations on' - .'mounted ext2-filesystem included as well.' + "description"=><<"HERE", +

Partition Surprise is a GPL partition managing software for GNU/Linux. Partition +resizes, moves and conversions is implemented. Limited support of operations on +mounted ext2-filesystem included as well. +HERE ); 1; diff --git a/project/surprise/Makefile.am b/project/surprise/Makefile.am index c4c5552..482a487 100644 --- a/project/surprise/Makefile.am +++ b/project/surprise/Makefile.am @@ -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-icon.png b/project/surprise/surprise-gnome-0-icon.png new file mode 100644 index 0000000..4553bab Binary files /dev/null and b/project/surprise/surprise-gnome-0-icon.png differ diff --git a/project/surprise/surprise-gnome-0.gif b/project/surprise/surprise-gnome-0.gif deleted file mode 100644 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 index 0000000..2d6431e Binary files /dev/null and b/project/surprise/surprise-gnome-0.png differ diff --git a/project/tac_plus/index.html.pl b/project/tac_plus/Index.html.pl similarity index 81% rename from project/tac_plus/index.html.pl rename to project/tac_plus/Index.html.pl index d0b0ff2..56ae6f0 100755 --- a/project/tac_plus/index.html.pl +++ b/project/tac_plus/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::tac_plus::ListItem; +Wuse 'My::Project'; +Wuse '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'; diff --git a/project/tac_plus/ListItem.pm b/project/tac_plus/ListItem.pm index 93f8679..40674b8 100755 --- a/project/tac_plus/ListItem.pm +++ b/project/tac_plus/ListItem.pm @@ -18,31 +18,38 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"TACACS+ Server NAS Host Based Authorization", - "priority"=>8, + +our @ListItem=( + "name"=>"tac_plus auth", + "platform"=>"unixuser", + "priority"=>270, + "icon"=>"cisco-icon.jpeg", "download-GTS rel.4 diff for TACACS+ v4.0.3"=>"tac_plus-F4.0.3.alpha.8.gts4.diff.gz", "download-TACACS+ v4.0.3, Devrim Seral rel.8"=>"http://www.gazi.edu.tr/tacacs/index.php?page=download", - "link-CVS repository for GTS version"=>"http://cvs.jankratochvil.net/viewcvs/tac_plus/", - "summary"=>"Network server security", + "cvs"=>"tac_plus", + "link-".a_href('http://freshmeat.net/','Freshmeat')=> + a_href('http://freshmeat.net/branches/18747/','Tacacs+ - Authorization by NAS host patch branch'), + "summary"=>a_href('http://www.cisco.com/warp/public/614/7.html','Cisco TACACS+') + .' NAS host based authorization', "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"pending", "language"=>"C patch", - "sponsorship"=>"GTS", - "description"=>"" - .'

Patch provides complete freedom of specifying ANY' - .' configuration changes depending on the specific NAS the user is being logged' - .' on. This involves different enable password, NAS keys but now also: various' - .' specific commands, permitted services etc.

' + "sponsorship"=>a_href('http://www.gtsgroup.cz/'.'GTS'), + "description"=><<"HERE", +

Patch provides complete freedom of specifying any +configuration changes depending on the specific NAS the user is being logged +on. This involves different enable password, NAS keys but now also: various +specific commands, permitted services etc.

+HERE ); 1; diff --git a/project/tac_plus/Makefile.am b/project/tac_plus/Makefile.am index dfbc836..c2261aa 100644 --- a/project/tac_plus/Makefile.am +++ b/project/tac_plus/Makefile.am @@ -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/tac_plus/cisco-icon.jpeg b/project/tac_plus/cisco-icon.jpeg new file mode 100644 index 0000000..7c68e75 Binary files /dev/null and b/project/tac_plus/cisco-icon.jpeg differ diff --git a/project/tcp_rto/Index.html.pl b/project/tcp_rto/Index.html.pl new file mode 100755 index 0000000..5c5dd9a --- /dev/null +++ b/project/tcp_rto/Index.html.pl @@ -0,0 +1,55 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::tcp_rto' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::tcp_rto::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::tcp_rto::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::tcp_rto::ListItem::ListItem, + ); + + +print <<"HERE"; +

This patch can solve your problems if you have network connection dropping too much +packets. In standard case the Linux kernel will correctly increase our round-trip-time +of connection slowing the transfer rate up to the unusable state.

+

After applying this patch you can set your maximal round-trip-time in file +"/proc/sys/net/ipv4/tcp_rto_max", it is expressed in Hz +units (100-per-second on x86 platform). You may need also to enlarge +your maximal retry count in "/proc/sys/net/ipv4/tcp_retries2", +otherwise your machine will reject the connection as it will have to retry +the packets more than in sane states.

+

Please use this feature very carefully! You are violating +RFC standards and you can get your network administrators to be very angry!

+HERE + + +My::Web->footer(); diff --git a/project/tcp_rto/ListItem.pm b/project/tcp_rto/ListItem.pm index 7338b40..9f9ca54 100755 --- a/project/tcp_rto/ListItem.pm +++ b/project/tcp_rto/ListItem.pm @@ -18,36 +18,32 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Linux Kernel Patch for Maximal Round-trip-time", - "priority"=>7, + +our @ListItem=( + "name"=>"tcp_rto", + "platform"=>"unixuser", + "trivia"=>1, + "priority"=>330, "download-Linux kernel 2.2.17 patch"=>"linux-2.2.17-tcp_rto-1.diff", "download-Linux kernel 2.4.16 patch"=>"linux-2.4.16-tcp_rto-1.diff", - "summary"=>"Network workaround", + "summary"=>"Linux kernel maximal TCP round-trip-time patch", "license"=>"GPL", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C patch", - "description"=>"" - .'

This patch can solve your problems if you have network connection dropping too much' - .' packets. In standard case the Linux kernel will correctly increase our round-trip-time' - .' of connection slowing the transfer rate up to the unusable state.

' - .'

After applying this patch you can set your maximal round-trip-time in file' - .' "/proc/sys/net/ipv4/tcp_rto_max", it is expressed in Hz' - .' units (100-per-second on x86 platform). You may need also to enlarge' - .' your maximal retry count in "/proc/sys/net/ipv4/tcp_retries2",' - .' otherwise your machine will reject the connection as it will have to retry' - .' the packets more than in sane states.

' - .'

Please use this feature very carefully! You are violating' - .' RFC standards and you can get your network administrators to be very angry!

' + "description"=><<"HERE", +

Solve your problems with network connection dropping too much of your +packets. It forces Linux kernel to insist repeating the packages to prevent +slowdown of the TCP connection up to its unusable state.

+HERE ); 1; diff --git a/project/tcp_rto/Makefile.am b/project/tcp_rto/Makefile.am index 1e511ee..a3bd7f7 100644 --- a/project/tcp_rto/Makefile.am +++ b/project/tcp_rto/Makefile.am @@ -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/tcp_rto/index.html.pl b/project/tcp_rto/index.html.pl deleted file mode 100755 index 361a9cf..0000000 --- a/project/tcp_rto/index.html.pl +++ /dev/null @@ -1,36 +0,0 @@ -#! /usr/bin/perl -# -# $Id$ -# Main page of 'My::Project::tcp_rto' -# Copyright (C) 2003 Jan Kratochvil -# -# 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 project::tcp_rto::ListItem; - - -My::Web->init_project( - "ListItem"=>\%My::Project::tcp_rto::ListItem, - ); - -My::Web->footer(); diff --git a/project/tcpdump/index.html.pl b/project/tcpdump/Index.html.pl similarity index 79% rename from project/tcpdump/index.html.pl rename to project/tcpdump/Index.html.pl index b709890..5eabacb 100755 --- a/project/tcpdump/index.html.pl +++ b/project/tcpdump/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::tcpdump::ListItem; +Wuse 'My::Project'; +Wuse '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'; diff --git a/project/tcpdump/ListItem.pm b/project/tcpdump/ListItem.pm index 19f0fed..afb52fd 100755 --- a/project/tcpdump/ListItem.pm +++ b/project/tcpdump/ListItem.pm @@ -18,26 +18,30 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"tcpdump ASCII Dump Patch", - "priority"=>6, + +our @ListItem=( + "name"=>"tcpdump ASCII", + "platform"=>"unixuser", + "trivia"=>1, + "priority"=>170, "download"=>"tcpdump-3.4-ASCIIdump.diff", "download-tcpdump-3.4"=>"ftp://ftp.ee.lbl.gov/tcpdump-3.4.tar.Z", - "summary"=>"tcpdump readability patch", + "summary"=>"tcpdump(1) patch for better output readable as ASCII", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C patch", - "description"=>"" - .'

Makes the text messages of tcpdump(1) readable when option -x is used.

' + "description"=><<"HERE", +

Makes the text messages of tcpdump(1) readable when option -x is used.

+HERE ); 1; diff --git a/project/tcpdump/Makefile.am b/project/tcpdump/Makefile.am index 7d428e8..0d57b65 100644 --- a/project/tcpdump/Makefile.am +++ b/project/tcpdump/Makefile.am @@ -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/timeplan/index.html.pl b/project/timeplan/Index.html.pl similarity index 69% rename from project/timeplan/index.html.pl rename to project/timeplan/Index.html.pl index 5eeba24..ac46a0a 100755 --- a/project/timeplan/index.html.pl +++ b/project/timeplan/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::timeplan::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/timeplan/ListItem.pm b/project/timeplan/ListItem.pm index 248fa57..821fa97 100755 --- a/project/timeplan/ListItem.pm +++ b/project/timeplan/ListItem.pm @@ -18,28 +18,34 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Time Log Summarizer", - "priority"=>6, + +our @ListItem=( + "name"=>"timeplan", + "platform"=>"unixuser", + "trivia"=>1, + "priority"=>100, + "icon"=>"digiclock.jpeg", "download"=>"timeplan-1.0.1.tar.gz", - "summary"=>"Time management", + "cvs"=>"timeplan", + "summary"=>"Calculate statistics from your personal time tracking notes", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C", - "description"=>"" - .'

Software to do summaries of time log - what have you spent much time on.' - .' The greatest effect to me was just the writing of such time log: Consecutively' - .' you do not spend such time on useless issues as you would be forced to write' - .' such event to your log.

' + "description"=><<"HERE", +

Software to do summaries of time log - what have you spent much time on. +The greatest effect to me was just the writing of such time log: Consecutively +you do not spend such time on useless issues as you would be forced to write +such event to your log.

+HERE ); 1; diff --git a/project/timeplan/Makefile.am b/project/timeplan/Makefile.am index db36941..d773411 100644 --- a/project/timeplan/Makefile.am +++ b/project/timeplan/Makefile.am @@ -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/timeplan/digiclock.jpeg b/project/timeplan/digiclock.jpeg new file mode 100644 index 0000000..4e4ccbc Binary files /dev/null and b/project/timeplan/digiclock.jpeg differ diff --git a/project/vblib/index.html.pl b/project/vblib/Index.html.pl similarity index 69% rename from project/vblib/index.html.pl rename to project/vblib/Index.html.pl index 303dd3d..65f4b0c 100755 --- a/project/vblib/index.html.pl +++ b/project/vblib/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::vblib::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/vblib/ListItem.pm b/project/vblib/ListItem.pm index 0e2c134..344320f 100755 --- a/project/vblib/ListItem.pm +++ b/project/vblib/ListItem.pm @@ -18,29 +18,32 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Variable Buffers Library", - "priority"=>4, + +our @ListItem=( + "name"=>"vblib", + "platform"=>"unixdevel", + "priority"=>30, "download"=>"vblib-1.0.0.tar.gz", - "summary"=>"Streams library", + "summary"=>"High performance memory streams library", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C", - "sponsorship"=>"Princip, a.s.", - "description"=>"" - .'

Enables application to easily do input/output functions (like' - .' read/write, printf etc.) with memory streams while using performance effective' - .' functions. Simple buffer copying/moving would be possible but it would case a' - .' major performance hit if not using algorithms implemented in this library.

' + "sponsorship"=>"Geoinvest", + "description"=><<"HERE", +

Enables application to easily do input/output functions (like +read/write, printf etc.) with memory streams while using performance effective +functions. Simple buffer copying/moving would be possible but it would case a +major performance hit if not using algorithms implemented in this library.

+HERE ); 1; diff --git a/project/vblib/Makefile.am b/project/vblib/Makefile.am index 0a0c8d1..ced12a6 100644 --- a/project/vblib/Makefile.am +++ b/project/vblib/Makefile.am @@ -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/wayback/Index.html.pl b/project/wayback/Index.html.pl new file mode 100755 index 0000000..592f6e3 --- /dev/null +++ b/project/wayback/Index.html.pl @@ -0,0 +1,39 @@ +#! /usr/bin/perl +# +# $Id$ +# Main page of 'My::Project::wayback' +# Copyright (C) 2003 Jan Kratochvil +# +# 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::wayback::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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +Wuse 'My::Project'; +Wuse 'project::wayback::ListItem'; + + +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::wayback::ListItem::ListItem, + ); + +My::Web->footer(); diff --git a/project/wayback/ListItem.pm b/project/wayback/ListItem.pm new file mode 100755 index 0000000..7538911 --- /dev/null +++ b/project/wayback/ListItem.pm @@ -0,0 +1,48 @@ +#! /usr/bin/perl +# +# $Id$ +# Definition of 'My::Project::wayback' for list.cgi.pl +# Copyright (C) 2003 Jan Kratochvil +# +# 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::wayback::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; + +use My::Web; + + +our @ListItem=( + "name"=>"wayback", + "platform"=>"unixuser", + "trivia"=>1, + "priority"=>320, + "cvs"=>"wayback", + "summary"=>"Shift system time backwards for a specific application", + "license"=>"PD", + "maintenance"=>"ready", + "language"=>"C", + "description"=><<"HERE", +

This programs is userful for time-limited demo versions, of course.

+

Just set environment variable "WAYBACK" to the number of seconds to shift the system time back. +Set "LD_PRELOAD" to the provided libwayback.so and run your demo program.

+HERE + ); + +1; diff --git a/project/wayback/Makefile.am b/project/wayback/Makefile.am new file mode 100644 index 0000000..4b296dc --- /dev/null +++ b/project/wayback/Makefile.am @@ -0,0 +1,23 @@ +# $Id$ +# automake source for the Makefile of project/wayback/ subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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+= \ + ListItem.pm \ + Index.html.pl diff --git a/project/winvnc/index.html.pl b/project/winvnc/Index.html.pl similarity index 85% rename from project/winvnc/index.html.pl rename to project/winvnc/Index.html.pl index fa5b3ff..027f6f0 100755 --- a/project/winvnc/index.html.pl +++ b/project/winvnc/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::winvnc::ListItem; +Wuse 'My::Project'; +Wuse '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'; diff --git a/project/winvnc/ListItem.pm b/project/winvnc/ListItem.pm index b677286..8bf0773 100755 --- a/project/winvnc/ListItem.pm +++ b/project/winvnc/ListItem.pm @@ -18,33 +18,37 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Patch for Secret WinVNC Server Run", - "priority"=>6, + +our @ListItem=( + "name"=>"WinVNC hide", + "platform"=>"w32", + "priority"=>560, + "icon"=>"nowinvnc", "download-already patched version 3.3.3r9"=>"vnc-3.3.3r9_x86_win32-exe-SECRET.zip", "download-original version 3.3.3r9"=>"http://www.uk.research.att.com/vnc/dist/vnc-3.3.3r9_x86_win32.zip", "download-already patched version 3.3.3r7"=>"vnc-3.3.3r7_x86_win32-exe-SECRET.zip", "download-original version 3.3.3r7"=>"http://www.uk.research.att.com/vnc/dist/vnc-3.3.3r7_x86_win32.zip", "link-VNC Homepage"=>"http://www.uk.research.att.com/vnc/", - "summary"=>"Patch to hide WinVNC", + "summary"=>"Hide running WinVNC server", "license"=>"PD", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"i386 asm patch", - "description"=>"" - .'

If you install WinVNC in' - .' MS Windows' - .' environment, you will notice that it creates its own small icon in System Tray.' - .' Sometimes you want to get rid of this visible icon and you cannot remove it by any configuration' - .' settings.

' + "description"=><<"HERE", +

If you install WinVNC in +@{[ a_href 'http://www.microsoft.com/','MS' ]} @{[ a_href 'http://www.microsoft.com/windows/','Windows' ]} +environment, you will notice that it creates its own small icon in System Tray. +Sometimes you want to get rid of this visible icon and you cannot remove it by any configuration +settings.

+HERE ); 1; diff --git a/project/winvnc/Makefile.am b/project/winvnc/Makefile.am index 4f2fe05..4a75ab1 100644 --- a/project/winvnc/Makefile.am +++ b/project/winvnc/Makefile.am @@ -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/winvnc/nowinvnc.png b/project/winvnc/nowinvnc.png new file mode 100644 index 0000000..8fa619e Binary files /dev/null and b/project/winvnc/nowinvnc.png differ diff --git a/project/wllib/index.html.pl b/project/wllib/Index.html.pl similarity index 69% rename from project/wllib/index.html.pl rename to project/wllib/Index.html.pl index 061bae3..826d340 100755 --- a/project/wllib/index.html.pl +++ b/project/wllib/Index.html.pl @@ -18,19 +18,22 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::wllib::ListItem; +Wuse 'My::Project'; +Wuse '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(); diff --git a/project/wllib/ListItem.pm b/project/wllib/ListItem.pm index c490ca7..c607d3c 100755 --- a/project/wllib/ListItem.pm +++ b/project/wllib/ListItem.pm @@ -18,29 +18,31 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Line drawing Crossplatform Library", - "priority"=>4, + +our @ListItem=( + "name"=>"wllib", + "platform"=>"unixdevel", + "priority"=>40, "download"=>"wllib-1.0.0.tar.gz", - "summary"=>"Graphics library", + "summary"=>"Graphics library for crossplatform line drawing", "license"=>"PD", - "maintenance"=>"obsolete", - "reason"=>"Supported backends are no longer being used.", + "maintenance"=>"obsolete-Any of the supported backends are no longer being used.", "language"=>"C", - "description"=>"" - .'

This library should make you generically use line drawing on the following platforms:' - .' UNIX/X Windows System X11,' - .' UNIX/SVGAlib and' - .' AmigaOS.

' + "description"=><<"HERE", +

This library should make you generically use line drawing on the following platforms: +@{[ a_href 'http://www.x.org/','UNIX/X Windows System X11 (libX11)' ]}, +@{[ a_href 'http://www.svgalib.org/','UNIX/SVGAlib' ]} and +@{[ a_href 'http://www.amiga.com/','AmigaOS' ]}.

+HERE ); 1; diff --git a/project/wllib/Makefile.am b/project/wllib/Makefile.am index 1fb9668..0bbd406 100644 --- a/project/wllib/Makefile.am +++ b/project/wllib/Makefile.am @@ -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/xbill/index.html.pl b/project/xbill/Index.html.pl similarity index 59% rename from project/xbill/index.html.pl rename to project/xbill/Index.html.pl index 9c25cc0..05b90a5 100755 --- a/project/xbill/index.html.pl +++ b/project/xbill/Index.html.pl @@ -18,19 +18,31 @@ # 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/,)[0]]}; eval "use lib '$top_dir'"; close F; } use My::Web; -use project::xbill::ListItem; +Wuse 'My::Project'; +Wuse 'project::xbill::ListItem'; -My::Web->init_project( - "ListItem"=>\%My::Project::xbill::ListItem, +My::Project->init_project( + "__PACKAGE__"=>__PACKAGE__, + "ListItem"=>\@project::xbill::ListItem::ListItem, ); + +print <<"HERE"; +

This project has been moved to @{[ a_href 'http://sourceforge.net/','SourceForge' ]}. +Please refer to its @{[ a_href 'http://xbill.sourceforge.net/','SourceForge project page' ]}.

+ +@{[ centerimg "redmond_.jpeg","xBill" ]} +HERE + + My::Web->footer(); diff --git a/project/xbill/ListItem.pm b/project/xbill/ListItem.pm index 80b9885..6a8b23b 100755 --- a/project/xbill/ListItem.pm +++ b/project/xbill/ListItem.pm @@ -18,29 +18,32 @@ # 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; +use My::Web; -our %ListItem=( - "name"=>"Classic xBill game", - "priority"=>7, + +our @ListItem=( + "name"=>"Gnome xBill", + "platform"=>"unixuser", + "priority"=>570, + "icon"=>"redmond-icon", "link-Download from SourceForge.net"=>"http://sourceforge.net/project/showfiles.php?group_id=10700", "link-Homepage on SourceForge.net"=>"http://xbill.sourceforge.net/", - "summary"=>"Graphical game", + "summary"=>"xBill game rewritten with network support and Gnome/GTK+", "license"=>"GPL", - "maintenance"=>"finished", + "maintenance"=>"ready", "language"=>"C", - "description"=>"" - .'

Almost-rewritten classical xBill game,' - .' this project has been moved to SourceForge.' - .' Please refer to the page linked above' - .' to have further access to it.

' + "description"=><<"HERE", +

Rewritten @{[ a_href 'ftp://ftp.x.org/contrib/games/xbill-2.0.tgz','classical xBill game' ]}. +

Features list: @{[ a_href 'http://www.gnome.org/','Gnome/GTK+' ]} UI, +network gameplay, C++ no longer required, portability.

+HERE ); 1; diff --git a/project/xbill/Makefile.am b/project/xbill/Makefile.am index 7414d24..e7ce4de 100644 --- a/project/xbill/Makefile.am +++ b/project/xbill/Makefile.am @@ -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/xbill/redmond-icon.png b/project/xbill/redmond-icon.png new file mode 100644 index 0000000..d229977 Binary files /dev/null and b/project/xbill/redmond-icon.png differ diff --git a/project/xbill/redmond_.jpeg b/project/xbill/redmond_.jpeg new file mode 100644 index 0000000..3829885 Binary files /dev/null and b/project/xbill/redmond_.jpeg differ diff --git a/resume/.htaccess b/resume/.htaccess new file mode 100644 index 0000000..5a3b380 --- /dev/null +++ b/resume/.htaccess @@ -0,0 +1 @@ +DirectoryIndex Resume-JanKratochvil.html.pl diff --git a/resume/Makefile.am b/resume/Makefile.am new file mode 100644 index 0000000..037201d --- /dev/null +++ b/resume/Makefile.am @@ -0,0 +1,19 @@ +# $Id$ +# automake source for the Makefile of Resume subdir +# Copyright (C) 2003 Jan Kratochvil +# +# 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 diff --git a/resume/Resume-JanKratochvil.html.pl b/resume/Resume-JanKratochvil.html.pl new file mode 100755 index 0000000..c982285 --- /dev/null +++ b/resume/Resume-JanKratochvil.html.pl @@ -0,0 +1,301 @@ +#! /usr/bin/perl +# +# $Id$ +# Resume page Perl template. +# Copyright (C) 2003 Jan Kratochvil +# +# 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 resume::ResumeJanKratochvil; +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/,)[0]]}; eval "use lib '$top_dir'"; close F; } +use My::Web; +require CGI; +require Crypt::Rot13; +Wrequire 'My::Project'; + + +my $W=My::Web->init( + "__PACKAGE__"=>__PACKAGE__, + "title"=>"Resume", + "section"=>"Resume", + "heading"=>0, + "footer"=>0, + "head_css"=>" +td { vertical-align: top; } +table { border-collapse: collapse; border-style: solid; border-width: 1px; margin: 8px; } +A[href] { text-decoration: inherit; /* revoke underline */ } +A[href].project { text-decoration: underline; } +.platform { font-style: italic; white-space: nowrap; } +table.referees td.com { text-align: center; } +.techs { white-space: nowrap; } +", + "args_check"=>{ + "referees"=>'', # Do not bother with '^(?:(?i)referees)?$' + }, + ); +My::Web->heading(); + + +my %item=( My::Project::item_hash_read() ); +my @itemnames=sort { + ($item{$b}{"priority"} <=> $item{$a}{"priority"}) + or (lc($item{$a}->{"name"}) cmp lc($item{$b}->{"name"})); + } keys(%item); + +my $projectref=sub +{ +my($name)=@_; + + return a_href "/project/$name/",$item{$name}{"name"},"attr"=>'class="project"'; +}; + +my $project=sub +{ +my($name,%args)=@_; + + return &{$projectref}($name).($args{"bare"} ? '' : ': '.$item{$name}{"summary"}); +}; + +my $free_projects=sub (@) +{ +my(@platforms)=@_; + + my $r=""; + $r.=join ", ",map({ my $platform=$_; + map({ ($item{$_}{"sponsorship"} || $item{$_}{"trivia"} + || $item{$_}{"platform"} ne $platform ? () : (&{$projectref}($_))); } @itemnames); + } @platforms); + return $r; +}; + + +my $reference=sub ($$) +{ +my($mail,$fullname)=@_; + + my $r=""; + $r.=''; + $r.=$fullname; + if (lc($W->{"args"}{"referees"}) eq "referees") { + my $rot13=Crypt::Rot13->new(); + $rot13->charge($mail); + $mail=($rot13->rot13())[0]; + $r.=' <'.a_href("mailto:$mail",$mail).'>'; + } + $r.=''; + return $r; +}; + +sub techs ($) +{ +my($arg)=@_; + + return '('.$arg.')'; +} + + +my $uClinux=a_href 'http://www.uclinux.com/','uClinux'; +my $mailme=(map({ a_href("mailto:$_",$_); } 'job@jankratochvil.net'))[0]; +my $now=(localtime())[5]+1900; + +print <<"HERE"; +
+ + + + + + + + + + +
+ @{[ img "/resume/Resume-JanKratochvil","face" ]}Name Jan Kratochvil
English technical: fluent, general: communicable
Born 1979
Status single
Licensesmotorcycle, car
eMail $mailme
WWW @{[ a_href('http://www.jankratochvil.net/') ]}
Resume @{[ a_href('http://www.jankratochvil.net/resume/') ]}
OpenPGP @{[ a_href '/pgp-JanKratochvil.txt','' + .'pub 1024D/44FC7632 2002-10-07 Jan Kratochvil <pgp-44FC7632@jankratochvil.net>
' + .'sub 2048g/D9F5F44B 2002-10-07 [expires 2004-10-06]' ]}
+ +@{[ vskip "2ex" ]} + + + + + + + + + + + + + + + +
Platforms GNU/Linux/i386/UNIX/FreeBSD, W32 kernel, Amiga/680x0, MS-DOS, + ZX Spectrum, handheld PC-E500S
Major Areas mobile technologies, filesystems, embedded devices
Languages C (Gnome/GCC), Perl, bash/awk/sed..., + Java, C++, Pascal, Basic, REXX, S-Lang, Foxplus, Prolog
Tools/Metalanguagesautoconf, automake, libtool, m4, CVS, gettext, bison, flex, ld script, + gdb script, Maple V
Assemblers i386, Motorola 680x0, Zilog Z80, Intel 8051, MIPS R2/3000, + (Hitachi SH-8)
WWW-Related (X)HTML, CSS, PHP, SQL (PostgreSQL, MySQL), JavaScript, CGI
DocumentationplainTeX, LaTeX, DocBook, DocBook Lite, XML/NS/Schema, nroff, pod
Libraries Gnome/GTK+/GLib, POSIX/BSD/SysV/threads/sockets, X11, OpenGL, NCurses, + S-Lang, GnomeVFS, libxml, SVGALib, NIS, Qt,...
RPC CORBA/ORBit, SOAP, Sun RPC
Protocols GSM SMS/PDU/Nokia Smart Messaging/EMS/MMS/SMIL/WAP/WSP/AMR/ETSI stds/3GPP stds, + IPv4, HTTP, SMTP/RFC822/MIME, FTP, SSH, DHCP, POP3, NFSv2, PPP/LCP/IPCP,...
Filesystems ext2, FAT, AmigaFFS, ISO-9660
Each technology involved in at least one of my past projects.
+ +@{[ vskip "2ex" ]} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1984-1991Platform:Sinclair ZX Spectrum: Basic, Zilog Z80 machine code
1992-1997Platform:Amiga: Motorola 680x0 assembler, C, REXX
Projects:@{[ &{$free_projects}("amiga") ]}
1993-1997Platform:PC/MS-DOS: i386 assembler, C, Pascal, OpenGL/Mesa, Foxplus
Unlisted Projects:@{[ &{$free_projects}("dos") ]}
1993 @{[ a_href('http://www.japhila.cz/index_en.htm','Japhila') ]}StampMan: Database application @{[ techs 'MS-DOS: Pascal, plainTeX' ]}
1993-$nowPlatform:PC/GNU/Linux: + C, Perl, bash/awk/sed..., Java, C++, ...
Unlisted Projects:@{[ &{$free_projects}(qw(unixuser unixdevel web)) ]}
1993-1996Profes J&KPC assembly and customer service
1998 @{[ a_href('http://www.elsa-online.org/',"European Law Students' Association") ]}@{[ &$project('step') ]} @{[ techs 'PHP, PostgreSQL' ]}
+ subtasks @{[ &$project('phphash',"bare"=>1) ]}, @{[ &$project('pgsqlsubstr',"bare"=>1) ]}
1998-1999@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}@{[ a_href 'http://members.tripod.com/Stelios_Cellar/GSM/m1module.htm','Siemens M1' ]} + GSM modem daemon, client/server, remote GSM terminals @{[ techs 'C, GSM, GPS, S-Lang' ]}
+ GPLed subtask @{[ &$project('vblib') ]} @{[ techs 'C' ]}
1999 @{[ a_href('http://www.tencom.cz/','TENcom Trade') ]}@{[ a_href "/project/mdsms/","MobilDock SMS Tool","attr"=>'class="project"' ]} @{[ techs 'GSM/PDU' ]}
1999 @{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}@{[ &$project('332') ]} @{[ techs 'M680x0 asm, C' ]}
+ subtask @{[ &$project('mot2as') ]}
1999 @{[ a_href('http://www.unicom-prague.cz/','Unicom') ]}Technical translations from English
1999-$now@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}sysadmin GNU/Linux and FreeBSD, techsupport: GuestNET, + @{[ a_href 'http://www.2m.dk/web/html_version/eclipse/eclipse.html','Eclipse' ]}, + @{[ a_href 'http://www.globaloop.com/','GlobaLoop' ]}, + @{[ a_href 'http://www.antlimited.com/products/fresco.htm','Fresco' ]}
1999 @{[ a_href('http://www.jklabs.cz/','JKLabs') ]}IRQ redirector for legacy devices @{[ techs 'i386 asm' ]}
1999-2000@{[ a_href('http://www.suse.com/','SuSE') ]}@{[ &$project('surprise') ]} @{[ techs 'C, Gnome, m4' ]}
+ subtask @{[ &$project('int13sniff') ]}
+ subtask @{[ &$project('gladewsrc') ]}
2001 @{[ a_href('http://www.gtsgroup.cz/','GTS') ]}@{[ &$project('tac_plus') ]} @{[ techs 'C, Cisco TACACS+' ]}
+ subtask @{[ &$project('mod_auth_tacacs') ]} @{[ techs 'C, Cisco TACACS+' ]}
2001 @{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}@{[ &$project('mdsms') ]} - update for + @{[ a_href 'http://www.transportdata.de/html/produkte/siemens_m20t.php?lang=en', + 'Siemens M20' ]} + @{[ techs 'C, GSM PDU' ]}
2001 @{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}@{[ a_href 'http://www.gnokii.org/','gnokii' ]} + @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/gnokii-lace-2001-11-17-01.tar.gz', + 'driver for SMS gateway' ]} + of GSM operator @{[ a_href('http://www.eurotel.cz/','EuroTel') ]} + (C, PostgreSQL)
2001 @{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}@{[ &$project('gsmperl') ]} @{[ techs 'Perl, GSM EMS' ]}
2001 @{[ a_href('http://www.netcentrum.cz/','NetCentrum') ]}@{[ a_href 'http://www.gnokii.org/','gnokii' ]} + @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/gnokii-0.4.0pre1_lace2001_11_14_01_netcentrum.diff', + 'driver for custom SMS gateway protocol' ]} @{[ techs 'C' ]}
2001 @{[ a_href('http://www.readynote.com/','ReadyNote') ]}@{[ &$project('mdsms') ]} port to embedded $uClinux + @{[ techs 'GSM, Nokia, uClinux' ]}
2002 @{[ a_href('http://www.readynote.com/','ReadyNote') ]}@{[ a_href 'http://www.mwiacek.com/gsm/gammu/gammu.html','mygnokii' ]} + @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/mygnokii-0.3.3_pre8-gold_2002_03_10--uClinux2002_03_17_23_03/', + 'port to embedded' ]} $uClinux, + @{[ a_href 'http://www.nokiausa.com/phones/5190/1,1162,,00.html','Nokia 5190' ]} + @{[ a_href 'http://www.jankratochvil.net/priv/gnokii/mygnokii-0.3.3_pre8-gold_2002_02_24-decodefile/', + 'sw-modem debugging' ]} + @{[ techs 'GSM, Nokia, uClinux' ]}
2002 @{[ a_href('http://www.jklabs.cz/','JKLabs') ]}@{[ &$project('ssht') ]}
2002 @{[ a_href('http://www.jklabs.cz/','JKLabs') ]}@{[ &$project('middleman') ]} + for hotel system @{[ techs 'C, BSD, HTTP' ]}
2002 @{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}MMS framework client via @{[ a_href('http://www.eurotel.cz/site/en/home/','EuroTel') ]} GSM operator + (GSM MMS, Perl, XML, SOAP)
+ subtasks @{[ a_href "/etmms/",'MMS center debugging',"attr"=>'class="project"' ]}, + @{[ &$project('etherealmmse',"bare"=>1) ]}, @{[ &$project('etherealwsp',"bare"=>1) ]}
Contractor Jobs
+ +@{[ vskip "1ex" ]} + + + + @{[ &{$reference}('wnavx(ng)wncuvyn.pbz','Bretislav Janik') ]} + + @{[ &{$reference}('ohgna(ng)trbvairfg.pm','Lubor Otta') ]} + + @{[ &{$reference}('grfne(ng)grapbz.pm','Petr Tesar') ]} + + @{[ &{$reference}('erprcpr(ng)havpbz-centhr.pm','Valerie Bernardova') ]} + + @{[ &{$reference}('wna.xbyne(ng)wxynof.pm','Jan Kolar') ]} + + @{[ &{$reference}('Zvpunry.Znprx(ng)tgftebhc.pm','Michael Macek') ]} + + @{[ &{$reference}('zvpuny.ubenx(ng)ngfcenun.pm','Michal Horak') ]} + + @{[ &{$reference}('wcehrgg(ng)ernqlabgr.pbz','Jim Pruett') ]} +HERE + +if (lc($W->{"args"}{"referees"}) ne "referees") { + print <<"HERE"; + +HERE + } + +print <<"HERE"; + +
@{[ a_href('http://www.japhila.cz/index_en.htm','Japhila') ]}
@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}
@{[ a_href('http://www.tencom.cz/','TENcom Trade') ]}
@{[ a_href('http://www.unicom-prague.cz/','Unicom') ]}
@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}
@{[ a_href('http://www.gtsgroup.cz/','GTS') ]}
@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}
@{[ a_href('http://www.readynote.com/','ReadyNote') ]}
+
+
+

Enter the word 'referees' (without quotes) to disclose e-mail addresses:

+ + +

(spambot protection)

+
+
Contractor Jobs Referees (chronologically)
+ +@{[ vskip "2ex" ]} + + + + + + + +
19957th in the Central European Olympiad in Informatics
19964th in the International Competition in Programming
19971st in the International Competition in Programming
19972nd in an MO-P national contest - mathematics Olympiad, the programming category
1997Bronze medal in the International Olympiad in Informatics, South Africa - Cape Town
+ +@{[ vskip "3ex" ]} + +

Looking for a fulltime job. Relocation around the world expected.

+

Contact: $mailme

+HERE + + +My::Web->footer(); diff --git a/resume/Resume-JanKratochvil.png b/resume/Resume-JanKratochvil.png new file mode 100644 index 0000000..a3da63d Binary files /dev/null and b/resume/Resume-JanKratochvil.png differ diff --git a/robots.txt b/robots.txt index eb05362..43317cb 100644 --- a/robots.txt +++ b/robots.txt @@ -1,2 +1,2 @@ User-agent: * -Disallow: +Disallow: /project/ChangeLog.txt.pl