./project/ResRAM/Makefile
./project/ssht/Makefile
./project/postget/Makefile
+./project/middleman/Makefile
])
echo done.
use My::Web;
require CGI;
Wrequire 'My::Project';
+Wrequire 'project::Platform';
My::Web->init(
my $CGI=CGI->new();
-print <<'HERE';
-<h1>Project List of <a href="mailto:web-www.jankratochvil.net@jankratochvil.net">Jan Kratochvil</a></h1>
+print <<"HERE";
+<h1>Project List of @{[ a_href 'http://www.jankratochvil.net/','Jan Kratochvil' ]}</h1>
-<form action="Index.html.pl" method="get"><p>
-<select name="description_opt" onchange="this.form.submit();">
-HERE
-print '<option value="0"'.(!$CGI->param("description_opt") ? ' selected="selected"' : '').'>only list</option>'."\n";
-print '<option value="1"'.( $CGI->param("description_opt") ? ' selected="selected"' : '').'>incl. descriptions</option>'."\n";
-print <<'HERE';
-</select>
-<input type="submit" value="Update" />
-</p></form>
+<ul>
+ <li>@{[ a_href 'List.html.pl?platform=1','Brief project listing per platform' ]}</li>
+ <li>@{[ a_href 'List.html.pl' ,'Unified brief project listing' ]}</li>
+</ul>
HERE
+print '<table border="1" align="center" style="border-collapse: collapse; border-style: solid;">'."\n";
+ my @platforms=@project::Platform::platforms;
+ while (@platforms) {
+ my $platform_sym =shift @platforms;
+ my $platform_name=shift @platforms;
+ print '<td style="padding: 5px;">'.a_href('#'.$platform_sym,$platform_name)."</td>\n";
+ }
+print '</table>'."\n";
+print vskip "1ex";
+
my %item=( My::Project::item_hash_read() );
# $col{"name"}{"show"}=1
return "<a href=\"".$_[1]."/\">".$_[0]."</a>";
};
-$col{"license"}{"format"}=sub {
- my %known=(
- "PD"=>"<a href=\"http://www.gnu.org/philosophy/categories.html#PublicDomainSoftware\">PD</a>",
- "GPL"=>"<a href=\"http://www.gnu.org/licenses/gpl.html\">GPL</a>",
- "LGPL"=>"<a href=\"http://www.gnu.org/licenses/lgpl.html\">LGPL</a>",
- );
- 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)))}}));
+@platforms=@project::Platform::platforms;
+while (@platforms) {
+ my $platform_sym =shift @platforms;
+ my $platform_name=shift @platforms;
+ print '<a name="'.$platform_sym.'">';
+ print "<h2>$platform_name</h2>";
+ print '</a>'."\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) {
+ print "<h3>".a_href("$project/",$item{$project}{"name"}.": ".$item{$project}{"summary"})."</h3>\n";
+ print "<blockquote>\n";
+ print $item{$project}{"description"};
+ print "</blockquote>\n";
+ }
}
-print '<table border="1">'."\n";
- print '<tr>';
- for my $col (@col_order) {
- next if defined $col{$col}{"show"} && !$col{$col}{"show"};
- print '<th>'.($col{$col}{""} || "[$col]").'</th>';
- }
- print '</tr>'."\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 '<tr>';
- for my $col (@col_order) {
- next if defined $col{$col}{"show"} && !$col{$col}{"show"};
- print '<td>';
- if (!$col{$col}{"format"}) {
- print(($item{$row}{$col} || ""));
- }
- else {
- print(&{$col{$col}{"format"}}($item{$row}{$col},$row));
- }
- print '</td>';
- }
- print '</tr>'."\n";
- if ($CGI->param("description_opt")) {
- print '<tr><td style="border: none;"></td>';
- print '<td colspan="'.(scalar(@col_order)-1).'"><blockquote>'.$item{$row}{"description"}.'</blockquote></td>';
- print '</tr>'."\n";
- print '<tr><td style="border: none;" colspan="'.scalar(@col_order).'"> </td></tr>'."\n";
- }
- }
-print '</table>'."\n";
My::Web->footer();
--- /dev/null
+#! /usr/bin/perl
+#
+# $Id$
+# List of projects Perl template.
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+package project::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/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
+use My::Web;
+require CGI;
+Wrequire 'My::Project';
+
+
+My::Web->init(
+ "__PACKAGE__"=>__PACKAGE__,
+ "title"=>'Project List',
+ );
+My::Web->heading();
+
+my $CGI=CGI->new();
+
+print <<"HERE";
+<h1>@{[ a_href './','Project List' ]} of @{[ a_href 'http://www.jankratochvil.net/','Jan Kratochvil' ]}</h1>
+HERE
+
+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] ? "" : '<a href="'.$_[0].'">X</a>'); }
+
+$col{"name"}{"format"}=sub {
+ $_[0]=~s#<a\s[^>]*>([^<]*)</a>#$1#g;
+ return "<a href=\"".$_[1]."/\">".$_[0]."</a>";
+ };
+
+$col{"license"}{"format"}=sub {
+ my %known=(
+ "PD"=>"<a href=\"http://www.gnu.org/philosophy/categories.html#PublicDomainSoftware\">PD</a>",
+ "GPL"=>"<a href=\"http://www.gnu.org/licenses/gpl.html\">GPL</a>",
+ "LGPL"=>"<a href=\"http://www.gnu.org/licenses/lgpl.html\">LGPL</a>",
+ );
+ 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)))}}));
+ }
+
+print '<table border="1">'."\n";
+ print '<tr>';
+ for my $col (@col_order) {
+ next if defined $col{$col}{"show"} && !$col{$col}{"show"};
+ print '<th>'.($col{$col}{""} || "[$col]").'</th>';
+ }
+ print '</tr>'."\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 '<tr>';
+ for my $col (@col_order) {
+ next if defined $col{$col}{"show"} && !$col{$col}{"show"};
+ print '<td>';
+ if (!$col{$col}{"format"}) {
+ print(($item{$row}{$col} || ""));
+ }
+ else {
+ print(&{$col{$col}{"format"}}($item{$row}{$col},$row));
+ }
+ print '</td>';
+ }
+ print '</tr>'."\n";
+ if ($CGI->param("description_opt")) {
+ print '<tr><td style="border: none;"></td>';
+ print '<td colspan="'.(scalar(@col_order)-1).'"><blockquote>'.$item{$row}{"description"}.'</blockquote></td>';
+ print '</tr>'."\n";
+ print '<tr><td style="border: none;" colspan="'.scalar(@col_order).'"> </td></tr>'."\n";
+ }
+ }
+print '</table>'."\n";
+
+My::Web->footer();
SClock \
ResRAM \
ssht \
- postget
+ postget \
+ middleman
EXTRA_DIST+= \
Index.html.pl \
ChangeLog.txt.pl \
- Pod2Html.html.pl
+ Pod2Html.html.pl \
+ List.html.pl
--- /dev/null
+#! /usr/bin/perl
+#
+# $Id$
+# Definition of 'project::Platform'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+package project::Platform;
+require 5.6.0; # at least 'use warnings;' but we need some 5.6.0+ modules anyway
+our $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
+our $CVS_ID=q$Id$;
+use strict;
+use warnings;
+
+
+our @platforms=(
+ "unixuser"=>"GNU/Linux",
+ "unixdevel"=>"GNU/Linux Development",
+ "web"=>"Web",
+ "amiga"=>"Amiga",
+ "w32"=>"MS-Windows",
+ "dos"=>"MS-DOS",
+ "patch"=>"Patches",
+ );
+
+1;
our @ListItem=(
"name"=>"fixhtml",
"platform"=>"unixuser",
+ "trivia"=>1,
"priority"=>3,
"download"=>"fixhtml.pl",
"summary"=>"Convert HTML files URLs to relative",
--- /dev/null
+#! /usr/bin/perl
+#
+# $Id$
+# Main page of 'My::Project::middleman'
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+package project::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/,<F>)[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();
--- /dev/null
+#! /usr/bin/perl
+#
+# $Id$
+# Definition of 'My::Project::middleman' for list.cgi.pl
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+package project::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"=>3,
+ "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;
--- /dev/null
+# $Id$
+# automake source for the Makefile of project/middleman/ subdir
+# Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; exactly version 2 of June 1991 is required
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+include $(top_srcdir)/Makefile-head.am
+
+EXTRA_DIST+= \
+ ListItem.pm \
+ Index.html.pl
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.</p>'
+emptied.</p>
HERE
);