mirror of
https://codeberg.org/scip/note.git
synced 2025-12-17 20:51:02 +01:00
-
This commit is contained in:
277
note-1.0.7/Changelog
Normal file
277
note-1.0.7/Changelog
Normal file
@@ -0,0 +1,277 @@
|
||||
==================================================================================
|
||||
|
||||
1.0.7:
|
||||
FIXED: there was a bug in the search expression, use now \Q and \E.
|
||||
ADDED: --config <file> allows one to use another config than the default.
|
||||
|
||||
==================================================================================
|
||||
|
||||
1.0.6:
|
||||
FIXED: there were some odd bugs in commandline parsing, some options were unavailable.
|
||||
FIXED: Forgot "PreferredEditor" config-option in the new config format.
|
||||
FIXED: the interactive "cd .." command has ignored the presence of a
|
||||
"DefaultLong" setting(and search too)... thx to Peter.
|
||||
CHANGED: Optimized a little bit the output routine, now it is better to read.
|
||||
ADDED: sub format and appropriate config-option for text formatting capabilities.
|
||||
CHANGED: changed getconfig regexp, which allows now also to use Option = Param.
|
||||
FIXED: was not possible to override config-options, which are set by default to
|
||||
something.
|
||||
ADDED: note chacks now, if a database os actually really encrypted and exits with
|
||||
an error if it s and the user turned off encryption. This protects her from
|
||||
destroying it's own database ..
|
||||
|
||||
==================================================================================
|
||||
|
||||
1.0.5:
|
||||
FIXED: the T (and t respectively) printed nothing out since 1.0.3! It does
|
||||
it now again...
|
||||
ADDED: a new database backend added, NOTEDB::dbm, which uses DBM files for
|
||||
storage.
|
||||
FIXED: &display-tree returns now, if there is no note, otherwise it
|
||||
would die because of an undefined refernce.
|
||||
CHANGED: Changed the config file format completely. It is now no more a perl
|
||||
file, instead it is a simple plain text file which note parses.
|
||||
CHANGED: Changed the way, note loads it database backend. It uses now the
|
||||
$dbdriver variable as module-name, which makes it possible easily
|
||||
to write your own backend without the need to change note itself.
|
||||
FIXED: Removed Getopt::Long option "bundling", causes errors with perl
|
||||
5.6.0 and is not senceful.
|
||||
FIXED: Added the Getopt::Long option "no_ignore_case". In 1.0.4 options
|
||||
were case insensitive causing -i to be interpreted as --import
|
||||
instead of --interactive ;-(((
|
||||
ADDED: a new config option $DEFAULT_LIST, which causes note, \
|
||||
if turned to "LONG", to use long-listing as default. |
|
||||
But it will still be able to use short-listing if you |
|
||||
explicit specify that. | submitted by
|
||||
FIXED: sub search prints now an appropriate error-message in |==> Peter Palmreuther
|
||||
case no searchstring was given instead of jumping to | thanks a lot!
|
||||
usage. |
|
||||
CHANGED: Changed the text in the interactive help to reflect |
|
||||
changes of verion 1.0.3 (t and T). /
|
||||
|
||||
==================================================================================
|
||||
|
||||
1.0.4:
|
||||
CHANGED: Moved from @ARGV-parsing to Getopt::Long, adding options is now
|
||||
much easier and I do now understand my own code ;-)
|
||||
ADDED: --raw, the "Raw Mode", which turns off any formatting of output.
|
||||
|
||||
==================================================================================
|
||||
|
||||
1.0.3:
|
||||
ADDED: "-" works also for --dump, but in the other direction. It causes
|
||||
note to dump to standard output instead into a file.
|
||||
ADDED: you can specify - as filename for use with --import and if you want
|
||||
to create a new note. "-" stands for standardinput and it allows you
|
||||
tp pipe another commands output to note!
|
||||
ADDED: you can now use an environment variable for the passphrase (when using
|
||||
encryption). If it is presen, note will not ask for a passphrase. This
|
||||
is very usefull in comination with the addition above, for use in
|
||||
scripts.
|
||||
CHANGED: the interactive help screen is now coloured.
|
||||
ADDED: -o commandline switch, which causes note to overwrite an existing
|
||||
database when importing data from a previous dump. Very handy if
|
||||
you want to re-initialize your db, i.e. if you changed the format.
|
||||
ADDED: the long-tree-view (-T) displays now also the note-number of each
|
||||
note.
|
||||
|
||||
==================================================================================
|
||||
|
||||
1.0.2:
|
||||
ADDED: Topic-Tree overview command (-t or -T).
|
||||
ADDED: Enhanced list command in interactive mode, you can now specify
|
||||
a topic which notes you want to see.
|
||||
CHANGED: updated the help and usage sections to reflect the additions above.
|
||||
|
||||
==================================================================================
|
||||
|
||||
1.0.1:
|
||||
FIXED: fixed bug in NOTEDB::mysql, which caused note t store NULL values
|
||||
in db, if encryption was off. A really dump failure :-(
|
||||
|
||||
==================================================================================
|
||||
|
||||
1.0.0:
|
||||
CHANGED: removed install.sh. use now a Makefile for installation.
|
||||
ADDED: Encryption support. Note can now encrypt notes using IDEA
|
||||
or DES as encryption-protocols(symetric).
|
||||
|
||||
==================================================================================
|
||||
|
||||
0.9:
|
||||
FIXED: There were many new bugs after my last changes *grrrrr*. fixed.
|
||||
Works now properly, with both backends!
|
||||
FIXED: and another bug: recounting of numbers did not take care about
|
||||
the existing order! If you deleted note #12, then note #13 became
|
||||
not neccessarily #12! Instead it becames any other number (kind of
|
||||
randomly...).
|
||||
CHANGED: NOTEDB::binary set_del function changed, it does no more require
|
||||
a temporary file for number recount. Instead it uses get_all and
|
||||
stores all notes in RAM and then rewrites the database.
|
||||
FIXED: fixed the set_new call within note. It used 0 as the first param
|
||||
(number) which is not useful since we dont have support for auto-
|
||||
increment from all database backends.
|
||||
FIXED: fixed the function set_recountnum in NITEDB::mysql, it was also
|
||||
incorrect :-((( 0.8 seemed to be a very bad early alpha...........
|
||||
FIXED: there was a bug in NOTEDB::binary which caused not to recount note
|
||||
numbers after deleting one :-(
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
0.8:
|
||||
ADDED: NOTEDB::binary. so now 0.8 is ready for shipping !
|
||||
FIXED: regexp bug fixed. It was only possible to delete 2 items together
|
||||
separated by comma ("d 1,2,3,4" deleted only 1,2!).
|
||||
ADDED: Some new config options which reflects the new module structure.
|
||||
So you can change your database backend without the need to
|
||||
replace the note script itself.
|
||||
FIXED: the previously added feature "cd <topic>" didn't really work :-(
|
||||
ADDED: NOTEDB::mysql added. Perlmodule, which I will use within
|
||||
note from now on instead of buildin functions for accessing the
|
||||
database. From now on I only need to maintain one version of
|
||||
note, since the module interface will be identical between the
|
||||
bin and sql version.
|
||||
CHANGED: The SQL code does not use Mysql.pm anymore. Instead it is coded
|
||||
using the more portable DBI module. This allows one easily to
|
||||
switch to anther database, which is supported by DBI.
|
||||
CHANGED: Locking. The db-table will now be locked before note accesses it.
|
||||
FIXED: width of listings is now always the same independent of the string-
|
||||
length of a certain note.
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
0.7:
|
||||
ADDED: one can now use the unix-like "cd" command to change to another
|
||||
topic, thus use "cd topicname" instead just typing "topicname"!
|
||||
FIXED: there was a smal regex bug which maked it impossible to use such
|
||||
topics: "4 test", in such a case note just displayed note number 4
|
||||
instead of cd'ing to topic "4 test".
|
||||
ADDED: a new config option "$KEEP_TIMESTAMP" allows a user to disable
|
||||
note's default behavior of updating the timestamp of a note after
|
||||
editing it.
|
||||
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
|
||||
0.6:
|
||||
FIXED: oops - the new suptopic feature confused the commandline-mode of
|
||||
note! quickly corrected! so subtopics also available from command-
|
||||
line.
|
||||
FIXED: a small bug fiyed, it was impossible to use -D or -I from command-
|
||||
line, if $ALWAYS_INT was turned on, now it is.
|
||||
FIXED: fixed problem with local/global variable $time, which confused
|
||||
the script under certain circumstances, now $time is no more global,
|
||||
it will be read in (using &getdate) locally by &new and &edit.
|
||||
CHANGED: The Topic separator is no longer hardcoded, one can customize
|
||||
it using the $TopicSep variable, the default is now /, the backslash
|
||||
will no mor work!
|
||||
CHANGED: use perl buildin localtime() function instead of
|
||||
GNU date, which is possibly not installed on every target
|
||||
system (i.e. win32), therefore better portability!
|
||||
CHANGED: use now the strict module
|
||||
ADDED: Support for subtopics added (and sub-sub-..-topics).
|
||||
CHANGED: Removed the "T" command, it is now obsolete.
|
||||
CHANGED: behavior of list command changed, now shows topics as well as
|
||||
notes under the current topic(if there are some).
|
||||
CHANGED: The ".." command takes you now one level higher in your topic-
|
||||
structure.
|
||||
ADDED: A new config option $PreferredEditor, which you can use to
|
||||
specify your own choice of editor.
|
||||
FIXED: A bug at line 769 causing single note where smaller than note-
|
||||
listings
|
||||
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
|
||||
|
||||
0.5:
|
||||
ADDED: Topic support(requested). You can sort the various notes under
|
||||
different topics now.
|
||||
FIXED: There was another bug, which caused the list command to display
|
||||
the notes with a too high value of $maxlen.
|
||||
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
|
||||
|
||||
0.4.2:
|
||||
ADDED: If run in interactive mode, note will at first do a list command.
|
||||
FIXED: A bug caused note to save bogus timestamps after editing a note.
|
||||
CHANGED: It does no more print 3 newlines before the menu in interactive mode.
|
||||
FIXED: Some more vars will be resetted during each loop in interactive mode.
|
||||
$ListType.
|
||||
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
|
||||
|
||||
0.4.1:
|
||||
ADDED: The install.sh script for the mysql version is no able to install the
|
||||
required Mysql module directly from CPAN, thanks to David A. Bandel!
|
||||
FIXED: The mysql version did not display notes (i.e.: "note 3" did nothing)
|
||||
CHANGED: Again, the sql-format of the mysql database has been changed. Now
|
||||
there are only 3 fields, the number filed is the primary key, the id
|
||||
field in previous versions was a waste of diskspace...
|
||||
CHANGED: The format of the dump-output has been changed.
|
||||
ADDED: It is now possible to import previously dumped notes into the notedb
|
||||
(dumps from both versions are compatible with each other)
|
||||
FIXED: the function num_bereich() had a bug, which caused ot to ignore under
|
||||
some circumstances one number (i.e. "note -d 4-13" did nothing).
|
||||
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
|
||||
|
||||
0.4:
|
||||
CHANGED: ok, mysql support is back again (upon requests). therefore there
|
||||
are two different version of the script in the same time with
|
||||
the same features, one for mysql and the other one for the binary
|
||||
database.
|
||||
ADDED: Dump to textfile capability. Later on I want to dump it into a
|
||||
palm readable format, any help is welcome!
|
||||
ADDED: interactive mode.
|
||||
CHANGED: Better modularity, better code.
|
||||
CHANGED: note can now run without the need of a config file. If does not
|
||||
exist, it will try to work with default values.
|
||||
ADDED: sub num_bereich(), which allows one to specify more then one
|
||||
number for deletion or displaying (i.e.: "-d 1,4,7" or "-d 4-9")
|
||||
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
|
||||
|
||||
0.3:
|
||||
CHANGED: it uses no more a mysql database, but a binary file instead.
|
||||
This is much faster!
|
||||
ADDED: note can display the notes with colors, it is turned off by default
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
|
||||
0.2:
|
||||
FIXED: now any occurence of ' will be masked with \' before storage
|
||||
to the mysql database.
|
||||
FIXED: now numbers of notes will be recounted, if one delete one note,
|
||||
so the list of notes will everytime start with 1,2,3,...
|
||||
CHANGED: the look of the list output has been changed, similar to a table
|
||||
|
||||
|
||||
==================================================================================
|
||||
|
||||
0.1:
|
||||
INITIAL RELEASE.
|
||||
108
note-1.0.7/Makefile.PL
Normal file
108
note-1.0.7/Makefile.PL
Normal file
@@ -0,0 +1,108 @@
|
||||
# does not use ExtUtils::MakeMaker, because
|
||||
# NOTEDB::mysql and NOTEDB::binary are internals
|
||||
# of note.
|
||||
#
|
||||
# $Id: Makefile.PL,v 1.1 2000/04/17 17:38:49 thomas Exp thomas $
|
||||
#
|
||||
# check for the existence of optional modules:
|
||||
sub chk_mod
|
||||
{
|
||||
my($mod, $msg) = @_;
|
||||
print "<====\tchecking $mod \t====>\n";
|
||||
eval {
|
||||
$mod .= ".pm";
|
||||
$mod =~ s/::/\//g;
|
||||
require $mod;
|
||||
};
|
||||
if($@) {
|
||||
print $msg;
|
||||
}
|
||||
else {
|
||||
print " ... installed.\n";
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
|
||||
&chk_mod(
|
||||
"Getopt::Long",
|
||||
"WARNING: Getopt::Long seems not to be installed on your system!\n"
|
||||
."But it is strongly required in order to run note!\n"
|
||||
);
|
||||
|
||||
&chk_mod(
|
||||
"DB_File",
|
||||
"WARNING: DB_File seems not to be installed on your system!\n"
|
||||
."It is required, if you want to use the DBM backend.\n"
|
||||
);
|
||||
|
||||
|
||||
&chk_mod(
|
||||
"DBI",
|
||||
" WARNING: module DBI is not installed on your system.\n"
|
||||
." It is required, if you want to use a SQL database with\n"
|
||||
."note.\n"
|
||||
);
|
||||
|
||||
&chk_mod(
|
||||
"Crypt::IDEA",
|
||||
" WARNING: module Crypt::IDEA is not installed on your system.\n"
|
||||
." It is required, if you want to encrypt your data using IDEA.\n"
|
||||
);
|
||||
|
||||
&chk_mod(
|
||||
"Crypt::DES",
|
||||
" WARNING: module Crypt::DES is not installed on your system.\n"
|
||||
." It is required, if you want to encrypt your data using DES.\n"
|
||||
);
|
||||
|
||||
&chk_mod(
|
||||
"Crypt::CBC",
|
||||
" WARNING: module Crypt::CBC is not installed on your system.\n"
|
||||
." It is required, if you want to encrypt your data using CBC.\n"
|
||||
);
|
||||
|
||||
&chk_mod(
|
||||
"MD5",
|
||||
" WARNING: module MD5 is not installed on your system.\n"
|
||||
." It is required by Crypt::CBC.\n"
|
||||
);
|
||||
|
||||
foreach $dir (@INC) {
|
||||
if($dir =~ /site_perl/)
|
||||
{ $LIBDIR = $dir; last; }
|
||||
}
|
||||
print "directory, where to install libs [$LIBDIR]: ";
|
||||
$input = <>;
|
||||
chomp $input;
|
||||
$LIBDIR = $input if($input ne "");
|
||||
|
||||
$BINDIR = "/usr/local/bin";
|
||||
print "directory, where to install note [$BINDIR]: ";
|
||||
$input = <>;
|
||||
chomp $input;
|
||||
$BINDIR = $input if($input ne "");
|
||||
|
||||
$install = `which install`;
|
||||
|
||||
open M, "> Makefile" || die $!;
|
||||
print M qq~BIN = bin/note
|
||||
LIBS = NOTEDB/mysql.pm NOTEDB/binary.pm NOTEDB/dbm.pm
|
||||
INSTBIN = $BINDIR
|
||||
INSTLIB = $LIBDIR
|
||||
INSTALL = $install
|
||||
all:
|
||||
\@echo "done. Type make install.\\n"
|
||||
|
||||
install:
|
||||
\$(INSTALL) -d -m 755 \$(INSTLIB)/NOTEDB
|
||||
\$(INSTALL) -m 755 \$(LIBS) \$(INSTLIB)/NOTEDB
|
||||
\$(INSTALL) -m 755 \$(BIN) \$(INSTBIN)
|
||||
~;
|
||||
|
||||
print "Type \"make install\" to install all files.\n\n";
|
||||
print "Please note: You may also copy the file \"config/noterc\" to\n"
|
||||
."your home: \"cp config/noterc ~/.noterc\". Don't forget to edit\n"
|
||||
."your config-file. Read the README for more informations on this\n"
|
||||
."topic.\n"
|
||||
."Thanks for choosing \"note\"! You are helping to keep the \n"
|
||||
."OpenSource idea alive! Enjoy and tell me, what you think!\n\n";
|
||||
7
note-1.0.7/NOTEDB/README
Normal file
7
note-1.0.7/NOTEDB/README
Normal file
@@ -0,0 +1,7 @@
|
||||
perl modules for note used as database backends.
|
||||
the install.sh script will install both of them,
|
||||
although you may only need one backend. Perhaps
|
||||
other users on your system have oter ideas in mind...
|
||||
|
||||
Therefore, please ignore these file. There is nothing
|
||||
to edit or to do. Simply leave this directory :-)
|
||||
388
note-1.0.7/NOTEDB/binary.pm
Normal file
388
note-1.0.7/NOTEDB/binary.pm
Normal file
@@ -0,0 +1,388 @@
|
||||
#!/usr/bin/perl
|
||||
# $Id: binary.pm,v 1.6 2000/06/25 19:48:00 scip Exp scip $
|
||||
# Perl module for note
|
||||
# binary database backend. see docu: perldoc NOTEDB::binary
|
||||
#
|
||||
use strict;
|
||||
use Data::Dumper;
|
||||
use IO::Seekable;
|
||||
|
||||
package NOTEDB;
|
||||
use Fcntl qw(LOCK_EX LOCK_UN);
|
||||
BEGIN {
|
||||
# make sure, it works, although encryption
|
||||
# not supported on this system!
|
||||
eval { require Crypt::CBC; };
|
||||
if($@) {
|
||||
$NOTEDB::crypt_supported = 0;
|
||||
}
|
||||
else {
|
||||
$NOTEDB::crypt_supported = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Globals:
|
||||
my ($NOTEDB, $sizeof, $typedef,$version);
|
||||
my ($cipher);
|
||||
|
||||
$version = "(NOTEDB::binary, 1.6)";
|
||||
|
||||
|
||||
sub new
|
||||
{
|
||||
my($this, $dbdriver, $dbname, $MAX_NOTE, $MAX_TIME) = @_;
|
||||
|
||||
my $class = ref($this) || $this;
|
||||
my $self = {};
|
||||
bless($self,$class);
|
||||
$NOTEDB = $dbname;
|
||||
|
||||
if(! -e $NOTEDB)
|
||||
{
|
||||
open(TT,">$NOTEDB") or die "Could not create $NOTEDB: $!\n";
|
||||
close (TT);
|
||||
}
|
||||
elsif(! -w $NOTEDB)
|
||||
{
|
||||
print "$NOTEDB is not writable!\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
my $TYPEDEF = "i a$MAX_NOTE a$MAX_TIME";
|
||||
my $SIZEOF = length pack($TYPEDEF, () );
|
||||
|
||||
$sizeof = $SIZEOF;
|
||||
$typedef = $TYPEDEF;
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
||||
sub DESTROY
|
||||
{
|
||||
# clean the desk!
|
||||
}
|
||||
|
||||
sub version {
|
||||
return $version;
|
||||
}
|
||||
|
||||
sub no_crypt {
|
||||
$NOTEDB::crypt_supported = 0;
|
||||
}
|
||||
|
||||
sub use_crypt {
|
||||
my($this,$key,$method) = @_;
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$cipher = new Crypt::CBC($key, $method);
|
||||
};
|
||||
if($@) {
|
||||
$NOTEDB::crypt_supported == 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
print "warning: Crypt::CBC not supported by system!\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub set_del_all
|
||||
{
|
||||
unlink $NOTEDB;
|
||||
open(TT,">$NOTEDB") or die "Could not create $NOTEDB: $!\n";
|
||||
close (TT);
|
||||
}
|
||||
|
||||
|
||||
sub get_single
|
||||
{
|
||||
my($this, $num) = @_;
|
||||
my($address, $note, $date, $buffer, $n, $t, $buffer, );
|
||||
|
||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
|
||||
$address = ($num-1) * $sizeof;
|
||||
seek(NOTE, $address, IO::Seekable::SEEK_SET);
|
||||
read(NOTE, $buffer, $sizeof);
|
||||
($num, $n, $t) = unpack($typedef, $buffer);
|
||||
|
||||
$note = ude($n);
|
||||
$date = ude($t);
|
||||
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
|
||||
return $note, $date;
|
||||
}
|
||||
|
||||
|
||||
sub get_all
|
||||
{
|
||||
my($this, $num, $note, $date, %res);
|
||||
|
||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
my($buffer, $t, $n);
|
||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||
while(read(NOTE, $buffer, $sizeof)) {
|
||||
($num, $note, $date) = unpack($typedef, $buffer);
|
||||
$t = ude($date);
|
||||
$n = ude($note);
|
||||
$res{$num}->{'note'} = $n;
|
||||
$res{$num}->{'date'} = $t;
|
||||
}
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
|
||||
return %res;
|
||||
}
|
||||
|
||||
|
||||
sub get_nextnum
|
||||
{
|
||||
my($this, $num, $te, $me, $buffer);
|
||||
|
||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
|
||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||
while(read(NOTE, $buffer, $sizeof)) {
|
||||
($num, $te, $me) = unpack($typedef, $buffer);
|
||||
}
|
||||
$num += 1;
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
|
||||
return $num;
|
||||
}
|
||||
|
||||
sub get_search
|
||||
{
|
||||
my($this, $searchstring) = @_;
|
||||
my($buffer, $num, $note, $date, %res, $t, $n);
|
||||
|
||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
|
||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||
while(read(NOTE, $buffer, $sizeof))
|
||||
{
|
||||
($num, $note, $date) = unpack($typedef, $buffer);
|
||||
$n = ude($note);
|
||||
$t = ude($date);
|
||||
if($n =~ /\Q$searchstring\E/i)
|
||||
{
|
||||
$res{$num}->{'note'} = $n;
|
||||
$res{$num}->{'date'} = $t;
|
||||
}
|
||||
}
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
|
||||
return %res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
sub set_edit
|
||||
{
|
||||
my($this, $num, $note, $date) = @_;
|
||||
my $address = ($num -1 ) * $sizeof;
|
||||
|
||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
|
||||
seek(NOTE, $address, IO::Seekable::SEEK_SET);
|
||||
my $n = uen($note);
|
||||
my $t = uen($date);
|
||||
|
||||
my $buffer = pack($typedef, $num, $n, $t);
|
||||
print NOTE $buffer;
|
||||
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
}
|
||||
|
||||
|
||||
sub set_new
|
||||
{
|
||||
my($this, $num, $note, $date) = @_;
|
||||
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
|
||||
seek(NOTE, 0, IO::Seekable::SEEK_END); # APPEND
|
||||
my $n = uen($note);
|
||||
my $t = uen($date);
|
||||
my $buffer = pack($typedef, $num, $n, $t);
|
||||
print NOTE $buffer;
|
||||
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
}
|
||||
|
||||
|
||||
sub set_del
|
||||
{
|
||||
my($this, $num) = @_;
|
||||
my(%orig, $note, $date, $T, $setnum, $buffer, $n, $N, $t);
|
||||
|
||||
$setnum = 1;
|
||||
|
||||
%orig = $this->get_all();
|
||||
return "ERROR" if (! exists $orig{$num});
|
||||
|
||||
delete $orig{$num};
|
||||
|
||||
# overwrite, but keep number!
|
||||
open NOTE, ">$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||
foreach $N (keys %orig) {
|
||||
$n = uen($orig{$N}->{'note'});
|
||||
$t = uen($orig{$N}->{'date'});
|
||||
$buffer = pack( $typedef, $N, $n, $t); # keep orig number, note have to call recount!
|
||||
print NOTE $buffer;
|
||||
seek(NOTE, 0, IO::Seekable::SEEK_END);
|
||||
$setnum++;
|
||||
}
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
return;
|
||||
}
|
||||
|
||||
sub set_recountnums
|
||||
{
|
||||
my($this) = @_;
|
||||
my(%orig, $note, $date, $T, $setnum, $buffer, $n, $N, $t);
|
||||
|
||||
$setnum = 1;
|
||||
%orig = $this->get_all();
|
||||
|
||||
open NOTE, ">$NOTEDB" or die "could not open $NOTEDB\n";
|
||||
flock NOTE, LOCK_EX;
|
||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||
|
||||
foreach $N (sort {$a <=> $b} keys %orig) {
|
||||
$n = uen($orig{$N}->{'note'});
|
||||
$t = uen($orig{$N}->{'date'});
|
||||
$buffer = pack( $typedef, $setnum, $n, $t);
|
||||
print NOTE $buffer;
|
||||
seek(NOTE, 0, IO::Seekable::SEEK_END);
|
||||
$setnum++;
|
||||
}
|
||||
flock NOTE, LOCK_UN;
|
||||
close NOTE;
|
||||
return;
|
||||
}
|
||||
|
||||
sub uen
|
||||
{
|
||||
my($T);
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$T = pack("u", $cipher->encrypt($_[0]));
|
||||
};
|
||||
}
|
||||
else {
|
||||
$T = pack("u", $_[0]);
|
||||
}
|
||||
chomp $T;
|
||||
return $T;
|
||||
}
|
||||
|
||||
sub ude
|
||||
{
|
||||
my($T);
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$T = $cipher->decrypt(unpack("u",$_[0]));
|
||||
};
|
||||
}
|
||||
else {
|
||||
$T = unpack("u", $_[0]);
|
||||
}
|
||||
return $T;
|
||||
}
|
||||
|
||||
1; # keep this!
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
NOTEDB::binary - module lib for accessing a notedb from perl
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# include the module
|
||||
use NOTEDB;
|
||||
|
||||
# create a new NOTEDB object
|
||||
$db = new NOTEDB("binary", "/home/tom/.notedb", 4096, 24);
|
||||
|
||||
# decide to use encryption
|
||||
# $key is the cipher to use for encryption
|
||||
# $method must be either Crypt::IDEA or Crypt::DES
|
||||
# you need Crypt::CBC, Crypt::IDEA and Crypt::DES to have installed.
|
||||
$db->use_crypt($key,$method);
|
||||
|
||||
# do not use encryption
|
||||
# this is the default
|
||||
$db->no_crypt;
|
||||
|
||||
# get a single note
|
||||
($note, $date) = $db->get_single(1);
|
||||
|
||||
# search for a certain note
|
||||
%matching_notes = $db->get_search("somewhat");
|
||||
# format of returned hash:
|
||||
#$matching_notes{$numberofnote}->{'note' => 'something', 'date' => '23.12.2000 10:33:02'}
|
||||
|
||||
# get all existing notes
|
||||
%all_notes = $db->get_all();
|
||||
# format of returnes hash like the one from get_search above
|
||||
|
||||
# get the next noteid available
|
||||
$next_num = $db->get_nextnum();
|
||||
|
||||
# modify a certain note
|
||||
$db->set_edit(1, "any text", "23.12.2000 10:33:02");
|
||||
|
||||
# create a new note
|
||||
$db->set_new(5, "any new text", "23.12.2000 10:33:02");
|
||||
|
||||
# delete a certain note
|
||||
$db->set_del(5);
|
||||
|
||||
# turn on encryption. CryptMethod must be IDEA, DES or BLOWFISH
|
||||
$db->use_crypt("passphrase", "CryptMethod");
|
||||
|
||||
# turn off encryption. This is the default.
|
||||
$db->no_crypt();
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
You can use this module for accessing a note database. There are currently
|
||||
two versions of this module, one version for a SQL database and one for a
|
||||
binary file (note's own database-format).
|
||||
However, both versions provides identical interfaces, which means, you do
|
||||
not need to change your code, if you want to switch to another database format.
|
||||
|
||||
Currently, NOTEDB module is only used by note itself. But feel free to use it
|
||||
within your own project! Perhaps someone want to implement a webinterface to
|
||||
note...
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
please see the section SYNOPSIS, it says it all.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Thomas Linden <tom@daemon.de>.
|
||||
|
||||
|
||||
|
||||
=cut
|
||||
261
note-1.0.7/NOTEDB/dbm.pm
Normal file
261
note-1.0.7/NOTEDB/dbm.pm
Normal file
@@ -0,0 +1,261 @@
|
||||
#!/usr/bin/perl
|
||||
# $Id: dbm.pm,v 1.2 2000/06/25 19:51:11 scip Exp scip $
|
||||
# Perl module for note
|
||||
# DBM database backend. see docu: perldoc NOTEDB::dbm
|
||||
#
|
||||
|
||||
use DB_File;
|
||||
#use Data::Dumper;
|
||||
use strict;
|
||||
package NOTEDB;
|
||||
|
||||
BEGIN {
|
||||
# make sure, it works, although encryption
|
||||
# not supported on this system!
|
||||
eval { require Crypt::CBC; };
|
||||
if($@) {
|
||||
$NOTEDB::crypt_supported = 0;
|
||||
}
|
||||
else {
|
||||
$NOTEDB::crypt_supported = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Globals:
|
||||
my ($dbm_dir, $notefile, $timefile, $version, $cipher, %note, %date);
|
||||
$notefile = "note.dbm";
|
||||
$timefile = "date.dbm";
|
||||
|
||||
$version = "(NOTEDB::dbm, 1.1)";
|
||||
|
||||
sub new
|
||||
{
|
||||
my($this, $dbdriver, $dbm_dir) = @_;
|
||||
my $class = ref($this) || $this;
|
||||
my $self = {};
|
||||
bless($self,$class);
|
||||
|
||||
tie %note, "DB_File", "$dbm_dir/$notefile" || die $!;
|
||||
tie %date, "DB_File", "$dbm_dir/$timefile" || die $!;
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
||||
sub DESTROY
|
||||
{
|
||||
# clean the desk!
|
||||
untie %note, %date;
|
||||
}
|
||||
|
||||
sub version {
|
||||
return $version;
|
||||
}
|
||||
|
||||
sub no_crypt {
|
||||
$NOTEDB::crypt_supported = 0;
|
||||
}
|
||||
|
||||
sub use_crypt {
|
||||
my($this, $key, $method) = @_;
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$cipher = new Crypt::CBC($key, $method);
|
||||
};
|
||||
if($@) {
|
||||
$NOTEDB::crypt_supported == 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
print "warning: Crypt::CBC not supported by system!\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub get_single
|
||||
{
|
||||
my($this, $num) = @_;
|
||||
my($note, $date);
|
||||
return ude ($note{$num}), ude($date{$num});
|
||||
}
|
||||
|
||||
|
||||
sub get_all
|
||||
{
|
||||
my($this, $num, $note, $date, %res, $real);
|
||||
foreach $num (sort {$a <=> $b} keys %date) {
|
||||
$res{$num}->{'note'} = ude($note{$num});
|
||||
$res{$num}->{'date'} = ude($date{$num});
|
||||
}
|
||||
return %res;
|
||||
}
|
||||
|
||||
|
||||
sub get_nextnum
|
||||
{
|
||||
my($this, $num);
|
||||
foreach (sort {$a <=> $b} keys %date) {
|
||||
$num = $_;
|
||||
}
|
||||
$num++;
|
||||
return $num;
|
||||
}
|
||||
|
||||
sub get_search
|
||||
{
|
||||
my($this, $searchstring) = @_;
|
||||
my($num, $note, $date, %res);
|
||||
|
||||
foreach $num (sort {$a <=> $b} keys %date) {
|
||||
if (ude($note{$num}) =~ /\Q$searchstring\E/i) {
|
||||
$res{$num}->{'note'} = ude($note{$num});
|
||||
$res{$num}->{'date'} = ude($date{$num});
|
||||
}
|
||||
}
|
||||
|
||||
return %res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub set_recountnums
|
||||
{
|
||||
my $this = shift;
|
||||
my(%Note, %Date, $num, $setnum);
|
||||
$setnum = 1;
|
||||
foreach $num (sort {$a <=> $b} keys %note) {
|
||||
$Note{$setnum} = $note{$num};
|
||||
$Date{$setnum} = $date{$num};
|
||||
$setnum++;
|
||||
}
|
||||
%note = %Note;
|
||||
%date = %Date;
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub set_edit
|
||||
{
|
||||
my($this, $num, $note, $date) = @_;
|
||||
$note{$num} = uen($note);
|
||||
$date{$num} = uen($date);
|
||||
}
|
||||
|
||||
|
||||
sub set_new
|
||||
{
|
||||
my($this, $num, $note, $date) = @_;
|
||||
$this->set_edit($num, $note, $date); # just the same thing
|
||||
}
|
||||
|
||||
|
||||
sub set_del
|
||||
{
|
||||
my($this, $num) = @_;
|
||||
my($note, $date, $T);
|
||||
($note, $date) = $this->get_single($num);
|
||||
return "ERROR" if ($date !~ /^\d/);
|
||||
delete $note{$num};
|
||||
delete $date{$num};
|
||||
}
|
||||
|
||||
sub set_del_all
|
||||
{
|
||||
my($this) = @_;
|
||||
%note = ();
|
||||
%date = ();
|
||||
return;
|
||||
}
|
||||
|
||||
sub uen
|
||||
{
|
||||
my($T);
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$T = pack("u", $cipher->encrypt($_[0]));
|
||||
};
|
||||
}
|
||||
else {
|
||||
$T = $_[0];
|
||||
}
|
||||
chomp $T;
|
||||
return $T;
|
||||
}
|
||||
|
||||
sub ude
|
||||
{
|
||||
my($T);
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$T = $cipher->decrypt(unpack("u",$_[0]))
|
||||
};
|
||||
return $T;
|
||||
}
|
||||
else {
|
||||
return $_[0];
|
||||
}
|
||||
}
|
||||
|
||||
1; # keep this!
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
NOTEDB::dbm - module lib for accessing a notedb from perl
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# include the module
|
||||
use NOTEDB;
|
||||
|
||||
# create a new NOTEDB object (the last 4 params are db table/field names)
|
||||
$db = new NOTEDB("mysql","note","/home/user/.notedb/");
|
||||
|
||||
# get a single note
|
||||
($note, $date) = $db->get_single(1);
|
||||
|
||||
# search for a certain note
|
||||
%matching_notes = $db->get_search("somewhat");
|
||||
# format of returned hash:
|
||||
#$matching_notes{$numberofnote}->{'note' => 'something', 'date' => '23.12.2000 10:33:02'}
|
||||
|
||||
# get all existing notes
|
||||
%all_notes = $db->get_all();
|
||||
# format of returnes hash like the one from get_search above
|
||||
|
||||
# get the next noteid available
|
||||
$next_num = $db->get_nextnum();
|
||||
|
||||
# recount all noteids starting by 1 (usefull after deleting one!)
|
||||
$db->set_recountnums();
|
||||
|
||||
# modify a certain note
|
||||
$db->set_edit(1, "any text", "23.12.2000 10:33:02");
|
||||
|
||||
# create a new note
|
||||
$db->set_new(5, "any new text", "23.12.2000 10:33:02");
|
||||
|
||||
# delete a certain note
|
||||
$db->set_del(5);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
You can use this module for accessing a note database. This is the dbm module.
|
||||
It uses the DB_FILE module to store it's data and it uses DBM files for tis purpose.
|
||||
|
||||
Currently, NOTEDB module is only used by note itself. But feel free to use it
|
||||
within your own project! Perhaps someone want to implement a webinterface to
|
||||
note...
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
please see the section SYNOPSIS, it says it all.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Thomas Linden <tom@daemon.de>.
|
||||
|
||||
|
||||
|
||||
=cut
|
||||
349
note-1.0.7/NOTEDB/mysql.pm
Normal file
349
note-1.0.7/NOTEDB/mysql.pm
Normal file
@@ -0,0 +1,349 @@
|
||||
#!/usr/bin/perl
|
||||
# $Id: mysql.pm,v 1.5 2000/06/25 19:50:43 scip Exp scip $
|
||||
# Perl module for note
|
||||
# mysql database backend. see docu: perldoc NOTEDB::binary
|
||||
#
|
||||
|
||||
use DBI;
|
||||
use strict;
|
||||
use Data::Dumper;
|
||||
|
||||
package NOTEDB;
|
||||
|
||||
BEGIN {
|
||||
# make sure, it works, although encryption
|
||||
# not supported on this system!
|
||||
eval { require Crypt::CBC; };
|
||||
if($@) {
|
||||
$NOTEDB::crypt_supported = 0;
|
||||
}
|
||||
else {
|
||||
$NOTEDB::crypt_supported = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Globals:
|
||||
my ($DB, $table, $fnum, $fnote, $fdate, $version, $cipher);
|
||||
$table = "note";
|
||||
$fnum = "number";
|
||||
$fnote = "note";
|
||||
$fdate = "date";
|
||||
$version = "(NOTEDB::mysql, 1.4)";
|
||||
|
||||
# prepare some std statements... #####################################################################
|
||||
my $sql_getsingle = "SELECT $fnote,$fdate FROM $table WHERE $fnum = ?";
|
||||
my $sql_all = "SELECT $fnum,$fnote,$fdate FROM $table";
|
||||
my $sql_nextnum = "SELECT max($fnum) FROM $table";
|
||||
my $sql_incrnum = "SELECT $fnum FROM $table ORDER BY $fnum";
|
||||
my $sql_search = "SELECT DISTINCT $fnum,$fnote,$fdate FROM $table WHERE $fnote LIKE ?";
|
||||
|
||||
my $sql_setnum = "UPDATE $table SET $fnum = ? WHERE $fnum = ?";
|
||||
my $sql_edit = "UPDATE $table SET $fnote = ?, $fdate = ? WHERE $fnum = ?";
|
||||
|
||||
my $sql_insertnew = "INSERT INTO $table VALUES (?, ?, ?)";
|
||||
|
||||
my $sql_del = "DELETE FROM $table WHERE $fnum = ?";
|
||||
my $sql_del_all = "DELETE FROM $table";
|
||||
######################################################################################################
|
||||
|
||||
sub new
|
||||
{
|
||||
# no prototype, because of the bin-version, which takes only a filename!
|
||||
my($this, $dbdriver, $dbname, $dbhost, $dbuser, $dbpasswd) = @_;
|
||||
|
||||
my $class = ref($this) || $this;
|
||||
my $self = {};
|
||||
bless($self,$class);
|
||||
my $database = "DBI:$dbdriver:$dbname;host=$dbhost";
|
||||
|
||||
$DB = DBI->connect($database, $dbuser, $dbpasswd) || die DBI->errstr();
|
||||
|
||||
# LOCK the database!
|
||||
my $lock = $DB->prepare("LOCK TABLES $table WRITE") || die $DB->errstr();
|
||||
$lock->execute() || die $DB->errstr();
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
||||
sub DESTROY
|
||||
{
|
||||
# clean the desk!
|
||||
my $unlock = $DB->prepare("UNLOCK TABLES") || die $DB->errstr;
|
||||
$unlock->execute() || die $DB->errstr();
|
||||
$DB->disconnect || die $DB->errstr;
|
||||
}
|
||||
|
||||
sub version {
|
||||
return $version;
|
||||
}
|
||||
|
||||
sub no_crypt {
|
||||
$NOTEDB::crypt_supported = 0;
|
||||
}
|
||||
|
||||
sub use_crypt {
|
||||
my($this, $key, $method) = @_;
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$cipher = new Crypt::CBC($key, $method);
|
||||
};
|
||||
if($@) {
|
||||
$NOTEDB::crypt_supported == 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
print "warning: Crypt::CBC not supported by system!\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub get_single
|
||||
{
|
||||
my($this, $num) = @_;
|
||||
my($note, $date);
|
||||
my $statement = $DB->prepare($sql_getsingle) || die $DB->errstr();
|
||||
|
||||
$statement->execute($num) || die $DB->errstr();
|
||||
$statement->bind_columns(undef, \($note, $date)) || die $DB->errstr();
|
||||
|
||||
while($statement->fetch) {
|
||||
return ude($note), ude($date);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub get_all
|
||||
{
|
||||
my($this, $num, $note, $date, %res);
|
||||
my $statement = $DB->prepare($sql_all) || die $DB->errstr();
|
||||
|
||||
$statement->execute || die $DB->errstr();
|
||||
$statement->bind_columns(undef, \($num, $note, $date)) || die $DB->errstr();
|
||||
|
||||
while($statement->fetch) {
|
||||
$res{$num}->{'note'} = ude($note);
|
||||
$res{$num}->{'date'} = ude($date);
|
||||
}
|
||||
return %res;
|
||||
}
|
||||
|
||||
|
||||
sub get_nextnum
|
||||
{
|
||||
my($this, $num);
|
||||
my $statement = $DB->prepare($sql_nextnum) || die $DB->errstr();
|
||||
|
||||
$statement->execute || die $DB->errstr();
|
||||
$statement->bind_columns(undef, \($num)) || die $DB->errstr();
|
||||
|
||||
while($statement->fetch) {
|
||||
return $num+1;
|
||||
}
|
||||
}
|
||||
|
||||
sub get_search
|
||||
{
|
||||
my($this, $searchstring) = @_;
|
||||
my($num, $note, $date, %res);
|
||||
if($NOTEDB::crypt_supported != 1) {
|
||||
$searchstring = "\%$searchstring\%";
|
||||
my $statement = $DB->prepare($sql_search) || die $DB->errstr();
|
||||
$statement->execute($searchstring) || die $DB->errstr();
|
||||
$statement->bind_columns(undef, \($num, $note, $date))
|
||||
|| die $DB->errstr();
|
||||
while($statement->fetch) {
|
||||
$res{$num}->{'note'} = $note;
|
||||
$res{$num}->{'date'} = $date;
|
||||
}
|
||||
}
|
||||
else {
|
||||
my %res = $this->get_all();
|
||||
foreach $num (sort { $a <=> $b } keys %res) {
|
||||
$note = ude($res{$num}->{'note'});
|
||||
$date = ude($res{$num}->{'date'});
|
||||
if($note =~ /\Q$searchstring\E/i)
|
||||
{
|
||||
$res{$num}->{'note'} = $note;
|
||||
$res{$num}->{'date'} = $date;
|
||||
}
|
||||
}
|
||||
}
|
||||
return %res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
sub set_edit
|
||||
{
|
||||
my($this, $num, $note, $date) = @_;
|
||||
|
||||
my $statement = $DB->prepare($sql_edit) || die $DB->errstr();
|
||||
|
||||
$note =~ s/'/\'/g;
|
||||
$note =~ s/\\/\\\\/g;
|
||||
$statement->execute(uen($note), uen($date), $num) || die $DB->errstr();
|
||||
}
|
||||
|
||||
|
||||
sub set_new
|
||||
{
|
||||
my($this, $num, $note, $date) = @_;
|
||||
|
||||
my $statement = $DB->prepare($sql_insertnew) || die $DB->errstr();
|
||||
|
||||
$note =~ s/'/\'/g;
|
||||
$note =~ s/\\/\\\\/g;
|
||||
$statement->execute($num, uen($note), uen($date)) || die $DB->errstr();
|
||||
}
|
||||
|
||||
|
||||
sub set_del
|
||||
{
|
||||
my($this, $num) = @_;
|
||||
my($note, $date, $T);
|
||||
|
||||
($note, $date) = $this->get_single($num);
|
||||
|
||||
return "ERROR" if ($date !~ /^\d/);
|
||||
|
||||
# delete record!
|
||||
my $statement = $DB->prepare($sql_del) || die $DB->errstr();
|
||||
$statement->execute($num) || die $DB->errstr();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
sub set_del_all
|
||||
{
|
||||
my($this) = @_;
|
||||
my $statement = $DB->prepare($sql_del_all) || die $DB->errstr();
|
||||
$statement->execute() || die $DB->errstr();
|
||||
return;
|
||||
}
|
||||
|
||||
sub set_recountnums
|
||||
{
|
||||
my $this = shift;
|
||||
my(@count, $i, $num, $setnum, $pos);
|
||||
$setnum = 1;
|
||||
$pos=0; $i=0; @count = ();
|
||||
|
||||
my $statement = $DB->prepare($sql_incrnum) || die $DB->errstr();
|
||||
$statement->execute || die $DB->errstr();
|
||||
$statement->bind_columns(undef, \($num)) || die $DB->errstr();
|
||||
# store real id's in an array!
|
||||
while($statement->fetch) {
|
||||
$count[$i] = $num;
|
||||
$i++;
|
||||
}
|
||||
|
||||
# now recount them!
|
||||
my $sub_statement = $DB->prepare($sql_setnum) || die $DB->errstr();
|
||||
for($pos=0;$pos<$i;$pos++) {
|
||||
$setnum = $pos +1;
|
||||
$sub_statement->execute($setnum,$count[$pos]) || die $DB->errstr();
|
||||
}
|
||||
}
|
||||
|
||||
sub uen
|
||||
{
|
||||
my($T);
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$T = pack("u", $cipher->encrypt($_[0]));
|
||||
};
|
||||
}
|
||||
else {
|
||||
$T = $_[0];
|
||||
}
|
||||
chomp $T;
|
||||
return $T;
|
||||
}
|
||||
|
||||
sub ude
|
||||
{
|
||||
my($T);
|
||||
if($NOTEDB::crypt_supported == 1) {
|
||||
eval {
|
||||
$T = $cipher->decrypt(unpack("u",$_[0]))
|
||||
};
|
||||
return $T;
|
||||
}
|
||||
else {
|
||||
return $_[0];
|
||||
}
|
||||
}
|
||||
|
||||
1; # keep this!
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
NOTEDB::mysql - module lib for accessing a notedb from perl
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# include the module
|
||||
use NOTEDB;
|
||||
|
||||
# create a new NOTEDB object (the last 4 params are db table/field names)
|
||||
$db = new NOTEDB("mysql","note","localhost","username","password","note","number","note","date");
|
||||
|
||||
# get a single note
|
||||
($note, $date) = $db->get_single(1);
|
||||
|
||||
# search for a certain note
|
||||
%matching_notes = $db->get_search("somewhat");
|
||||
# format of returned hash:
|
||||
#$matching_notes{$numberofnote}->{'note' => 'something', 'date' => '23.12.2000 10:33:02'}
|
||||
|
||||
# get all existing notes
|
||||
%all_notes = $db->get_all();
|
||||
# format of returnes hash like the one from get_search above
|
||||
|
||||
# get the next noteid available
|
||||
$next_num = $db->get_nextnum();
|
||||
|
||||
# recount all noteids starting by 1 (usefull after deleting one!)
|
||||
$db->set_recountnums();
|
||||
|
||||
# modify a certain note
|
||||
$db->set_edit(1, "any text", "23.12.2000 10:33:02");
|
||||
|
||||
# create a new note
|
||||
$db->set_new(5, "any new text", "23.12.2000 10:33:02");
|
||||
|
||||
# delete a certain note
|
||||
$db->set_del(5);
|
||||
|
||||
# turn on encryption. CryptMethod must be IDEA, DES or BLOWFISH
|
||||
$db->use_crypt("passphrase", "CryptMethod");
|
||||
|
||||
# turn off encryption. This is the default.
|
||||
$db->no_crypt();
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
You can use this module for accessing a note database. There are currently
|
||||
two versions of this module, one version for a SQL database and one for a
|
||||
binary file (note's own database-format).
|
||||
However, both versions provides identical interfaces, which means, you do
|
||||
not need to change your code, if you want to switch to another database format.
|
||||
|
||||
Currently, NOTEDB module is only used by note itself. But feel free to use it
|
||||
within your own project! Perhaps someone want to implement a webinterface to
|
||||
note...
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
please see the section SYNOPSIS, it says it all.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Thomas Linden <tom@daemon.de>.
|
||||
|
||||
|
||||
|
||||
=cut
|
||||
517
note-1.0.7/README
Normal file
517
note-1.0.7/README
Normal file
@@ -0,0 +1,517 @@
|
||||
note 1.0.7 by Thomas Linden, 27/06/2000
|
||||
=======================================
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
This is a small console program written in
|
||||
perl, which allows you to manage notes similar
|
||||
to programs like "knotes" from commandline.
|
||||
|
||||
There are currently three different database backends,
|
||||
which you can use with note:
|
||||
o NOTEDB::binary - this is the default backend
|
||||
and uses a binary file to store your notes.
|
||||
o NOTEDB::mysql - this backend uses a mysql
|
||||
database to store your notes. You can switch
|
||||
easily to another DBMS since this module uses
|
||||
the Perl standard module "DBI" for database-
|
||||
access. See below for more info on this topic!
|
||||
o NOTEDB::dbm - this module uses two DBM files
|
||||
for data storage and requires the module DB_FILE,
|
||||
which is part of the perl standard distribution.
|
||||
See below for more details about the DBM module.
|
||||
|
||||
|
||||
|
||||
Where to get?
|
||||
=============
|
||||
|
||||
By now at
|
||||
http://www.daemon.de/software.html
|
||||
or
|
||||
ftp://www.0c49.org/pub/scip/note/
|
||||
|
||||
You may also try your nearest tucows mirror.
|
||||
|
||||
|
||||
|
||||
|
||||
Features
|
||||
========
|
||||
|
||||
o Three different database backends, mysql(DBI), dbm, binary(bin file).
|
||||
o Commandline interface using the standard perl module
|
||||
Getopt::Long, which allows you to use short or long
|
||||
command-line options.
|
||||
o Interactive interface(pure ascii), the following functions
|
||||
are available in interactive mode: list, display, topic,
|
||||
delete, edit, help.
|
||||
o Highly confiurable using a perlish configfile ~/.noterc.
|
||||
although it is configurable it is not required, note can
|
||||
run without a configfile using useful default presets.
|
||||
o Colourized output is supported using ASCII Escape-Sequences.
|
||||
o The user can customize the color for each item.
|
||||
o Data can be stored in various different database backends,
|
||||
since all database access is excluded from the program itself
|
||||
in perl modules.
|
||||
o Notes can be deleted, edited and you can search trough your notes.
|
||||
o Notes can be categorized. Each category(topic) can contain multiple
|
||||
notes and even more sup-topics. There is no limitation about
|
||||
sub topics.
|
||||
o You can view all notes in a list and it is possible only to view
|
||||
notes under a certain topic.
|
||||
o There is a tree-view, which allows you to get an overview of your
|
||||
topic-hierarchy.
|
||||
o Notes can be encrypted using DES or IDEA algorythms and Crypt::CBC.
|
||||
o You can dump the contents of your note database into a plain text
|
||||
file, which can later be imported. Imports can be appended or it can
|
||||
overwrite an existing database (-o).
|
||||
o Note has scripting capabilities, you can create a new note by piping
|
||||
another commands output to note, you can also import a notedump from
|
||||
stdin as well es duming to stdout instead a file. Additional, there
|
||||
is an option --raw available, which prints everything out completely
|
||||
without formatting.
|
||||
o It can be installed without root-privileges.
|
||||
o Last, a while ago a user stated: "... it simply does, what it says ..."
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
You need the following things:
|
||||
o perl installed (5.004x)
|
||||
o The module IO::Seekable and Fcntl, which should be
|
||||
already installed with your perl distributuion if
|
||||
you want to use the binary database backend.
|
||||
o DBI module and DBI::mysql if you want to use the
|
||||
mysql database backend.
|
||||
o The module DB_FILE if you want to use the DBM module.
|
||||
o Getopt::Long (part of perl std ditribution)
|
||||
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Unpack the tar-ball and issue the command:
|
||||
$ perl Makefile.PL
|
||||
It will ask you a few questions about file destinations.
|
||||
The script will find itself the proper destinations for
|
||||
the files. So, if you agree with it, simply press ENTER.
|
||||
However, you may decide to use other destinations. In this
|
||||
case, enter it, when asked. This maybe usefull, if you are
|
||||
installing it in your ome-directory and if you are not root!
|
||||
|
||||
For installation instructions for the mysql database installation
|
||||
see mysql/README.
|
||||
|
||||
If want to use another SQL database, i.e. postgresql then set
|
||||
the option "DbDriver" to the name of the responding DBI-driver
|
||||
and create a symlink of this name like this:
|
||||
/usr/lib/perl5/siteperl/NOTEDB $ ln -s mysql.pm oracle.pm
|
||||
The functionality is the same, but not the name!
|
||||
|
||||
The default binary file backend does not need any special installation
|
||||
procedure, you need only to spceify a filename in your config file.
|
||||
|
||||
The DBM backend(NOTEDB::dbm) requires the existence of a directory,
|
||||
which you must specify in your config using the option "DbName".
|
||||
|
||||
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
This version of note doesn't neccessarily need
|
||||
a configuration file. But you can have one and change
|
||||
some default values. Take a look to the file config/noterc
|
||||
provided with this tarball. There are detailed instructions
|
||||
about every available parameter.
|
||||
Simply copy this file into your home-directory and name it
|
||||
.noterc
|
||||
If you decide not to use the default database backend (a binary
|
||||
file), you will *need* a configuration!
|
||||
|
||||
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
If you don't know, how to run note, try "note -h" first.
|
||||
It will tell you all available commandline options.
|
||||
|
||||
To create a new note, simply run "note". You can enter
|
||||
the note (the length is by default limited to 4096 bytes,
|
||||
which you can change from your config file if you are using
|
||||
the binary backend, therwise there is no limitation).
|
||||
End by typing a . on a line itself. note will tell you the
|
||||
number of the note.
|
||||
|
||||
If you want to view the note, type "note 1", if the notenumber
|
||||
was 1.
|
||||
|
||||
If you want to get an overview of all notes, type "note -l".
|
||||
You will get a list of all notes, containing the number,
|
||||
the first line and the creation date. If topic-support is
|
||||
turned on (which is by default), then all subtopics under the
|
||||
current topic will be displayed first.
|
||||
If you want to get a listing of all
|
||||
If you want to see the timestamps, use "-L" instead of "-l".
|
||||
Read more about topics below in the section "Topics".
|
||||
You can also specify the topic which notes you want to see:
|
||||
"-l mytopic" does the trick.
|
||||
Additional, you might want to get an overview of your topic-
|
||||
strcture. You can use the command "-t" in this case, which
|
||||
will display a tree-view of your tpic-structure. You can
|
||||
use the command "-T" if you want to see the notes under each
|
||||
topic too. "-T" will also show the number of each note.
|
||||
|
||||
To edit a certain note, type "note -e 1". It will invoke your
|
||||
editor (vi or pico). You can edit it, after saving, note
|
||||
will store the changed note to the database.
|
||||
|
||||
Of course you can drop a certain note: "note -d 1" deletes
|
||||
note number 1. If a note in the middle or the beginning of
|
||||
the database will be deleted, note will recount the other
|
||||
existent notes. For example there are 3 notes, number 1, 2
|
||||
and 3. If you delete number 2, then number 3 will become
|
||||
number 2.
|
||||
You can also make use of the extended delete-syntax:
|
||||
To delete note 1 and 2, use "-d 1,2"
|
||||
To delete note 1,2 and 3, use "-d 1-3".
|
||||
|
||||
If you cannot remember, which note you are looking for, you
|
||||
can use the search capability of note: "note -s <searchstring>".
|
||||
note will search the whole note database case insensitive for
|
||||
an occurence of this string and tell you the number and first-
|
||||
line it have.
|
||||
|
||||
Instead of using note from the commandline you can use the
|
||||
interactive mode. Run note with "note -i". If you need assistance
|
||||
type "?" or "h" at the ">" prompt. The interactive mode
|
||||
provides you the most functions of note.
|
||||
|
||||
You can also dump the contents of your note-database into a
|
||||
ASCII-textfile(-D). You can use this file later to import it into
|
||||
your note-database(-I). This is usefull, if you want quickly trans-
|
||||
fer your notes from one host to another (i.e. you could mail
|
||||
your note-dump form your office to home and import it there
|
||||
for further use).
|
||||
The dumps from the two versions of note are in the same format.
|
||||
Using dumps it is also possible to reinitialize your database. You
|
||||
can use the "-o" switch whcih causes note to overwrite your existing
|
||||
database. This is very handy if you changed heavily your config. And
|
||||
it is required, if you changed: encryption, db-driver, (binary-format)
|
||||
and the password. You can use the following command for reinitializing:
|
||||
$ note -D - | note -o -I -
|
||||
What the hell, does it?! Step by step:
|
||||
o "note -D -" creates a note-database dump and prints it out
|
||||
to stantdard output.
|
||||
o "|" this is the shell's pipe command. It takes the output
|
||||
of the left program and gives it to the right program as standard
|
||||
input.
|
||||
o "note -o -I -" imports a note-database dump from standard input
|
||||
and overwrites an existing database.
|
||||
Before you use the "-o" switch, I consider yuo to make a backup!
|
||||
|
||||
|
||||
|
||||
|
||||
Topics
|
||||
======
|
||||
|
||||
If topic-support is turned on (which is by default), the various
|
||||
notes are sorted under various topics. There is no special database
|
||||
field for the topic. Instead the topic will be stored right in the
|
||||
note.
|
||||
If the first line of your note contains some text bordered by slashes
|
||||
(or whatever you prefer, set "TopicSeparator" in your config! default is slash),
|
||||
then note will consider it as the topic of this certain note. For examle:
|
||||
/TodoList/
|
||||
If you are using topics, no data after the topic is allowed, if there
|
||||
is any text, note will consider it as a subtopic! Therefore, don't for-
|
||||
get to put a newline after the topic-line.
|
||||
|
||||
If you are in interactive mode, you can "cd" to a different note simply
|
||||
by typing it's name at the command-prompt, or you can use the well-known
|
||||
syntax "cd topic".
|
||||
The list-command will only show you notes under this topic. If you create
|
||||
a new note, it will automagically inserted under the current topic (note
|
||||
will prepend the string "/topicname/" to the text of your note).
|
||||
|
||||
You can create at any time from any point a new topic. Just create a new
|
||||
note and type the name of the new topic bordered by slashes (or TopicSeparator)
|
||||
at the first line of this note. After saving, there will be available a
|
||||
new topic with one note in it.
|
||||
|
||||
You can create as many subtopics as you like, the format is similar to a
|
||||
filesystem-path. An example, say, you want to create such a structure:
|
||||
|
||||
(root - top level)
|
||||
|
|
||||
|----test
|
||||
| |----subtopic
|
||||
| | |--note 1
|
||||
| | |--note 2
|
||||
| |
|
||||
| |--note 4
|
||||
|
|
||||
|--note 3
|
||||
|
||||
Then you may create those 4 new notes:
|
||||
--- snip ---
|
||||
/test/subtopic/
|
||||
note 1
|
||||
--- snip ---
|
||||
/test/subtopic/
|
||||
note 2
|
||||
--- snip ---
|
||||
note 3
|
||||
--- snip ---
|
||||
/test/
|
||||
note 4
|
||||
--- snip ---
|
||||
|
||||
I hope, you got the point ;-)
|
||||
|
||||
|
||||
|
||||
If a note does not contain the "magic" /topic/ construction on the first
|
||||
line, it will be listed under the "root" of note, that is the point you are
|
||||
at the startup of note.
|
||||
|
||||
You can subsequently move a note without a topic to a certain topic. Simply
|
||||
edit it and insert at the first line the above mentioned construction.
|
||||
|
||||
Note: Please don't forget the prepending and appending a slash of a topic.
|
||||
You will get strange results without it!
|
||||
|
||||
|
||||
|
||||
|
||||
Formatting of notes
|
||||
===================
|
||||
|
||||
Another very nice feature is the possibility to format the note-text (as much as
|
||||
shell allows it). First, you can use the note-internal "magic-strings" for color-
|
||||
izing. Those strings looks much like HTML:
|
||||
"<green>here is a green line of text</green> no more green."
|
||||
As you see, the beginning of another color starts with a tag(kinda) of the color
|
||||
<colorname> and ens with an end tag </colorname>.
|
||||
|
||||
The following colors are available:
|
||||
black, red, green, yellow, blue, magenta, cyan and white.
|
||||
|
||||
Beside colorizing text, you can also create bold or underlined text! If you decide
|
||||
to use this (additional) feature, you need to set the Config-Option "FormatNotes"
|
||||
to 1 which turns it on.
|
||||
Usage is very straightforward, if a word (a word is defined as some text with at least
|
||||
one space surrounded) is between a magic mark-character. Here are the available
|
||||
things, you can do:
|
||||
|
||||
bold: **word**
|
||||
underlined: __word__
|
||||
inverse: {{word}}
|
||||
|
||||
The text will be formatted using the actually note-color.
|
||||
|
||||
|
||||
|
||||
|
||||
Scripting
|
||||
=========
|
||||
|
||||
Since version 1.0.3 there are some additions which allows you to use note in
|
||||
scripts, without user-interaction. You might run a special script as cronjob,
|
||||
which adds a note under a certain topic every week. Or the like.
|
||||
|
||||
Here are the possibilies you have:
|
||||
|
||||
You can add a new note through a pipe, another commands output becomes
|
||||
note's input:
|
||||
$ cat /var/spool/news/daily | note -
|
||||
This command adds the content of a file "daily" as a new note. Note the dash.
|
||||
it stands for "Standard Input". Note will be completely silent and it will not
|
||||
ask for something.
|
||||
|
||||
Suppose you are using encryption. You might wonder, how note will get your
|
||||
passphrase? The solution: You need to set up an environment variable which
|
||||
contains the password:
|
||||
$ export NOTE_PASSWD=secret
|
||||
If the variable is present, note will not ask you for a passphrase!
|
||||
|
||||
Another thingy you might find useful is the -r (--raw) command-line flag. This
|
||||
turns note into raw mode , which means it will only print the
|
||||
data without any formatting. Raw mode is available for list and display,
|
||||
since it makes no sense, interactive mode doe not support raw mode.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Format of the notedb (binary backend)
|
||||
=====================================
|
||||
|
||||
The database where the notes are stored is a binary fixed record length file
|
||||
of the following format:
|
||||
It consists of three fixed length fields per entry. The fields
|
||||
have the following types:
|
||||
o Number: Integer (1 byte)
|
||||
o Note: String (default 1024 bytes)
|
||||
o Time: String (default 64 bytes)
|
||||
You can change the sizes of the fields "Note" and "Time" in
|
||||
the configfile "~/.noterc". If it does not exist, the above
|
||||
defaults will be used.
|
||||
If the data to be stored is smaller then the size of the field,
|
||||
it will be filled with ZERO's ("\0"). The Note and the Time
|
||||
fields will be uuencoded before storage. Of course, this is
|
||||
no security, never mind...
|
||||
|
||||
|
||||
|
||||
The note-database (mysql backend)
|
||||
=================================
|
||||
|
||||
The sql-database for the mysql version has the following design:
|
||||
+--------+---------+------+-----+---------+----------------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+--------+---------+------+-----+---------+----------------+
|
||||
| number | int(10) | | PRI | 0 | auto_increment |
|
||||
| note | text | YES | | NULL | |
|
||||
| date | text | YES | | NULL | |
|
||||
+--------+---------+------+-----+---------+----------------+
|
||||
|
||||
|
||||
|
||||
Format of the ASCII-dump file (note -D)
|
||||
=======================================
|
||||
|
||||
The dump of a note-database (if you use note -D) has the following
|
||||
format:
|
||||
|
||||
--- snip ---
|
||||
Number: 1
|
||||
Timestamp: 14.01.2000 00:25:01
|
||||
This is a sample text
|
||||
in a sample note.
|
||||
|
||||
Number: 2
|
||||
Timestamp: 14.01.2000 02:37:40
|
||||
And this is another sample
|
||||
of a note.
|
||||
--- snip ---
|
||||
|
||||
You can reimport a dump into your note-database with "note -I <file>"
|
||||
Existing notes will not overwritten, note will append the imported
|
||||
data to your note-database.
|
||||
|
||||
|
||||
|
||||
|
||||
Security
|
||||
========
|
||||
|
||||
If you are using the MySQL driver, refer to the mysql
|
||||
manual for more informations about security of mysql databases:
|
||||
http://www.mysql.org/Manual_chapter/manual_Privilege_system.html
|
||||
|
||||
If you are using notes proprietary binary driver, then
|
||||
the permission 0600 of the file "~/.notedb" is strongly required!
|
||||
|
||||
Additional, you can turn on encryption from the config file.
|
||||
Simply set UseEncryption to 1. Please note, that you need
|
||||
to decide, if you want to use encryption before the first use
|
||||
of note! If have already a note database and want to "migrate"
|
||||
to encryption, I suggest you to follow the directions in the
|
||||
file UPGRADE!
|
||||
|
||||
You can choose from different encryption algorythms. The default
|
||||
is IDEA, but DES or BLOWFISH is also possible. You need to have
|
||||
installed the following additional perl-modules on your system:
|
||||
MD5
|
||||
Crypt::IDEA
|
||||
Crypt::DES
|
||||
Crypt::CBC
|
||||
|
||||
After turning on encryption, note will ask you for a passphrase
|
||||
everytime it runs! It will *not* store this passphrase!
|
||||
So, don't forget it! Be careful!
|
||||
|
||||
Once note have encrypted some data using this passphrase, you
|
||||
cannot simply switch to another passphrase, because all data
|
||||
within the database needs to be encrypted using the same passphrase!
|
||||
If you want to change the passphrase for any reason, please read
|
||||
the file UPGRADE and follow it's directions!
|
||||
Someday I will add a "change passwd" function, which will do all
|
||||
these things for you. Someday, I said...
|
||||
For now you can use the "re-initialze database" functionality, mentioned
|
||||
earlier in the "Usage" section (at the end of the section).
|
||||
|
||||
Note: To make sure, the encrypted data can be stored properly,
|
||||
it will be uuencoded after encryption.
|
||||
|
||||
Note: *If* you forgot your passphrase and *if* you don't have
|
||||
a backup of your database without encryption, PLEASE
|
||||
don't bother me with "helpme" emails! If you don't know
|
||||
the phrase, then the data can't be decrypted. Even if it
|
||||
is possible - I am not responsible for that!
|
||||
|
||||
Note: How does note know, if the passphrase was incorrect? It uses the
|
||||
specified phrase and encodes at least one note (the first one)
|
||||
and checks if the decrypted timestamp field matches the following
|
||||
expression: "^\d+\.\d+". Translated from perl to human:
|
||||
the timestamp must begin with minimum one digit (possibly more),
|
||||
followed by one dot, followed by minimum one digit (possibly more).
|
||||
Chances are bad, that a wrong passphrase will cause a timestamp
|
||||
matching the rule above. If you have other experiences, please
|
||||
drop me a mail!
|
||||
|
||||
|
||||
Comments
|
||||
========
|
||||
|
||||
You can send any comments to Thomas Linden <tom@daemon.de>.
|
||||
If you find a bug or if you have a suggestion for improvement of the script
|
||||
feel free to send me a patch ;-)
|
||||
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
This script comes with absolutely NO WARRANTY. It is distributed under the
|
||||
terms of the GNU General Public License. Use it at your own risk :-)
|
||||
You can read the complete GPL at: http://www.gnu.org/copyleft/gpl.html
|
||||
|
||||
|
||||
|
||||
Author and Copyright
|
||||
====================
|
||||
|
||||
The author is Thomas Linden.
|
||||
note is Copyright of Thomas Linden.
|
||||
|
||||
|
||||
|
||||
|
||||
Contributors / Credits
|
||||
======================
|
||||
|
||||
Shouts to those guys who helped me to enhance note: THANKS A LOT!
|
||||
|
||||
Jens Heunemann <jens.heunemann@consol.de> - sub tree.
|
||||
Peter Palmreuther - various additions.
|
||||
|
||||
And many other people who sended bug reports, feature requests. If you feel that
|
||||
I forgot your name in this list, then please send me an email and I'll add you.
|
||||
|
||||
|
||||
|
||||
Last changed
|
||||
============
|
||||
|
||||
27/06/2000
|
||||
73
note-1.0.7/UPGRADE
Normal file
73
note-1.0.7/UPGRADE
Normal file
@@ -0,0 +1,73 @@
|
||||
1.0.5 important note upgrade information
|
||||
========================================
|
||||
|
||||
If you are upgrading from previous versions of note, you
|
||||
will need to create a new config file, since the format of
|
||||
that file has completely changed!
|
||||
|
||||
Take a look at the sample in config/noterc for details.
|
||||
|
||||
note will NOT work with an existing database and an old config.
|
||||
You have to create a new config based on your old settings.
|
||||
|
||||
|
||||
Please don't forget to make a backup of your database before
|
||||
upgrading! I am not responsible for data loss!
|
||||
|
||||
I told ya...
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Thomas Linden <tom@daemon.de>
|
||||
READ THIS FILE, IF YOU ARE UPGRADING FROM 0.9 TO 1.0.x
|
||||
======================================================
|
||||
|
||||
|
||||
In any case: BACKUP your existing note database!!!!!!!
|
||||
The format has not changed, but some default values
|
||||
(see the new config file-sample). Use this command
|
||||
to save your note database with your *old* version
|
||||
of note:
|
||||
"note -D"
|
||||
This works with both the mysql and the binary version.
|
||||
|
||||
You need to reedit your configfile. Please refer to the
|
||||
sample config in config/noterc.
|
||||
|
||||
======================================================
|
||||
|
||||
This version of note has now encryption support build in.
|
||||
If you decide to use it, you need to re-initialize your
|
||||
note database. That's why, because your current database
|
||||
is unencrypted and *if* you want to secure your data, you
|
||||
need to secure everything. That means, your existing data
|
||||
must be encrypted before you can use this new capability!
|
||||
|
||||
Follow this steps:
|
||||
o backup existing db:
|
||||
$ note -D
|
||||
o backup the db:
|
||||
$ cp .notedb .notedb.save
|
||||
or (for mysql users!):
|
||||
$ cp -r /usr/local/mysql/data/notedb ~/notedb.mysql.save
|
||||
o go into note and delete all existing notes:
|
||||
$ note -d 1-20 (or however)
|
||||
o now upgrade your note installation:
|
||||
$ perl Makefile.PL; make install
|
||||
o re-configure note. Turn $USE_CRYPT on by setting it
|
||||
to "YES".
|
||||
o re-initialize your database:
|
||||
$ note -I note.dump.2323 (or whatever)
|
||||
note will prompt you for a passphrase. It will be used
|
||||
by Crypt::CBC for encrypting your data.
|
||||
From now on, your data is encrypted. You will need the passphrase
|
||||
you set above for decrypting it! So - don't forget it!
|
||||
|
||||
======================================================
|
||||
|
||||
AGAIN: YOU HAVE BEEN WARNED! DO NOT UPGRADE WITHOUT MADE A
|
||||
BACKUP OF YOUR DATABASE! I AM NOT RESPONSIBLE IF YOU
|
||||
LOOSE DATA!
|
||||
|
||||
1
note-1.0.7/VERSION
Normal file
1
note-1.0.7/VERSION
Normal file
@@ -0,0 +1 @@
|
||||
1.0.6
|
||||
1662
note-1.0.7/bin/note
Executable file
1662
note-1.0.7/bin/note
Executable file
File diff suppressed because it is too large
Load Diff
148
note-1.0.7/config/noterc
Normal file
148
note-1.0.7/config/noterc
Normal file
@@ -0,0 +1,148 @@
|
||||
# 1.0.6 -*- sh -*-
|
||||
# This is a sample config for the note script
|
||||
# There are useful defaults set in note itself.
|
||||
#
|
||||
# Copy it to your $HOME as .noterc
|
||||
#
|
||||
# note is Copyright (c) 1999-2000 Thomas Linden.
|
||||
# You can contact me per email: <tom@daemon.de>
|
||||
#
|
||||
# comments start with #, empty lines will be ignored.
|
||||
# 1 turns an option on, 0 turns it off.
|
||||
# An option consists of an atribute-value pair separated
|
||||
# by minimum one space (more spaces and/or tabs are allowed)
|
||||
|
||||
|
||||
# Your home directory, better do not change it!
|
||||
# can be an environment variable or a path
|
||||
Home $ENV{'HOME'}
|
||||
|
||||
|
||||
# specify the path, where the NOTEDB lib directory
|
||||
# resides. This will only used if it is not
|
||||
# installed inside the perl-lib directory structure!
|
||||
LibPath /usr/local/lib
|
||||
|
||||
|
||||
# you need to decide which database backend you want
|
||||
# to use. Please refer to the corresponding documentation
|
||||
# for closer information about the certain backend!
|
||||
# Currently supported types: "binary", "dbm" or "mysql".
|
||||
# You must also edit/uncomment one section below for the
|
||||
# backend you want to use!
|
||||
DbDriver binary
|
||||
|
||||
|
||||
# backend specific settings for sql backend
|
||||
#DbHost localhost
|
||||
#DbUser you
|
||||
#DbPasswd
|
||||
#DbName mynotes
|
||||
#DbTable note
|
||||
#FieldNumber number
|
||||
#FieldNote note
|
||||
#FieldDate date
|
||||
#### specific end ###
|
||||
|
||||
|
||||
# backend specific settings for binary(default) backend
|
||||
NoteDb ~/.notedb
|
||||
# Define the maximum bytes fields can have in a
|
||||
# note-entry. Do not change MaxTimeByte to less than 64!
|
||||
|
||||
MaxNoteByte 4096
|
||||
MaxTimeByte 64
|
||||
#### specific end ###
|
||||
|
||||
|
||||
# backend specific settings for DBM backend
|
||||
# this must be an existing directory!
|
||||
#DbName /home/you/.notedbm
|
||||
#### specific end ###
|
||||
|
||||
# You can use encryption with note, that means notes and
|
||||
# timestamps will be stored encrypted. This is supported
|
||||
# by every db-backend.
|
||||
# Set to 1 to turn it on. The Default is 0 (off)
|
||||
UseEncryption 0
|
||||
|
||||
# Specify the encryption protocol. The appropriate perl
|
||||
# module needs to be installed. Possible velues are
|
||||
# IDEA, DES or BLOWFISH, the default is IDEA.
|
||||
CryptMethod IDEA
|
||||
|
||||
|
||||
# You can run note always in interactive mode by simply
|
||||
# typing "note". Set this option to 1 to turn it on.
|
||||
# The default is 0 (off).
|
||||
AlwaysInteractive 0
|
||||
|
||||
|
||||
# In interactive mode, note issues a list command if you
|
||||
# simply hit enter. By turning this on, it will issue a
|
||||
# longlist command instead if you hit just enter.
|
||||
# The default is 0 (off)
|
||||
DefaultLong 0
|
||||
|
||||
|
||||
|
||||
# You can use an external editor everytime from note instead
|
||||
# of STDIN for creating new notes. Set to 1 to turn it on.
|
||||
# The default is 0 (off).
|
||||
AlwaysEditor 0
|
||||
|
||||
|
||||
# uncomment and edit it, if you want to use another
|
||||
# editor than the default $EDITOR or as fallback vi.
|
||||
#PreferredEditor emacs
|
||||
|
||||
|
||||
# If you dont prefer that note updates the timestamp of a
|
||||
# note after editing, turn this on. It will
|
||||
# keep the original timestamp if this option is set.
|
||||
# The default is 0(off), to turn it on set to 1.
|
||||
KeepTimeStamp 0
|
||||
|
||||
|
||||
# You can specify your own topic separator here.
|
||||
# the default topic separator is a normal slash: "/"
|
||||
# see README for details about topics!
|
||||
TopicSeparator /
|
||||
|
||||
|
||||
# The maximum width for displaying a note, in CHARS.
|
||||
# Depends on your screen-size. You can set it to
|
||||
# "auto", if you wish that note sould determine the
|
||||
# available size, but it experimental, be aware!
|
||||
MaxLen 30
|
||||
|
||||
|
||||
# note can use colors for output, set this option to
|
||||
# 1, if you don't want it, or if your terminal does
|
||||
# not support it, set to 0. The default is 1 (on).
|
||||
UseColors 1
|
||||
|
||||
|
||||
# Color-definitions of the various items. Will only
|
||||
# take effect, if "UseColors" is turned on!
|
||||
BorderColor BLACK
|
||||
NumberColor blue
|
||||
NoteColor green
|
||||
TimeColor black
|
||||
TopicColor BLACK
|
||||
# The following colors are available:
|
||||
# black, red, green, yellow, blue, magenta, cyan and white.
|
||||
# for bold color write it uppercase (BLACK will be bold black)
|
||||
# for underlined color append an underscore (blue_ will be underlined blue)
|
||||
# for inverted color append an "I" (greenI will be inverted green)
|
||||
|
||||
|
||||
# Additional to colors, you can also do a little bit of formatting your
|
||||
# notes (bold, underlined, italic), see README!
|
||||
# You need to set this Option to 1, if you decide to make use of this
|
||||
# capabily
|
||||
FormatText 1
|
||||
|
||||
# That's all about it for now.
|
||||
# If you still have any questiosn, please feel free to contact
|
||||
# me by email: Thomas Linden <tom@daemon.de>
|
||||
62
note-1.0.7/mysql/README
Normal file
62
note-1.0.7/mysql/README
Normal file
@@ -0,0 +1,62 @@
|
||||
README for the mysql database installation for note
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
You need the following things:
|
||||
o perl installed (5.004x)
|
||||
o mysql database installed and running
|
||||
o Mysql perlmodule (you can find it on
|
||||
http://www.mysql.org) PLEASE NOTE:
|
||||
It needs the Module "Mysql". The install.sh
|
||||
script will install it for you directly from
|
||||
CPAN if you like. Newer versions
|
||||
are DBI, which you can also use to access
|
||||
mysql databases. If you want to use it, you
|
||||
have to rewrite the program. Please let me
|
||||
know, if you did it :-)
|
||||
o permissions to create a new database and
|
||||
to write data to this database.
|
||||
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
First, make sure all these things above are ok.
|
||||
You can use the script "install.sh" to create a new
|
||||
database and the table structure. You might edit
|
||||
the script before running it.
|
||||
|
||||
If you are getting trouble, i.e. if you have not the
|
||||
required permissions to do that, please make sure,
|
||||
you can.
|
||||
As user root, you have to give your user the
|
||||
neccessary permissions. Please refer to the mysql
|
||||
documentation, how to do that.
|
||||
After that repeat the step above.
|
||||
|
||||
You can find a sample config file within the subdirectory
|
||||
"config" named noterc. There are some special values
|
||||
which you can use to connect to a different database
|
||||
then the default.
|
||||
install.sh will create the following database:
|
||||
name: user_note
|
||||
Maintable: note
|
||||
Number: number(int 10)
|
||||
Note: note(text)
|
||||
Date: date(text)
|
||||
|
||||
You can use the file "permissions" as a template for
|
||||
modifying a users permissions to her database. Please
|
||||
note, that there are different version of mysql out
|
||||
there with different access privilege systems, which
|
||||
are not compatible, refer to the documentation shipped
|
||||
with your mysql installation to learn, how many fields
|
||||
are available and what they are for.
|
||||
|
||||
You may also take a look to:
|
||||
http://www.mysql.org/Manual_chapter/manual_Privilege_system.html
|
||||
|
||||
|
||||
This should be all.
|
||||
33
note-1.0.7/mysql/install.sh
Executable file
33
note-1.0.7/mysql/install.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
# installs note
|
||||
# This is the installer for the mysql version only!
|
||||
|
||||
echo "Welcome to note `cat VERSION` installation."
|
||||
echo "the install script will ask you a view questions,"
|
||||
echo "make sure to answer them correctly!"
|
||||
echo
|
||||
|
||||
/bin/echo -n "creating the note database..."
|
||||
NAME="_note"
|
||||
DBNAME="$USER$NAME"
|
||||
echo "DBNAME=$DBNAME"
|
||||
mysqladmin create $DBNAME
|
||||
echo "done."
|
||||
/bin/echo -n "creating the table structure using defaults..."
|
||||
mysql $DBNAME < sql
|
||||
|
||||
echo "Shall I try to install the required MySQL driver from CPAN?"
|
||||
read YESNO
|
||||
|
||||
case $YESNO in
|
||||
"y" | "Y")
|
||||
if [ $UID != 0 ] ; then
|
||||
echo "You should be root for that!"
|
||||
exit
|
||||
fi
|
||||
perl -MCPAN -e shell cpan> install mysql
|
||||
;;
|
||||
esac
|
||||
echo "done."
|
||||
|
||||
|
||||
2
note-1.0.7/mysql/permissions
Normal file
2
note-1.0.7/mysql/permissions
Normal file
@@ -0,0 +1,2 @@
|
||||
insert into user values
|
||||
('localhost','','','Y','Y','Y','Y','Y','Y','N','N','N','N','N','N','N','Y');
|
||||
8
note-1.0.7/mysql/sql
Normal file
8
note-1.0.7/mysql/sql
Normal file
@@ -0,0 +1,8 @@
|
||||
CREATE TABLE note (
|
||||
number int(10) DEFAULT '0' NOT NULL auto_increment,
|
||||
note text,
|
||||
date text,
|
||||
PRIMARY KEY (number)
|
||||
);
|
||||
# sample grant statement:
|
||||
#GRANT ALL PRIVILEGES ON tom_note TO tom@localhost IDENTIFIED BY 'password';
|
||||
1639
note-1.0.7/note
Executable file
1639
note-1.0.7/note
Executable file
File diff suppressed because it is too large
Load Diff
55
note-1.0.7/stresstest.sh
Executable file
55
note-1.0.7/stresstest.sh
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/bin/sh
|
||||
# create notes with topics which then represents the corresponding
|
||||
# directory structure. Depending on how many files the directory
|
||||
# contains, the resulting note-database may become very large.
|
||||
# It will then have thousands of notes!
|
||||
STARTDIR=$1
|
||||
case $STARTDIR in
|
||||
"")
|
||||
echo "usage: stresstest.sh <directory>"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
LOCPFAD=`echo $STARTDIR | grep "^[a-zA-Z0-9.]"`
|
||||
case $LOCPFAD in
|
||||
"")
|
||||
#echo nix
|
||||
;;
|
||||
*)
|
||||
STARTDIR=`echo $STARTDIR | sed 's/^\.*//'`
|
||||
STARTDIR="`pwd`/$STARTDIR"
|
||||
STARTDIR=`echo $STARTDIR | sed 's/\/\//\//g'`
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
stress ()
|
||||
{
|
||||
FILES=""
|
||||
for file in `ls $1|sort`
|
||||
do
|
||||
echo "$1/$file"
|
||||
if [ -d "$1/$file" ] ; then
|
||||
stress "$1/$file"
|
||||
else
|
||||
#echo "$1/" > /tmp/$$
|
||||
#echo $file >> /tmp/$$
|
||||
#`cat /tmp/$$ | note -`
|
||||
FILES="$FILES $file"
|
||||
fi
|
||||
done
|
||||
echo "$1/" > /tmp/$$
|
||||
echo "$FILES" >> /tmp/$$
|
||||
case $FILES in
|
||||
"")
|
||||
;;
|
||||
*)
|
||||
RES=`cat /tmp/$$ | note -`
|
||||
;;
|
||||
esac
|
||||
FILES=""
|
||||
}
|
||||
|
||||
stress $STARTDIR
|
||||
Reference in New Issue
Block a user