Rewrite to static site
With a complete reorganisation of the directory structure and most of the content converted to pandoc-flavoured markdown. Some TODO's left before this can go live: - Main page - Atom feeds - Bug tracker
This commit is contained in:
parent
5c85a7d32f
commit
6242b2ee9c
291 changed files with 4346 additions and 6141 deletions
17
pub/download/TUWF-0.1.tar.gz.asc
Normal file
17
pub/download/TUWF-0.1.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxkBAAoJEGI5TGmMJzn6KJUQAOdaZcV6NWqrtB4rsNmSCp8/
|
||||
i3QQpIpdywfPqPH+AzQ0ednYrojKFAN6HHfbyaH5L3f2QbdlV8tHR5WK8F5WPigu
|
||||
saC7hL1HX/JVEO9G+zQBPUDr0JB/6+0S73lPaFY7F84j7UDNu6DyX3t57VDqc5hb
|
||||
fHQ/ZsBAyIZOBNLtBvfdcduVWBtNnTJu9IaZjqneo9UQnbkmjBqHRbp5UEP5m7Sg
|
||||
r3XUAXQdQz8H/f8yXS3Y3PbifhzkMFM3mgkYREGyihmkqbeqeR1pulINcEAHe8zS
|
||||
+DFHdhakothq0AW8QZxQ0jGcSAYMc/oqDFkiN69Wao2QvHsGcfRKUKINrrRshfW/
|
||||
2wXVqpFe6xGNj0GOwubgsam2LGFpZIXmYR6StLENM6EolpGmuG4W5ZuH5tbdwafB
|
||||
tgi6xoAF1SVKzpaYHMCyrcFtSa55A/r75tihRKyCi8CCfISEFAdns8G1neazH5K9
|
||||
BlaUAmHDTPe93P8Li/8CdXlrU+HtTkZZ9qBJGmUwB/tznZsiAjWdvRKaKld9W8RC
|
||||
+UguA42qXQtdZh7Qu7Gz5S/9DZe3y3b5sHJhkKU7pghAvP4hLmqL0uTdHpPlVlfd
|
||||
whLHo6Je9bJi2vhi8M4Vle3CMgyT3epotCuqre0ix9kMEzd3fGemd8Kr7cpTRrdq
|
||||
GeoC03nfiEh/cFnyrVdo
|
||||
=jKN5
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/TUWF-0.1.tar.gz.md5
Normal file
1
pub/download/TUWF-0.1.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
3dec988da6388fa32cbaeaa6a6a94b14 TUWF-0.1.tar.gz
|
||||
1
pub/download/TUWF-0.1.tar.gz.sha1
Normal file
1
pub/download/TUWF-0.1.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
aadd234dc1b703340df636801cd66b477fdb8b45 TUWF-0.1.tar.gz
|
||||
17
pub/download/TUWF-0.2.tar.gz.asc
Normal file
17
pub/download/TUWF-0.2.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJPF9/6AAoJEGI5TGmMJzn6ZNwP/2zfqGyUV+KUmXPFuFXVWY4s
|
||||
xE2O+mgZpN+Gr53ZLG05OrlwnwJhDoQmiBjOvoOo5gHpMvRilGE6wbcoClV+VFX1
|
||||
4L4FDJMAz9ij7iUP4Ex4lo09RjSfDt78RbK4ThnzA+n0+NwEJ71heolOVZQLl4f5
|
||||
GLLsx787djtNI1cA7s8h57PxAHiNQX9O3egHTNP46mHd7zMQ7EDUFf6yOiHoiliR
|
||||
8zcWWj0p2PwkI01D7DP754MU5XAU7cM4Qyx8IvGtFVGPT1LCZ4VtBfMnQTkIV2Op
|
||||
EBD4Qfj/V3r1trOf+4RujNY9kfZKotUvMLIgZ57o5JL8mMY243Q74Kb4ATFmFyvs
|
||||
APt//iR/l9CpP1ztq3GDjrHn0OZw1u4STEBzZZHU8B5T4690ZOXIC82b+kxA/wSA
|
||||
sPq4bbm+FpDdPGlFVAb7iR/7aJfNHzkMHVvcOGowdtik1kfb94/xX1R0R2dWOWVY
|
||||
Bz+jyCeBAAsk05cicYDdjuJl/N09KO2i5Bos0SwiXzp2d/HQoGMqJU9R8OiobgZ9
|
||||
ZsU33kQdN/9ZAjzeKqiKe88Oz4LUb2YfKUgajDZDW6pHuYmoa22Fz1hLtvDVOsOY
|
||||
iIE5fV2ciylVJbkotFf3rtxv1KY5uIWSc6Dxgwn0VcHEkz7GAwYLz0FZ3focb9M2
|
||||
rkMamcnJkkBflSYKElEo
|
||||
=0AT+
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/TUWF-0.2.tar.gz.md5
Normal file
1
pub/download/TUWF-0.2.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
8d2e443764dea673d2a30379cd9fa149 TUWF-0.2.tar.gz
|
||||
1
pub/download/TUWF-0.2.tar.gz.sha1
Normal file
1
pub/download/TUWF-0.2.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
0d3e86975e47f07fe12b25dc1753cb6a105cc6df TUWF-0.2.tar.gz
|
||||
17
pub/download/TUWF-1.0.tar.gz.asc
Normal file
17
pub/download/TUWF-1.0.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2
|
||||
|
||||
iQIcBAABCgAGBQJWB5ibAAoJEGI5TGmMJzn6mrQQAOt844yvmllGTuOIV6RLfLHP
|
||||
nk5n7F0i2NglktCeN3DQXeIDIXPx2IgE1XYu7n0OFCQxiUjpMHx7HdSz53E4XHt6
|
||||
HR8tkfsQgrhX8bg0eP7ehb9wHfQh/4rL/UtHwSg94IacfPPffrjDwH9P1BhfMrfc
|
||||
K78VmzdIxVbTIH+TDvQWPBY9ae/ZmoC6y7A9pDwTs3OaL1n1l9qSmnRnEtGF+7te
|
||||
w8lIPJyMlD8Gfg9g7+5eZBCeyfwEZXPfHOHYFaFYU5juqdc7M7sAmsixgJ7WEV2G
|
||||
G2+jNEgZXOjpQu81auVZk6NaQJbP5vdeu5yQUyhlYiqqOS94o+ljNEn+5wXMi67D
|
||||
23m3hf91rHQqdmsb72tzly44/rGZmLBEZkNsdqlZNsFomgKLS+T/D4n6UqfONuDH
|
||||
y0DfgaFtm0AxAmlFyUVM83aJFXkttGU+59G3LPO5PeNAjDA1UZamAqJyac+IeLj2
|
||||
Ikaa73MjTPllQftgD0HOnKPV/a2QfBMw3jajEzOA/Vd0fLsWz90hwwYYgCww2Tfe
|
||||
KhhzW917S+VfOsRVvnI//JeSfEbZ99OUt/9z4o98TOt2mKUN00epLTej7qcvFvAy
|
||||
oul4H/6AxDKOj2IGDHoC9JxKxa5RbXbhkCDMu2qdg8YSe3/EKFn05Ohzw53Il5o9
|
||||
8Ag6HUAyvdopGu0Wjo4H
|
||||
=Gq1J
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/TUWF-1.0.tar.gz.md5
Normal file
1
pub/download/TUWF-1.0.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
fe6ed1c21b43bd8b57cee447c3093d28 TUWF-1.0.tar.gz
|
||||
1
pub/download/TUWF-1.0.tar.gz.sha1
Normal file
1
pub/download/TUWF-1.0.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
c4be0e1b08896053bbccec0194583b7ab03e1cbc TUWF-1.0.tar.gz
|
||||
16
pub/download/TUWF-1.1.tar.gz.asc
Normal file
16
pub/download/TUWF-1.1.tar.gz.asc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEEdEYNMrgIEOupr6LpYjlMaYwnOfoFAloaeBgACgkQYjlMaYwn
|
||||
OfqtFRAA0ZXztAZ2GDb1puNXknJO1kDFam2DXUHXQvuNW9rn2I7nH0utdW/VWvt/
|
||||
vpWAyKT8kvywpK7m1JGjVj8RiE/sgncTpYi3E3H+Dv6OO0z0dEoq6VUS3Mc5Gk1b
|
||||
1TclOZt3uShK9PgjGsjJZcyMGvvgXMUO/5peBlbXDgWhokfVWZrM5r58Ve+dJwQn
|
||||
4s5IDjoIqZy7RuSzlhkdT661NftfWpvjvr+XMmS3kdBsiIxTUrbPnUp1T85yYslA
|
||||
0UpMCnGIwYdbu1J3igAMRIRmp0ix7e4ANagh97MVeCueO6acHAYqe3uui5SHwE+7
|
||||
iuHWmyZTQtuikrZjpNBDMbQxUwk79SQaYOM5bXDn/pTTAcBm1RU2Sf3Slnk+Xlrk
|
||||
kKjqgvf7qfx3zZKNMuTvxslzF4HUbE4/CB9I6Ccz4KnQ6qkyQMMPeo4ETjumCpPa
|
||||
5CosdSFF4vrPHO7v6KTc2Q+l5gp4900Qb/wxydUptSJTTsCFNNRMwpkDwtSh9wfn
|
||||
rU9L6vx54aem3nucqStFwe3gIkuu9NNqGCwpUu9Dga0/gnxP5i6O/bNC8MH3tnsR
|
||||
yTodqjGQWsTtmpDaLnZX1TeCWCgjtVvfbrTqTUiM8l2BQnTVtgBJbGZDHnC1nCs0
|
||||
/MnIEXxfLqrWynPieeAKSuxs2zrToR9PFDuWSVs6X0oCuo8SaUI=
|
||||
=9nQv
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/TUWF-1.1.tar.gz.md5
Normal file
1
pub/download/TUWF-1.1.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
4629606ce88c28e2ea767bf7b356fe9c TUWF-1.1.tar.gz
|
||||
1
pub/download/TUWF-1.1.tar.gz.sha1
Normal file
1
pub/download/TUWF-1.1.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
7f2c4018674f7009db5d3d30218d379210c3a972 TUWF-1.1.tar.gz
|
||||
16
pub/download/TUWF-1.2.tar.gz.asc
Normal file
16
pub/download/TUWF-1.2.tar.gz.asc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEEdEYNMrgIEOupr6LpYjlMaYwnOfoFAlqJW1IACgkQYjlMaYwn
|
||||
OfoX8xAAtvV3oCpZqDEEJl50MJTy8dncFo3nMxKfD7xbsv4pKbPh6sj3kEd+PcdM
|
||||
kbQxECdKZbNx8LgtjW7jNwIsU6SoEV4WZUWN3dZiVEGr+qF5Gc9101M1c5z99BPU
|
||||
D+2QjjbcHB1MepcRaKe76eT1+KLm/nA5OqfNgQ1z626r31JriB4d+Ppd8GlDfCDq
|
||||
UALjjv0qzwVEr4YBdeXClDYJ1vorEGoOyt/gqBuged86NDaeyqkZ2c/2y2HeB8If
|
||||
B2PCZbYx7DFAcOz7XSJuVkeHLUvOlK3zknWMZXXeK01ev+evuVgGwe8dktQGL01P
|
||||
dRl+vpJi++eFhJ57zwXYvAFlW9KWuor3YnPJms2eOZAZyHKc2WXjN581YT/Xt1s1
|
||||
+r5qndZXUfgrk8tUANRKff5oaZ9xwoZ1XqBu3M3Dqrtl2RCj3TLg8KXuh19Sy0KQ
|
||||
ijz1/7ZlIRXVAo+mqmb2ZE8OfqXrGRwXdCWJTZ9LsHnkY+kPfB8FdoUP93vrkV7Z
|
||||
1Fu0T2Et7UWKj6Xr4qyBf/CjJZK9cy1EXfnrKVJQa5YkRVqQbnnzKFI5gv7U+GgO
|
||||
hJG4Tr84bv3xJEGtcMyMrgnAcag8+7KZYiM2yd/fp7wUtxs1BJczyxevVhWMKcSM
|
||||
dNsVm76AF8vsC7CCOOCXJZ9w4DfDyEWkyV4dKbFk60hkslj7BnI=
|
||||
=YQqj
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/TUWF-1.2.tar.gz.md5
Normal file
1
pub/download/TUWF-1.2.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
5028482611a415c22993adab05b9698e TUWF-1.2.tar.gz
|
||||
1
pub/download/TUWF-1.2.tar.gz.sha1
Normal file
1
pub/download/TUWF-1.2.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
3b336c065e9f8a37b2f387f9ff645c2ab2da5485 TUWF-1.2.tar.gz
|
||||
166
pub/download/code/awshrink
Normal file
166
pub/download/code/awshrink
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# awshrink v0.1
|
||||
# 2007-01-15
|
||||
# Yoran Heling
|
||||
|
||||
# License: MIT
|
||||
|
||||
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use bytes;
|
||||
|
||||
|
||||
|
||||
# hash for easy lookup
|
||||
my %shrinkable = ( map { $_ => 1 } qw|
|
||||
DOMAIN LOGIN ROBOT WORMS EMAILSENDER EMAILRECEIVER
|
||||
BROWSER UNKNOWNREFERER UNKOWNREFERERBROWSER SEREFERRALS
|
||||
PAGEREFS SEARCHWORDS KEYWORDS SIDER_404 SIDER VISITOR
|
||||
UNKNOWNREFERERBROWSER
|
||||
|);
|
||||
|
||||
|
||||
|
||||
sub getstats { # read
|
||||
my $fl = shift;
|
||||
my @l;
|
||||
seek($fl, 0, 0);
|
||||
|
||||
# get positions
|
||||
while(<$fl>) {
|
||||
last if /^END_MAP/;
|
||||
next if !/^POS_([A-Z0-9_]+)\s+([0-9]+)\s+$/;
|
||||
push(@l, [ $1, $2, 0, 0 ]);
|
||||
}
|
||||
|
||||
# get sizes (bytes)
|
||||
@l = sort { $a->[1] <=> $b->[1] } @l;
|
||||
$l[$_][2] = ($l[$_+1] ? $l[$_+1][1] : -s $fl) - $l[$_][1]
|
||||
for (0..$#l);
|
||||
|
||||
# get lines
|
||||
for (0..$#l) {
|
||||
seek $fl, $l[$_][1], 0;
|
||||
<$fl> =~ /BEGIN_[A-Z0-9_]+\s+([0-9]+)/;
|
||||
$l[$_][3] = $1;
|
||||
}
|
||||
|
||||
print " Section Size (Bytes) Lines\n";
|
||||
printf "%22s %12d %7d\n", $_->[0].($shrinkable{$_->[0]}?' ':'*'), $_->[2], $_->[3]
|
||||
for (sort { $a->[2] <=> $b->[2] } @l);
|
||||
print "* = not shrinkable\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub fixmap { # read, write
|
||||
my($fl, $FL) = @_;
|
||||
|
||||
my $map = '';
|
||||
my @l;
|
||||
seek $fl, 0, 0;
|
||||
while(<$fl>) {
|
||||
next if !/^BEGIN_([A-Z0-9_]+)/ || $1 eq 'MAP';
|
||||
$map .= sprintf "POS_%s %-20d\n", $1, tell($fl)-length($_);
|
||||
}
|
||||
|
||||
seek $fl, 0, 0;
|
||||
seek $FL, 0, 0;
|
||||
|
||||
my $inmap = 0;
|
||||
while(<$fl>) {
|
||||
if(!$inmap && !/^BEGIN_MAP/) {
|
||||
print $FL $_;
|
||||
next;
|
||||
}
|
||||
$inmap = 1;
|
||||
if(/^END_MAP/) {
|
||||
printf $FL "BEGIN_MAP 27\n%sEND_MAP\n", $map;
|
||||
$inmap = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub shrink { # read, write, %sections->{ key = section, value = lines }
|
||||
my($fh, $FH, %sec) = @_;
|
||||
|
||||
seek $fh, 0, 0;
|
||||
seek $FH, 0, 0;
|
||||
while(<$fh>) {
|
||||
if(!/^BEGIN_([A-Z0-9_]+)\s+([0-9]+)/ || !$sec{$1} || $sec{$1} >= $2) {
|
||||
print $FH $_;
|
||||
next;
|
||||
}
|
||||
my $sec = $1;
|
||||
|
||||
# read entire section
|
||||
my @l;
|
||||
while(<$fh>) {
|
||||
last if /^END_/;
|
||||
s/^[\s\r\n]+//;
|
||||
s/[\s\r\n]+$//;
|
||||
push @l, [ split / / ];
|
||||
}
|
||||
|
||||
# sort section
|
||||
# DOMAIN, LOGIN, ROBOT, WORMS, EMAILSENDER. EMAILRECEIVER,
|
||||
# BROWSER, UNKNOWNREFERER, UNKOWNREFERERBROWSER, SEREFERRALS,
|
||||
# PAGEREFS, SEARCHWORDS, KEYWORDS, SIDER_404, SIDER -> 1
|
||||
# VISITOR -> 2
|
||||
if($sec{$sec} > 10) { # assume sorted if we only want the first ten
|
||||
@l = sort { $b->[1] <=> $a->[1] } @l if $sec ne 'VISITOR';
|
||||
@l = sort { $b->[2] <=> $a->[2] } @l if $sec eq 'VISITOR';
|
||||
}
|
||||
|
||||
# write section
|
||||
printf $FH "BEGIN_%s %d\n", $sec, $sec{$sec};
|
||||
print $FH join(' ', @{$l[$_]})."\n"
|
||||
for (0..($sec{$sec}-1));
|
||||
printf $FH "END_%s\n", $sec;
|
||||
}
|
||||
1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub run {
|
||||
print "Usage: $@ [options] filename\n" and exit if !@ARGV;
|
||||
|
||||
my $file = pop;
|
||||
my $ci = 0;
|
||||
my $st = 0;
|
||||
|
||||
my %options;
|
||||
while(local $_ = shift) {
|
||||
/^-c$/ ? $ci++ :
|
||||
/^-s$/ ? $st++ :
|
||||
/^-([A-Za-z0-9_]+)$/ && $shrinkable{ uc($1) } ? $options{ uc($1) } = shift :
|
||||
printf("Unknown option: %s\n", $_) && exit;
|
||||
}
|
||||
(!$options{$_} || $options{$_} !~ /^[0-9]+$/) && printf("Invalid value for -%s\n", $_) && exit
|
||||
for keys %options;
|
||||
|
||||
print "Nothing to do...\n" and exit if !keys %options && !$st;
|
||||
|
||||
open(my $fl, '<', $file) || die $!;
|
||||
my $tmpfile;
|
||||
open(my $TMP, '+>', \$tmpfile);
|
||||
open(my $FL, '+>', "$file~") || die $! if keys %options;
|
||||
|
||||
shrink($fl, $TMP, %options) && fixmap($TMP, $FL) if keys %options;
|
||||
getstats(keys %options ? $FL : $fl) if $st;
|
||||
|
||||
close $fl;
|
||||
close $TMP;
|
||||
close $FL if keys %options;
|
||||
|
||||
rename "$file~", $file if $ci;
|
||||
}
|
||||
|
||||
|
||||
|
||||
run @ARGV;
|
||||
330
pub/download/code/bbcode.c
Normal file
330
pub/download/code/bbcode.c
Normal file
|
|
@ -0,0 +1,330 @@
|
|||
/*
|
||||
* BBCode 2 HTML converter by //YorHel
|
||||
* Copyright 2006 Y.Heling,
|
||||
* License: MIT
|
||||
*
|
||||
* Created just to learn C, probably very ugly piece of code
|
||||
* and probably with a _LOT_ of bugs... But the only way to
|
||||
* learn a programming language is to code something yourself :)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#define MAX_ARGH_SIZE 500
|
||||
#define MAX_TAG_SIZE 10
|
||||
#define MAX_NESTED_TAGS 100
|
||||
|
||||
#define TAGCHARS 28
|
||||
#define NUMBER_OF_TAGS 16
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
|
||||
/* typedefs */
|
||||
typedef enum {
|
||||
B,
|
||||
I,
|
||||
U,
|
||||
SIZE,
|
||||
COLOR,
|
||||
URL,
|
||||
QUOTE,
|
||||
QUOTE2,
|
||||
IMG,
|
||||
IMG2,
|
||||
EMAIL,
|
||||
LIST,
|
||||
LIST2,
|
||||
CODE,
|
||||
HTML,
|
||||
UNDEF, /* hack */
|
||||
} TAGNAME;
|
||||
typedef struct {
|
||||
TAGNAME intags[MAX_NESTED_TAGS];
|
||||
int curtag;
|
||||
char tag[MAX_TAG_SIZE];
|
||||
char argh[MAX_ARGH_SIZE];
|
||||
FILE *dest;
|
||||
int inlist;
|
||||
int liststart;
|
||||
} PARSEINFO; /* just a hack to prevent the use of global variables */
|
||||
typedef struct {
|
||||
char *bb;
|
||||
char *html_s;
|
||||
char *html_e;
|
||||
char arg;
|
||||
} TAGINFO; /* store global information about the tags */
|
||||
|
||||
|
||||
/* functions */
|
||||
void parsebbcode(FILE *, FILE *);
|
||||
void converttag(PARSEINFO *);
|
||||
void formattag(PARSEINFO *);
|
||||
char endtags(PARSEINFO *, TAGNAME);
|
||||
void convertchars(PARSEINFO *, const char *);
|
||||
void convertchar(PARSEINFO *, const int);
|
||||
void convertchararg(char *, int);
|
||||
char istagchar(const int);
|
||||
void err(const char *);
|
||||
|
||||
/* global vars (only consts!) */
|
||||
const char tagchars[TAGCHARS] = "abcdefghijklmnopqrstuvwxyz/*";
|
||||
const TAGINFO taglist[NUMBER_OF_TAGS] = { /* same order as TAGNAME! */
|
||||
{ "b", "<b>", "</b>", FALSE },
|
||||
{ "i", "<i>", "</i>", FALSE },
|
||||
{ "u", "<span style=\"text-decoration: underline\">", "</span>", FALSE },
|
||||
{ "size", "<span style=\"font-size: %spx\">", "</span>", TRUE },
|
||||
{ "color", "<span style=\"color: %s\">", "</span>", TRUE },
|
||||
{ "url", "<a href=\"%s\">", "</a>", TRUE },
|
||||
{ "quote", "<span class=\"bbcode_quote_header\">Quote: <span class=\"bbcode_quote_body\">", "</span></span>", FALSE },
|
||||
{ "quote", "<span class=\"bbcode_quote_header\">%s wrote: <span class=\"bbcode_quote_body\">", "</span></span>", TRUE },
|
||||
{ "img", "<img src=\"", "\" alt=\"\" />", FALSE },
|
||||
{ "img", "<img src=\"%s\" alt=\"", "\" />", TRUE },
|
||||
{ "email", "<a href=\"mailto:%s\">", "</a>", TRUE },
|
||||
{ "list", "<ul>", "</li></ul>", FALSE },
|
||||
{ "list", "<ul style=\"list-style-type: %s\">", "</li></ul>", TRUE },
|
||||
{ "code", "<span class=\"bbcode_code_header\">Code: <span class=\"bbcode_code_body\">", "</span></span>", FALSE },
|
||||
{ "html", "", "", FALSE },
|
||||
{ "", "", "", FALSE },
|
||||
}; /* NOTE: not all characteristics of the BBCodes are defined above, there is also a lot of hard-coded stuff below for a few tags */
|
||||
|
||||
|
||||
|
||||
int main() {
|
||||
/* printf("BBCode to HTML converter by //YorHel\n");
|
||||
printf("Copyright 2006 Y. Heling\n\n");
|
||||
|
||||
printf("* Reading & parsing bbcode...\n");
|
||||
while(1) {
|
||||
FILE *file;
|
||||
if((file = fopen(BBFILE, "r")) == NULL) err("Couldn't open BBFILE");
|
||||
parsebbcode(file, stdout);
|
||||
fclose(file);
|
||||
}
|
||||
printf("\n");*/
|
||||
|
||||
parsebbcode(stdin, stdout);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void parsebbcode(FILE *file, FILE *dest) {
|
||||
PARSEINFO pitemp; /* make sure we allocate the memory */
|
||||
PARSEINFO *pi = &pitemp; /* but we are still going to use a pointer */
|
||||
char intag = pi->inlist = pi->liststart = 0;
|
||||
pi->curtag = 1;
|
||||
pi->intags[0] = UNDEF;
|
||||
sprintf(pi->tag, "");
|
||||
sprintf(pi->argh, "");
|
||||
pi->dest = dest;
|
||||
int c;
|
||||
char tmp[MAX_TAG_SIZE+MAX_ARGH_SIZE+4]; /* temp string, should be able to hold anything necessary */
|
||||
while((c = fgetc(file)) && c != EOF) {
|
||||
if(intag == 0 && c == '[') {
|
||||
intag = 1;
|
||||
}
|
||||
else if(intag == 1 && c == '=')
|
||||
intag = -1;
|
||||
else if(intag != 0 && c == ']') {
|
||||
intag = 0;
|
||||
converttag(pi);
|
||||
sprintf(pi->tag, "");
|
||||
sprintf(pi->argh, "");
|
||||
}
|
||||
else if(intag == 1 && strlen(pi->tag) < sizeof(pi->tag)) {
|
||||
if(istagchar(c)) {
|
||||
sprintf(tmp, "%c", tolower(c));
|
||||
strcat(pi->tag, tmp);
|
||||
} else {
|
||||
sprintf(tmp, "[%s", pi->tag);
|
||||
convertchars(pi, tmp);
|
||||
sprintf(pi->tag, "");
|
||||
}
|
||||
}
|
||||
else if(intag == 1) {
|
||||
intag = 0;
|
||||
sprintf(tmp, "[%s", pi->tag);
|
||||
convertchars(pi, tmp);
|
||||
sprintf(pi->tag, "");
|
||||
}
|
||||
else if(intag == -1 && (strlen(pi->argh)+10) < sizeof(pi->argh)) {
|
||||
convertchararg(tmp, c);
|
||||
strcat(pi->argh, tmp);
|
||||
}
|
||||
else if(intag == -1) {
|
||||
sprintf(tmp, "[%s=%s", pi->tag, pi->argh);
|
||||
convertchars(pi, tmp);
|
||||
sprintf(pi->tag, "");
|
||||
sprintf(pi->argh, "");
|
||||
intag = 0;
|
||||
}
|
||||
else
|
||||
convertchar(pi, c);
|
||||
}
|
||||
/* some stuff left in the buffer */
|
||||
if(strlen(pi->tag) > 0 && strlen(pi->argh) == 0)
|
||||
fprintf(dest, "[%s", pi->tag);
|
||||
else if(strlen(pi->tag) > 0 && strlen(pi->argh) > 0)
|
||||
fprintf(dest, "[%s=%s", pi->tag, pi->argh);
|
||||
/* automatically close opened tags */
|
||||
endtags(pi, UNDEF);
|
||||
}
|
||||
|
||||
void converttag(PARSEINFO *pi) {
|
||||
/* ignore tag if we're not allowed to nest */
|
||||
if((pi->intags[pi->curtag] == CODE && strcmp(pi->tag, "/code") != 0)
|
||||
|| (pi->intags[pi->curtag] == HTML && strcmp(pi->tag, "/html") != 0)
|
||||
|| ((pi->intags[pi->curtag] == IMG || pi->intags[pi->curtag] == IMG2) && strcmp(pi->tag, "/img"))) {
|
||||
formattag(pi);
|
||||
return;
|
||||
}
|
||||
|
||||
/* parse list items */
|
||||
if(!strcmp(pi->tag, "*") && pi->inlist) {
|
||||
endtags(pi, LIST);
|
||||
if(pi->inlist == pi->liststart)
|
||||
fprintf(pi->dest, "</li>");
|
||||
else
|
||||
pi->liststart = pi->inlist;
|
||||
fprintf(pi->dest, "<li>");
|
||||
|
||||
return; /* no need to parse more */
|
||||
}
|
||||
|
||||
/* begin a tag */
|
||||
if(*pi->tag != '/') {
|
||||
int i; int got = -1;
|
||||
for(i=0 ; i<NUMBER_OF_TAGS && got == -1 ; i++)
|
||||
if(!strcmp(pi->tag, taglist[i].bb)) {
|
||||
got = i;
|
||||
if(strlen(pi->argh) == 0 && !taglist[i].arg)
|
||||
fprintf(pi->dest, "%s", taglist[i].html_s);
|
||||
else if(strlen(pi->argh) > 0 && taglist[i].arg) {
|
||||
if(i != LIST2)
|
||||
fprintf(pi->dest, taglist[i].html_s, pi->argh);
|
||||
else
|
||||
fprintf(pi->dest, taglist[i].html_s, strcmp(pi->argh, "1") ? "lower-roman" : "decimal");
|
||||
}
|
||||
else
|
||||
got = -1;
|
||||
};
|
||||
if(got != -1) {
|
||||
pi->intags[++pi->curtag] = got;
|
||||
if(got == LIST || got == LIST2)
|
||||
pi->inlist++;
|
||||
}
|
||||
else
|
||||
formattag(pi);
|
||||
return;
|
||||
}
|
||||
|
||||
/* end a tag */
|
||||
else {
|
||||
char *tag = pi->tag+1; /* strip the '/' */
|
||||
int i;
|
||||
char got = FALSE;
|
||||
for(i=0 ; i<NUMBER_OF_TAGS && got == FALSE ; i++)
|
||||
if(!strcmp(tag, taglist[i].bb) && endtags(pi, i)) {
|
||||
fprintf(pi->dest, "%s", taglist[i].html_e);
|
||||
if(pi->intags[pi->curtag] == LIST || pi->intags[pi->curtag] == LIST2)
|
||||
pi->liststart = --pi->inlist;
|
||||
pi->curtag--;
|
||||
got = TRUE;
|
||||
};
|
||||
if(!got)
|
||||
formattag(pi);
|
||||
}
|
||||
}
|
||||
|
||||
char endtags(PARSEINFO *pi, TAGNAME to) {
|
||||
char s = FALSE;
|
||||
if(to == QUOTE || to == LIST || to == IMG)
|
||||
s = TRUE;
|
||||
else if(to == QUOTE2 || to == LIST2 || to == IMG2) {
|
||||
s = TRUE;
|
||||
to--;
|
||||
}
|
||||
int i = pi->curtag;
|
||||
if(to != UNDEF)
|
||||
while(pi->intags[i] != to && (!s || pi->intags[i] != to+1) && i > 0)
|
||||
i--;
|
||||
if(i) {
|
||||
while(pi->intags[pi->curtag] != to && (!s || pi->intags[pi->curtag] != (to+1)) && pi->curtag > 0) {
|
||||
if(pi->intags[pi->curtag] == LIST || pi->intags[pi->curtag] == LIST2)
|
||||
pi->liststart = --pi->inlist;
|
||||
fprintf(pi->dest, "%s", taglist[pi->intags[pi->curtag--]].html_e);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void formattag(PARSEINFO *pi) {
|
||||
char tmp[MAX_TAG_SIZE+MAX_ARGH_SIZE+4];
|
||||
if(strlen(pi->argh) == 0)
|
||||
sprintf(tmp, "[%s]", pi->tag);
|
||||
else
|
||||
sprintf(tmp, "[%s=%s]", pi->tag, pi->argh);
|
||||
convertchars(pi, tmp);
|
||||
}
|
||||
|
||||
void convertchars(PARSEINFO *pi, const char *chars) {
|
||||
int i;
|
||||
for(i=0;i<strlen(chars);i++)
|
||||
convertchar(pi, *(chars+i));
|
||||
}
|
||||
|
||||
void convertchar(PARSEINFO *pi, const int c) {
|
||||
if(pi->inlist && pi->inlist != pi->liststart)
|
||||
return;
|
||||
else if(pi->intags[pi->curtag] == HTML)
|
||||
fprintf(pi->dest, "%c", c);
|
||||
else if(pi->intags[pi->curtag] == IMG || pi->intags[pi->curtag] == IMG2) {
|
||||
char tmp[10];
|
||||
convertchararg(tmp, c);
|
||||
fprintf(pi->dest, tmp);
|
||||
}
|
||||
else if(c == '\n')
|
||||
fprintf(pi->dest, "<br />\n");
|
||||
else if(c == '&')
|
||||
fprintf(pi->dest, "&");
|
||||
else if(c == '<')
|
||||
fprintf(pi->dest, "<");
|
||||
else if(c == '>')
|
||||
fprintf(pi->dest, ">");
|
||||
else
|
||||
fprintf(pi->dest, "%c", c);
|
||||
}
|
||||
|
||||
void convertchararg(char *to, const int c) {
|
||||
switch(c) {
|
||||
case '\n' :
|
||||
sprintf(to, ""); break;
|
||||
case '&' :
|
||||
sprintf(to, "&"); break;
|
||||
case '"' :
|
||||
sprintf(to, """); break;
|
||||
default :
|
||||
sprintf(to, "%c", c);
|
||||
}
|
||||
}
|
||||
|
||||
char istagchar(const int c) {
|
||||
int i;
|
||||
int c2 = tolower(c);
|
||||
for(i=0;i<TAGCHARS;i++)
|
||||
if(c2 == *(tagchars+i))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void err(const char *msg) {
|
||||
fprintf(stderr, "ERROR: %s\n", msg);
|
||||
exit(1);
|
||||
}
|
||||
180
pub/download/code/echoserv.c
Normal file
180
pub/download/code/echoserv.c
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
/*
|
||||
* echoserv.c - a simple single-threaded TCP server test
|
||||
* by //YorHel
|
||||
*
|
||||
* Copyright 2006 Y. Heling,
|
||||
* February 2006
|
||||
* License: MIT
|
||||
*
|
||||
* Use it at your own risk
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/select.h>
|
||||
|
||||
#define LISTEN_PORT 1337
|
||||
|
||||
#define MAX(x,y) ((x) > (y) ? (x) : (y))
|
||||
;
|
||||
#define MAX_CONNECTIONS 10
|
||||
#define READ_BUFFER_SIZE 512
|
||||
|
||||
#define CST_FREE 0
|
||||
#define CST_READ 1
|
||||
#define CST_WRITE 2
|
||||
|
||||
typedef struct {
|
||||
int fd;
|
||||
char state;
|
||||
char *buf;
|
||||
} connections;
|
||||
static connections *conns;
|
||||
|
||||
void error(const char *);
|
||||
void close_and_free(int);
|
||||
|
||||
int main() {
|
||||
printf("Simple TCP server by //YorHel\n\n");
|
||||
|
||||
printf("* Creating socket\n");
|
||||
int l;
|
||||
if((l = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
error("Can't create socket");
|
||||
|
||||
printf("* Setting SO_REUSEADDR on main socket\n");
|
||||
int set = 1;
|
||||
if(setsockopt(l, SOL_SOCKET, SO_REUSEADDR, (void *) &set, sizeof(set)) < 0)
|
||||
error("Can't set SO_REUSEADDR on main socket");
|
||||
|
||||
printf("* Binding socket\n");
|
||||
struct sockaddr_in serv_addr;
|
||||
memset(&serv_addr, 0, sizeof(struct sockaddr_in));
|
||||
serv_addr.sin_family = AF_INET;
|
||||
serv_addr.sin_port = htons(LISTEN_PORT);
|
||||
serv_addr.sin_addr.s_addr = INADDR_ANY;
|
||||
if(bind(l, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
|
||||
error("Can't bind socket");
|
||||
|
||||
printf("* Listening to socket\n");
|
||||
listen(l, 5);
|
||||
|
||||
printf("* Creating connections table\n");
|
||||
conns = (connections *) malloc( sizeof(connections) * MAX_CONNECTIONS );
|
||||
if(conns == (connections *) 0)
|
||||
error("Can't allocate memory for connections table");
|
||||
int cnum;
|
||||
for(cnum=MAX_CONNECTIONS; cnum--;)
|
||||
conns[cnum].state = CST_FREE;
|
||||
|
||||
printf("* Accepting connections\n");
|
||||
/* re-use the same vars over-and-over again
|
||||
* is a little faster than defining them each time */
|
||||
int n, cn, newid, clifd;
|
||||
char stop = 0;
|
||||
fd_set rd, wr;
|
||||
struct sockaddr_in cliaddr;
|
||||
unsigned int clilen;
|
||||
/* main loop */
|
||||
while(!stop) {
|
||||
/* set FDs for select() */
|
||||
FD_ZERO(&rd); FD_ZERO(&wr);
|
||||
n = 0;
|
||||
FD_SET(l, &rd);
|
||||
n = MAX(l, n);
|
||||
|
||||
/* set FDs for the connections */
|
||||
for(cn=MAX_CONNECTIONS;cn--;) {
|
||||
if(conns[cn].state == CST_READ) {
|
||||
FD_SET(conns[cn].fd, &rd);
|
||||
n = MAX(n, conns[cn].fd);
|
||||
} else if(conns[cn].state == CST_WRITE) {
|
||||
FD_SET(conns[cn].fd, &wr);
|
||||
n = MAX(n, conns[cn].fd);
|
||||
}
|
||||
}
|
||||
|
||||
n = select(n + 1, &rd, &wr, (fd_set *) NULL, (struct timeval *) 0);
|
||||
if(n < 0)
|
||||
error("select() failed...");
|
||||
if(n == 0)
|
||||
continue;
|
||||
|
||||
/* Something happend, handle it :) */
|
||||
if(FD_ISSET(l, &rd)) { /* new connection */
|
||||
/* get free slot, if one */
|
||||
newid = -1;
|
||||
for(cn=MAX_CONNECTIONS;cn--;)
|
||||
if(conns[cn].state == CST_FREE) {
|
||||
newid = cn; break;
|
||||
}
|
||||
if(newid < 0)
|
||||
printf(" *WARNING: Too many connections\n");
|
||||
else {
|
||||
/* accept the connection */
|
||||
clilen = sizeof(cliaddr);
|
||||
memset(&cliaddr, 0, clilen);
|
||||
clifd = accept(l, (struct sockaddr *) &cliaddr, &clilen);
|
||||
if(clifd < 0)
|
||||
error("Can't accept connection");
|
||||
printf(" [%d] We have a connection!!\n", newid);
|
||||
conns[newid].state = CST_WRITE;
|
||||
if((conns[newid].buf = malloc(READ_BUFFER_SIZE)) < 0)
|
||||
error("Can't allocate memory");
|
||||
sprintf(conns[newid].buf, "Hello world!\n");
|
||||
conns[newid].fd = clifd;
|
||||
}
|
||||
}
|
||||
|
||||
/* checking active sockets */
|
||||
for(cn=MAX_CONNECTIONS;cn--;) {
|
||||
/* we can write */
|
||||
if(conns[cn].state == CST_WRITE && FD_ISSET(conns[cn].fd, &wr)) {
|
||||
if(write(conns[cn].fd, conns[cn].buf, strlen(conns[cn].buf)) <= 0)
|
||||
close_and_free(cn);
|
||||
printf(" [%d] Sent: %s", cn, conns[cn].buf);
|
||||
conns[cn].state = CST_READ;
|
||||
}
|
||||
/* we can read */
|
||||
if(conns[cn].state == CST_READ && FD_ISSET(conns[cn].fd, &rd)) {
|
||||
memset((void *) conns[cn].buf, 0, READ_BUFFER_SIZE);
|
||||
if(read(conns[cn].fd, conns[cn].buf, READ_BUFFER_SIZE) <= 0)
|
||||
close_and_free(cn);
|
||||
printf(" [%d] G0t: %s", cn, conns[cn].buf);
|
||||
conns[cn].state = CST_WRITE;
|
||||
if(strstr(conns[cn].buf, "exit") == conns[cn].buf) {
|
||||
printf(" [%d] Closing connection\n", cn);
|
||||
close_and_free(cn);
|
||||
} else if(strstr(conns[cn].buf, "die()") == conns[cn].buf) {
|
||||
printf("Got die() from connection #%d, dying!\n", cn);
|
||||
stop = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* close all connections before dying */
|
||||
for(cnum=MAX_CONNECTIONS;cnum--;)
|
||||
if(conns[cnum].state != CST_FREE)
|
||||
close_and_free(cnum);
|
||||
close(l);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
void close_and_free(int cn) {
|
||||
close(conns[cn].fd);
|
||||
conns[cn].state = CST_FREE;
|
||||
free(conns[cn].buf);
|
||||
}
|
||||
|
||||
|
||||
void error(const char *msg) {
|
||||
perror(msg);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
248
pub/download/code/grenamr-0.1.pl
Normal file
248
pub/download/code/grenamr-0.1.pl
Normal file
|
|
@ -0,0 +1,248 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# grenamr v0.1
|
||||
# 2008-08-01
|
||||
# Yoran Heling
|
||||
|
||||
# License: MIT
|
||||
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use Gtk2 -init;
|
||||
|
||||
our $VERSION = '0.1';
|
||||
|
||||
my %w;
|
||||
my $m;
|
||||
use constant {
|
||||
C_OLD => 0,
|
||||
C_NEW => 1,
|
||||
C_FLG => 2,
|
||||
F_REG => 0x01,
|
||||
F_MAN => 0x02, # not implemented yet...
|
||||
F_CON => 0x04,
|
||||
};
|
||||
|
||||
|
||||
create();
|
||||
Gtk2->main;
|
||||
|
||||
|
||||
sub create {
|
||||
$w{win} = Gtk2::Window->new('toplevel');
|
||||
$w{win}->signal_connect(destroy => \&close);
|
||||
$w{win}->resize(500, 500);
|
||||
$w{win}->move(300, 300);
|
||||
$w{win}->set(title => 'GRenamR v'.$VERSION);
|
||||
|
||||
$w{vbGlobal} = Gtk2::VBox->new(0, 0);
|
||||
$w{win}->add($w{vbGlobal});
|
||||
|
||||
$w{hbDir} = Gtk2::HBox->new(0, 0);
|
||||
$w{vbGlobal}->pack_start($w{hbDir}, 0, 1, 0);
|
||||
|
||||
$w{lbDir} = Gtk2::Label->new('_Directory');
|
||||
$w{hbDir}->pack_start($w{lbDir}, 0, 0, 5);
|
||||
|
||||
$w{fcDir} = Gtk2::FileChooserButton->new('Select a directory', 'select-folder');
|
||||
$w{fcDir}->signal_connect('current-folder-changed', \&fetchdir);
|
||||
$w{hbDir}->pack_start($w{fcDir}, 1, 1, 0);
|
||||
$w{lbDir}->set(mnemonic_widget => $w{fcDir}, use_underline => 1);
|
||||
|
||||
$w{swFiles} = Gtk2::ScrolledWindow->new;
|
||||
$w{swFiles}->set_policy('automatic', 'automatic');
|
||||
$w{vbGlobal}->pack_start($w{swFiles}, 1, 1, 0);
|
||||
|
||||
$w{tvFiles} = Gtk2::TreeView->new;
|
||||
$w{swFiles}->add($w{tvFiles});
|
||||
$m = $w{lsFiles} = Gtk2::ListStore->new('Glib::String', 'Glib::String', 'Glib::Int');
|
||||
$w{tvFiles}->set_model($w{lsFiles});
|
||||
$w{tvFiles}->insert_column_with_data_func(0, '', Gtk2::CellRendererPixbuf->new, \&column_func, 0);
|
||||
my $c = Gtk2::CellRendererText->new;
|
||||
$w{tvFiles}->insert_column_with_data_func(1, 'Old', $c, \&column_func, 1);
|
||||
$w{tvFiles}->insert_column_with_data_func(2, 'New', $c, \&column_func, 2);
|
||||
$w{tvFiles}->get_column(1)->set(sizing => 'autosize');
|
||||
$w{tvFiles}->get_column(2)->set(sizing => 'autosize');
|
||||
|
||||
$w{hbPerl} = Gtk2::HBox->new(0, 0);
|
||||
$w{vbGlobal}->pack_start($w{hbPerl}, 0, 1, 0);
|
||||
|
||||
$w{lbPerl} = Gtk2::Label->new('_Expression');
|
||||
$w{hbPerl}->pack_start($w{lbPerl}, 0, 0, 5);
|
||||
|
||||
$w{enPerl} = Gtk2::Entry->new;
|
||||
$w{enPerl}->signal_connect('changed', \&applyfilter);
|
||||
$w{hbPerl}->pack_start($w{enPerl}, 1, 1, 0);
|
||||
$w{lbPerl}->set(mnemonic_widget => $w{enPerl}, use_underline => 1);
|
||||
|
||||
$w{imPerl} = Gtk2::Image->new_from_stock('gtk-yes', 'menu');
|
||||
$w{hbPerl}->pack_start($w{imPerl}, 0, 1, 0);
|
||||
|
||||
$w{hbBottom} = Gtk2::HBox->new(0, 0);
|
||||
$w{vbGlobal}->pack_start($w{hbBottom}, 0, 1, 0);
|
||||
|
||||
$w{alStatus} = Gtk2::Alignment->new(0,0.8,0,0);
|
||||
$w{hbBottom}->pack_start($w{alStatus}, 1, 1, 5);
|
||||
|
||||
$w{lbStatus} = Gtk2::Label->new('');
|
||||
$w{alStatus}->add($w{lbStatus});
|
||||
|
||||
$w{alBottom} = Gtk2::Alignment->new(1,1,0,1);
|
||||
$w{hbBottom}->pack_start($w{alBottom}, 0, 1, 0);
|
||||
|
||||
$w{bbBottom} = Gtk2::HButtonBox->new;
|
||||
$w{bbBottom}->set(spacing => 5);
|
||||
$w{alBottom}->add($w{bbBottom});
|
||||
|
||||
$w{btApply} = Gtk2::Button->new('_Rename');
|
||||
$w{btApply}->signal_connect('clicked', \&dorename);
|
||||
$w{bbBottom}->pack_start($w{btApply}, 0, 0, 5);
|
||||
|
||||
$w{btClose} = Gtk2::Button->new('_Close');
|
||||
$w{btClose}->signal_connect('clicked', \&close);
|
||||
$w{bbBottom}->pack_start($w{btClose}, 0, 0, 5);
|
||||
|
||||
$w{win}->show_all;
|
||||
$w{enPerl}->grab_focus;
|
||||
|
||||
if($ARGV[0] && -d $ARGV[0]) {
|
||||
$w{fcDir}->set_current_folder($ARGV[0]);
|
||||
} else {
|
||||
fetchdir();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub column_func {
|
||||
my ($column, $cell, $model, $iter, $col) = @_;
|
||||
my $flags = $model->get($iter, 2);
|
||||
$cell->set(
|
||||
$col > 0 ? (
|
||||
text => $model->get($iter, $col-1),
|
||||
) : (
|
||||
'stock-id' => $flags & F_CON ? 'gtk-dialog-error'
|
||||
: $flags & F_REG ? 'gtk-edit'
|
||||
: $flags & F_MAN ? 'gtk-apply'
|
||||
: 'gtk-file',
|
||||
),
|
||||
$flags & F_CON ? ( cell_background => '#ffcccc' ) :
|
||||
$flags & F_REG ? ( cell_background => '#ccffcc' ) :
|
||||
$flags & F_MAN ? ( cell_background => '#ffffcc' ) :
|
||||
( cell_background_set => 0 ),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
sub close {
|
||||
Gtk2->main_quit;
|
||||
}
|
||||
|
||||
|
||||
sub fetchdir {
|
||||
Gtk2->main_iteration_do(0);
|
||||
my $d = $w{fcDir}->get_current_folder;
|
||||
|
||||
$w{lbStatus}->set(label => 'Loading...');
|
||||
|
||||
my @lst;
|
||||
opendir(my $D, $d)
|
||||
|| return $w{lbStatus}->set(label => 'Unable to open the selected directory');
|
||||
-f $d.'/'.$_ and push @lst, $_ for (readdir $D);
|
||||
closedir $D;
|
||||
|
||||
$m->clear;
|
||||
$m->set($m->append, C_OLD, $_, C_NEW, $_, C_FLG, 0)
|
||||
for (sort @lst);
|
||||
$w{lbStatus}->set(label => sprintf '%d files found.', scalar @lst);
|
||||
applyfilter();
|
||||
}
|
||||
|
||||
|
||||
sub applyfilter {
|
||||
my $p = $w{enPerl}->get_text;
|
||||
|
||||
# create a list of files
|
||||
my @list;
|
||||
my $i = $m->get_iter_first;
|
||||
do {
|
||||
push @list, $m->get($i, C_OLD)
|
||||
} while ($i = $m->iter_next($i));
|
||||
|
||||
# eval using a for loop
|
||||
$i=-1;
|
||||
eval 'no strict; no warnings; for (@list) { ++$i; '.$p.' }';
|
||||
my $e = $@;
|
||||
$w{imPerl}->set(stock => $e ? 'gtk-no' : 'gtk-yes');
|
||||
|
||||
# compare and update the list
|
||||
my $j=0; my $matched=0;
|
||||
$i = $m->get_iter_first;
|
||||
do {{
|
||||
next if $m->get($i, C_FLG) & F_MAN;
|
||||
my $match = $e || $m->get($i, C_OLD) eq $list[$j] ? 0 : 1;
|
||||
$m->set($i, C_NEW, $list[$j++], C_FLG, $match);
|
||||
$matched += $match;
|
||||
}} while ($i = $m->iter_next($i));
|
||||
|
||||
# update status
|
||||
$w{lbStatus}->set(label => $e
|
||||
? 'Invalid expression'
|
||||
: sprintf 'Matched %d/%d files.', $matched, scalar @list);
|
||||
|
||||
findconflicts();
|
||||
}
|
||||
|
||||
|
||||
sub findconflicts {
|
||||
# create a list of old filenames
|
||||
my @old;
|
||||
my $i = $m->get_iter_first;
|
||||
do {
|
||||
push @old, $m->get($i, C_OLD);
|
||||
} while ($i = $m->iter_next($i));
|
||||
|
||||
# search for modified items having a new filename in that list
|
||||
my $e=0;
|
||||
$i = $m->get_iter_first;
|
||||
do {{
|
||||
next if !$m->get($i, C_FLG);
|
||||
my $new = $m->get($i, C_NEW);
|
||||
my $match = $new eq '' || $new =~ /\// || grep $_ eq $new, @old;
|
||||
$m->set($i, C_FLG, $m->get($i, C_FLG) | F_CON)
|
||||
if $match;
|
||||
$e++ if $match;
|
||||
}} while ($i = $m->iter_next($i));
|
||||
|
||||
$w{lbStatus}->set(label => 'Errors found!') if $e;
|
||||
}
|
||||
|
||||
|
||||
sub dorename {
|
||||
my $d = $w{fcDir}->get_current_folder;
|
||||
|
||||
# count number of renamable files
|
||||
my $i = $m->get_iter_first;
|
||||
my $count=0;
|
||||
do {
|
||||
$count++ if $m->get($i, C_FLG) && !($m->get($i, C_FLG) & F_CON);
|
||||
} while ($i = $m->iter_next($i));
|
||||
|
||||
return $w{lbStatus}->set(label => 'Nothing to do...') if !$count;
|
||||
|
||||
$w{lbStatus}->set(label => 'Renaming...');
|
||||
my $j=0;
|
||||
$i = $m->get_iter_first;
|
||||
do {{
|
||||
next if !$m->get($i, C_FLG) || $m->get($i, C_FLG) & F_CON;
|
||||
rename $d.'/'.$m->get($i, C_OLD), $d.'/'.$m->get($i, C_NEW);
|
||||
$m->set($i, C_OLD, $m->get($i, C_NEW), C_FLG, 0);
|
||||
$w{lbStatus}->set(label => sprintf 'Renaming file %d/%d...', ++$j, $count);
|
||||
Gtk2->main_iteration_do(0);
|
||||
}} while ($i = $m->iter_next($i));
|
||||
|
||||
$w{lbStatus}->set(label => sprintf 'Renamed %d files.', $j);
|
||||
}
|
||||
|
||||
|
||||
|
||||
150
pub/download/code/mdc2-parse.pl
Normal file
150
pub/download/code/mdc2-parse.pl
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
|
||||
# mdc3-parse.pl
|
||||
# June 2007
|
||||
# Yoran Heling
|
||||
|
||||
# License: MIT
|
||||
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Storable 'store', 'retrieve';
|
||||
use POSIX;
|
||||
use POSIX::strptime;
|
||||
|
||||
my $log = 'log'; # the microdc2 log file
|
||||
my $result = 'transferred.html'; # the resulting html file
|
||||
my $cache = 'logparse.pl_cache'; # file for the Storable cache
|
||||
|
||||
|
||||
my %ts = -s $cache ? ( %{retrieve($cache)} ) : ();
|
||||
my $totalsent = 0;
|
||||
|
||||
# using STDIN/OUT -> lazy and ugly :-)
|
||||
open(STDIN, '<', $log) || die $!;
|
||||
open(STDOUT, '>', $result) || die $!;
|
||||
|
||||
|
||||
while(<>) {
|
||||
s/\r?\n//;
|
||||
# 28.04.2007 20:15:25
|
||||
next if !s/^([0-9]{2}\.[0-9]{2}\.[0-9]{4}\s+[0-9]{2}:[0-9]{2}:[0-9]{2})\s//;
|
||||
my $date = $1;
|
||||
|
||||
# plesnivec: Upload of `Ghost in the Shell - Stand Alone Complex - 25.avi' succeeded (transfer complete). 1.5MiB transferred in 53s (29KiB/s).
|
||||
# [Anime]Spank: Upload of `Rozen Maiden - Traumend - 07.avi' succeeded (transfer complete). 177MiB transferred in 2h46m35s (19KiB/s).
|
||||
# [izms]Inkognito: Upload of `Ultra Maniac TV - 16.avi' failed (communication error). 1.7MiB transferred in 3m4s (9KiB/s).
|
||||
if(/^(.+): Upload of `(.+)' (succeeded|failed) \(([^)]+)\)\. ([0-9\.]+[GMK]?i?B) transferred in ([0-9dhms]+) \(([0-9]+)KiB\/s\)/) {
|
||||
my($nick, $file, $sf, $msg, $sent, $time, $speed) = ($1, $2, $3, $4, $5, $6);
|
||||
$file =~ s/\\'/'/g;
|
||||
|
||||
my $epoch = POSIX::mktime(POSIX::strptime($date, '%d.%m.%Y %T'));
|
||||
|
||||
$sent = calcsize($sent);
|
||||
$time = calctime($time);
|
||||
|
||||
$totalsent += $sent;
|
||||
|
||||
my $k = $nick.$file;
|
||||
next if $ts{$k} && grep { +$_ == $epoch } @{$ts{$k}{epoch}};
|
||||
if($ts{$k}) {
|
||||
$ts{$k}{sent} += $sent;
|
||||
$ts{$k}{time} += $time;
|
||||
$ts{$k}{chunks}++;
|
||||
$ts{$k}{failed}++ if $sf eq 'failed';
|
||||
$ts{$k}{succeeded}++ if $sf eq 'succeeded';
|
||||
push(@{$ts{$k}{epoch}}, $epoch);
|
||||
} else {
|
||||
$ts{$k} = {
|
||||
file => $file,
|
||||
nick => $nick,
|
||||
sent => $sent,
|
||||
time => $time,
|
||||
date => $date,
|
||||
epoch => [ $epoch ], # only used for identification and sorting
|
||||
# msg => $msg, # unused
|
||||
chunks => 1,
|
||||
failed => $sf eq 'failed' ? 1 : 0,
|
||||
succeeded => $sf eq 'succeeded' ? 1 : 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
store \%ts, $cache;
|
||||
|
||||
printf "\nSent %d files and %s\n", scalar keys %ts, calcsize($totalsent);
|
||||
print qq|
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
table { font-size: 13px; }
|
||||
td { padding: 0 5px 0 5px; border: 1px solid #ccc; white-space: nowrap; }
|
||||
thead td { font-weight: bold; }
|
||||
.tc4, .tc5, .tc7 { text-align: right }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table cellspacing=0 cellpadding=0>
|
||||
<thead><tr>
|
||||
<td class="tc1">Date/time</td>
|
||||
<td class="tc4">Transfered</td>
|
||||
<td class="tc5">Time</td>
|
||||
<td class="tc7">Speed</td>
|
||||
<td class="tc6">Chunks</td>
|
||||
<td class="tc2">User</td>
|
||||
<td class="tc3">Filename</td>
|
||||
</tr></thead>\n|;
|
||||
|
||||
printf(qq|<tr>
|
||||
<td class="tc1">%s</td>
|
||||
<td class="tc4">%s</td>
|
||||
<td class="tc5">%s</td>
|
||||
<td class="tc7">%.2f KiB/s</td>
|
||||
<td class="tc6">%d/%d/%d</td>
|
||||
<td class="tc2">%s</td>
|
||||
<td class="tc3">%s</td>
|
||||
</tr>\n|,
|
||||
$ts{$_}{date},
|
||||
calcsize($ts{$_}{sent}),
|
||||
calctime($ts{$_}{time}),
|
||||
$ts{$_}{sent}/($ts{$_}{time}||1),
|
||||
$ts{$_}{chunks}, $ts{$_}{succeeded}, $ts{$_}{failed},
|
||||
$ts{$_}{nick},
|
||||
$ts{$_}{file},
|
||||
)
|
||||
for (sort { $ts{$b}{epoch}[0] <=> $ts{$a}{epoch}[0] } keys %ts);
|
||||
|
||||
print qq|</table>
|
||||
</body>
|
||||
</html>|;
|
||||
|
||||
|
||||
sub calcsize { # in KBytes by default, to avoid a 32bit int overflow
|
||||
if($_[0] =~ /^([0-9\.]+)(GiB|MiB|KiB|B)$/) {
|
||||
return $2 eq 'B' ? $1/1024 :
|
||||
$2 eq 'KiB' ? $1 :
|
||||
$2 eq 'MiB' ? $1*1024 :
|
||||
$1*1024*1024;
|
||||
} else {
|
||||
my $r = $_[0]; my $x = 'KiB';
|
||||
if($r > 1024) { $r/=1024; $x='MiB' }
|
||||
if($r > 1024) { $r/=1024; $x='GiB' }
|
||||
return sprintf "%.1f %s", $r, $x;
|
||||
}
|
||||
}
|
||||
sub calctime {
|
||||
if($_[0] =~ /[dhms]/) {
|
||||
my @t = reverse split(/[dhms]/, $_[0]);
|
||||
return ($t[3]||0)*86400 + ($t[2]||0)*3600 + ($t[1]||0)*60 + $t[0];
|
||||
} else {
|
||||
my $r = $_[0]; my $x = '';
|
||||
if($r > 24*3600) { $x .= int($r/(24*3600)).' d '; $r%=24*3600; }
|
||||
$x .= sprintf '%d:%02d:%02d',
|
||||
int($r/3600),
|
||||
int(($r%3600)/60),
|
||||
($r%3600) % 60;
|
||||
return $x;
|
||||
}
|
||||
}
|
||||
99
pub/download/code/nccolour.c
Normal file
99
pub/download/code/nccolour.c
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
/* nccolour.c - Print out some ncurses colours.
|
||||
*
|
||||
* Compile using:
|
||||
* gcc nccolour.c -o nccolour -lncurses
|
||||
*
|
||||
* Written by Yoran Heling <projects@yorhel.nl>
|
||||
*
|
||||
* Date: 2011-06-11
|
||||
* License: MIT
|
||||
* Web: http://dev.yorhel.nl/dump/nccolour
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <curses.h>
|
||||
|
||||
|
||||
struct colour {
|
||||
int code; char *desc;
|
||||
} colours[] = {
|
||||
{ -1, "default" },
|
||||
{ COLOR_BLACK, "BLACK" },
|
||||
{ COLOR_RED, "RED" },
|
||||
{ COLOR_GREEN, "GREEN" },
|
||||
{ COLOR_YELLOW, "YELLOW" },
|
||||
{ COLOR_BLUE, "BLUE" },
|
||||
{ COLOR_MAGENTA, "MAGENTA" },
|
||||
{ COLOR_CYAN, "CYAN" },
|
||||
{ COLOR_WHITE, "WHITE" },
|
||||
};
|
||||
|
||||
|
||||
void print_colourpart(int attr, int i) {
|
||||
addstr(" ");
|
||||
attron(attr | COLOR_PAIR(i*6+1));
|
||||
addstr("FD");
|
||||
addstr(" ");
|
||||
attron(attr | COLOR_PAIR(i*6+2));
|
||||
addstr("FB");
|
||||
attroff(attr | COLOR_PAIR(i*6+2));
|
||||
addstr(" ");
|
||||
attron(attr | COLOR_PAIR(i*6+3));
|
||||
addstr("FW");
|
||||
attroff(attr | COLOR_PAIR(i*6+3));
|
||||
addstr(" ");
|
||||
attron(attr | COLOR_PAIR(i*6+4));
|
||||
addstr("BG");
|
||||
attroff(attr | COLOR_PAIR(i*6+4));
|
||||
addstr(" ");
|
||||
attron(attr | COLOR_PAIR(i*6+5));
|
||||
addstr("BD");
|
||||
attroff(attr | COLOR_PAIR(i*6+5));
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if(!initscr()) {
|
||||
printf("Error initializing screen.\n");
|
||||
exit(1);
|
||||
}
|
||||
if(!has_colors()) {
|
||||
printf("This terminal does not support colours.\n");
|
||||
exit(1);
|
||||
}
|
||||
start_color();
|
||||
|
||||
// this prevents ncurses from forcing a white-on-black colour scheme,
|
||||
// regardless of what scheme is used by the terminal.
|
||||
use_default_colors();
|
||||
|
||||
attron(A_BOLD);
|
||||
mvaddstr(0, 0, "Colour FD FB FW BG BD BFD BFB BFW BBG BBN");
|
||||
attroff(A_BOLD);
|
||||
|
||||
int i;
|
||||
for(i=0; i<sizeof(colours)/sizeof(struct colour); i++) {
|
||||
init_pair(i*6+1, colours[i].code, -1);
|
||||
init_pair(i*6+2, colours[i].code, COLOR_BLACK);
|
||||
init_pair(i*6+3, colours[i].code, COLOR_WHITE);
|
||||
init_pair(i*6+4, colours[i].code, colours[i].code);
|
||||
init_pair(i*6+5, -1, colours[i].code);
|
||||
mvaddstr(i+2, 1, colours[i].desc);
|
||||
move(i+2, 8);
|
||||
print_colourpart(0, i);
|
||||
print_colourpart(A_BOLD, i);
|
||||
}
|
||||
|
||||
mvaddstr(i+3, 2, "FD = Front colour on default background");
|
||||
mvaddstr(i+4, 2, "FB = Front colour on black background");
|
||||
mvaddstr(i+5, 2, "FW = Front colour on white background");
|
||||
mvaddstr(i+6, 2, "BG = Front and background colour");
|
||||
mvaddstr(i+7, 2, "BD = Background colour with default front colour");
|
||||
mvaddstr(i+8, 2, "B?? = As above, with A_BOLD enabled");
|
||||
mvaddstr(i+10, 0, "Hit any key to exit.");
|
||||
refresh();
|
||||
getch();
|
||||
endwin();
|
||||
return 0;
|
||||
}
|
||||
|
||||
326
pub/download/code/vinfo.c
Normal file
326
pub/download/code/vinfo.c
Normal file
|
|
@ -0,0 +1,326 @@
|
|||
/* vinfo - A small commandline visual novel info display thingy
|
||||
|
||||
Last modified: 2009-11-16
|
||||
|
||||
This is just a simple example program using the public VNDB API,
|
||||
this program is neither useful nor actively maintained. Feel free
|
||||
to extend it to suit your needs.
|
||||
|
||||
Requirements:
|
||||
- A POSIX-compatible system
|
||||
- GNU getopt()
|
||||
- json-c (http://oss.metaparadigm.com/json-c/)
|
||||
|
||||
Compile:
|
||||
gcc vinfo.c `pkg-config --cflags --libs json` -o vinfo
|
||||
|
||||
Usage:
|
||||
vinfo -u <username> -p <password> <vnid>
|
||||
|
||||
TODO:
|
||||
- Giving password on the commandline is a really bad idea,
|
||||
need to fix an alternative method.
|
||||
- Display more info on VN info output (links/description)
|
||||
- Make host/port configurable
|
||||
- VN searching
|
||||
- More error checking on the received JSON data
|
||||
- Producers/releases?
|
||||
|
||||
|
||||
Copyright (c) 2009 Yoran Heling
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#define PROGRAM "vinfo"
|
||||
#define VERSION 0.1
|
||||
|
||||
#define SERVER "81.204.242.156" /* beta, you may want to change this to whatever api.vndb.org resolves to */
|
||||
#define PORT 19534
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <json.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
|
||||
#define WS "\011\012\015\040"
|
||||
#define DIE(str) { perror(str); exit(1); }
|
||||
|
||||
|
||||
char *user, *pass;
|
||||
int sock;
|
||||
|
||||
|
||||
/* sends command and returns reply */
|
||||
char *docmd(char *cmd) {
|
||||
char *res, *fmt;
|
||||
unsigned int start, end, read = 0, size = 1024;
|
||||
int r;
|
||||
json_object *json;
|
||||
|
||||
if(send(sock, cmd, strlen(cmd), 0) < 0)
|
||||
DIE("send");
|
||||
|
||||
/* receive data */
|
||||
res = malloc(size);
|
||||
while(memchr(res, 4, read) == NULL) {
|
||||
if(read > 102400) {
|
||||
printf("ERROR: Too long reply.\n");
|
||||
exit(1);
|
||||
}
|
||||
if(size-read < 500) {
|
||||
size *= 2;
|
||||
res = realloc(res, size);
|
||||
}
|
||||
if((r = recv(sock, res+read, size-read, 0)) < 0)
|
||||
DIE("recv");
|
||||
read += r;
|
||||
}
|
||||
|
||||
/* remove leading and trailing whitespace */
|
||||
end = ((char *)memchr(res, 4, read))-res;
|
||||
res[end--] = 0;
|
||||
while(strspn(res+end, WS))
|
||||
end--;
|
||||
start = strspn(res, WS);
|
||||
|
||||
if(start == 0)
|
||||
fmt = res;
|
||||
else {
|
||||
fmt = malloc(end-start+1);
|
||||
strcpy(fmt, res+start);
|
||||
free(res);
|
||||
}
|
||||
|
||||
/* check for error response */
|
||||
if(!strncmp(fmt, "error", strlen("error"))) {
|
||||
res = fmt+strlen("error");
|
||||
res += strspn(res, WS);
|
||||
json = json_tokener_parse(res);
|
||||
if(json != NULL && json_object_is_type(json, json_type_object)) {
|
||||
printf("ERROR(%s): %s\n",
|
||||
json_object_get_string(json_object_object_get(json, "id")),
|
||||
json_object_get_string(json_object_object_get(json, "msg")));
|
||||
json_object_put(json);
|
||||
} else {
|
||||
printf("Received something strange...\n> %s\n", fmt);
|
||||
}
|
||||
free(fmt);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return fmt;
|
||||
}
|
||||
|
||||
|
||||
/* opens the TCP socket and logs in */
|
||||
void login() {
|
||||
struct sockaddr_in addr;
|
||||
json_object *arg;
|
||||
const char *json;
|
||||
char *cmd, *res;
|
||||
|
||||
/* connect */
|
||||
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
||||
DIE("socket");
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(PORT);
|
||||
inet_aton(SERVER, &addr.sin_addr);
|
||||
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
DIE("connect");
|
||||
|
||||
/* construct login command */
|
||||
arg = json_object_new_object();
|
||||
json_object_object_add(arg, "protocol", json_object_new_int(1));
|
||||
json_object_object_add(arg, "client", json_object_new_string(PROGRAM));
|
||||
json_object_object_add(arg, "clientver", json_object_new_double(VERSION));
|
||||
json_object_object_add(arg, "username", json_object_new_string(user));
|
||||
json_object_object_add(arg, "password", json_object_new_string(pass));
|
||||
json = json_object_to_json_string(arg);
|
||||
cmd = malloc(strlen(json) + 10);
|
||||
sprintf(cmd, "login %s\04", json);
|
||||
json_object_put(arg);
|
||||
|
||||
/* login */
|
||||
res = docmd(cmd);
|
||||
free(cmd);
|
||||
if(strncmp("ok", res, 2)) {
|
||||
printf("ERROR: Received something strange.\n> %s\n", res);
|
||||
free(res);
|
||||
exit(1);
|
||||
}
|
||||
free(res);
|
||||
}
|
||||
|
||||
|
||||
void vninfo(int vid) {
|
||||
char cmd[50], *res, *tmp, *tmp2;
|
||||
const char *str;
|
||||
int i, n;
|
||||
json_object *json, *vn, *itm;
|
||||
|
||||
login();
|
||||
sprintf(cmd, "get vn basic,details (id=%d)\04", vid);
|
||||
res = docmd(cmd);
|
||||
if(strncmp("results", res, 7)) {
|
||||
printf("ERROR: Received something strange.\n> %s\n", res);
|
||||
exit(1);
|
||||
}
|
||||
tmp = res+7;
|
||||
tmp += strspn(tmp, WS);
|
||||
if((json = json_tokener_parse(tmp)) == NULL || !json_object_is_type(json, json_type_object)) {
|
||||
printf("ERROR: Received something strange.\n> %s\n", res);
|
||||
exit(1);
|
||||
}
|
||||
/*printf("\n%s\n\n", tmp);*/
|
||||
|
||||
/* note: may want to put in some checks on whether the data indeed confirms to what we expect */
|
||||
if(json_object_get_int(json_object_object_get(json, "num")) < 1) {
|
||||
printf("No VN with that ID.\n");
|
||||
exit(1);
|
||||
}
|
||||
vn = json_object_array_get_idx(json_object_object_get(json, "items"), 0);
|
||||
|
||||
/* header + titles */
|
||||
printf("------------------------------ v%-5d ----------------------------\n", vid);
|
||||
printf(" Title : %s\n", json_object_get_string(json_object_object_get(vn, "title")));
|
||||
if((str = json_object_get_string(json_object_object_get(vn, "original"))) != NULL)
|
||||
printf(" Official : %s\n", str);
|
||||
|
||||
/* aliases (string processing in C, meh) */
|
||||
str = json_object_get_string(json_object_object_get(vn, "aliases"));
|
||||
if(str != NULL) {
|
||||
printf(" Aliases : ");
|
||||
tmp = strdup(str);
|
||||
tmp2 = tmp;
|
||||
i = -1;
|
||||
do {
|
||||
i++;
|
||||
if(!tmp[i] || tmp[i] == ',' || tmp[i] == '\n') {
|
||||
if(tmp2 != tmp)
|
||||
printf(" ");
|
||||
tmp2 += strspn(tmp2, ", \n");
|
||||
n = tmp[i];
|
||||
tmp[i] = 0;
|
||||
printf("%s\n", tmp2);
|
||||
if(n) {
|
||||
i++;
|
||||
tmp2 = tmp+i;
|
||||
}
|
||||
}
|
||||
} while(tmp[i]);
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
/* release date */
|
||||
str = json_object_get_string(json_object_object_get(vn, "released"));
|
||||
printf(" First release : %-10s\n", str != NULL ? str : "-");
|
||||
|
||||
/* length */
|
||||
itm = json_object_object_get(vn, "length");
|
||||
if(json_object_is_type(itm, json_type_int)) {
|
||||
printf(" Length : ");
|
||||
switch(json_object_get_int(itm)) {
|
||||
case 1: printf("Very short\n"); break;
|
||||
case 2: printf("Short\n"); break;
|
||||
case 3: printf("Medium\n"); break;
|
||||
case 4: printf("Long\n"); break;
|
||||
case 5: printf("Very long\n"); break;
|
||||
}
|
||||
}
|
||||
|
||||
/* languages */
|
||||
itm = json_object_object_get(vn, "languages");
|
||||
if(json_object_array_length(itm) > 0) {
|
||||
printf(" Available in : ");
|
||||
for(i=0; i<json_object_array_length(itm); i++) {
|
||||
if(i)
|
||||
printf(", ");
|
||||
printf("%s", json_object_get_string(json_object_array_get_idx(itm, i)));
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
/* platforms */
|
||||
itm = json_object_object_get(vn, "platforms");
|
||||
if(json_object_array_length(itm) > 0) {
|
||||
printf(" ...for : ");
|
||||
for(i=0; i<json_object_array_length(itm); i++) {
|
||||
if(i)
|
||||
printf(", ");
|
||||
printf("%s", json_object_get_string(json_object_array_get_idx(itm, i)));
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
json_object_put(json);
|
||||
free(res);
|
||||
}
|
||||
|
||||
|
||||
void usage() {
|
||||
printf("%s -u username -p password query\n", PROGRAM);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
char *query;
|
||||
int r;
|
||||
|
||||
user = pass = query = NULL;
|
||||
|
||||
while((r = getopt(argc, argv, "-u:p:")) >= 0) {
|
||||
switch(r) {
|
||||
case 'u':
|
||||
user = optarg;
|
||||
break;
|
||||
case 'p':
|
||||
pass = optarg;
|
||||
break;
|
||||
case '\1':
|
||||
query = optarg;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
}
|
||||
if(!pass || !user || !query)
|
||||
usage();
|
||||
|
||||
if(sscanf(query, "%d", &r) == 1 && r > 0) {
|
||||
vninfo(r);
|
||||
} else {
|
||||
printf("Sorry, searching is not supported yet\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
342
pub/download/code/yapong-0.01.c
Normal file
342
pub/download/code/yapong-0.01.c
Normal file
|
|
@ -0,0 +1,342 @@
|
|||
/*
|
||||
* YAPong.c 0.01 - Yet Another pong clone, made by //YorHel
|
||||
*
|
||||
* Copyright 2006 Y.Heling.
|
||||
* 2006-02-22
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <curses.h>
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#define DI_UP 1
|
||||
#define DI_DOWN 2
|
||||
|
||||
#define DI_RIGHT 3
|
||||
#define DI_LEFT 4
|
||||
|
||||
void movepadel(char, char);
|
||||
void startgame();
|
||||
void drawpadels();
|
||||
void updatescore();
|
||||
void drawframe();
|
||||
void updatedot();
|
||||
void movedot(int);
|
||||
int print_help(char *);
|
||||
|
||||
int winrows, wincols, padsize, padposL, padposR, scoreL,
|
||||
scoreR, dotX, dotY, delay, padstep, dotstep;
|
||||
char direX, direY, started, paused, scored, autosize;
|
||||
WINDOW *win;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
/* defaults */
|
||||
autosize = 0;
|
||||
padstep = 1;
|
||||
dotstep = 1;
|
||||
winrows = 25; wincols = 80;
|
||||
padsize = ((winrows-3)/10);
|
||||
delay = 50 * 1000;
|
||||
/* args */
|
||||
{
|
||||
char *name = *argv++;
|
||||
char *ch;
|
||||
while(ch = *argv++) {
|
||||
if(!strcmp(ch, "-h"))
|
||||
return print_help(name);
|
||||
else if(!strcmp(ch, "-l")) {
|
||||
int level = atoi(*argv++);
|
||||
switch(level) {
|
||||
case 1 : delay = 100*1000; padsize = 6; padstep = 2; dotstep = 1; break;
|
||||
case 2 : delay = 80*1000; padsize = 6; padstep = 2; dotstep = 1; break;
|
||||
case 3 : delay = 65*1000; padsize = 5; padstep = 1; dotstep = 1; break;
|
||||
case 4 : delay = 50*1000; padsize = 3; padstep = 1; dotstep = 1; break;
|
||||
case 5 : delay = 80*1000; padsize = 3; padstep = 1; dotstep = 2; break;
|
||||
default :
|
||||
printf("ERROR: unknown level %d\n", level);
|
||||
return 0; break;
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-d")) {
|
||||
delay = atoi(*argv++) * 1000;
|
||||
if(delay >= 1000*1000 || delay == 0) {
|
||||
printf("ERROR: delay should be an integer between 0 and 1000\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-p")) {
|
||||
padsize = atoi(*argv++);
|
||||
if(padsize > wincols-3 || padsize == 0) {
|
||||
printf("ERROR: padel size should at least be 1 and should not be too high\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-s")) {
|
||||
if(!strcmp(*argv, "auto")) {
|
||||
autosize = 1; *argv++;
|
||||
} else {
|
||||
wincols = atoi(*argv++);
|
||||
winrows = atoi(*argv++);
|
||||
autosize = 0;
|
||||
if(wincols < 20 || winrows < 5) {
|
||||
printf("ERROR: Window size should at least be 20x5\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-ps")) {
|
||||
padstep = atoi(*argv++);
|
||||
if(padstep > padsize || padstep <= 0) {
|
||||
printf("ERROR: padstep should at least be 0 and should not be larger than padsize\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-ds")) {
|
||||
dotstep = atoi(*argv++);
|
||||
if(dotstep <= 0) {
|
||||
printf("ERROR: dotstep should be a positive integer\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("ERROR: no such option: %s\n", ch);
|
||||
return print_help(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize */
|
||||
if( (win = initscr()) == NULL) {
|
||||
fprintf(stderr, "ERROR: Can't initialize ncurses\n");
|
||||
return(1);
|
||||
}
|
||||
cbreak(); /* imidiatly get input chars */
|
||||
noecho(); /* don't print input chars */
|
||||
keypad(stdscr, TRUE); /* also get other keys */
|
||||
curs_set(0); /* hide cursor */
|
||||
|
||||
if(autosize)
|
||||
getmaxyx(stdscr, winrows, wincols);
|
||||
|
||||
/* non-changable stuff */
|
||||
padposL = padposR = ((winrows/2)-(padsize/2));
|
||||
scoreL = scoreR = 0;
|
||||
dotX = (wincols/2);
|
||||
dotY = (winrows/2)-1;
|
||||
direX = DI_RIGHT;
|
||||
direY = DI_DOWN;
|
||||
started = paused = 0;
|
||||
|
||||
|
||||
mvaddstr(0, 0, "Initializing, please wait...");
|
||||
refresh();
|
||||
clear();
|
||||
|
||||
/* draw stuff */
|
||||
drawframe();
|
||||
drawpadels();
|
||||
mvaddch(dotY, dotX, '0');
|
||||
refresh();
|
||||
|
||||
|
||||
/* get keyboard input */
|
||||
int ch;
|
||||
while(1) {
|
||||
ch = getch();
|
||||
switch(ch) {
|
||||
case KEY_UP :
|
||||
movepadel('r', 'u'); break;
|
||||
case KEY_DOWN :
|
||||
movepadel('r', 'd'); break;
|
||||
case 'a' :
|
||||
movepadel('l', 'u'); break;
|
||||
case 'z' :
|
||||
movepadel('l', 'd'); break;
|
||||
case ' ' :
|
||||
if(!started)
|
||||
startgame();
|
||||
else if(scored) {
|
||||
scored = 0;
|
||||
mvaddch(dotY, dotX, ' ');
|
||||
dotX = (wincols/2);
|
||||
dotY = (winrows/2)-1;
|
||||
refresh();
|
||||
} else if(!paused)
|
||||
paused = 1;
|
||||
else if(paused)
|
||||
paused = 0;
|
||||
break;
|
||||
case 'q' :
|
||||
goto end;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* cleanup */
|
||||
end:
|
||||
erase();
|
||||
mvaddstr(0, 0, "Thank you for playing Yet Another pong game. :)\nPlease visit http://yorhel.nl/ when your bored...\n");
|
||||
refresh();
|
||||
delwin(win);
|
||||
endwin();
|
||||
refresh();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void movepadel(char which, char direct) {
|
||||
if(paused || scored || !started)
|
||||
return;
|
||||
int *pos = which == 'r' ? &padposR : &padposL;
|
||||
*pos += direct == 'u' ? -1*padstep : padstep;
|
||||
if(*pos < 2)
|
||||
*pos = 2;
|
||||
if(*pos > winrows-padsize-2)
|
||||
*pos = winrows-padsize-2;
|
||||
drawpadels();
|
||||
move(wincols-1, 0);
|
||||
refresh();
|
||||
}
|
||||
|
||||
void startgame() {
|
||||
struct itimerval t;
|
||||
t.it_interval.tv_sec = t.it_value.tv_sec = 0;
|
||||
t.it_interval.tv_usec = t.it_value.tv_usec = delay;
|
||||
setitimer(ITIMER_REAL, &t, NULL);
|
||||
|
||||
struct sigaction s;
|
||||
s.sa_handler = movedot;
|
||||
s.sa_flags = 0;
|
||||
sigemptyset(&s.sa_mask);
|
||||
sigaction(SIGALRM, &s, NULL);
|
||||
|
||||
started = 1;
|
||||
}
|
||||
|
||||
void drawframe() {
|
||||
mvaddstr(0, 3, "left");
|
||||
mvaddstr(0, wincols-8, "right");
|
||||
mvaddstr(0, ((wincols/2)-7), "YAPong by //YorHel");
|
||||
move(1, 0);
|
||||
hline(ACS_HLINE, wincols);
|
||||
move(winrows-1, 0);
|
||||
hline(ACS_HLINE, wincols);
|
||||
updatescore();
|
||||
}
|
||||
|
||||
void updatescore() {
|
||||
char scl[3], scr[3];
|
||||
sprintf(scl, "%02d", scoreL);
|
||||
sprintf(scr, "%02d", scoreR);
|
||||
mvaddstr(0, 0, scl);
|
||||
mvaddstr(0, wincols-2, scr);
|
||||
}
|
||||
|
||||
void drawpadels() {
|
||||
int c;
|
||||
for(c=winrows; c--; ) {
|
||||
if(c < 2 || c >= winrows-1)
|
||||
continue;
|
||||
/* left paddel */
|
||||
if(c >= padposL && c <= padposL+padsize)
|
||||
mvaddch(c, 0, ' ' | A_REVERSE);
|
||||
else
|
||||
mvaddch(c, 0, ' ');
|
||||
/* right paddel */
|
||||
if(c >= padposR && c <= padposR+padsize)
|
||||
mvaddch(c, wincols-1, ' ' | A_REVERSE);
|
||||
else
|
||||
mvaddch(c, wincols-1, ' ');
|
||||
}
|
||||
}
|
||||
|
||||
/* called from signal */
|
||||
void movedot(int signal) {
|
||||
if(signal != SIGALRM || !started || paused || scored)
|
||||
return;
|
||||
|
||||
mvaddch(dotY, dotX, ' ');
|
||||
dotX += direX == DI_LEFT ? -1*dotstep : dotstep;
|
||||
dotY += direY == DI_UP ? -1*dotstep : dotstep;
|
||||
|
||||
if(direY == DI_UP && dotY <= 2) {
|
||||
direY = DI_DOWN;
|
||||
dotY = 2;
|
||||
}
|
||||
if(direY == DI_DOWN && dotY >= winrows-2) {
|
||||
direY = DI_UP;
|
||||
dotY = winrows-2;
|
||||
}
|
||||
|
||||
if(direX == DI_RIGHT && dotX >= wincols-2) {
|
||||
direX = DI_LEFT;
|
||||
dotX = wincols-2;
|
||||
if(dotY < padposR || dotY > padposR + padsize) {
|
||||
scored = 1;
|
||||
scoreL++;
|
||||
direX = DI_LEFT;
|
||||
updatescore();
|
||||
}
|
||||
}
|
||||
if(direX == DI_LEFT && dotX <= 1) {
|
||||
direX = DI_RIGHT;
|
||||
dotX = 1;
|
||||
if(dotY < padposL || dotY > padposL + padsize) {
|
||||
scored = 1;
|
||||
scoreR++;
|
||||
direX = DI_RIGHT;
|
||||
updatescore();
|
||||
}
|
||||
}
|
||||
|
||||
mvaddch(dotY, dotX, '0');
|
||||
move(wincols-1, 0);
|
||||
refresh();
|
||||
}
|
||||
|
||||
int print_help(char *name) {
|
||||
printf("Usage: %s [options]\n\n", name);
|
||||
printf("Options:\n");
|
||||
printf(" -h This help message.\n");
|
||||
printf(" -d int Specifies the interval between every move\n");
|
||||
printf(" of the dot. You can speed up the game by\n");
|
||||
printf(" setting this to a lower value.\n");
|
||||
printf(" -p int Specifies the size of each padel in pixels\n");
|
||||
printf(" -s x y Specifies the size of the window, or set\n");
|
||||
printf(" to 'auto' to use the size of your current\n");
|
||||
printf(" terminal. Recommended and default size is\n");
|
||||
printf(" 80x25.\n");
|
||||
printf(" -ps int Specifies the amount of pixels the padels\n");
|
||||
printf(" move each time\n");
|
||||
printf(" -ds int The amount of pixels the dot moves each\n");
|
||||
printf(" time, setting this to a larger value\n");
|
||||
printf(" increases game speed a lot.\n");
|
||||
printf(" -l level The game-level, higher levels are more\n");
|
||||
printf(" difficult. See below for more information\n\n");
|
||||
|
||||
printf("Levels:\n");
|
||||
printf(" option equals to\n");
|
||||
printf(" -l 1 -d 100 -p 6 -ps 2 -ds 1\n");
|
||||
printf(" -l 2 -d 80 -p 6 -ps 2 -ds 1\n");
|
||||
printf(" -l 3 -d 65 -p 5 -ps 1 -ds 1\n");
|
||||
printf(" -l 4 -d 50 -p 3 -ps 1 -ds 1\n");
|
||||
printf(" -l 5 -d 80 -p 3 -ps 1 -ds 2\n");
|
||||
printf(" Please note that all the levels are meant for a 80x25\n");
|
||||
printf(" window size, level 5 might be very easy with a higher\n");
|
||||
printf(" window size. In that case you should change the\n");
|
||||
printf(" the options yourself.\n\n");
|
||||
|
||||
printf("Ingame keys:\n");
|
||||
printf(" space Start/pause/resume game\n");
|
||||
printf(" key_up Move right padel up\n");
|
||||
printf(" key_down Move right padel down\n");
|
||||
printf(" a Move left padel up\n");
|
||||
printf(" z Move left padel down\n");
|
||||
printf(" q Quit game\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
335
pub/download/code/yapong.c
Normal file
335
pub/download/code/yapong.c
Normal file
|
|
@ -0,0 +1,335 @@
|
|||
/*
|
||||
* YAPong.c 0.02 - Yet Another pong clone, made by //YorHel
|
||||
*
|
||||
* Copyright 2006 Y.Heling.
|
||||
* 2006-02-23
|
||||
* License: MIT
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <curses.h>
|
||||
|
||||
#define DI_UP 1
|
||||
#define DI_DOWN 2
|
||||
|
||||
#define DI_RIGHT 3
|
||||
#define DI_LEFT 4
|
||||
|
||||
void movepadel(char, char);
|
||||
void drawpadels();
|
||||
void updatescore();
|
||||
void drawframe();
|
||||
void updatedot();
|
||||
void movedot();
|
||||
int print_help(char *);
|
||||
|
||||
int winrows, wincols, padsize, padposL, padposR, scoreL,
|
||||
scoreR, dotX, dotY, delay, padstep, dotstep;
|
||||
char direX, direY, started, paused, scored, autosize, autopsize;
|
||||
WINDOW *win;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
/* defaults */
|
||||
autosize = 1;
|
||||
autopsize = 1;
|
||||
padstep = 1;
|
||||
dotstep = 1;
|
||||
winrows = 25; wincols = 80;
|
||||
padsize = 0;
|
||||
delay = 50;
|
||||
/* args */
|
||||
{
|
||||
char *name = *argv++;
|
||||
char *ch;
|
||||
while(ch = *argv++) {
|
||||
if(!strcmp(ch, "-h"))
|
||||
return print_help(name);
|
||||
else if(!strcmp(ch, "-l")) {
|
||||
int level = atoi(*argv++);
|
||||
switch(level) {
|
||||
case 1 : delay = 100; padsize = 6; padstep = 2; dotstep = 1; break;
|
||||
case 2 : delay = 80; padsize = 6; padstep = 2; dotstep = 1; break;
|
||||
case 3 : delay = 65; padsize = 5; padstep = 1; dotstep = 1; break;
|
||||
case 4 : delay = 50; padsize = 3; padstep = 1; dotstep = 1; break;
|
||||
case 5 : delay = 80; padsize = 3; padstep = 1; dotstep = 2; break;
|
||||
default :
|
||||
printf("ERROR: unknown level %d\n", level);
|
||||
return 0; break;
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-d")) {
|
||||
delay = atoi(*argv++);
|
||||
if(delay >= 1000 || delay == 0) {
|
||||
printf("ERROR: delay should be an integer between 0 and 1000\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-p")) {
|
||||
if(!strcmp(*argv, "auto")) {
|
||||
autopsize = 1; *argv++;
|
||||
} else {
|
||||
autopsize = 0;
|
||||
padsize = atoi(*argv++);
|
||||
if(padsize > wincols-3 || padsize == 0) {
|
||||
printf("ERROR: padel size should at least be 1 and should not be too high\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-s")) {
|
||||
if(!strcmp(*argv, "auto")) {
|
||||
autosize = 1; *argv++;
|
||||
} else {
|
||||
wincols = atoi(*argv++);
|
||||
winrows = atoi(*argv++);
|
||||
autosize = 0;
|
||||
if(wincols < 20 || winrows < 5) {
|
||||
printf("ERROR: Window size should at least be 20x5\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-ps")) {
|
||||
padstep = atoi(*argv++);
|
||||
if(padstep <= 0) {
|
||||
printf("ERROR: padstep should at least be 1\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else if(!strcmp(ch, "-ds")) {
|
||||
dotstep = atoi(*argv++);
|
||||
if(dotstep <= 0) {
|
||||
printf("ERROR: dotstep should be a positive integer\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("ERROR: no such option: %s\n", ch);
|
||||
return print_help(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* initialize */
|
||||
if( (win = initscr()) == NULL) {
|
||||
fprintf(stderr, "ERROR: Can't initialize ncurses\n");
|
||||
return(1);
|
||||
}
|
||||
cbreak(); /* imidiatly get input chars */
|
||||
noecho(); /* don't print input chars */
|
||||
keypad(stdscr, TRUE); /* also get other keys */
|
||||
curs_set(0); /* hide cursor */
|
||||
nodelay(stdscr, TRUE);
|
||||
|
||||
if(autosize)
|
||||
getmaxyx(stdscr, winrows, wincols);
|
||||
if(autopsize)
|
||||
padsize = ((winrows-3)/10)*2;
|
||||
|
||||
/* non-changable stuff */
|
||||
padposL = padposR = ((winrows/2)-(padsize/2));
|
||||
scoreL = scoreR = 0;
|
||||
dotX = (wincols/2);
|
||||
dotY = (winrows/2)-1;
|
||||
direX = DI_RIGHT;
|
||||
direY = DI_DOWN;
|
||||
started = paused = 0;
|
||||
|
||||
/* draw stuff */
|
||||
drawframe();
|
||||
drawpadels();
|
||||
mvaddch(dotY, dotX, '0');
|
||||
refresh();
|
||||
|
||||
/* main loop */
|
||||
delay = delay/15; /* assume napms() takes 50% more time */
|
||||
int ch; int d = 0;
|
||||
while(1) {
|
||||
ch = getch();
|
||||
switch(ch) {
|
||||
case ERR : break;
|
||||
case KEY_UP :
|
||||
movepadel('r', 'u'); break;
|
||||
case KEY_DOWN :
|
||||
movepadel('r', 'd'); break;
|
||||
case 'a' :
|
||||
movepadel('l', 'u'); break;
|
||||
case 'z' :
|
||||
movepadel('l', 'd'); break;
|
||||
case ' ' :
|
||||
if(!started)
|
||||
started = 1;
|
||||
else if(scored) {
|
||||
scored = 0;
|
||||
mvaddch(dotY, dotX, ' ');
|
||||
dotX = (wincols/2);
|
||||
dotY = (winrows/2)-1;
|
||||
refresh();
|
||||
} else if(!paused)
|
||||
paused = 1;
|
||||
else if(paused)
|
||||
paused = 0;
|
||||
break;
|
||||
case 'q' :
|
||||
goto end;
|
||||
break;
|
||||
}
|
||||
if(++d == delay) {
|
||||
d = 0;
|
||||
movedot();
|
||||
}
|
||||
napms(10);
|
||||
}
|
||||
|
||||
/* cleanup */
|
||||
end:
|
||||
erase();
|
||||
mvaddstr(0, 0, "Thank you for playing Yet Another pong game. :)\nPlease visit http://yorhel.nl/ when your even more bored...\n");
|
||||
refresh();
|
||||
delwin(win);
|
||||
endwin();
|
||||
refresh();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void movepadel(char which, char direct) {
|
||||
if(paused || scored || !started)
|
||||
return;
|
||||
int *pos = which == 'r' ? &padposR : &padposL;
|
||||
*pos += direct == 'u' ? -1*padstep : padstep;
|
||||
if(*pos < 2)
|
||||
*pos = 2;
|
||||
if(*pos > winrows-padsize-2)
|
||||
*pos = winrows-padsize-2;
|
||||
drawpadels();
|
||||
move(wincols-1, 0);
|
||||
refresh();
|
||||
}
|
||||
|
||||
void drawframe() {
|
||||
mvaddstr(0, 3, "left");
|
||||
mvaddstr(0, wincols-8, "right");
|
||||
mvaddstr(0, ((wincols/2)-7), "YAPong by //YorHel");
|
||||
move(1, 0);
|
||||
hline(ACS_HLINE, wincols);
|
||||
move(winrows-1, 0);
|
||||
hline(ACS_HLINE, wincols);
|
||||
updatescore();
|
||||
}
|
||||
|
||||
void updatescore() {
|
||||
char scl[3], scr[3];
|
||||
sprintf(scl, "%02d", scoreL);
|
||||
sprintf(scr, "%02d", scoreR);
|
||||
mvaddstr(0, 0, scl);
|
||||
mvaddstr(0, wincols-2, scr);
|
||||
}
|
||||
|
||||
void drawpadels() {
|
||||
int c;
|
||||
for(c=winrows; c--; ) {
|
||||
if(c < 2 || c >= winrows-1)
|
||||
continue;
|
||||
/* left paddel */
|
||||
if(c >= padposL && c <= padposL+padsize)
|
||||
mvaddch(c, 0, ' ' | A_REVERSE);
|
||||
else
|
||||
mvaddch(c, 0, ' ');
|
||||
/* right paddel */
|
||||
if(c >= padposR && c <= padposR+padsize)
|
||||
mvaddch(c, wincols-1, ' ' | A_REVERSE);
|
||||
else
|
||||
mvaddch(c, wincols-1, ' ');
|
||||
}
|
||||
}
|
||||
|
||||
void movedot() {
|
||||
if(!started || paused || scored)
|
||||
return;
|
||||
|
||||
mvaddch(dotY, dotX, ' ');
|
||||
dotX += direX == DI_LEFT ? -1*dotstep : dotstep;
|
||||
dotY += direY == DI_UP ? -1*dotstep : dotstep;
|
||||
|
||||
if(direY == DI_UP && dotY <= 2) {
|
||||
direY = DI_DOWN;
|
||||
dotY = 2;
|
||||
}
|
||||
if(direY == DI_DOWN && dotY >= winrows-2) {
|
||||
direY = DI_UP;
|
||||
dotY = winrows-2;
|
||||
}
|
||||
|
||||
if(direX == DI_RIGHT && dotX >= wincols-2) {
|
||||
direX = DI_LEFT;
|
||||
dotX = wincols-2;
|
||||
if(dotY < padposR || dotY > padposR + padsize) {
|
||||
scored = 1;
|
||||
scoreL++;
|
||||
direX = DI_LEFT;
|
||||
updatescore();
|
||||
}
|
||||
}
|
||||
if(direX == DI_LEFT && dotX <= 1) {
|
||||
direX = DI_RIGHT;
|
||||
dotX = 1;
|
||||
if(dotY < padposL || dotY > padposL + padsize) {
|
||||
scored = 1;
|
||||
scoreR++;
|
||||
direX = DI_RIGHT;
|
||||
updatescore();
|
||||
}
|
||||
}
|
||||
|
||||
mvaddch(dotY, dotX, '0');
|
||||
move(wincols-1, 0);
|
||||
refresh();
|
||||
}
|
||||
|
||||
int print_help(char *name) {
|
||||
printf("Usage: %s [options]\n\n", name);
|
||||
printf("Options:\n");
|
||||
printf(" -h This help message.\n");
|
||||
printf(" -d int Specifies the interval between every move\n");
|
||||
printf(" of the dot. You can speed up the game by\n");
|
||||
printf(" setting this to a lower value.\n");
|
||||
printf(" -p int Specifies the size of each padel in pixels,\n");
|
||||
printf(" set to auto to automatically calculate the\n");
|
||||
printf(" size using the window size.\n");
|
||||
printf(" -s x y Specifies the size of the window, or set\n");
|
||||
printf(" to 'auto' to use the size of your current\n");
|
||||
printf(" terminal. Recommended size: 80x25, default:\n");
|
||||
printf(" auto.\n");
|
||||
printf(" -ps int Specifies the amount of pixels the padels\n");
|
||||
printf(" move each time\n");
|
||||
printf(" -ds int The amount of pixels the dot moves each\n");
|
||||
printf(" time, setting this to a larger value\n");
|
||||
printf(" increases game speed a lot.\n");
|
||||
printf(" -l level The game-level, higher levels are more\n");
|
||||
printf(" difficult. See below for more information\n\n");
|
||||
|
||||
printf("Levels:\n");
|
||||
printf(" option equals to\n");
|
||||
printf(" -l 1 -d 100 -p 6 -ps 2 -ds 1\n");
|
||||
printf(" -l 2 -d 80 -p 6 -ps 2 -ds 1\n");
|
||||
printf(" -l 3 -d 65 -p 5 -ps 1 -ds 1\n");
|
||||
printf(" -l 4 -d 50 -p 3 -ps 1 -ds 1\n");
|
||||
printf(" -l 5 -d 80 -p 3 -ps 1 -ds 2\n");
|
||||
printf(" Please note that all the levels are meant for a 80x25\n");
|
||||
printf(" window size, level 5 might be very easy with a higher\n");
|
||||
printf(" window size. In that case you should change the\n");
|
||||
printf(" the options yourself.\n\n");
|
||||
|
||||
printf("Ingame keys:\n");
|
||||
printf(" space Start/pause/resume game\n");
|
||||
printf(" key_up Move right padel up\n");
|
||||
printf(" key_down Move right padel down\n");
|
||||
printf(" a Move left padel up\n");
|
||||
printf(" z Move left padel down\n");
|
||||
printf(" q Quit game\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
17
pub/download/ncdc-0.1.tar.gz.asc
Normal file
17
pub/download/ncdc-0.1.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTGAAoJEGI5TGmMJzn61pUP/iW/oAXwmWcgxsLuibAsPX9l
|
||||
H61EPdaL5PtBQwfXXwTm+JIUQV60kYzOzbUPCJhTA638Y34hepFSubzuEpECgtK5
|
||||
34KNXlsCU0HjqwojNSNZNoneXTIEHsWM1hesrHiRoFY8i03Vzxr8CGuC/iJuD1FR
|
||||
CVJmO765ytUSACo1SrOQQ3AxXMQIcFvN3GxSsoD8atxgfVCJfW+SCvRgJNMWmQP5
|
||||
qB2l9hPQ5H+StqTjVAMb66wX1maLNqfUJinjZBvhL3RQ4AxBTnr0Z+SLa2o5G8r0
|
||||
Wxh63Mla1mn2apEnR/bjClJmktxASpy+jR3iUGXfOPW1+b9WNF242v/e8AQEUxnt
|
||||
RjqckaiNhR6nv/5s0XqOMniqq5/4IhMNEHvNKD62ByT1OR94idc1pdE4iOB15J4d
|
||||
eQQc6YpHlgVYvTM2fjxvRU63Ce5exVwDe/CnmzDXVaAFJcrr26574LDCVLUZQAAR
|
||||
iUPGRDj0x2MBsyByhC5UUhgDgI5gflHPhxDyXDY5D5ZR2uauo+YmRb0CW+XV0G1y
|
||||
8u+m+jvP2XB8clOrM0hetR5JKgZlxkUVzzt5OgWzUzfDRExdXi5XBiWkjCH2zQ7d
|
||||
IeL8kmU2xQ8w+id8K9msOQD2v4jmnAZPPhQMVPOXqrC9Ln2kayHluAWXBZvF1lLp
|
||||
hkCa164lHVomJMNR5NKf
|
||||
=ZHUU
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.1.tar.gz.md5
Normal file
1
pub/download/ncdc-0.1.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
40f1a469c62fec371455b8205370e147 ncdc-0.1.tar.gz
|
||||
1
pub/download/ncdc-0.1.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.1.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
73b359260ca4fb6700c5d8db78a67757ec0cb20a ncdc-0.1.tar.gz
|
||||
17
pub/download/ncdc-0.2.tar.gz.asc
Normal file
17
pub/download/ncdc-0.2.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTIAAoJEGI5TGmMJzn6HMwQALCnnoQbbZ8GlbOyJtZvc83V
|
||||
l0eDaTC5fvAyWIzxJeYFXJxRL3m1Pqfdj+FyS15wo9xlQkpY0FveQycVvrTYn3hM
|
||||
vFkSs51OW6B1TjkR9xdubWkBVa2WTVJ5XMrAG81NB6BBXHHNScjOb++KsEUtZAt0
|
||||
DsCi5Ma1fokjm/22R2i6ls4g9iP992g8b56PmTTuVY2zOmK6JmCG4RAsLs0KDXld
|
||||
oG4Lnfd0S86Uvff7QY6Jw51wun7Nkm5zRHVpv+ALEt6cRp2x46L5tzQ3gR+D7rRH
|
||||
Y6ZcoVVoRBSWYyC18cs3AMXG/bL49iJvJ7tkRcIbaN5JGGnIHpK1OCmD4+i9e8ip
|
||||
53HCdBJjxS07YucKfhocbEtNbAk+nmq89jM4Ycp9BJGwlP7Th+tB6ZgSCLjOYZt/
|
||||
w14IGouhbAWBPJJV5Bnf8lPsG/9vrsanjrySi2BOl7NOHATPqra9gSyw1QMAvUy3
|
||||
57UdWrzPuK66ntXX015Jo9hvQOB4Da8SmqAtP9CwUHJi5ScpJdZppoqLnYFy1qJJ
|
||||
AW8C9a90Vh0ANivoHaLdhvgac5IZjazN4w58yZhCheJGtJArSrWs6p4Q9qps4s97
|
||||
Izb5GWzG9ku6nnPg8ch2BUJ2SdGlUN5bABA3uhOj56Vr1fJxMmQ74gGtP/eJKkaU
|
||||
KMKbur3hycS/C2F4cASf
|
||||
=IHEk
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.2.tar.gz.md5
Normal file
1
pub/download/ncdc-0.2.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
4e547aff292ccb51c10f2cc25bdf3e94 ncdc-0.2.tar.gz
|
||||
1
pub/download/ncdc-0.2.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.2.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
2b6da3531d36751c464a36e9b7d19bd87a13b884 ncdc-0.2.tar.gz
|
||||
17
pub/download/ncdc-0.3.tar.gz.asc
Normal file
17
pub/download/ncdc-0.3.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTKAAoJEGI5TGmMJzn6gwwP/At8/10HO4LuPC5WtpJAkKtw
|
||||
9E+t+ejK57vdeHN79KBZl+zd9BQhHP87EOQSOyLbmcIET915VMBUdayC2v4E8OWZ
|
||||
1ysVjsqdXDk7ha3hliyciN3o9CMrAEAxlI8UBpDVEBGMVHpqMJOqrwQWgrBlvL86
|
||||
oHoe1YERAZj0YaUzowghctSCUmwqgWxK11iVJT7Dr7fs1hQ8ZcFRvEup99uJJAGR
|
||||
QMwLZmSL//Bv+Bg7UM2Bvytp/JGll8bdFMXUymj5SaQWzZi4Eyyhkj461VM7IkG8
|
||||
qOER2OMXZ194vghbie22op8FckOzfkGIMhKBeT5MXyGEtIVk3FSjKw/JryGT0j/H
|
||||
qu9Ndj/lKuphOaR3kW2YB/rWgvgJHDPuYXMmUx4qdyK1T8Fz/dOAfmtMqVMeoDIn
|
||||
UGf+8wfnmHMdLjGgxTOkzlcacyNjFSRRmPUszUMAGwQLDY9HwmvgGH3Zds84hW66
|
||||
b5m2b6dA/1h/TcztY9Wtd2zDy5Baiepr+hi4d4+DMnEhhM1vxpY6iL2ZDAf3Oj1O
|
||||
7T8FBlZIwVin3tJ12EieF74Zws5adnLdvrlw4nsM5NEmvrxuJduoH4B5+ATMVfF7
|
||||
JoJHj4dO1aTw1BidqMHeo+iJSFLxONj5NQRlXTi3464fKWMVwrmLzRaVMPSvMmVp
|
||||
SFmyxxuUA+mS8bSm/Sar
|
||||
=p6kV
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.3.tar.gz.md5
Normal file
1
pub/download/ncdc-0.3.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
f80a946aeade94024ad6c3ed918cde40 ncdc-0.3.tar.gz
|
||||
1
pub/download/ncdc-0.3.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.3.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
55609b2e32e34e1996666ac5da1917ca0429a4b3 ncdc-0.3.tar.gz
|
||||
17
pub/download/ncdc-0.4.tar.gz.asc
Normal file
17
pub/download/ncdc-0.4.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTMAAoJEGI5TGmMJzn6pDgQALhNTYUmctGfdM0JOvBtCPRF
|
||||
1ElKquQRMNRXE1f40uaJMrrk7lJm/SqgAMMUkSE/yoOiBwlULDFBMeLNwRYkIQM4
|
||||
QFhq1CI/YTqF7GpQm5caUieMWwIFPrsg9SGxmm1+U/QLWEcV15itoESe3qjGO8mH
|
||||
dZJRP20mPf+cPCJgu4IbSuZ3zrxjGCMc4miBsX8Y13DWnMln01DGPPg9O8InTvP/
|
||||
nGcrzDiycTeGyCWcJgqeg+uZp4ZOAH3wxJkGDaNJAPXPJkWdLgzKHRDgX9YNt7Qf
|
||||
Iugdq111e1SFckPnyhhkFcfeGBG9SuGuqXBlEa6E4GJiUz1/O/nHi6wir38OlRw/
|
||||
ubfWisO4Si5PueKNvfCgLUD5d0bD7Dgvzu0Lt4vhHlipFVngfc9NYN/xCTFn87DC
|
||||
z0MqmbbxySMSXqx+XdnGvXOy57WwIwYq9lQzH/fbej9m4kAGs40Iyee/DKWoAUfd
|
||||
97hSLuEWEyClc2ikkMncdMLx6mLZCF7UWtWraK4GzcsWF5D0nuAnYgjzIDwOytmW
|
||||
3ZIMfyiAVxS9ndjBOFTpIKVyJVQcm93JC/29G6Pze08xvpl38IlzPjyup52rtMrT
|
||||
1bTRoFVG2Ll2YK9TsEUa3mj6HIC3t8aWePvCfY3BGd+1+Ag++Qwez6ocxCm+ojej
|
||||
L5eBYdFFdxSE9DqTc6Kp
|
||||
=Qpvr
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.4.tar.gz.md5
Normal file
1
pub/download/ncdc-0.4.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
4a15b2bb4c7a82269c1ee2bf5d265284 ncdc-0.4.tar.gz
|
||||
1
pub/download/ncdc-0.4.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.4.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
2c525792046d7e8c4c5fc390cfce666ce5c3c032 ncdc-0.4.tar.gz
|
||||
17
pub/download/ncdc-0.5.tar.gz.asc
Normal file
17
pub/download/ncdc-0.5.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTNAAoJEGI5TGmMJzn6WBwP/3ZykjAwD9M8wjMTZDW0nYEA
|
||||
Isuh1XKXC1TGc3+lrSUu9FqBiRC46nj9cChKVHwHEdAsa/nUOf/t2edQat7ORu5n
|
||||
NMk39w1RXDmlJ8n7FKvsKQ1aOBt2+snLa1pNNbeCS7F4qDI/zYMJf9nBIeFuCDG1
|
||||
iUE03qUTo/PSg7u9EgsQNKfRYyEdtv3vI4RRtMBb3jEyqin7ep9nQasI2LxBb9Oi
|
||||
jwGvLnQ6z3WJ6E0aONZeNQiuZAwRCHht7A8xZW5GjYoIraKR/ttyF0qD0FHBzllC
|
||||
fVt696B+NYhe9ZRVBp/8dhGcO5qk1Vd3AicKYq9UwmOvmzpeFgYhI2u7/wDPRct7
|
||||
M+7560wwMDdvc9QY2Ww1IifTRzppwoVBPvIHH647hufto9gQpQaC2ZGgi6t1Qp5C
|
||||
wkEih6Y/p7eyrbZ41kHXm2+MDk5f3aI7/os4h/Le2czaXfAKKzN7xKdq+35T8xS3
|
||||
mipbc3ZFnskwummI1g+EbrW/nBVLEJyAhq8fTalwjU5ATmS4w+7u6kuDNrlL9Ng6
|
||||
CYbaWRwmf2dIb6o0MVeyQenzTS5u1JG1QvP8VZ0JZVH+NZuoo8dzW7n5mshMemMq
|
||||
DaYhRwlYKDg6kl6ADW00PUcNfVh4qfvpFueZOmaG2GX1/O9rwPcljP1lOdgTWiwr
|
||||
TV1/yzLqbFFxumqQW7Nr
|
||||
=1C4Q
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.5.tar.gz.md5
Normal file
1
pub/download/ncdc-0.5.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
877a43df175eb225f442e996534a5c84 ncdc-0.5.tar.gz
|
||||
1
pub/download/ncdc-0.5.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.5.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
de88f2420f526add10838526ddb7c07b8555a510 ncdc-0.5.tar.gz
|
||||
17
pub/download/ncdc-0.6.tar.gz.asc
Normal file
17
pub/download/ncdc-0.6.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTPAAoJEGI5TGmMJzn63j8P/ieuywx4RzPqIcfbZvIJoIdH
|
||||
v5lu1fHBl09v6s++SdBcJA56hZcG/WIra3mB8+nstzLpr8VajwZelPnS4OSgzM1n
|
||||
RU5Ni0i0Y3FBU3OFiHSALzhENQDuiJLtjL5UQHMoq1biwVBUdlQU2fXL/NXeGlPr
|
||||
8iX9MmVQQVjiSbusnSgi6h61V1hBcjmNFagqKQM3OW6mnpQN2bx7ll4ERzD5ZR0/
|
||||
C8G2YlvW8FWn9PeAFJimqAXO5/1aRabq6N/dwbii3wPQ+U6mFo9AyrRnINKWEzZY
|
||||
6ueiUf9lmR9fo6jzuYjQU7zKZH5mHxrK8iYCoLL4sUu44SpTsbcIDhAQJfGdUIQ0
|
||||
wBlVF7BbSdjh5ypw5rtAvp59pHvOr1bOyoe2WoT1xNCXg0aHvipwvDtTp6XUHV1i
|
||||
84z0uZkwYWb6gRTzt7o3ZNiBNoCdA/YuQji27H1WXtib7goDjGUK0vSygzG8cLLG
|
||||
EMbVtzNWpxqvADsFVkDx6c48nPcI36cN3tBkv+T1No4UM5+huRko2Y/+KebYcY04
|
||||
io/uoqsR9vxPaY94NU2jz4U6TBg4kLLZ0T2+pPeHMpP8iTUor5qHAHGCRZZhRZvS
|
||||
sJAvlb3dr5mwM7dz0vrLsG2yU2UUd8doamF4UsELsp1O5CXsDg/Ezhq7rBGQYCvS
|
||||
15NK76QS6qXCcQ8QCRwT
|
||||
=aCw8
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.6.tar.gz.md5
Normal file
1
pub/download/ncdc-0.6.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
0c2cd210ebf15f9382d4c2621bbda00c ncdc-0.6.tar.gz
|
||||
1
pub/download/ncdc-0.6.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.6.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
24c79a5b1eb2db6c7840bc22bc0b26111c694544 ncdc-0.6.tar.gz
|
||||
17
pub/download/ncdc-0.7.tar.gz.asc
Normal file
17
pub/download/ncdc-0.7.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTRAAoJEGI5TGmMJzn63K8P/ihbGlTEnz8OcGu0DVB8EmeQ
|
||||
wSzCFQ+W5421nVhkUjoOB5yQRgT3oJAo8mtrN9rzCHRS5rMDqX1YtZx3/xqXpXDj
|
||||
yMjegOGB0wIs1jiemMcGTmz6FZ2dS1aZCALmbnOq0pBTJwAtDov5XZfhYRcVWlmf
|
||||
g0AA6uKwpNMhLhuX/TpoIWPZuQdkTrAv0K6uE8O0rsoPNPqSv3gIXjEmXPr61/y3
|
||||
IciFsNfG7lDSsSW4j8IIv44/5QwKp32eJkv4AZm6sNJCRSaMDk88cDAaVaZtf7pi
|
||||
gTywddluNiQRvSQEZafR/un/dB4h1sLTJt7xxlY570ituzIq5clyPZwL4MEKbfg4
|
||||
wPI/g1rm3F1hSd0T1HXgOv/PWE5pV21oAOYyfE/0Fr912TO/FmLzxJKiXDhvML6j
|
||||
mobXcubd4UTxvW68md0hClX1W0t9j+AlmeuCuL7bU1ohOhpjvUk06Kkstl/O3mfz
|
||||
ELdJXig98eMO2yxYLe3dsINapqTEXAuPzBljH90Hm0OwxtDOkMlfBWR24Mnip2A+
|
||||
QMmeJskLuLP2N3d7wLus7l4BosABCMClK6J814aftBmo2613+V8FnR+w5LWrS8Aj
|
||||
MFsmbqtznATmTIjDhKELYhaZyn8nqWeufKkFahUjXqB5GAqcoM/cREd+05xrwmUp
|
||||
Kf9b5ZRlrBZONwkCXiOH
|
||||
=n2uq
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.7.tar.gz.md5
Normal file
1
pub/download/ncdc-0.7.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
753b3a3717eea19fd87aa495d22eb338 ncdc-0.7.tar.gz
|
||||
1
pub/download/ncdc-0.7.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.7.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
6bea526eefd6ddf8d49f52d92d442e98c73cfb92 ncdc-0.7.tar.gz
|
||||
17
pub/download/ncdc-0.8.tar.gz.asc
Normal file
17
pub/download/ncdc-0.8.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTSAAoJEGI5TGmMJzn6w4oP/i9hOuO6xNZZ1Mo3jA9JjXmX
|
||||
Em0yQu65DtbiUDOXfLJaAO8ElxoiACkCTtyKoS9lKX+IDxd8JFTRXurUO7qGudMy
|
||||
8JcHybRLxO5et1pus8pHAz5Qpbhkv61PdNF5qDJDEaRde/OxTj78WuSweVMUzlcK
|
||||
QKkam3sAIXlerdcdVlKQCWhGe6yAMBPf0RXEkW+w5gwHWGljip7UIiWsqRY3QPaO
|
||||
XRVHje675nZ/r2+6lsWugPz2QW0kaH65Nts7bginliMaon9h9lUButMjaBIi1yRb
|
||||
MuY0spkBEzRj8Sz2DnzUUi2JloJiR4Lf6BtGEM35bKaTRbkv6QvY7ZBN9QmEazuC
|
||||
+jbCpqfnP2ZwRPq5qBhx06Btyj5mKRObGa1JsBYXUE/XTH9ljkY65/7cCbmsg9TX
|
||||
siEGn9s9euAYhQR94Firyvwm4j6/6Q0nMa0LJFv5gmBwugH3PnvoRKrFp6E+VwhK
|
||||
3Z5+Twux880HXSEe2lto8Y2lm5b+upjiPLfLhJc5fHjM52IarhByb4jKpqb45AFT
|
||||
Ae8rgEMLLwhEg9/W15pxZ5GtTWe6lkfINEwtxXdINtCO2pltLYozmRzJUqo0rxDL
|
||||
WLhNRvez9fQfasP1lD9QN+WYCluOVKpLZGmvI3NOzq4MWmoNfImnwWYxy5xpQj0N
|
||||
4TsnZX8DNMMKtdJ9e81Z
|
||||
=xmeG
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.8.tar.gz.md5
Normal file
1
pub/download/ncdc-0.8.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
c8dceff912bd27697911178f656c3800 ncdc-0.8.tar.gz
|
||||
1
pub/download/ncdc-0.8.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.8.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
c8e3a497db8dce6d35a948f481233eca58d77d79 ncdc-0.8.tar.gz
|
||||
17
pub/download/ncdc-0.9.tar.gz.asc
Normal file
17
pub/download/ncdc-0.9.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTUAAoJEGI5TGmMJzn6tq0QAJ0ZQ0C6d8VC/9ngP/JG7C+6
|
||||
PnN5d68LjArZpWCOG8Eo1RJ1MHYHKaibBx5qS2z/sR9FGRzqB5Oc9r1io/wu12eM
|
||||
xQSZzTRl3VL5FmBnGNvkcPRp7JeGvqk3Wzxe440QRcjg+RaKHxUp7BXzyx8PELmZ
|
||||
dic9Wf4MOaYclB3w+TVAj9PR4qRKps/yao01WFnX0PID7ZH+mIXYwL2HNWUnnaz4
|
||||
a5mdeXHQqjqZ+tW7Rjo28B8IekPvqYHJfejrmZ5hAc1bfo+viMf1oNWdu/yQSOzz
|
||||
/zyAVu/O9TMI+StJa2b2ngYGn4/CdRFk0iv29ydD/OH1kx56MvKl8F9rBVfgil/5
|
||||
of0P0f7Wu3sQLcpGZCSba9kORU0Yb9xmNPIHYKUwsYvdhAMMQ8JtMPv51g7X0ycB
|
||||
B/qHlhEeFHWVkPHBnYRtsdIcHc7fXOhsVR25x/mwIZIjPlELaI5/6t26CH+FRLSw
|
||||
A0BJMXq/te8jlSSUtEZbG5nbCoSBAKhIG503IExv9c7Lywk7fSegFwXjDkrbdJBE
|
||||
BkH28dPqvrdCmuZV6qiQq9LpTuFHL4KPVvWO/zxSl3CCC6kmAuOjet94s1hNdkDX
|
||||
3WHH+PYONRAzQhzNlZJDIg+w0rgouv02S98sxo4/uDLMdk2CIYSEUlpQS9Z0UWLC
|
||||
NC6FoyVVnnTFczC7mvbc
|
||||
=5o2t
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-0.9.tar.gz.md5
Normal file
1
pub/download/ncdc-0.9.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
c61d0f0181f9a204f90fd0c101cf1703 ncdc-0.9.tar.gz
|
||||
1
pub/download/ncdc-0.9.tar.gz.sha1
Normal file
1
pub/download/ncdc-0.9.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
0db947b69db4b48b599b14081e75264844e9928b ncdc-0.9.tar.gz
|
||||
17
pub/download/ncdc-1.0.tar.gz.asc
Normal file
17
pub/download/ncdc-1.0.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTVAAoJEGI5TGmMJzn6ueQQAIoX5uSfisaQ1yhIKJLDyusN
|
||||
OwuMfID4mYSYdtsBpfgYgygFTK13APAiw7oM59lluLjiXwVFkaqCXqyfGOe7zuRX
|
||||
0mKeboegrsuRdkTse17WCB2OuFx9yRv+SBmdWuxg0fvvNHUpNvIAowPIebaUqS6G
|
||||
Doe+Wcy64E8U2ata4b0OifwwDrm8FaKowBkvBen9Fkqd7ihRyVRijs7p7zx9XdrL
|
||||
qLcI/gj13An9SwTW6zy6iJZbFCubQvX7s8lEo6F3dc1WVkdgD3PYb7d2dvT5LvGj
|
||||
Gsxw2sadY/cAlw/6wFqbk6BKOjyCgwuVgQWdpDF4Os3cNXb67gOWp+lzPZydheVM
|
||||
8KJ0cs74HeAU1Np+B0kfsUbcFjav16M5z99Go5j+U4bwXdWeO+fATC3GJa18f0Mg
|
||||
acO6PIDVtTKwxSWIEGokPFmg5m3AHITdWDMhcNdSoPzmtZpm9tMrCIwd/QvlH1Rl
|
||||
S1hs2MN65MgfeHyIUZwOPqpJcdlICG4xFofxApVI4PplVWd2pxHuFpgyfCWppZ70
|
||||
JF6xz/dBeZwaHorGnTjsDDOVoakhWG+wcrHFahyMI6MqJAtBBfWZc/KYsQJihGyn
|
||||
gywrf2HcrkDYvYhkHn7Ms+0KXDkMRAE0voacxs13LfBzZMQkaChl0QSPSnchfbre
|
||||
hqDRFN6ML+lTp8Cx0YVT
|
||||
=2v3X
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.0.tar.gz.md5
Normal file
1
pub/download/ncdc-1.0.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
274d7fbe6a1c89bef30632d867fd4a93 ncdc-1.0.tar.gz
|
||||
1
pub/download/ncdc-1.0.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.0.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
0c01910ad763060377cfdd99e109baa4c4f8c8d2 ncdc-1.0.tar.gz
|
||||
17
pub/download/ncdc-1.1.tar.gz.asc
Normal file
17
pub/download/ncdc-1.1.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTXAAoJEGI5TGmMJzn6it0P/iVQnP/AnHuvFpVIit8FOd9Y
|
||||
9jrShzoj6BAuGeihGQe97s2XaSahx4LOEzTUm87W3ptDcKMl7Lu25gC8LK3Jx3n7
|
||||
fzAOsciU+WewlFv2Dx/1CvELBJtSGQD57UC+0NKC45FJZhEJMbWtstqmEhp99WT+
|
||||
v66LODIWO3eBfMxKawcQRQsbLUEVevRtlFQYAbegDWNiQBYsvvUpT29Du7ZEmhW1
|
||||
Y1SXOwUIUbEqSuDEC+rlIPk2U6AWD2nFz4pOPVrJBd1N0eIZGIWW/5wpztZfJ237
|
||||
9hMNWZM9vrflO2qCGF1clMWy1Pnrz0FQHr0VWzuqN++B15algTNS3Bmpy38vqjOD
|
||||
WSEI58fwHGEI1S+HAzRz7WgveN0dPPRNm3/nNXslxK68z3PeTsuSGAd79tW4pEql
|
||||
eTNJ+ceXz2TvMFJ33khjNqIlr9MFDifs691+q8oNf2CyXDmK3OUzB4XPls8aeV6K
|
||||
TU6RnV6WXoDMn/rBqVwPCQKDrohFKWkgKRgUOJK3L6wwn0+oeCm0ob69wo+4Gupm
|
||||
lUwEnnzKlV6SW0OW4iTWHHZCeAfQKPBvaUzBKswYGt5g6NSVdGj1JyxHhmhu969b
|
||||
sEdVOUW4Vsc+W5lbiDsjcOK3ScIxQAhY8NpliEpM8IVbG9hCRGxxSeS8d+sLW1hG
|
||||
p5ilWEoH51ialACB0lT9
|
||||
=A7cz
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.1.tar.gz.md5
Normal file
1
pub/download/ncdc-1.1.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
bfbc173f0c99186679e47fa01dce58b5 ncdc-1.1.tar.gz
|
||||
1
pub/download/ncdc-1.1.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.1.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
7585bdb288e72cdc97c4e53c34afbdf639f20a68 ncdc-1.1.tar.gz
|
||||
17
pub/download/ncdc-1.10.tar.gz.asc
Normal file
17
pub/download/ncdc-1.10.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJPoqDdAAoJEGI5TGmMJzn6BnoP/jvDd5KfnQ4kHqq5jzm1XOc5
|
||||
ncUhUqrb5S9VAT4IkDbiZ2ICop9tgiEws9q9sgHLq+HN9qaZgGCoCNBS+QhYWqPB
|
||||
sDrSWJt74Vp3M0cXMrDllybC6OTbO1SQhseuC0o/239VdPOjB7XYNFnd5Ra7Q+iK
|
||||
K9GQ2lpzo3C95cHNJbMotW0x1R9o/It/UGfeDdT3m5xTMStes3QhE1rifcnl14hM
|
||||
SY2WnTJ+xOGz/l3tu774yFU1IggkImq6xVVI3zoD92ygUSSasntADPK+xHp5pf5T
|
||||
gDJ0ySnLlfZEn4rO52zmvsPBhD7lfylaWVVppg7Aeh72R6IbNwfBkboeYQacoPzm
|
||||
IJrx7OJDPPSKvVWVdCGR/Rg3mcf8mTYKp8l3eQ3m3cAXWsA6x9BCj+WBEapQUsrx
|
||||
2NRpDeDa28dxHlQ+kskZkYKSOh41IRQX3omO/2rK0ChRde/2sTDeIGLRYwIZy4o+
|
||||
lHG3tYEhKAWQKUK/cf/q6nlkfQtis6goI6iXuZOML4oe3ZrgGcTlAeeMQ4uSr1nL
|
||||
8kygyZOEAkCRNW4xPLEnrB4sjaiR/q+2WueopLs6gEIKbSAGIUCQI1gLul8WTKn5
|
||||
k7XPNoDd5ZuwKyGHb5Xc5+7X+VKeH27cZlFzcFuvyiT16eaRaHRMjLyvwBvZeWjK
|
||||
+FxibLfoqqhqjBJ/aFgl
|
||||
=6H5t
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.10.tar.gz.md5
Normal file
1
pub/download/ncdc-1.10.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
a56c5b16d2fd98157a70ab7eb0aea24d ncdc-1.10.tar.gz
|
||||
1
pub/download/ncdc-1.10.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.10.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
06e3ad1de0353711b217ae9f1a456d9d0c3e403b ncdc-1.10.tar.gz
|
||||
17
pub/download/ncdc-1.11.tar.gz.asc
Normal file
17
pub/download/ncdc-1.11.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJPsj32AAoJEGI5TGmMJzn6/SQQANL4tlpzpQAef55/8w6/evKJ
|
||||
qtfscdTpuIZlzg38GYuoYiQqtilYrIX0AaEBaMAEugVBazlFrtvpcyaTE4eZaYYn
|
||||
c1/t5w48V6Vl0DSAUMLrMVl0cC/dp7vdg9rmdWvs5vhqc94wdvHZszLjGXPyU7fj
|
||||
noKK3+zHp3IfbonDj8Fj6m/moqKeEDjbUC4ebWSto4rf3yGfU7hSFhHw0Dum7i6N
|
||||
QNt1953O0qwA7a0xRXWc0y+luAqOMZQ/rZNIzpxFCdlg8y5jZKDdUcloVoensu2c
|
||||
/3d3PSnVV9ettIG2iqysBogThQWNi+s2foyQoaIiv3Bi2r1MZomKlI1hnPy7yiEn
|
||||
313VErhTO7eGwnE125ZVa7mh0LMiS9iQ9q+6bNwoHr/tusvQAVtQJ21MvT8uraFV
|
||||
JHRntWL3IalVHgBykS8L7xDoqq85yS6SVZ0+tuBABfVUwBuRXkni+YPl9GFqREm7
|
||||
wxICtyhgdbCAJx/xyvoXBhuejzLwqO57WkQJywWjETfMpg8KG4xPV/HVNQx1vARs
|
||||
IZBqyR3L3RvvVFJn7uTFJ0vQCjyJ0/Ykzyte17H8sXJboGlChmfSPWPcYF1cNtMz
|
||||
2fqt2vseLh901C5rNrXJjh3IqDqwzMh75QYIUHtKzlasTUpZOi9z+uXnXQ+9mXc+
|
||||
Q/BuqcBd6vHdC3GznErK
|
||||
=9YFi
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.11.tar.gz.md5
Normal file
1
pub/download/ncdc-1.11.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
bcfa3b0e4997ed5f433a5dd26f9a9c7f ncdc-1.11.tar.gz
|
||||
1
pub/download/ncdc-1.11.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.11.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
b38881c795456696bb71de5a9a494f3e50275f58 ncdc-1.11.tar.gz
|
||||
17
pub/download/ncdc-1.12.tar.gz.asc
Normal file
17
pub/download/ncdc-1.12.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJP++W2AAoJEGI5TGmMJzn6u68P/1YScIt4bfv5N35c9/qJxtBf
|
||||
CeHCjSAUEN+PlRbsKdgRIxd6Lj4RIYZvmJb1mVM9ZOCXLmvs+42+MwdrsRMafOob
|
||||
TUd/OKZ6D0Cg/LqwP0dxMXiAk4JHeVWFwVHZomKIFNvY3dOT2mpDNs0ePrteMwwg
|
||||
t7a0zT4Xxjqc423gthhZrSe1uBrIpHLR4TT2fnFEiuv+9vZ41m/Cre9eRN18B2Ke
|
||||
eLGL8Kr/lK8RTsQDOLUs20jPKI1Fhi/ReTuI8qWDdQ7yPA1pqqmr1CmnKEZsEE0d
|
||||
HU3LYntQ+6E6CRWjXppeB7XoVJ0c7SKk31ysZlOR/1A9pnTiLq+Ac34nnzH149Bt
|
||||
JNVtnpBb24aUS9mj4ZYech2WRMrJonlNT/POK0BeA0RKrY9OW6gtA5MaBdPWLArx
|
||||
Q1QDlmABlJu5rUcrC4TPTO2jHsKqO32fWjsrCd3YUoemS9hIMRiHiBN7VQjTJynv
|
||||
GuHcZWNEnJdGSn9egpaNF88BQG4JHFl1aC1c/MKFffnwyRxD3/sdDxA+vdtSIGCD
|
||||
vCP20ZVjIsKQ+LJNBp8FVVeQn4VgHmjcsE+Ee7mzYiq6SRRafk4zZGi1DXYrt55o
|
||||
F2fr803IZbZUdxCKFIP7ohULmlMDDeEOtpcLvam29CTZRW5lZw/qOjMhEy1+mJHu
|
||||
HRzC+NCi4JpuIQtRD8ef
|
||||
=izUy
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.12.tar.gz.md5
Normal file
1
pub/download/ncdc-1.12.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
517e0dea66107d97d46be36c85151e79 ncdc-1.12.tar.gz
|
||||
1
pub/download/ncdc-1.12.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.12.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
f25e1960ca1f1a5dc8a028debbb748d13382bfb0 ncdc-1.12.tar.gz
|
||||
17
pub/download/ncdc-1.13.tar.gz.asc
Normal file
17
pub/download/ncdc-1.13.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJQLNnBAAoJEGI5TGmMJzn6lgAP/ih34mF9DPoJ+FGGdIPWNbLG
|
||||
qFg1JF4Wm2TY9orKxETNCTU0v77sA0w+cyMs/jCl1+V3zapMZ30k75c/lUH2vQlq
|
||||
x3WnSdJqMtuDxo1EFPt6I5fZj1XmTzGx/qaOIe8AuYL9ij1s/yPKNOf2YQZ2KAvt
|
||||
0pQfjQN21Y52njAUwMq9kRB8PUQfydPLcecmPAGRSsRdlHdnVdIFiVM4uWeAW1lS
|
||||
AaPK4Suz0OlElTLRwd8XozKs/Er7gVi+UergGlWlWE92AcwLpaU+2dxqbL4ox3K1
|
||||
+3LWqo044pUyevBP1B3vM75tcEUfNZYZAXac5sHhhoml5ysLnpDmV3fprdDOqpPW
|
||||
HCy3JMdJn+MUtHL/KGe6ysn+7OnVIGwZp76DTmZAnV++LmFF3Qi8q2seAhqjXJoy
|
||||
vChZ8FPyiBdmsoGfGsHtH9oQEdLFPMs1264ESWBNwRnvmINxd9NYITIx64snmW38
|
||||
E3S9wsKd7kVJx9TSloPOYDeqZURO8mdrgLnyo/OMKDrlPDNmq7lESzWCouYzWXWX
|
||||
jLb/+Xgm35cLoZKucovzS0HNsaf/nGOPuBo9+YwGmBJIpC1TKFzkZLSHTEaksOnT
|
||||
95G/xg5e6cgdKKlJPYEwRfUHZwbDlhVGi7e5EpeJYR1j3UxIthEX4tnrI4xGeQp5
|
||||
Uc6wznqnXM6r8nv8u5lk
|
||||
=vDPK
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.13.tar.gz.md5
Normal file
1
pub/download/ncdc-1.13.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
523061427c041a4a079ea5ecbfd26742 ncdc-1.13.tar.gz
|
||||
1
pub/download/ncdc-1.13.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.13.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
e919dfcf9ff11d48dd133cbd7709ebd317666295 ncdc-1.13.tar.gz
|
||||
17
pub/download/ncdc-1.14.tar.gz.asc
Normal file
17
pub/download/ncdc-1.14.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJQlkl2AAoJEGI5TGmMJzn6cHsQAL2Ck5RJ8WH8wVnSTaFJcNhO
|
||||
4I0y59jv9WFSEM4/Q4+srga/vwJJLO0bKIYb8wgdjo+vaukONZsGsJc10L745asM
|
||||
0uoxSaAnkkbcHmnwW+VU3NyNe+wj3W6s1wXj5MM1WbA4oZrBjolsKmxcLpyjYwC4
|
||||
d70RPWvOl7ktNrAMqLl5MSp531ouwXkiHg+LH8Ls+LjXGgm7WMCivZH5DQHKA7xc
|
||||
X6oUuMOZ3hXV5JKypRVtIfWxLZjShi159i67ZprZCQBoBqCEt1rOYvmU1Lhl9RA5
|
||||
FcgkG568J5kLp6fo0fetqkAh3b5sB+b94MMhInluTNGjLHvYNUg/p2TRiLY4uuMz
|
||||
9oKWIJzp58DrD1dqVt3FtSLXvQAMz0LAwWvwMhiCXed/ozjkQCRIhPRRmRL3wJwr
|
||||
uEp5Bx08PnQAqpDVAaO3Jzp9/hIAqhcfYl6g53DLh8yZdRa7JhgtUreHF3uZ2Drt
|
||||
NBbgqfjPYZ49IykJiZT+fqudD1/Tx9U1FpA3fxPptnjAbfkFh2NYDTjBCHtaYs0V
|
||||
3W3yMkYXLMH3KftpmBBFFwgoRFCQ/OhRXqZo3UfExSsdlHytf221qNsoNvQ+2uvC
|
||||
PQsAvDLZCCeL46il7vhG9qBj9ChnQxlnLb5N/tHthmwsp61UVP2fJU88BUkDVrP/
|
||||
+211TnHYzdrzKxnx9vJN
|
||||
=C/XX
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.14.tar.gz.md5
Normal file
1
pub/download/ncdc-1.14.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
c7a9f4ae51a561c1196456ae0b5718c3 ncdc-1.14.tar.gz
|
||||
1
pub/download/ncdc-1.14.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.14.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
ff2ae3107097ce4cd03862841421f157198217ea ncdc-1.14.tar.gz
|
||||
17
pub/download/ncdc-1.15.tar.gz.asc
Normal file
17
pub/download/ncdc-1.15.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJRMfAjAAoJEGI5TGmMJzn6cDgQALSIMeJ3nuy53tyPP3MHHJgP
|
||||
xh7bu01Y1JzeBJWAqov+asGmPME2lMNM0cFT9zDEGFPYOS3/b98tIyF9xWGhj9FG
|
||||
mQUO59z6fSXXKkK5fIBpIhVco1iMbj4xTsRXplqf5b2iIFxlTBW7HKeP05YapF6s
|
||||
vwTZLyLl9RWOeNw0BdZN7/+IQZYWjbgwX4aOkk8owA3HkCgF/hgDwjYuaWjURa2o
|
||||
Z1QnrWGgXmH9a7iRCkv1hxP+SflhwXAoALuGXW3huyj9ld6MInhacT3L/qAcECQ6
|
||||
nMuZLWqtb/JnWUsF0HHy+X6JiLE6NYY+zVLl7WU2u/hC3/5aAZSPtMotbhVFEEdo
|
||||
mCLokKoyBLsagrB4SVXJKCgA7I7DgT9tMIBLGXyoniQBkU5NC1ldoKylIygA32ps
|
||||
s2XByI7haGstUjeoO84YOGzZdJ+ej2hRR63PXiDfRM9tqtk158Hcvg8TbRG7659l
|
||||
Nsy8Tndv/uGE79wLYzOD8rh5JeEMqF4yq0jMUIw+lSZhPBbGpkgJH2rohxWRwDbL
|
||||
7E0jVEY6jJ1JXQe4JDpPOgQOlztwzETW7Lq392or0Yvub7G1RZZOfduZjLHdcCCT
|
||||
/hjJ1mcswqUHcZcrZFBG0Wtu+mVZNzOs/wS10KG8RxOpIrHy1Hzc+XiYHB+1dA8C
|
||||
AvWc7yLKODUt/C7ebiA4
|
||||
=/6Nn
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.15.tar.gz.md5
Normal file
1
pub/download/ncdc-1.15.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
d9b1fc06116e84c60c6ad174fa043d44 ncdc-1.15.tar.gz
|
||||
1
pub/download/ncdc-1.15.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.15.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
2070d5e24201079445be15845a5f36cba874c0a5 ncdc-1.15.tar.gz
|
||||
17
pub/download/ncdc-1.16.1.tar.gz.asc
Normal file
17
pub/download/ncdc-1.16.1.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJRTfHRAAoJEGI5TGmMJzn66j4QALkWJ9+LmTzJjQit4uyygX7b
|
||||
2t3zWwilE8+b6dt28WpuUsFZXVaRyZpnY8RzLvdHzVXf6G2XLyDaGh35onoEeAW9
|
||||
dVcsM34ZnqYHEb0CKMgZBAwqXOy/Tjw/TjAVZ3xBBCqgAiA32OWttMI3OaJ/nUSa
|
||||
/PfMxfRfR5Y/x8FJdixSxULMBi1QKqhnaexMg7x0Z/2oL6EHx30ujvm0iLcc4Zji
|
||||
emVZw31+TRy5zUiv8smaJ2jF/yyvcNLG1Sweb20g3OHqQuvlt2lW8tqpiGnItwlq
|
||||
W9HqqnsN2g1zW6zg2gurLkWY02cCFBZ6S7ahQpTd2UiwrRHqZr4vvdjbapPvg78s
|
||||
6JZmybzYCvxgQJcDBf1qaSvQW0j2INo8dey0pz1XBv5XoBT06K75kOh5Jh5aSGCt
|
||||
jomyVyNvUcN/mZhcGEtHKfmDCS6nvLgvwmb8Tvyxsb09bPIZKA7Em74+/AeHuB2g
|
||||
HlTxalh/wHc/jTipaT2rFNpe69itLPE0IrXPUs02XzJ2YgVGxRv68Lbtl0gMSKwW
|
||||
ZlxVb9LTW8JS3BJTZgKEzWWG6w6DOrZMp7BLQ1QtlcCwUGfx/19VLVddyhZVD/Uf
|
||||
p+DUndNECQoky/O9gAGx9d3g7MZ07GB1eMLCbssvvJDBO2426reDrOIXfcNG1dOd
|
||||
AqVffZ3hu9ZC533tAvq7
|
||||
=6pLs
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.16.1.tar.gz.md5
Normal file
1
pub/download/ncdc-1.16.1.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
baf3478e31616fc28827fc3641bfbe53 ncdc-1.16.1.tar.gz
|
||||
1
pub/download/ncdc-1.16.1.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.16.1.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
3bdbf8c58a95eab2dc318bd853be991343f88fe9 ncdc-1.16.1.tar.gz
|
||||
17
pub/download/ncdc-1.16.tar.gz.asc
Normal file
17
pub/download/ncdc-1.16.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJRSvRBAAoJEGI5TGmMJzn6+2wP/3+j76MN1j699KoO9oc7gM89
|
||||
VUV58WWgvrgj3tEc5LtQQxOjgTuluKJmNYauLxAuQXj+X1cPusNCvX4JXHTxLdZe
|
||||
+9eEdeoA+IduX8zWzmp4nALK9G1oMBiHALN4hNuf80k5uHAZGp53WSEaKNqXiXBq
|
||||
jkmp3VO1Tz7RdvIpmN9CSH8JdlEb8m+cSvYbfh4pMXsg7ucoXQyd8VZrd8iitjWL
|
||||
PVMQ0ceZZCIiQugd0YtbtH00iKxKeVBPhtG/sfOWU2QjYBn9vZ4sPwhEaV+isjN/
|
||||
cvn+bmcmkwgK3P7t288WsRHrqQqq+FLKJYGNXTsrqe+8HFYsgk+MkvktpH7lz346
|
||||
nou/MXekZUC5jLLaTOTcy/tT1XSkHYDWmCdXjFQd06hdGbX0HPJZHS51rqDys+Kx
|
||||
PuilgR3NKSoS5f29ytuIGsNO6lWZd0WWD73S7kkr1Bp6OgNb6KqZLVCsFGIASirR
|
||||
pjMoHXCtCBNuH6Fd/QWrFsg9TKHtKiKPthdEnK+snVWIpvoD070HxhgrCw3qoYWy
|
||||
SWWPtjky12TMKPx7B4XHRmP6kUU3YJJrmxESHHpF2DK2bD7wdyN2XHzGC+PQQPCM
|
||||
SRsTnBr0eNNgXOt8TLDaWnI1jmgUR3iQpWTvjwnfSo2fZkJ0TM4R2E3bUsTG9z4k
|
||||
k9Bfq9BVojyFRpMU+qsT
|
||||
=5cYU
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.16.tar.gz.md5
Normal file
1
pub/download/ncdc-1.16.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
4a33c6f5393c31d17f36ec871f799e16 ncdc-1.16.tar.gz
|
||||
1
pub/download/ncdc-1.16.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.16.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
4b3ab1c38557af1edb480b7c694bd28a08af6da8 ncdc-1.16.tar.gz
|
||||
17
pub/download/ncdc-1.17.tar.gz.asc
Normal file
17
pub/download/ncdc-1.17.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.20 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJRvC1/AAoJEGI5TGmMJzn6xWgQANoAJbOPobz/TGnEA+f0icoa
|
||||
oZ5GjXtnvxbN2JuPEewKqBO4lKLmjBFWZowFfuvWtB9mzmNuJSceWUa5CPCDiJq+
|
||||
ZM2WkWFTX1lVAnPdQBtUQWP0q79QHKS/1U2CyDRMI15rN8qB2yWTMj/6e2gydxsc
|
||||
HRsXHZXbLVHHcX1g8g6smYnaC1FAo2U0Bp9o+EKcQYveH+KtMJsdx7V7IiyvNAW0
|
||||
zc9mxyjwfv3ZT0GbbAOmaE2feKnPvGWPEynuKXnuj66Ze9Oxj66EHEaJEbxKs2vD
|
||||
WijkTUfZeZ2g+iqsWWhSrVdJwRKJXy4l+JWsZKAmLUgTNx5vdCZ3UnSfh9q5IaNW
|
||||
V655Xx++SUO7rk5ekit2Dhbh31d+lDFU2O90OMw6+RbNW7vIwIZQH3OuiFBe3OIx
|
||||
znx/DLkDDa3M0/40g92D1U8w1L93+U7icoCf5SJ1TuNqkrtdYS51M1HoAklU7VpB
|
||||
GTlOZqISQY8qB5m1w4L1//QXjX/WZPyBP2bNVEQC1LE0cfV/srniW0YXRYA9bRoy
|
||||
izv9tWz6as6guZkAQ8OEW2I7IXuDJXKnu/yzmNTvj5uDXvW9hJpCTfztxaIzOA3h
|
||||
pRw9Z4T3FlXEkB4oZhouf0DBDBsl9hX6x3ibijEyEUkIBUWAUOkncboXlQ8Baa5p
|
||||
TKrRCoO3Q8Js2DJttysw
|
||||
=ZHrm
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.17.tar.gz.md5
Normal file
1
pub/download/ncdc-1.17.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
cba07d44fa90759477053457e9fd8906 ncdc-1.17.tar.gz
|
||||
1
pub/download/ncdc-1.17.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.17.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
8a2a24c064997b0dd772e25d17a05f1baeb17c56 ncdc-1.17.tar.gz
|
||||
17
pub/download/ncdc-1.18.1.tar.gz.asc
Normal file
17
pub/download/ncdc-1.18.1.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.20 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJSUBb8AAoJEGI5TGmMJzn6wlAQANWirjw2yB5MLBVJlj5WfCOH
|
||||
ky6giyilDJnn8C2PPOXmvI8ddTUm6OSNCpGrK2gQ82bUqurx10aIYQfy+GZHvSgj
|
||||
5pi8GIQiQ1Js4b9BdX54zgeE6GhCk10mN0R4+xoMgszN+5mwRrg66WGsF2A6dZiB
|
||||
vvm3rQnpk3ydDb9kn/vGun8CT9e2xX43aXZ4EJtheHXkdx+o76Pb7LmORElZnKqm
|
||||
10Dw+SGZQ272xuiwnj1UROvMUnbs8yhq8ADpRONL7L1UGlORUpFjmAkB3UE8kLFE
|
||||
4CjTgYLKG6X3L8CFRMttQWmGNTMuvCBxGjqASUQunC1HV10B87ItbuHIiNbjxsEB
|
||||
pj+6dGye4gSI7J3piAXrIe4PG27UhQ9BnbQbhv7NtVM9IPSlb3hyMjzqZOethnRX
|
||||
PgTdwdEy53TI50hJf8tZAC8ZEOyPKtxFqufm7dx8NgoVsX0Si6NLwaAEpxu4h/Ny
|
||||
2QSWB3zGFZinaQ0QWuvXbzJMqjyzYvXGDpPGCUaGx4vcdE/Rz85ywzYeuBIiEH24
|
||||
N7NFD+nVaIpRQthH7GRqOwzgn1qHFPvm6DDj+jv3gzpUSkOz16iWVcIyatXPFJg1
|
||||
BFvlaZm8e2/lQXEyTu8QW6soGq4Pp+nxvow7xpMBSKNAk9gw7GBRPn1TaDQaD83t
|
||||
BLtM/ZkDdqrJMqQnWq9n
|
||||
=CwkC
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.18.1.tar.gz.md5
Normal file
1
pub/download/ncdc-1.18.1.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
c0070916c8bb8a0409d01f6663ca0c6a ncdc-1.18.1.tar.gz
|
||||
1
pub/download/ncdc-1.18.1.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.18.1.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
184dce59b5b51563f869a43d81971a1537cdc438 ncdc-1.18.1.tar.gz
|
||||
17
pub/download/ncdc-1.18.tar.gz.asc
Normal file
17
pub/download/ncdc-1.18.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.20 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJSQuCkAAoJEGI5TGmMJzn64c4QAML+Tyh+OdljrKG2deU4RS1p
|
||||
Gmy+dXvYnPmjAat4JXhfTKS6diFeu0CiFzK22FjtUYhZixRx0pt9yiXXumGQ3WTp
|
||||
LGK6rSEGl6NTHunVX2KRjYbGwc1vqszk8GwjvLwFB+5//t2ojGIeBqji3Tea2+sH
|
||||
ZwLzKqWuo/BMhKsE4EWH/A5EEi6jhOtrPqC/zI0s6j3cUH0HAvMPPfCmakBHcIQx
|
||||
pMt6U+gkOl2a+aP0dwbq4ct7YKgidzSnAqE/RR+k5nHSZK64j0aUA4/5Po9wgOl7
|
||||
9AXuASYatMFT6T92OEIcEz0/r814X1F30LQIH62xwh2xk7mYb5Y8JKQ7Bex7uCHf
|
||||
0dfH/ug215VwoVRBUkAnCvYKAaYM62DOZCrMNaIqLcupDsbPIuHUVwhH8AGQoHYH
|
||||
gKZ9NxBcCTVshebM1ee2gDjLOPt0wqU920LiXYH3g6OeLnUSQh9kdWOjSglfzWxR
|
||||
EGnv4h2TtYQjBkPguxPRvF0bs7WKIMKKd+px+kmCzdIp2lsV5ChM1EeKKtKs7Kmy
|
||||
zFR5X63RLZZr//ANeP7MUvZueEwbgnrrkl/BH8K8sSfNclVZ7ccHdIz9WfSf+A5y
|
||||
01kskhiLS58IJf8vYg/wnuyhS7pIeaK6NJvhI/NXTqJozGsoK7xO+/8MU5Mx6/aB
|
||||
wNl26DGtO8UjmBO/gx8/
|
||||
=kdtR
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.18.tar.gz.md5
Normal file
1
pub/download/ncdc-1.18.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
2d8d7d4cd8f0ddb9b3d93b24f1c61ecd ncdc-1.18.tar.gz
|
||||
1
pub/download/ncdc-1.18.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.18.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
407515d187403492372b4f22625bc403393e51fb ncdc-1.18.tar.gz
|
||||
17
pub/download/ncdc-1.19.1.tar.gz.asc
Normal file
17
pub/download/ncdc-1.19.1.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJTV4OTAAoJEGI5TGmMJzn6gR8QAJIld8yIHZC2JBciiX05q+JA
|
||||
REsqgESY74U4OSCIXHxykXHT+lHjgs3nZeObz8CV/NRF1CYzNIsIVJ/CHCyUEQtE
|
||||
tVRpBx8yF+v9VvnsOVzEVPRQTUw12VjRznFXFtpGkVHRQXkzxRRrB4X6e0M9xaDU
|
||||
Q3xuPBwP0aC2SI8tV6imwdsrWE8Ez8eHChPyl2fjwBME21RpyYxWrygh5jvpR/G8
|
||||
Rz/nOwK5AeMIjZqmWOL5BssvIi0BjalvtrZ8V1hvNPatajGOlceTrJU44R2l93oG
|
||||
WHA9vczoOpgkgiC4NkC4i0aGHsc+2P5GAp/p83bu3HnNWaJm9QwTzacqfByoTpmn
|
||||
jlMeKSxiZfz+pxx6BcSheR2n3FGS/+W+X4YTAEG+XU3lCDolW3zfLwISEXlRWtbK
|
||||
ZodJX4yHGX2i6d5OjOsya5proJhSNv/jbct6W5pNpoR2TYaUV4+o0pOjD+SiICZz
|
||||
iyN1JzMMWjbPmF9TeJk1OoouqZGz5XPzUcD7JbJfVBPN6Q6q6+jvjAA2HenX/XPR
|
||||
NRwR+kTdJVDpCmX+yN+RrmxUr9ifMvpTJSwJgJUzbmUGhAPOjqch4gBmgSRgou/7
|
||||
lzr3s7+nUgR4dmVT+q7fhhEd8AsC1TsGdoBdqYiJSDmAzpNtZwnJM3J2uLjgxy5D
|
||||
Pt9u5bS1tps9tk1m0vFH
|
||||
=0uVC
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.19.1.tar.gz.md5
Normal file
1
pub/download/ncdc-1.19.1.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
a7d23df7d0e291d1e3c8fb2a9a69f7a9 ncdc-1.19.1.tar.gz
|
||||
1
pub/download/ncdc-1.19.1.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.19.1.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
a02fcb67fb54ac739325db64f83d796647c98834 ncdc-1.19.1.tar.gz
|
||||
17
pub/download/ncdc-1.19.tar.gz.asc
Normal file
17
pub/download/ncdc-1.19.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJS+ewKAAoJEGI5TGmMJzn6QTAQAMY3p8imfuiWoVNgdFgm/ica
|
||||
UzCEQDj6rJ+1khPBLRoLnDAnkTCDRAueY/4489vcm8TwpsunmsnDd9+LdwHup7CF
|
||||
5OtnQyQD89BYMvrGqzA7iLLh3wOqibpT5B9PbffhZS1vRfi9NdBUBgvENKLxMuJ6
|
||||
dyQ6wMxeDSiVCwHj1M+6U4dCQXyyirfNbgwl/QQaN9Gwc/z+Qu0CSi6B+iQFC+qz
|
||||
zf8oH8fM1R7mryOExj0WQ8tY/Qa2V8NKBCC6PO3Zv9xgKSH8fVvwJZ4mbBn0EQxz
|
||||
4juQjPGwFcdbHYFob5/YCsuZiSIeOFjcrI0ub18C+Xekw8TuEU3FPdIyhLmBhDkA
|
||||
/XGcXpgDllMKDyjEMGXaDUBPDkgrr26WqeqniL92Hxtiy135OXX+2I/SB8Yny3Lr
|
||||
xupOsxeoG42eIzFFf2qJ8XUDeeppw49jhTFjk++pqKFe0o21elFeEx5FdHd6TufA
|
||||
x43DpfCVHfApQdD6nMaMMBab4kTbzeODbu7bPt4kUDm26oBfMhsxfM8Ev03ANnsB
|
||||
8UxFFec7N5QQEniSwDGfCxPCb7eciexhWT/rmxfv9B881FT12T4KGV8tJJHPzx5x
|
||||
BIMcI+J4yor105KbYPY7Sz3zPEzzOyva1ab30g+G4fozbV1tlIgEmyyLzUcGH3ny
|
||||
CICq6slRAymeoVnX3sWL
|
||||
=f1iZ
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.19.tar.gz.md5
Normal file
1
pub/download/ncdc-1.19.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
e6b0f22e57c79e879f112ed574393848 ncdc-1.19.tar.gz
|
||||
1
pub/download/ncdc-1.19.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.19.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
7f478b7daf09202586b40899cc6beabeb0d23178 ncdc-1.19.tar.gz
|
||||
17
pub/download/ncdc-1.2.tar.gz.asc
Normal file
17
pub/download/ncdc-1.2.tar.gz.asc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.11 (GNU/Linux)
|
||||
|
||||
iQIcBAABCgAGBQJOnxTZAAoJEGI5TGmMJzn6Jy0P/1g2nwT6dtsXqsg9FsorEKEk
|
||||
mBHv/0xyK6wljBzQABjjdDVKeUtVW72jdtkxjx672U3DMbOnQljNsNb/LmO1i8kJ
|
||||
WSa7DzZqMT3edu5R2YVo+qaEyjVQoA4xOj7SYMik0khgNgvgKY5hS+0dRkB8sYgV
|
||||
rkn0cQUrLs+ghYhs72SI2JLL7Tgr3FM53taoLRTwkIL7jYun15NVNgXuhXbqfpXo
|
||||
i6nCD8Awu+kOAhVXi6VBp0beaVBn+/iM8ww5E3blLPHxos03wtFlyk/wKwdBA26Q
|
||||
X0KvSVeAuV3HppYt0gWmsmQgmkaGOeVY2c9gKNFNm2i58y/Ll5YzS5laubXN7ihe
|
||||
eYtMnlvnR5Zn+9b1TRTLvQkxtJABYcPkJPnCx05gwa2IcDW2NQCVlypFDm+Uctv+
|
||||
7bZNn5iy1RA7ho4eFxqnhqNwxDMFVgMnDyFA6pT+Vtn6XjJZWd5dB28Qm4LlETiU
|
||||
mOmji09BCFXSQ+hscB/uJDZaE2XBbHUbGOOtB4t3vNkR9USLYRYR6r32AscjNYqT
|
||||
4Dx6nTrJSmgVW930/K/Jxcs5QdSy23DEkHiExtVoc1AxdTL5cCgjjKWTvBNvHlNY
|
||||
rzoyMNOQPBjPypvuWr7taTChWF27dBgwhjf5euXvXID0iKB+YXJM74RMEKDVsb7x
|
||||
Ius7qsfUF/dnurhjD1ux
|
||||
=9wI1
|
||||
-----END PGP SIGNATURE-----
|
||||
1
pub/download/ncdc-1.2.tar.gz.md5
Normal file
1
pub/download/ncdc-1.2.tar.gz.md5
Normal file
|
|
@ -0,0 +1 @@
|
|||
d99678479df72b450eee86501394584f ncdc-1.2.tar.gz
|
||||
1
pub/download/ncdc-1.2.tar.gz.sha1
Normal file
1
pub/download/ncdc-1.2.tar.gz.sha1
Normal file
|
|
@ -0,0 +1 @@
|
|||
6166c124d0b636ab6bfb6873bcb97b5ab3c7e4e8 ncdc-1.2.tar.gz
|
||||
16
pub/download/ncdc-1.20.tar.gz.asc
Normal file
16
pub/download/ncdc-1.20.tar.gz.asc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCgAGBQJYZkvqAAoJEGI5TGmMJzn653IQAJmPCbJOYMzObXGY+HvLM719
|
||||
ZzTT060NWBMJzLMNTa1wygpSrnYva/v1/T1VLHL9/PcLqV6no+J0mJmw+BpNX1Zg
|
||||
HIdJIEBgL76JfsCqOheKV3mPWbCI9KoFRnd7lAHOfMSW/yuzQ+H+wJTFamO6op2y
|
||||
8M4FGHxVxUqe9QNs++QGS3mPVTTd75vB7Whv0iHU+mLB5fldxgyf11LEowouJb9Z
|
||||
khdYRWLChzbG7ycKRYjd3VXRrDybAI8gsBuc9i37AtTQnhCnymipSF3O2X+vYApX
|
||||
Dgq9SoLbpsJB9cZU93qrpBQVmD8yBVlLcUxS255V+iszvtDVPG+BliQxiKlz+CxL
|
||||
wL0KAtMqu5kPOd1B+R1pBcitXRlZ/p/UfUKliUsTxIn8m8sJApt5WDb7ino/kWwb
|
||||
BqQ7dS5gVKeY+zP4ksNABQHseAmDdXlGMZSXR6iK5ucbCWc/pVOnIczYY+IIyu3T
|
||||
jTPhttaxDzg7+Bjn8owdu8I/rxFgNPs779R8JYp3iTahmYf73epHs870g8vOJDAt
|
||||
j+6Pn0u/MGpwJsAM5lrev0djv2RhULq84pWeESIuCIO1PX0EIS+3G6A6kPD2k3D9
|
||||
ceIaj9gjLv5aRwnFolEKYgp/ChOdDFqW4tLOT7RvE2htRu10HkNJT1QWmrZvzBrt
|
||||
/R+0i5+oRip1E3HNsbcq
|
||||
=//tc
|
||||
-----END PGP SIGNATURE-----
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue