mirror of
https://codeberg.org/scip/note.git
synced 2025-12-17 04:31:02 +01:00
-
This commit is contained in:
4
README
4
README
@@ -1,4 +1,4 @@
|
|||||||
note 1.0.7 by Thomas Linden, 27/06/2000
|
note 1.0.8 by Thomas Linden, 11/07/2000
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
@@ -514,4 +514,4 @@ Contributors / Credits
|
|||||||
Last changed
|
Last changed
|
||||||
============
|
============
|
||||||
|
|
||||||
27/06/2000
|
11/07/2000
|
||||||
|
|||||||
57
bin/note
57
bin/note
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
# $Id: note,v 1.29 2000/06/25 20:13:23 scip Exp scip $
|
# $Id: note,v 1.2 2000/07/09 22:10:03 zarahg Exp $
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# note - console notes management with database and encryption support.
|
# note - console notes management with database and encryption support.
|
||||||
@@ -95,7 +95,7 @@ my (
|
|||||||
#
|
#
|
||||||
# internals
|
# internals
|
||||||
#
|
#
|
||||||
$TYPE, $mode, $NoteKey,
|
$TYPE, $mode, $NoteKey, $TempDir,
|
||||||
$version, $number, $CurTopic, $CurDepth, $WantTopic,
|
$version, $number, $CurTopic, $CurDepth, $WantTopic,
|
||||||
$sizeof, %TP, $TreeType, $ListType, $SetTitle,
|
$sizeof, %TP, $TreeType, $ListType, $SetTitle,
|
||||||
@ArgTopics, $key, $typedef, @NumBlock, $has_nothing,
|
@ArgTopics, $key, $typedef, @NumBlock, $has_nothing,
|
||||||
@@ -126,13 +126,13 @@ $TIME_COLOR = "black";
|
|||||||
$TOPIC_COLOR = "BLACK";
|
$TOPIC_COLOR = "BLACK";
|
||||||
$TOPIC = 1;
|
$TOPIC = 1;
|
||||||
$TopicSep = '/';
|
$TopicSep = '/';
|
||||||
$version = "1.0.7";
|
$version = "1.0.8";
|
||||||
if($TOPIC)
|
if($TOPIC)
|
||||||
{
|
{
|
||||||
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
||||||
}
|
}
|
||||||
$USE_CRYPT = "NO";
|
$USE_CRYPT = "NO";
|
||||||
|
$TempDir = "/tmp";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -320,12 +320,6 @@ if($DEFAULT_LIST eq "LONG")
|
|||||||
# *if* loading of the config was successful, try to load the
|
# *if* loading of the config was successful, try to load the
|
||||||
# configured database backend. Currently supported: mysql and binary.
|
# configured database backend. Currently supported: mysql and binary.
|
||||||
push @INC, $libpath;
|
push @INC, $libpath;
|
||||||
#if($dbdriver eq "mysql") {
|
|
||||||
# eval {
|
|
||||||
# require NOTEDB::mysql;
|
|
||||||
# $db = new NOTEDB($dbdriver, $dbname, $dbhost, $dbuser, $dbpasswd, $table, $fnum, $fnote, $fdate);
|
|
||||||
# }
|
|
||||||
#}
|
|
||||||
if($dbdriver eq "binary") {
|
if($dbdriver eq "binary") {
|
||||||
eval {
|
eval {
|
||||||
require NOTEDB::binary;
|
require NOTEDB::binary;
|
||||||
@@ -361,12 +355,8 @@ $_TOPICC = "</$TOPIC_COLOR>";
|
|||||||
|
|
||||||
$NoteKey = $TopicSep . "notes" . $TopicSep;
|
$NoteKey = $TopicSep . "notes" . $TopicSep;
|
||||||
|
|
||||||
|
# default permissions on new files (tmp)
|
||||||
if($ListType ne "LONG" && $mode ne "interactive")
|
umask 077;
|
||||||
{
|
|
||||||
#$maxlen += $timelen; # no time will be displayed!
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# check if the user wants to use encryption:
|
# check if the user wants to use encryption:
|
||||||
if($USE_CRYPT eq "YES" && $NOTEDB::crypt_supported == 1) {
|
if($USE_CRYPT eq "YES" && $NOTEDB::crypt_supported == 1) {
|
||||||
@@ -640,11 +630,13 @@ sub new
|
|||||||
$date = &getdate;
|
$date = &getdate;
|
||||||
if($ALWAYS_EDIT eq "YES")
|
if($ALWAYS_EDIT eq "YES")
|
||||||
{
|
{
|
||||||
$TEMP = "/tmp/note.$$";
|
$TEMP = &gettemp;
|
||||||
# let the user edit it...
|
# let the user edit it...
|
||||||
$editor = &find_editor;
|
$editor = &find_editor;
|
||||||
if($editor)
|
if($editor)
|
||||||
{
|
{
|
||||||
|
system "touch", $TEMP && die $!;
|
||||||
|
system "chattr", "+s", $TEMP; # ignore errors, since only on ext2 supported!
|
||||||
system $editor, $TEMP;
|
system $editor, $TEMP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -750,10 +742,12 @@ sub edit
|
|||||||
print "no note with that number found!\n\n";
|
print "no note with that number found!\n\n";
|
||||||
exit(0) if($mode ne "interactive");
|
exit(0) if($mode ne "interactive");
|
||||||
}
|
}
|
||||||
$TEMP = "/tmp/note.$USER.$$";
|
$TEMP = &gettemp;
|
||||||
open NOTE,">$TEMP" or die "Could not open $TEMP\n";
|
open NOTE,">$TEMP" or die "Could not open $TEMP\n";
|
||||||
select NOTE;
|
select NOTE;
|
||||||
|
|
||||||
|
system "chattr", "+s", $TEMP; # ignore errors, like in new()
|
||||||
|
|
||||||
print $note;
|
print $note;
|
||||||
close NOTE;
|
close NOTE;
|
||||||
select STDOUT;
|
select STDOUT;
|
||||||
@@ -777,7 +771,7 @@ sub edit
|
|||||||
chomp $note;
|
chomp $note;
|
||||||
close NOTE;
|
close NOTE;
|
||||||
|
|
||||||
unlink $TEMP;
|
unlink $TEMP || die $!;
|
||||||
|
|
||||||
if($KEEP_TIMESTAMP eq "YES")
|
if($KEEP_TIMESTAMP eq "YES")
|
||||||
{
|
{
|
||||||
@@ -1387,6 +1381,24 @@ sub getdate
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub gettemp
|
||||||
|
{
|
||||||
|
my($random, @range);
|
||||||
|
@range=('0'..'9','a'..'z','A'..'Z');
|
||||||
|
srand(time||$$);
|
||||||
|
for (0..10) {
|
||||||
|
$random .= $range[rand(int($#range)+1)];
|
||||||
|
}
|
||||||
|
my $tempfile = $TempDir . "/" . $USER . "." . $random;
|
||||||
|
if (-e $tempfile) {
|
||||||
|
# avoid race conditions!
|
||||||
|
unlink $tempfile;
|
||||||
|
}
|
||||||
|
return $tempfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub help
|
sub help
|
||||||
{
|
{
|
||||||
my $B = "<blackI>";
|
my $B = "<blackI>";
|
||||||
@@ -1558,6 +1570,7 @@ sub getconfig
|
|||||||
$TOPIC_COLOR = $value if (/^TopicColor/);
|
$TOPIC_COLOR = $value if (/^TopicColor/);
|
||||||
$PreferredEditor = $value if (/^PreferredEditor/);
|
$PreferredEditor = $value if (/^PreferredEditor/);
|
||||||
$FormatText = $value if (/^FormatText/);
|
$FormatText = $value if (/^FormatText/);
|
||||||
|
$TempDir = $value if (/^TempDirectory/);
|
||||||
}
|
}
|
||||||
chomp $home;
|
chomp $home;
|
||||||
$home =~ s/\/*$//; # cut eventually / at the end
|
$home =~ s/\/*$//; # cut eventually / at the end
|
||||||
@@ -1576,6 +1589,12 @@ sub getconfig
|
|||||||
__END__
|
__END__
|
||||||
#
|
#
|
||||||
# $Log: note,v $
|
# $Log: note,v $
|
||||||
|
# Revision 1.2 2000/07/09 22:10:03 zarahg
|
||||||
|
# tempfile management more secure now. new option TempDirectory. thx to Donald.
|
||||||
|
#
|
||||||
|
# Revision 1.30 2000/07/09 21:59:48 scip
|
||||||
|
# secure temp files
|
||||||
|
#
|
||||||
# Revision 1.29 2000/06/25 20:13:23 scip
|
# Revision 1.29 2000/06/25 20:13:23 scip
|
||||||
# *** empty log message ***
|
# *** empty log message ***
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
This is the binary version of note.
|
|
||||||
|
|
||||||
all informations are available in the
|
|
||||||
main README file!
|
|
||||||
1317
binary-db/note
1317
binary-db/note
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
# 1.0.6 -*- sh -*-
|
# 1.0.8 -*- sh -*-
|
||||||
# This is a sample config for the note script
|
# This is a sample config for the note script
|
||||||
# There are useful defaults set in note itself.
|
# There are useful defaults set in note itself.
|
||||||
#
|
#
|
||||||
@@ -68,7 +68,7 @@ UseEncryption 0
|
|||||||
|
|
||||||
# Specify the encryption protocol. The appropriate perl
|
# Specify the encryption protocol. The appropriate perl
|
||||||
# module needs to be installed. Possible velues are
|
# module needs to be installed. Possible velues are
|
||||||
# IDEA, DES or BLOWFISH, the default is IDEA.
|
# IDEA, DES or Blowfish, the default is IDEA.
|
||||||
CryptMethod IDEA
|
CryptMethod IDEA
|
||||||
|
|
||||||
|
|
||||||
@@ -143,6 +143,16 @@ TopicColor BLACK
|
|||||||
# capabily
|
# capabily
|
||||||
FormatText 1
|
FormatText 1
|
||||||
|
|
||||||
|
|
||||||
|
# You might specify your own directory for temporary files.
|
||||||
|
# note needs to create some temp files during editing of notes.
|
||||||
|
# You could protect this directory using the command: chmod 700 directory.
|
||||||
|
# The default is /tmp
|
||||||
|
TempDirectory /home/you/tmp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# That's all about it for now.
|
# That's all about it for now.
|
||||||
# If you still have any questiosn, please feel free to contact
|
# If you still have any questiosn, please feel free to contact
|
||||||
# me by email: Thomas Linden <tom@daemon.de>
|
# me by email: Thomas Linden <tom@daemon.de>
|
||||||
|
|||||||
1225
mysql-db/note
1225
mysql-db/note
File diff suppressed because it is too large
Load Diff
1246
mysql-db/note.mysql
1246
mysql-db/note.mysql
File diff suppressed because it is too large
Load Diff
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>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
README for the mysql version of note
|
README for the mysql database installation for note
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
============
|
============
|
||||||
@@ -28,7 +28,7 @@ Installation
|
|||||||
database and the table structure. You might edit
|
database and the table structure. You might edit
|
||||||
the script before running it.
|
the script before running it.
|
||||||
|
|
||||||
If you getting trouble, i.e. if you have not the
|
If you are getting trouble, i.e. if you have not the
|
||||||
required permissions to do that, please make sure,
|
required permissions to do that, please make sure,
|
||||||
you can.
|
you can.
|
||||||
As user root, you have to give your user the
|
As user root, you have to give your user the
|
||||||
@@ -36,8 +36,6 @@ Installation
|
|||||||
documentation, how to do that.
|
documentation, how to do that.
|
||||||
After that repeat the step above.
|
After that repeat the step above.
|
||||||
|
|
||||||
As root, copy the perl-script "note" to /usr/bin.
|
|
||||||
|
|
||||||
You can find a sample config file within the subdirectory
|
You can find a sample config file within the subdirectory
|
||||||
"config" named noterc. There are some special values
|
"config" named noterc. There are some special values
|
||||||
which you can use to connect to a different database
|
which you can use to connect to a different database
|
||||||
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
|
||||||
71
noterc
71
noterc
@@ -1,71 +0,0 @@
|
|||||||
# 0.3 (binary database)
|
|
||||||
# This is a sample config for the note script
|
|
||||||
# You do not need it, if you keep the values
|
|
||||||
# here unchanged.
|
|
||||||
#
|
|
||||||
# Copy it to your $HOME as .noterc
|
|
||||||
#
|
|
||||||
# IMPORTANT:
|
|
||||||
# If you previously used note 0.1 or 0.2 then
|
|
||||||
# you will already have such a file. This file
|
|
||||||
# is not compatible with the one for note 0.3!
|
|
||||||
# You have to delete it and to create a new one.
|
|
||||||
#
|
|
||||||
# There is no more a mysql database needed. If
|
|
||||||
# want to stay with your note-mysql-database,
|
|
||||||
# use note 0.2.
|
|
||||||
#
|
|
||||||
# This config has to be valid perl code. Therefore
|
|
||||||
# please be carefull!
|
|
||||||
#
|
|
||||||
# You can contact me per email: <tom@daemon.de>
|
|
||||||
#
|
|
||||||
# Thomas Linden, 01/2000
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Define the maximum bytes a note can have in a
|
|
||||||
# note-entry.
|
|
||||||
$MAX_NOTE = 1024;
|
|
||||||
|
|
||||||
|
|
||||||
# Define the maximum bytes a timestamp can have
|
|
||||||
# in a note-entry.
|
|
||||||
$MAX_TIME = 64;
|
|
||||||
|
|
||||||
|
|
||||||
# The maximum width for displaying a note.
|
|
||||||
$maxlen = 30;
|
|
||||||
|
|
||||||
|
|
||||||
# Your home, better do not change it!
|
|
||||||
$HOME = `echo \$HOME`;
|
|
||||||
chomp $HOME;
|
|
||||||
|
|
||||||
|
|
||||||
# The location of the note-database. If it does
|
|
||||||
# not exist, it will be created.
|
|
||||||
$NOTEDB = $HOME . "/.notedb";
|
|
||||||
|
|
||||||
|
|
||||||
# if $COLOR equals NO, then everything will be
|
|
||||||
# displayed with your default colors (mostly black)
|
|
||||||
$COLOR = "NO";
|
|
||||||
|
|
||||||
|
|
||||||
# Color-definitions of the various fields. Will be
|
|
||||||
# ignored if $COLOR = "NO".
|
|
||||||
$BORDER_COLOR = "BLACK"; # Borders
|
|
||||||
$NUM_COLOR = "blue"; # Note number
|
|
||||||
$NOTE_COLOR = "magenta"; # The note itself
|
|
||||||
$TIME_COLOR = "black"; # The time
|
|
||||||
|
|
||||||
# The following colors are available:
|
|
||||||
# black, red, green, yellow, blue, magenta, cyan and white.
|
|
||||||
# It will be bold if it is uppercase.
|
|
||||||
# You can append an underscore, if you like it underscored,
|
|
||||||
# ie: blue_
|
|
||||||
# Or, you can append an "I", if you like it inverted
|
|
||||||
|
|
||||||
# keep this "1;" please!
|
|
||||||
1;
|
|
||||||
Reference in New Issue
Block a user