CHANGED: does no more use the external touch command to create a new

file, use perls open() instead.
CHANGED:        excluded some of the help texts from the usage message and the
                interactive help command to a manpage.
ADDED:          new commandline flag "--encrypt" which one can use to encrypt
                the mysql database password. This will be decrypted before
                connecting to the db. There is also a new config file option
                "encrypt_passwd" which indicates an encrypted db-password.
ADDED:          another new config option "ShortCd", which can be set to "yes"
                or 1 and if set, then a command like "cd 13" would jump
                directly to the topic of the note with the number 13.
ADDED:          now you can at any time cd back to the "root" of the
                topic-structure using the command "cd /".
CHANGED:        mysql.pm does now only do a table-lock on single write
                accesses, no more on the whole session. This allows one to
                access the same db twice or more.
FIXED:          Changed README and Changelog for readability on 80 by 25
                displays. And changed indentation of the note script itself.
ADDED:          NOTEDB.pm - a generic module, which holds some methods, which
                are used by binary.pm, mysql.pm and dbm.pm.
ADDED:          NOTEDB.pm generate_search(), which allows one to
                use AND, OR and various combinations of them using ( and ).
ADDED:          a search does now return the 2nd line of a note if a matching
                note's first line is a topic.
CHANGED:        use "unshift" instead of push to add $libpath to @INC.
ADDED:          a new feature, Caching of notes. supported by binary.pm and
                mysql.pm. To turn it on, one need to set "Cache" in the config
                to a true value.
This commit is contained in:
TLINDEN
2012-02-10 20:22:49 +01:00
parent 788902c69d
commit 9cf564ffe4
67 changed files with 6310 additions and 1604 deletions

3
0x49/CVS/Entries Normal file
View File

@@ -0,0 +1,3 @@
/index.html/1.1.1.1/Sat Jul 1 14:40:50 2000//
D/contents////
D/images////

1
0x49/CVS/Repository Normal file
View File

@@ -0,0 +1 @@
NOTE/0x49

1
0x49/CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

14
0x49/contents/CVS/Entries Normal file
View File

@@ -0,0 +1,14 @@
/about/1.1.1.1/Sat Jul 1 14:40:50 2000//
/deutsch/1.1.1.1/Sat Jul 1 14:40:50 2000//
/index/1.1.1.1/Sat Jul 1 14:40:50 2000//
/installation/1.1.1.1/Sat Jul 1 14:40:50 2000//
/license/1.1.1.1/Sat Jul 1 14:40:50 2000//
/screenshots/1.1.1.1/Sat Jul 1 14:40:50 2000//
/upgrade/1.1.1.1/Sat Jul 1 14:40:50 2000//
/usage/1.1.1.1/Sat Jul 1 14:40:50 2000//
/cvs/1.2/Sat Jul 1 14:55:31 2000//
/menu/1.2/Sat Jul 1 14:58:41 2000//
/changelog/1.2/Sun Jul 9 22:16:25 2000//
/version/1.2/Sun Jul 9 22:16:43 2000//
/download/1.4/Sun Jul 9 23:03:12 2000//
D

View File

@@ -0,0 +1 @@
NOTE/0x49/contents

1
0x49/contents/CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

13
0x49/contents/about Normal file
View File

@@ -0,0 +1,13 @@
<h2>about note and this page</h2>
<p>
The author of note is Thomas Linden. if you have any questions, suggestions, votes or even flames, please feel free to
send me an <a href="tom at daemon.de">E-mail</a>!
<p>
This page is hosted by <a href="http://www.consol.de">ConSol* GmbH, Germany</a> - THANKS A LOT!
<p>
Powered by <a href="http://www.engelschall.com/sw/eperl/">ePerl</a> and <a href="http://www.vim.org">vi</a>.
<p>
<a href="http://www.kernel.org"><img src="images/linux.gif" border=0></a>
<p>
Logo created with:<br><a href="http://www.cooltext.com"><img src="http://www.cooltext.com/images/gfx_cool.gif" border=0></a>

294
0x49/contents/changelog Normal file
View File

@@ -0,0 +1,294 @@
<h2>changelog</h2>
<hr><ul>
1.0.8:
<li><b>FIXED</b>:<br>
typo in noterc shipped with package may caused confusion (BLOWFISH
instead of Blowfish).
<li><b>CHANGED</b>:<br>
changed the way note manages temporary filez. It uses now a random
string instead of just it's own PID. It does also change it's umask
to 077 and, if applicable (on ext2 filesystems) issues "chattr +s"
which will cause the ext2 inodes to be zero'd after file deletion.
<li><b>ADDED</b>:<br>
A new config option allows the user to specify her own temp-directory.
The default is still /tmp.
</ul>
<hr><ul>
1.0.7:
<li><b>FIXED</b>:<br> there was a bug in the search expression, use now \Q and \E.
<li><b>ADDED</b>:<br> --config <file> allows one to use another config than the default.
</ul>
<hr><ul>
1.0.6:
<li><b>FIXED</b>:<br> Forgot "PreferredEditor" config-option in the new config format.
<li><b>FIXED</b>:<br> the interactive "cd .." command has ignored the presence of a
"DefaultLong" setting(and search too)... thx to Peter.
<li><b>CHANGED</b>:<br> Optimized a little bit the output routine, now it is better to read.
<li><b>ADDED</b>:<br> sub format and appropriate config-option for text formatting capabilities.
<li><b>CHANGED</b>:<br> changed getconfig regexp, which allows now also to use Option = Param.
<li><b>FIXED</b>:<br> was not possible to override config-options, which are set by default to
something.
<li><b>ADDED</b>:<br> 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 ..
</ul><hr><ul>
1.0.5:
<li><b>FIXED</b>:<br> the T (and t respectively) printed nothing out since 1.0.3! It does
it now again...
<li><b>ADDED</b>:<br> a new database backend added, NOTEDB::dbm, which uses DBM files for
storage.
<li><b>FIXED</b>:<br> &display-tree returns now, if there is no note, otherwise it
would die because of an undefined refernce.
<li><b>CHANGED</b>:<br> 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.
<li><b>CHANGED</b>:<br> 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.
<li><b>FIXED</b>:<br> Removed Getopt::Long option "bundling", causes errors with perl
5.6.0 and is not senceful.
<li><b>FIXED</b>:<br> 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 ;-(((
<li><b>ADDED</b>:<br> 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
<li><b>FIXED</b>:<br> sub search prints now an appropriate error-message in |==> Peter Palmreuther
case no searchstring was given instead of jumping to | thanks a lot!
usage. |
<li><b>CHANGED</b>:<br> Changed the text in the interactive help to reflect |
changes of verion 1.0.3 (t and T). /
</ul><hr><ul>
1.0.4:
<li><b>CHANGED</b>:<br> Moved from @ARGV-parsing to Getopt::Long, adding options is now
much easier and I do now understand my own code ;-)
<li><b>ADDED</b>:<br> --raw, the "Raw Mode", which turns off any formatting of output.
</ul><hr><ul>
1.0.3:
<li><b>ADDED</b>:<br> "-" works also for --dump, but in the other direction. It causes
note to dump to standard output instead into a file.
<li><b>ADDED</b>:<br> 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!
<li><b>ADDED</b>:<br> 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.
<li><b>CHANGED</b>:<br> the interactive help screen is now coloured.
<li><b>ADDED</b>:<br> -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.
<li><b>ADDED</b>:<br> the long-tree-view (-T) displays now also the note-number of each
note.
</ul><hr><ul>
1.0.2:
<li><b>ADDED</b>:<br> Topic-Tree overview command (-t or -T).
<li><b>ADDED</b>:<br> Enhanced list command in interactive mode, you can now specify
a topic which notes you want to see.
<li><b>CHANGED</b>:<br> updated the help and usage sections to reflect the additions above.
</ul><hr><ul>
1.0.1:
<li><b>FIXED</b>:<br> fixed bug in NOTEDB::mysql, which caused note t store NULL values
in db, if encryption was off. A really dump failure :-(
</ul><hr><ul>
1.0.0:
<li><b>CHANGED</b>:<br> removed install.#!/bin/sh. use now a Makefile for installation.
<li><b>ADDED</b>:<br> Encryption support. Note can now encrypt notes using IDEA
or DES as encryption-protocols(symetric).
</ul><hr><ul>
0.9:
<li><b>FIXED</b>:<br> There were many new bugs after my last changes *grrrrr*. fixed.
Works now properly, with both backends!
<li><b>FIXED</b>:<br> 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...).
<li><b>CHANGED</b>:<br> 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.
<li><b>FIXED</b>:<br> 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.
<li><b>FIXED</b>:<br> fixed the function set_recountnum in NITEDB::mysql, it was also
incorrect :-((( 0.8 seemed to be a very bad early alpha...........
<li><b>FIXED</b>:<br> there was a bug in NOTEDB::binary which caused not to recount note
numbers after deleting one :-(
</ul><hr><ul>
0.8:
<li><b>ADDED</b>:<br> NOTEDB::binary. so now 0.8 is ready for shipping !
<li><b>FIXED</b>:<br> regexp bug fixed. It was only possible to delete 2 items together
separated by comma ("d 1,2,3,4" deleted only 1,2!).
<li><b>ADDED</b>:<br> 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.
<li><b>FIXED</b>:<br> the previously added feature "cd <topic>" didn't really work :-(
<li><b>ADDED</b>:<br> 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.
<li><b>CHANGED</b>:<br> 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.
<li><b>CHANGED</b>:<br> Locking. The db-table will now be locked before note accesses it.
<li><b>FIXED</b>:<br> width of listings is now always the same independent of the string-
length of a certain note.
</ul><hr><ul>
0.7:
<li><b>ADDED</b>:<br> one can now use the unix-like "cd" command to change to another
topic, thus use "cd topicname" instead just typing "topicname"!
<li><b>FIXED</b>:<br> 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".
<li><b>ADDED</b>:<br> 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.
</ul><hr><ul>
0.6:
<li><b>FIXED</b>:<br> oops - the new suptopic feature confused the commandline-mode of
note! quickly corrected! so subtopics also available from command-
line.
<li><b>FIXED</b>:<br> a small bug fiyed, it was impossible to use -D or -I from command-
line, if $ALWAYS_INT was turned on, now it is.
<li><b>FIXED</b>:<br> 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.
<li><b>CHANGED</b>:<br> 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!
<li><b>CHANGED</b>:<br> use perl buildin localtime() function instead of
GNU date, which is possibly not installed on every target
system (i.e. win32), therefore better portability!
<li><b>CHANGED</b>:<br> use now the strict module
<li><b>ADDED</b>:<br> Support for subtopics added (and sub-sub-..-topics).
<li><b>CHANGED</b>:<br> Removed the "T" command, it is now obsolete.
<li><b>CHANGED</b>:<br> behavior of list command changed, now shows topics as well as
notes under the current topic(if there are some).
<li><b>CHANGED</b>:<br> The ".." command takes you now one level higher in your topic-
structure.
<li><b>ADDED</b>:<br> A new config option $PreferredEditor, which you can use to
specify your own choice of editor.
<li><b>FIXED</b>:<br> A bug at line 769 causing single note where smaller than note-
listings
</ul><hr><ul>
0.5:
<li><b>ADDED</b>:<br> Topic support(requested). You can sort the various notes under
different topics now.
<li><b>FIXED</b>:<br> There was another bug, which caused the list command to display
the notes with a too high value of $maxlen.
</ul><hr><ul>
0.4.2:
<li><b>ADDED</b>:<br> If run in interactive mode, note will at first do a list command.
<li><b>FIXED</b>:<br> A bug caused note to save bogus timestamps after editing a note.
<li><b>CHANGED</b>:<br> It does no more print 3 newlines before the menu in interactive mode.
<li><b>FIXED</b>:<br> Some more vars will be resetted during each loop in interactive mode.
$ListType.
</ul><hr><ul>
0.4.1:
<li><b>ADDED</b>:<br> The install.#!/bin/sh script for the mysql version is no able to install the
required Mysql module directly from CPAN, thanks to David A. Bandel!
<li><b>FIXED</b>:<br> The mysql version did not display notes (i.e.: "note 3" did nothing)
<li><b>CHANGED</b>:<br> 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...
<li><b>CHANGED</b>:<br> The format of the dump-output has been changed.
<li><b>ADDED</b>:<br> It is now possible to import previously dumped notes into the notedb
(dumps from both versions are compatible with each other)
<li><b>FIXED</b>:<br> 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).
</ul><hr><ul>
0.4:
<li><b>CHANGED</b>:<br> 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.
<li><b>ADDED</b>:<br> Dump to textfile capability. Later on I want to dump it into a
palm readable format, any help is welcome!
<li><b>ADDED</b>:<br> interactive mode.
<li><b>CHANGED</b>:<br> Better modularity, better code.
<li><b>CHANGED</b>:<br> note can now run without the need of a config file. If does not
exist, it will try to work with default values.
<li><b>ADDED</b>:<br> 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")
</ul><hr><ul>
0.3:
<li><b>CHANGED</b>:<br> it uses no more a mysql database, but a binary file instead.
This is much faster!
<li><b>ADDED</b>:<br> note can display the notes with colors, it is turned off by default
</ul><hr><ul>
0.2:
<li><b>FIXED</b>:<br> now any occurence of ' will be masked with \' before storage
to the mysql database.
<li><b>FIXED</b>:<br> now numbers of notes will be recounted, if one delete one note,
so the list of notes will everytime start with 1,2,3,...
<li><b>CHANGED</b>:<br> the look of the list output has been changed, similar to a table
</ul><hr>
0.1:
INITIAL RELEASE.

20
0x49/contents/cvs Normal file
View File

@@ -0,0 +1,20 @@
<h2>CVS</h2>
<p>
The whole note source tree is now maintained via CVS at <a href="http://sourceforge.net">sourceforge.net</a>.
You can browse the repository via the web:
<br>
<a target="newspot" href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/NOTE/?cvsroot=htnews">http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/NOTE/?cvsroot=htnews</a>.
<p>
Or you can use the <b>cvs</b> command:
<br>
<pre>
cvs -d:pserver:anonymous@cvs.htnews.sourceforge.net:/cvsroot/htnews login
cvs -z3 -d:pserver:anonymous@cvs.htnews.sourceforge.net:/cvsroot/htnews co NOTE
</pre>
<br>
When prompted for a password for anonymous, simply press the Enter key.

19
0x49/contents/deutsch Normal file
View File

@@ -0,0 +1,19 @@
<h2>Hinweise f&uuml;r deutsche Besucher</h2>
note ist ein Konsolenprogram, mit dem man einfach Notizen verwalten
kann, <20>hnlich wie bei "knotes". Es ist in Perl geschrieben. Note
verwendet externe (mitgelieferte!) Module als Speicher-Backend, um
die Daten zu speichern. Momentan ist ein mysql-Modul dabei, sowie
ein "binary"-Modul, note's eigenes Datenformat und seit 1.0.5 auch ein
DBM modul. Das mysql Modul verwendet Perls Standard Modul DBI
und ist damit f<>r alle g<>ngigen DBMS verwendbar.
Seit Version 1.0.0 wird Verschl<68>sselung unterst<73>tzt(IDEA oder DES),
man kann also durchaus auch sensible Daten speichern.
<p>
Die Dokumentation f&uuml;r <b>note</b> liegt leider nur in englisch vor. Trotzdem m&uuml;ssen Deutsche
nicht ganz leer ausgehen :-)
<p>
Hannes Lau hat auf seiner <a href="http://home.debitel.net/user/hannes.lau/Linux-Text.htm#Notizen">Homepage</a> eine kurze Beschreibung bereitgestellt (Tausend Dank!).
<p>
Eine ausf<73>hrliche Beschreibung des Programmes ist ausserdem im
<a href="http://www.linux-magazin.de">LinuxMagazin 5/2000</a> S. 106 erschienen (allerdings basierend auf einer
<EFBFBD>lteren Version...)!<br> *stolzsei* ;-)

17
0x49/contents/download Normal file
View File

@@ -0,0 +1,17 @@
<h2>downloads</h2>
<p>
Here you can find the <b>note</b> package for free download. Follow the installation instructions in the
README file provided with the package or read the <a href="install.html">online version</a>.
<p>
newest: <a href="ftp://ftp.daemon.de/pub/note/note-1.0.8.tar.gz">note-1.0.8.tar.gz</a><br>
<a href="ftp://ftp.daemon.de/pub/note/note-1.0.7.tar.gz">note-1.0.7.tar.gz</a><br>
<a href="ftp://ftp.daemon.de/pub/note/note-1.0.6.tar.gz">note-1.0.6.tar.gz</a><br>
<a href="ftp://ftp.daemon.de/pub/note/note-1.0.5.tar.gz">note-1.0.5.tar.gz</a><br>
<a href="ftp://ftp.daemon.de/pub/note/README.txt">read the README</a><br>
<a href="ftp://ftp.daemon.de/pub/note/Changelog.txt">read the Changelog</a><br>
<hr>
If you encounter any problems with the site above, try to use one of the following mirrors:<p>
<a href="ftp://www.0x49.org/pub/scip/note/">ftp://www.0x49.org/pub/scip/note/</a>
<br>
<a href="http://sourceforge.net/project/filelist.php?group_id=656">http://sourceforge.net/project/filelist.php?group_id=656</a>

49
0x49/contents/index Normal file
View File

@@ -0,0 +1,49 @@
<h3>welcome to the homepage of <I>note</I> by <a href="mailto: tom at daemon.de">Thomas Linden</a></h3>
<I>note</I> is a small console program written in perl, which allows
you to manage notes similar to programs like "knotes" from
commandline. Note can use different database-backends for
notes-storage. It ships with a DBI-based mysql-module(which
can also be used for other by DBI supported DBMS) and another
module, which uses a binary file for storage and a DBM module.<br>
Note supports since version 1.0.0 encryption(IDEA or DES)!<p>
Here is a brief list of it's features:
<ul><li> Three different database backends, mysql(DBI), dbm, binary(bin file).
</li><li> Commandline interface using the standard perl module
Getopt::Long, which allows you to use short or long
command-line options.
</li><li> Interactive interface(pure ascii), the following functions
are available in interactive mode: list, display, topic,
delete, edit, help.
</li><li> 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.
</li><li> Colourized output is supported using ASCII Escape-Sequences.
</li><li> The user can customize the color for each item.
</li><li> Data can be stored in various different database backends,
since all database access is excluded from the program itself
in perl modules.
</li><li> Notes can be deleted, edited and you can search trough your notes.
</li><li> Notes can be categorized. Each category(topic) can contain multiple
notes and even more sup-topics. There is no limitation about
sub topics.
</li><li> You can view all notes in a list and it is possible only to view
notes under a certain topic.
</li><li> There is a tree-view, which allows you to get an overview of your
topic-hierarchy.
</li><li> Notes can be encrypted using DES or IDEA algorythms and Crypt::CBC.
</li><li> 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
</li><li>verwrite an existing database (-o).
</li><li> 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.
</li><li> It can be installed without root-privileges.
</li><li> Last, a while ago a user stated: "... it simply does, what it says ..."
</li></ul>
<p>
<I>note</I> is released under the terms of the <a href="license.html"><b>Gnu Public License(GPL)</b></a>
and is therefore free Software.

View File

@@ -0,0 +1,42 @@
<h2>installation of note</h2>
<p>
Unpack the tar-ball and issue the command:<br>
$ perl Makefile.PL<br>
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!
<p>
For installation instructions for the mysql database installation
see mysql/README.
<p>
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:
<br> /usr/lib/perl5/siteperl/NOTEDB $ ln -s mysql.pm oracle.pm
<br> The functionality is the same, but not the name!
<p>
The default binary file backend does not need any special installation
procedure, you need only to spceify a filename in your config file.
<p>
The DBM backend(NOTEDB::dbm) requires the existence of a directory,
which you must specify in your config using the option "DbName".
<p>
<b>Configuration</b>
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.
<br> 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!

342
0x49/contents/license Normal file
View File

@@ -0,0 +1,342 @@
<pre>
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
</pre>

19
0x49/contents/menu Normal file
View File

@@ -0,0 +1,19 @@
<img src="images/note.jpg" border=0>
<HR SIZE="1" NOSHADE="1">
&nbsp; <a href="index.html">home</a><p>
&nbsp; <a href="installation.html">installation</a><p>
&nbsp; <a href="usage.html">usage</a><p>
&nbsp; <a href="upgrade.html">upgrade</a><p>
&nbsp; <a href="changelog.html">changelog</a><p>
&nbsp; <a href="download.html">download</a><p>
&nbsp; <a href="license.html">license</a><p>
&nbsp; <a href="cvs.html">cvs</a><p>
&nbsp; <a href="screenshots.html">screenshots</a><p>
&nbsp; <a href="deutsch.html">deutsch</a><p>
&nbsp; <a href="about.html">about</a><p>
<HR SIZE="1" NOSHADE="1">
<center><font size=-2>last updated 02.07.2000</font>
<p>
<img src="images/anybrow.gif" alt="best viewed with any browser">
</center>

16
0x49/contents/screenshots Normal file
View File

@@ -0,0 +1,16 @@
<h2>screenshots</h2>
Yes there are also screenshots of note available :-)
<br>
Simply click on a tumbnail to enlarge the image!
<p>
<a href="images/note.gif">Linux</a>
<br><a href="images/note-linux.gif"><img src="images/note_linux_small.png" border=0></a>
<p>
<a href="images/note-win32.gif">Win32</a>
<br><a href="images/note-win32.gif"><img src="images/note_win32_small.png" border=0></a>
<p>
<a href="images/note-be.jpg">BeOS</a>
<br><a href="images/note-be.jpg"><img src="images/note_be_small.png" border=0></a>
<p>
and finally here a <a href="http://home.debitel.net/user/hannes.lau/Desktop.htm">desktop</a> of a user with note running.

45
0x49/contents/upgrade Normal file
View File

@@ -0,0 +1,45 @@
<h2>upgrade from previous version of note to 1.0.x</h2>
<p>
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:<br>
"note -D"<br>
This works with both the mysql and the binary version.
<p>
You need to reedit your configfile. Please refer to the
sample config in config/noterc.
<p>
<hr>
<p>
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!
<p>
Follow this steps:
<ul>
<li> backup existing db:
<br> $ note -D
<li> backup the db:
<br> $ cp .notedb .notedb.save
or (for mysql users!):
<br> $ cp -r /usr/local/mysql/data/notedb ~/notedb.mysql.save
<li> go into note and delete all existing notes:
<br> $ note -d 1-20 (or however)
<li> now upgrade your note installation:
<br> $ perl Makefile.PL; make install
<li> re-configure note. Turn $USE_CRYPT on by setting it
to "YES".
<li> re-initialize your database:
<br> $ note -I note.dump.2323 (or whatever)<br>
note will prompt you for a passphrase. It will be used
by Crypt::CBC for encrypting your data.
</ul>
From now on, your data is encrypted. You will need the passphrase
you set above for decrypting it! So - don't forget it!

350
0x49/contents/usage Normal file
View File

@@ -0,0 +1,350 @@
<h2>usage of note</h2>
<p>
<a href="#desc">1. Description</a><p>
<a href="#topics">2. Topics</a><p>
<a href="#format">3. Formatting of note-text</a><p>
<a href="#script">4. Scripting</a><p>
<a href="#dbformat">5. Binary DB</a><p>
<a href="#sqlformat">6. Mysql DB</a><p>
<a href="#dumpformat">7. Dump Format</a><p>
<a href="#security">8. Security</a><p>
<hr>
<p>
<a name="#desc">
<h4>Decription</h4>
If you don't know, how to run note, try "note -h" first.
It will tell you all available commandline options.
<p>
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.
<p>
If you want to view the note, type "note 1", if the notenumber
was 1.
<p>
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.
<br> 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.
<br> 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.
<p>
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.
<p>
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.
<br> 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".
<p>
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.
<p>
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.
<p>
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).
<br> 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:
<br> $ note -D - | note -o -I -
<br> What the hell, does it?! Step by step:
<ul>
<li> "note -D -" creates a note-database dump and prints it out
to stantdard output.
<li> "|" 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.
<li> "note -o -I -" imports a note-database dump from standard input
and overwrites an existing database.
</ul>
Before you use the "-o" switch, I consider yuo to make a backup!
<p>
<a href="#top">top</a><p><p><a name="topics">
<h4>Topics</h4>
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.
<br> 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:
<br> /TodoList/
<br> 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.
<p>
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".
<br> 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).
<p>
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.
<p>
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:
<p>
<pre>
(root - top level)
|
|----test
| |----subtopic
| | |--note 1
| | |--note 2
| |
| |--note 4
|
|--note 3
</pre>
<p>
Then you may create those 4 new notes:
<br>
<pre>
--- snip ---
/test/subtopic/
note 1
--- snip ---
/test/subtopic/
note 2
--- snip ---
note 3
--- snip ---
/test/
note 4
--- snip ---
</pre><br>
I hope, you got the point ;-)
<p>
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.
<p>
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.
<p>
Note: Please don't forget the prepending and appending a slash of a topic.
You will get strange results without it!
<p>
<a href="#top">top</a><p><p><a name="format">
<h4>Formatting of notes</h4>
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:
i<br> "<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>.
<p>
The following colors are available:
black, red, green, yellow, blue, magenta, cyan and white.
<p>
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.
<br> 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:
<pre>
bold: **word**
underlined: __word__
inverse: {{word}}
</pre>
The text will be formatted using the actually note-color.
<p>
<a href="#top">top</a><p><p><a name="script">
<h4>Scripting</h4>
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.
<p>
Here are the possibilies you have:
<p>
You can add a new note through a pipe, another commands output becomes
note's input:
<br> $ cat /var/spool/news/daily | note -
<br> 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.
<p>
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:
<br> $ export NOTE_PASSWD=secret
<br> If the variable is present, note will not ask you for a passphrase!
<p>
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.
<p>
<a href="#top">top</a><p><p><a name="dbformat">
<h4>Format of the notedb (binary backend)</h4>
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:
<ul>
<li> Number: Integer (1 byte)
<li> Note: String (default 1024 bytes)
<li> Time: String (default 64 bytes)
</ul>
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.
<br> 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...
<p>
<a href="#top">top</a><p><p><a name="sqlformat">
<h4>The note-database (mysql backend)</h4>
The sql-database for the mysql version has the following design:
<pre>
+--------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+----------------+
| number | int(10) | | PRI | 0 | auto_increment |
| note | text | YES | | NULL | |
| date | text | YES | | NULL | |
+--------+---------+------+-----+---------+----------------+
</pre>
<p>
<a href="#top">top</a><p><p><a name="dumpformat">
<h4>Format of the ASCII-dump file (note -D)</h4>
The dump of a note-database (if you use note -D) has the following
format:
<pre>
--- 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 ---
</pre>
<p> 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.
<p>
<a href="#top">top</a><p><p><a name="security">
<h4>Security</h4>
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
<p>
If you are using notes proprietary binary driver, then
the permission 0600 of the file "~/.notedb" is strongly required!
<p>
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!
<p>
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:
<ul>
<li> MD5
<li> Crypt::IDEA
<li> Crypt::DES
<li> Crypt::CBC
</ul>
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!
<p>
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!
<br> 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).
<p>
Note: To make sure, the encrypted data can be stored properly,
it will be uuencoded after encryption.
<p>
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!
<p>
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!

1
0x49/contents/version Normal file
View File

@@ -0,0 +1 @@
1.0.8

14
0x49/images/CVS/Entries Normal file
View File

@@ -0,0 +1,14 @@
/anybrow.gif/1.1.1.1/Sat Jul 1 14:40:51 2000//
/button.gif/1.1.1.1/Sat Jul 1 14:40:51 2000//
/gproc.jpg/1.1.1.1/Sat Jul 1 14:40:51 2000//
/linux.gif/1.1.1.1/Sat Jul 1 14:40:51 2000//
/msfree.gif/1.1.1.1/Sat Jul 1 14:40:51 2000//
/note-be.jpg/1.1.1.1/Sat Jul 1 14:40:52 2000//
/note-linux.gif/1.1.1.1/Sat Jul 1 14:40:51 2000//
/note-win32.gif/1.1.1.1/Sat Jul 1 14:40:51 2000//
/note.jpg/1.1.1.1/Sat Jul 1 14:40:52 2000//
/note_be_small.png/1.1.1.1/Sat Jul 1 14:40:51 2000//
/note_linux_small.png/1.1.1.1/Sat Jul 1 14:40:51 2000//
/note_win32_small.png/1.1.1.1/Sat Jul 1 14:40:51 2000//
/notes.png/1.1.1.1/Sat Jul 1 14:40:51 2000//
D

View File

@@ -0,0 +1 @@
NOTE/0x49/images

1
0x49/images/CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

BIN
0x49/images/anybrow.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
0x49/images/button.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

BIN
0x49/images/gproc.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
0x49/images/linux.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
0x49/images/msfree.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
0x49/images/note-be.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

BIN
0x49/images/note-linux.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
0x49/images/note-win32.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
0x49/images/note.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
0x49/images/notes.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

86
0x49/index.html Normal file
View File

@@ -0,0 +1,86 @@
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<?
# ePerl
my $me = $0;
$me =~ s(^.*/)();
my $src = $me;
$src =~ s/\.html$//;
?>
<html>
<head>
<meta name="description" content="www.0x49.org - the home of the console note program">
<meta name="keywords" content="note, notes, notizen, console, perl, textmode, opensource, free">
<meta name="author" content="Thomas Linden">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>www.0x49.org - the note homepage (<? print $src ?>)</title>
<!--
THE CONTENTS OF THESE WEBPAGES ARE PROTECTED BY COPYRIGHT LAW!
COPYRIGHT (C) 2000 THOMAS LINDEN, MUNICH.
ALL RIGHTS RESERVED.
-->
</head>
<body link="#000099" vlink="#000099">
<br>
<TABLE cellspacing="0" cellpadding="0" width="100%" border="0" bgcolor="cornflowerblue">
<TR>
<TD>
<TABLE cellspacing="2" cellpadding="2" width="100%" border="0" bgcolor="#FFFFFF">
<TR BGCOLOR="cornflowerblue" align="center">
<TD colspan=2 align=right>
<SPAN class=titlebar><font face="helvetica" color="#fffff"><b>note
<?
# ePerl
open VERSION, "contents/version" || die $!;
my $version = <VERSION>;
close VERSION;
chomp $version;
print $version;
?>
homepage</b></font></SPAN>
</TD>
</TR>
<TR align=left>
<TD width=15% bgcolor="beige" valign="top">
<font face="helvetica" >
<?
# ePerl
open MENU, "contents/menu" || die $!;
my @menu = <MENU>;
close MENU;
foreach (@menu) {
if(/\Q$me\E/) {
print "<b>$_</b>";
}
else {
print;
}
}
?>
</font>
<p>&nbsp;</p>
</TD>
<TD valign="top">
<TABLE WIDTH="90%" ALIGN="CENTER" VALIGN="TOP">
<TR>
<TD>
<?
# ePerl
$src = "contents/$src";
open SRC, "$src" || die $!;
my @lines = <SRC>;
print @lines;
close SRC;
?>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
<P>
</body>
</html>

12
CVS/Entries Normal file
View File

@@ -0,0 +1,12 @@
/Makefile.PL/1.1.1.1/Sat Jul 1 14:40:50 2000//
/UPGRADE/1.1.1.1/Sat Jul 1 14:40:50 2000//
/note/1.1.1.1/Sat Jul 1 14:40:50 2000//
/stresstest.sh/1.1.1.1/Sat Jul 1 14:40:50 2000//
D/0x49////
D/NOTEDB////
D/bin////
D/config////
D/mysql////
/Changelog/1.2/Sun Jul 9 22:08:40 2000//
/VERSION/1.2/Sun Jul 9 22:10:55 2000//
/README/1.2/Sun Jul 9 22:37:00 2000//

1
CVS/Repository Normal file
View File

@@ -0,0 +1 @@
NOTE

1
CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

272
Changelog
View File

@@ -1,127 +1,188 @@
================================================================================== ================================================================================
1.1.0:
CHANGED: does no more use the external touch command to create a new
file, use perls open() instead.
CHANGED: excluded some of the help texts from the usage message and the
interactive help command to a manpage.
ADDED: new commandline flag "--encrypt" which one can use to encrypt
the mysql database password. This will be decrypted before
connecting to the db. There is also a new config file option
"encrypt_passwd" which indicates an encrypted db-password.
ADDED: another new config option "ShortCd", which can be set to "yes"
or 1 and if set, then a command like "cd 13" would jump
directly to the topic of the note with the number 13.
ADDED: now you can at any time cd back to the "root" of the
topic-structure using the command "cd /".
CHANGED: mysql.pm does now only do a table-lock on single write
accesses, no more on the whole session. This allows one to
access the same db twice or more.
FIXED: Changed README and Changelog for readability on 80 by 25
displays. And changed indentation of the note script itself.
ADDED: NOTEDB.pm - a generic module, which holds some methods, which
are used by binary.pm, mysql.pm and dbm.pm.
ADDED: NOTEDB.pm generate_search(), which allows one to
use AND, OR and various combinations of them using ( and ).
ADDED: a search does now return the 2nd line of a note if a matching
note's first line is a topic.
CHANGED: use "unshift" instead of push to add $libpath to @INC.
ADDED: a new feature, Caching of notes. supported by binary.pm and
mysql.pm. To turn it on, one need to set "Cache" in the config
to a true value.
================================================================================
1.0.9: jumped directly to 1.1.0, too many additions.
================================================================================
1.0.8:
FIXED: typo in noterc shipped with package may caused confusion
(BLOWFISH instead of Blowfish).
CHANGED: changed the way note manages temporary filez. It uses now a
random string instead of just it's own PID. It does also change
it's umask to 077 and, if applicable (on ext2 filesystems)
issues "chattr +s" which will cause the ext2 inodes to be
zero'd after file deletion.
ADDED: A new config option allows the user to specify her own
temp-directory. The default is still /tmp.
================================================================================
1.0.7: 1.0.7:
FIXED: there was a bug in the search expression, use now \Q and \E. 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. ADDED: --config <file> allows one to use another config than the
default.
================================================================================== ================================================================================
1.0.6: 1.0.6:
FIXED: there were some odd bugs in commandline parsing, some options were unavailable. FIXED: there were some odd bugs in commandline parsing, some options
were unavailable.
FIXED: Forgot "PreferredEditor" config-option in the new config format. FIXED: Forgot "PreferredEditor" config-option in the new config format.
FIXED: the interactive "cd .." command has ignored the presence of a FIXED: the interactive "cd .." command has ignored the presence of a
"DefaultLong" setting(and search too)... thx to Peter. "DefaultLong" setting(and search too)... thx to Peter.
CHANGED: Optimized a little bit the output routine, now it is better to read. CHANGED: Optimized a little bit the output routine, now it is better to
ADDED: sub format and appropriate config-option for text formatting capabilities. read.
CHANGED: changed getconfig regexp, which allows now also to use Option = Param. ADDED: sub format and appropriate config-option for text formatting
FIXED: was not possible to override config-options, which are set by default to capabilities.
something. CHANGED: changed getconfig regexp, which allows now also to use
ADDED: note chacks now, if a database os actually really encrypted and exits with Option = Param.
an error if it s and the user turned off encryption. This protects her from FIXED: was not possible to override config-options, which are set by
destroying it's own database .. default to something.
ADDED: note checks 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: 1.0.5:
FIXED: the T (and t respectively) printed nothing out since 1.0.3! It does FIXED: the T (and t respectively) printed nothing out since 1.0.3!
it now again... It does it now again...
ADDED: a new database backend added, NOTEDB::dbm, which uses DBM files for ADDED: a new database backend added, NOTEDB::dbm, which uses DBM
storage. files for storage.
FIXED: &display-tree returns now, if there is no note, otherwise it FIXED: &display-tree returns now, if there is no note, otherwise it
would die because of an undefined refernce. would die because of an undefined refernce.
CHANGED: Changed the config file format completely. It is now no more a perl CHANGED: Changed the config file format completely. It is now no more
file, instead it is a simple plain text file which note parses. a perl file, instead it is a simple plain text file which note
CHANGED: Changed the way, note loads it database backend. It uses now the parses.
$dbdriver variable as module-name, which makes it possible easily CHANGED: Changed the way, note loads it database backend. It uses now
to write your own backend without the need to change note itself. 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 FIXED: Removed Getopt::Long option "bundling", causes errors with perl
5.6.0 and is not senceful. 5.6.0 and is not senceful.
FIXED: Added the Getopt::Long option "no_ignore_case". In 1.0.4 options FIXED: Added the Getopt::Long option "no_ignore_case". In 1.0.4 options
were case insensitive causing -i to be interpreted as --import were case insensitive causing -i to be interpreted as --import
instead of --interactive ;-((( 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). /
================================================================================== Thanks to Peter Palmreuter for the following fixed/additions:
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.
FIXED: sub search prints now an appropriate error-message in
case no searchstring was given instead of jumping to
usage.
CHANGED: Changed the text in the interactive help to reflect
changes of verion 1.0.3 (t and T).
================================================================================
1.0.4: 1.0.4:
CHANGED: Moved from @ARGV-parsing to Getopt::Long, adding options is now CHANGED: Moved from @ARGV-parsing to Getopt::Long, adding options is now
much easier and I do now understand my own code ;-) much easier and I do now understand my own code ;-)
ADDED: --raw, the "Raw Mode", which turns off any formatting of output. ADDED: --raw, the "Raw Mode", which turns off any formatting of output.
================================================================================== ================================================================================
1.0.3: 1.0.3:
ADDED: "-" works also for --dump, but in the other direction. It causes ADDED: "-" works also for --dump, but in the other direction. It causes
note to dump to standard output instead into a file. note to dump to standard output instead into a file.
ADDED: you can specify - as filename for use with --import and if you want ADDED: you can specify - as filename for use with --import and if you
to create a new note. "-" stands for standardinput and it allows you want to create a new note. "-" stands for standardinput and
tp pipe another commands output to note! it allows you to pipe another commands output to note!
ADDED: you can now use an environment variable for the passphrase (when using ADDED: you can now use an environment variable for the passphrase
encryption). If it is presen, note will not ask for a passphrase. This (when using encryption). If it is present, note will not ask
is very usefull in comination with the addition above, for use in for a passphrase. This is very useful in comination with the
scripts. addition above, for use in scripts.
CHANGED: the interactive help screen is now coloured. CHANGED: the interactive help screen is now coloured.
ADDED: -o commandline switch, which causes note to overwrite an existing ADDED: -o commandline switch, which causes note to overwrite an
database when importing data from a previous dump. Very handy if existing database when importing data from a previous dump.
you want to re-initialize your db, i.e. if you changed the format. Very handy if you want to re-initialize your db, i.e. if you
ADDED: the long-tree-view (-T) displays now also the note-number of each changed the format.
note. ADDED: the long-tree-view (-T) displays now also the note-number of
each note.
================================================================================== ================================================================================
1.0.2: 1.0.2:
ADDED: Topic-Tree overview command (-t or -T). ADDED: Topic-Tree overview command (-t or -T).
ADDED: Enhanced list command in interactive mode, you can now specify ADDED: Enhanced list command in interactive mode, you can now specify
a topic which notes you want to see. a topic which notes you want to see.
CHANGED: updated the help and usage sections to reflect the additions above. CHANGED: updated the help and usage sections to reflect the additions
above.
================================================================================== ================================================================================
1.0.1: 1.0.1:
FIXED: fixed bug in NOTEDB::mysql, which caused note t store NULL values FIXED: fixed bug in NOTEDB::mysql, which caused note to store NULL
in db, if encryption was off. A really dump failure :-( values in db, if encryption was off. A really dump failure :-(
================================================================================== ================================================================================
1.0.0: 1.0.0:
CHANGED: removed install.sh. use now a Makefile for installation. CHANGED: removed install.sh. use now a Makefile for installation.
ADDED: Encryption support. Note can now encrypt notes using IDEA ADDED: Encryption support. Note can now encrypt notes using IDEA
or DES as encryption-protocols(symetric). or DES as encryption-protocols(symetric).
================================================================================== ================================================================================
0.9: 0.9:
FIXED: There were many new bugs after my last changes *grrrrr*. fixed. FIXED: There were many new bugs after my last changes *grrrrr*. fixed.
Works now properly, with both backends! Works now properly, with both backends!
FIXED: and another bug: recounting of numbers did not take care about FIXED: and another bug: recounting of numbers did not take care about
the existing order! If you deleted note #12, then note #13 became the existing order! If you deleted note #12, then note #13
not neccessarily #12! Instead it becames any other number (kind of became not neccessarily #12! Instead it becames any other
randomly...). number (kind of randomly...).
CHANGED: NOTEDB::binary set_del function changed, it does no more require CHANGED: NOTEDB::binary set_del function changed, it does no more require
a temporary file for number recount. Instead it uses get_all and a temporary file for number recount. Instead it uses get_all and
stores all notes in RAM and then rewrites the database. 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 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- (number) which is not useful since we dont have support for
increment from all database backends. autoincrement from all database backends.
FIXED: fixed the function set_recountnum in NITEDB::mysql, it was also FIXED: fixed the function set_recountnum in NITEDB::mysql, it was also
incorrect :-((( 0.8 seemed to be a very bad early alpha........... 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 FIXED: there was a bug in NOTEDB::binary which caused not to recount
numbers after deleting one :-( note numbers after deleting one :-(
================================================================================== ================================================================================
0.8: 0.8:
ADDED: NOTEDB::binary. so now 0.8 is ready for shipping ! ADDED: NOTEDB::binary. so now 0.8 is ready for shipping !
FIXED: regexp bug fixed. It was only possible to delete 2 items together 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!). separated by comma ("d 1,2,3,4" deleted only 1,2!).
ADDED: Some new config options which reflects the new module structure. ADDED: Some new config options which reflects the new module structure.
So you can change your database backend without the need to So you can change your database backend without the need to
@@ -135,40 +196,42 @@ ADDED: NOTEDB::mysql added. Perlmodule, which I will use within
CHANGED: The SQL code does not use Mysql.pm anymore. Instead it is coded 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 using the more portable DBI module. This allows one easily to
switch to anther database, which is supported by DBI. switch to anther database, which is supported by DBI.
CHANGED: Locking. The db-table will now be locked before note accesses it. CHANGED: Locking. The db-table will now be locked before note accesses
FIXED: width of listings is now always the same independent of the string- it.
length of a certain note. FIXED: width of listings is now always the same independent of the
stringlength of a certain note.
================================================================================== ================================================================================
0.7: 0.7:
ADDED: one can now use the unix-like "cd" command to change to another ADDED: one can now use the unix-like "cd" command to change to another
topic, thus use "cd topicname" instead just typing "topicname"! topic, thus use "cd topicname" instead just typing "topicname"!
FIXED: there was a smal regex bug which maked it impossible to use such FIXED: there was a smal regex bug which maked it impossible to use
topics: "4 test", in such a case note just displayed note number 4 such topics: "4 test", in such a case note just displayed note
instead of cd'ing to topic "4 test". number 4 instead of cd'ing to topic "4 test".
ADDED: a new config option "$KEEP_TIMESTAMP" allows a user to disable ADDED: a new config option "$KEEP_TIMESTAMP" allows a user to disable
note's default behavior of updating the timestamp of a note after note's default behavior of updating the timestamp of a note
editing it. after editing it.
================================================================================== ================================================================================
0.6: 0.6:
FIXED: oops - the new suptopic feature confused the commandline-mode of FIXED: oops - the new suptopic feature confused the commandline-mode of
note! quickly corrected! so subtopics also available from command- note! quickly corrected! so subtopics also available from
line. commandline.
FIXED: a small bug fiyed, it was impossible to use -D or -I from command- FIXED: a small bug fiyed, it was impossible to use -D or -I from
line, if $ALWAYS_INT was turned on, now it is. commandline, if $ALWAYS_INT was turned on, now it is.
FIXED: fixed problem with local/global variable $time, which confused FIXED: fixed problem with local/global variable $time, which confused
the script under certain circumstances, now $time is no more global, the script under certain circumstances, now $time is no more
it will be read in (using &getdate) locally by &new and &edit. global, it will be read in (using &getdate) locally by &new
and &edit.
CHANGED: The Topic separator is no longer hardcoded, one can customize CHANGED: The Topic separator is no longer hardcoded, one can customize
it using the $TopicSep variable, the default is now /, the backslash it using the $TopicSep variable, the default is now /, the
will no mor work! backslash will no more work!
CHANGED: use perl buildin localtime() function instead of CHANGED: use perl buildin localtime() function instead of
GNU date, which is possibly not installed on every target GNU date, which is possibly not installed on every target
system (i.e. win32), therefore better portability! system (i.e. win32), therefore better portability!
@@ -186,7 +249,7 @@ FIXED: A bug at line 769 causing single note where smaller than note-
================================================================================== ================================================================================
@@ -198,47 +261,53 @@ FIXED: There was another bug, which caused the list command to display
================================================================================== ================================================================================
0.4.2: 0.4.2:
ADDED: If run in interactive mode, note will at first do a list command. 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. 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. CHANGED: It does no more print 3 newlines before the menu in interactive
FIXED: Some more vars will be resetted during each loop in interactive mode. mode.
$ListType. FIXED: Some more vars will be resetted during each loop in interactive
mode. $ListType.
================================================================================== ================================================================================
0.4.1: 0.4.1:
ADDED: The install.sh script for the mysql version is no able to install the ADDED: The install.sh script for the mysql version is no able to
required Mysql module directly from CPAN, thanks to David A. Bandel! install the required Mysql module directly from CPAN, thanks
FIXED: The mysql version did not display notes (i.e.: "note 3" did nothing) to David A. Bandel!
CHANGED: Again, the sql-format of the mysql database has been changed. Now FIXED: The mysql version did not display notes (i.e.: "note 3" did
there are only 3 fields, the number filed is the primary key, the id nothing)
field in previous versions was a waste of diskspace... 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. CHANGED: The format of the dump-output has been changed.
ADDED: It is now possible to import previously dumped notes into the notedb ADDED: It is now possible to import previously dumped notes into the
notedb
(dumps from both versions are compatible with each other) (dumps from both versions are compatible with each other)
FIXED: the function num_bereich() had a bug, which caused ot to ignore under 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). some circumstances one number (i.e. "note -d 4-13" did nothing).
================================================================================== ================================================================================
0.4: 0.4:
CHANGED: ok, mysql support is back again (upon requests). therefore there CHANGED: ok, mysql support is back again (upon requests). therefore there
are two different version of the script in the same time with 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 the same features, one for mysql and the other one for the
database. binary database.
ADDED: Dump to textfile capability. Later on I want to dump it into a ADDED: Dump to textfile capability. Later on I want to dump it into a
palm readable format, any help is welcome! palm readable format, any help is welcome!
ADDED: interactive mode. ADDED: interactive mode.
@@ -250,17 +319,18 @@ ADDED: sub num_bereich(), which allows one to specify more then one
================================================================================== ================================================================================
0.3: 0.3:
CHANGED: it uses no more a mysql database, but a binary file instead. CHANGED: it uses no more a mysql database, but a binary file instead.
This is much faster! This is much faster!
ADDED: note can display the notes with colors, it is turned off by default ADDED: note can display the notes with colors, it is turned off by
default
================================================================================== ================================================================================
0.2: 0.2:
@@ -271,7 +341,7 @@ FIXED: now numbers of notes will be recounted, if one delete one note,
CHANGED: the look of the list output has been changed, similar to a table CHANGED: the look of the list output has been changed, similar to a table
================================================================================== ================================================================================
0.1: 0.1:
INITIAL RELEASE. INITIAL RELEASE.

View File

@@ -2,7 +2,7 @@
# NOTEDB::mysql and NOTEDB::binary are internals # NOTEDB::mysql and NOTEDB::binary are internals
# of note. # of note.
# #
# $Id: Makefile.PL,v 1.1 2000/04/17 17:38:49 thomas Exp thomas $ # $Id: Makefile.PL,v 1.1.1.1 2000/07/01 14:40:50 zarahg Exp $
# #
# check for the existence of optional modules: # check for the existence of optional modules:
sub chk_mod sub chk_mod
@@ -86,17 +86,22 @@ $install = `which install`;
open M, "> Makefile" || die $!; open M, "> Makefile" || die $!;
print M qq~BIN = bin/note print M qq~BIN = bin/note
MAN = note.1
LIBS = NOTEDB/mysql.pm NOTEDB/binary.pm NOTEDB/dbm.pm LIBS = NOTEDB/mysql.pm NOTEDB/binary.pm NOTEDB/dbm.pm
CORE = NOTEDB.pm
INSTBIN = $BINDIR INSTBIN = $BINDIR
INSTLIB = $LIBDIR INSTLIB = $LIBDIR
INSTMAN = /usr/man/man1
INSTALL = $install INSTALL = $install
all: all:
\@echo "done. Type make install.\\n" \@echo "done. Type make install.\\n"
install: install:
\$(INSTALL) -m 755 \$(CORE) \$(INSTLIB)
\$(INSTALL) -d -m 755 \$(INSTLIB)/NOTEDB \$(INSTALL) -d -m 755 \$(INSTLIB)/NOTEDB
\$(INSTALL) -m 755 \$(LIBS) \$(INSTLIB)/NOTEDB \$(INSTALL) -m 755 \$(LIBS) \$(INSTLIB)/NOTEDB
\$(INSTALL) -m 755 \$(BIN) \$(INSTBIN) \$(INSTALL) -m 755 \$(BIN) \$(INSTBIN)
\$(INSTALL) -m 644 \$(MAN) \$(INSTMAN)
~; ~;
print "Type \"make install\" to install all files.\n\n"; print "Type \"make install\" to install all files.\n\n";

213
NOTEDB.pm Normal file
View File

@@ -0,0 +1,213 @@
#
# this is a generic module, used by note database
# backend modules.
#
# $Id$
#
# Copyright (c) 2000 Thomas Linden <tom@daemon.de>
package NOTEDB;
BEGIN {
# make sure, it works, otherwise encryption
# is not supported on this system!
eval { require Crypt::CBC; };
if($@) {
$NOTEDB::crypt_supported = 0;
}
else {
$NOTEDB::crypt_supported = 1;
}
}
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 use_cache {
#
# this sub turns on cache support
#
my $this = shift;
$this->{use_cache} = 1;
$this->{changed} = 1;
}
sub cache {
#
# store the whole db as hash
# if use_cache is turned on
#
my $this = shift;
if ($this->{use_cache}) {
my %res = @_;
%{$this->{cache}} = %res;
}
}
sub unchanged {
#
# return true if $this->{changed} is true, this will
# be set to true by writing subs using $this->changed().
#
my $this = shift;
return 0 if(!$this->{use_cache});
if ($this->{changed}) {
$this->{changed} = 0;
return 0;
}
else {
print "%\n";
return 1;
}
}
sub changed {
#
# turn on $this->{changed}
# this will be used by update or create subs.
#
my $this = shift;
$this->{changed} = 1;
}
sub generate_search {
#
# get user input and create perlcode ready for eval
# sample input:
# "ann.a OR eg???on AND u*do$"
# resulting output:
# "$match = 1 if(/ann\.a/i or /eg...on/i and /u.*do\$/i );
#
my($this, $string) = @_;
my $case = "i";
if ($string =~ /^\/.+?\/$/) {
return $string;
}
elsif (!$string) {
return "/^/";
}
# we will get a / in front of the first word too!
$string = " " . $string . " ";
# check for apostrophs
$string =~ s/(?<=\s)(\(??)("[^"]+"|\S+)(\)??)(?=\s)/$1 . $this->check_exact($2) . $3/ge;
# remove odd spaces infront of and after <20>and<6E> and <20>or<6F>
$string =~ s/\s\s*(AND|OR)\s\s*/ $1 /g;
# remove odd spaces infront of <20>(<28> and after <20>)<29>
$string =~ s/(\s*\()/\(/g;
$string =~ s/(\)\s*)/\)/g;
# remove first and last space so it will not masked!
$string =~ s/^\s//;
$string =~ s/\s$//;
# mask spaces if not infront of or after <20>and<6E> and <20>or<6F>
$string =~ s/(?<!AND)(?<!OR)(\s+?)(?!AND|OR)/'\s' x length($1)/ge;
# add first space again
$string = " " . $string;
# lowercase AND and OR
$string =~ s/(\s??OR\s??|\s??AND\s??)/\L$1\E/g;
# surround brackets with at least one space
$string =~ s/(?<!\\)(\)|\()/ $1 /g;
# surround strings with slashes
$string =~ s/(?<=\s)(\S+)/ $this->check_or($1, $case) /ge;
# remove slashes on <20>and<6E> and <20>or<6F>
$string =~ s/\/(and|or)\/$case/$1/g;
# remove spaces inside /string/ constructs
$string =~ s/(?<!and)(?<!or)\s*\//\//g;
$string =~ s/\/\s*(?!and|or)/\//g;
return qq(\$match = 1 if($string););
}
sub check_or {
#
# surrounds string with slashes if it is not
# <20>and<6E> or <20>or<6F>
#
my($this, $str, $case) = @_;
if ($str =~ /^\s*(or|and)\s*$/) {
return " $str ";
}
elsif ($str =~ /(?<!\\)[)(]/) {
return $str;
}
else {
return " \/$str\/$case ";
}
}
sub check_exact {
#
# helper for generate_search()
# masks special chars if string
# not inside ""
#
my($this, $str) = @_;
my %globs = (
'*' => '.*',
'?' => '.',
'[' => '[',
']' => ']',
'+' => '\+',
'.' => '\.',
'$' => '\$',
'@' => '\@',
);
# mask backslash
$str =~ s/\\/\\\\/g;
if ($str =~ /^"/ && $str =~ /"$/) {
# mask bracket-constructs
$str =~ s/(\(|\))/\\$1/g;
}
$str =~ s/(.)/$globs{$1} || "$1"/ge;
$str =~ s/^"//;
$str =~ s/"$//;
# mask spaces
$str =~ s/\s/\\s/g;
return $str;
}
1;

5
NOTEDB/CVS/Entries Normal file
View File

@@ -0,0 +1,5 @@
/README/1.1.1.1/Sat Jul 1 14:40:52 2000//
/binary.pm/1.1.1.1/Sat Jul 1 14:40:52 2000//
/dbm.pm/1.1.1.1/Sat Jul 1 14:40:52 2000//
/mysql.pm/1.1.1.1/Sat Jul 1 14:40:52 2000//
D

1
NOTEDB/CVS/Repository Normal file
View File

@@ -0,0 +1 @@
NOTE/NOTEDB

1
NOTEDB/CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

View File

@@ -1,25 +1,18 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Id: binary.pm,v 1.6 2000/06/25 19:48:00 scip Exp scip $ # $Id: binary.pm,v 1.1.1.1 2000/07/01 14:40:52 zarahg Exp $
# Perl module for note # Perl module for note
# binary database backend. see docu: perldoc NOTEDB::binary # binary database backend. see docu: perldoc NOTEDB::binary
# #
package NOTEDB;
use strict; use strict;
use Data::Dumper; use Data::Dumper;
use IO::Seekable; use IO::Seekable;
package NOTEDB; use NOTEDB;
use Fcntl qw(LOCK_EX LOCK_UN); 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: # Globals:
my ($NOTEDB, $sizeof, $typedef,$version); my ($NOTEDB, $sizeof, $typedef,$version);
@@ -48,12 +41,12 @@ sub new
exit(1); exit(1);
} }
my $TYPEDEF = "i a$MAX_NOTE a$MAX_TIME"; my $TYPEDEF = "i a$MAX_NOTE a$MAX_TIME";
my $SIZEOF = length pack($TYPEDEF, () ); my $SIZEOF = length pack($TYPEDEF, () );
$sizeof = $SIZEOF; $sizeof = $SIZEOF;
$typedef = $TYPEDEF; $typedef = $TYPEDEF;
return $self; return $self;
} }
@@ -67,24 +60,7 @@ sub version {
return $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 sub set_del_all
{ {
@@ -94,8 +70,7 @@ sub set_del_all
} }
sub get_single sub get_single {
{
my($this, $num) = @_; my($this, $num) = @_;
my($address, $note, $date, $buffer, $n, $t, $buffer, ); my($address, $note, $date, $buffer, $n, $t, $buffer, );
@@ -119,8 +94,12 @@ sub get_single
sub get_all sub get_all
{ {
my($this, $num, $note, $date, %res); my $this = shift;
my($num, $note, $date, %res);
if ($this->unchanged) {
return %{$this->{cache}};
}
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n"; open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
flock NOTE, LOCK_EX; flock NOTE, LOCK_EX;
my($buffer, $t, $n); my($buffer, $t, $n);
@@ -135,14 +114,23 @@ sub get_all
flock NOTE, LOCK_UN; flock NOTE, LOCK_UN;
close NOTE; close NOTE;
$this->cache(%res);
return %res; return %res;
} }
sub get_nextnum sub get_nextnum
{ {
my($this, $num, $te, $me, $buffer); my $this = shift;
my($num, $te, $me, $buffer);
if ($this->unchanged) {
$num = 1;
foreach (keys %{$this->{cache}}) {
$num++;
}
return $num;
}
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n"; open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
flock NOTE, LOCK_EX; flock NOTE, LOCK_EX;
@@ -160,7 +148,28 @@ sub get_nextnum
sub get_search sub get_search
{ {
my($this, $searchstring) = @_; my($this, $searchstring) = @_;
my($buffer, $num, $note, $date, %res, $t, $n); my($buffer, $num, $note, $date, %res, $t, $n, $match);
my $regex = $this->generate_search($searchstring);
eval $regex;
if ($@) {
print "invalid expression: \"$searchstring\"!\n";
return;
}
$match = 0;
if ($this->unchanged) {
foreach my $num (keys %{$this->{cache}}) {
$_ = $this->{cache}{$num}->{note};
eval $regex;
if ($match) {
$res{$num}->{note} = $this->{cache}{$num}->{note};
$res{$num}->{date} = $this->{cache}{$num}->{date}
}
$match = 0;
}
return %res;
}
open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n"; open NOTE, "+<$NOTEDB" or die "could not open $NOTEDB\n";
flock NOTE, LOCK_EX; flock NOTE, LOCK_EX;
@@ -171,11 +180,14 @@ sub get_search
($num, $note, $date) = unpack($typedef, $buffer); ($num, $note, $date) = unpack($typedef, $buffer);
$n = ude($note); $n = ude($note);
$t = ude($date); $t = ude($date);
if($n =~ /\Q$searchstring\E/i) $_ = $n;
eval $regex;
if($match)
{ {
$res{$num}->{'note'} = $n; $res{$num}->{'note'} = $n;
$res{$num}->{'date'} = $t; $res{$num}->{'date'} = $t;
} }
$match = 0;
} }
flock NOTE, LOCK_UN; flock NOTE, LOCK_UN;
close NOTE; close NOTE;
@@ -203,6 +215,8 @@ sub set_edit
flock NOTE, LOCK_UN; flock NOTE, LOCK_UN;
close NOTE; close NOTE;
$this->changed;
} }
@@ -220,6 +234,8 @@ sub set_new
flock NOTE, LOCK_UN; flock NOTE, LOCK_UN;
close NOTE; close NOTE;
$this->changed;
} }
@@ -249,6 +265,9 @@ sub set_del
} }
flock NOTE, LOCK_UN; flock NOTE, LOCK_UN;
close NOTE; close NOTE;
$this->changed;
return; return;
} }
@@ -274,6 +293,9 @@ sub set_recountnums
} }
flock NOTE, LOCK_UN; flock NOTE, LOCK_UN;
close NOTE; close NOTE;
$this->changed;
return; return;
} }
@@ -306,6 +328,10 @@ sub ude
return $T; return $T;
} }
1; # keep this! 1; # keep this!
__END__ __END__

View File

@@ -1,25 +1,15 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Id: dbm.pm,v 1.2 2000/06/25 19:51:11 scip Exp scip $ # $Id: dbm.pm,v 1.1.1.1 2000/07/01 14:40:52 zarahg Exp $
# Perl module for note # Perl module for note
# DBM database backend. see docu: perldoc NOTEDB::dbm # DBM database backend. see docu: perldoc NOTEDB::dbm
# #
use DB_File; use DB_File;
#use Data::Dumper; #use Data::Dumper;
use NOTEDB;
use strict; use strict;
package NOTEDB; 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: # Globals:
my ($dbm_dir, $notefile, $timefile, $version, $cipher, %note, %date); my ($dbm_dir, $notefile, $timefile, $version, $cipher, %note, %date);
@@ -52,25 +42,6 @@ sub version {
return $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 sub get_single
{ {
@@ -104,13 +75,23 @@ sub get_nextnum
sub get_search sub get_search
{ {
my($this, $searchstring) = @_; my($this, $searchstring) = @_;
my($num, $note, $date, %res); my($num, $note, $date, %res, $match);
my $regex = $this->generate_search($searchstring);
eval $regex;
if ($@) {
print "invalid expression: \"$searchstring\"!\n";
return;
}
$match = 0;
foreach $num (sort {$a <=> $b} keys %date) { foreach $num (sort {$a <=> $b} keys %date) {
if (ude($note{$num}) =~ /\Q$searchstring\E/i) { $_ = ude($note{$num});
eval $regex;
if ($match) {
$res{$num}->{'note'} = ude($note{$num}); $res{$num}->{'note'} = ude($note{$num});
$res{$num}->{'date'} = ude($date{$num}); $res{$num}->{'date'} = ude($date{$num});
} }
$match = 0;
} }
return %res; return %res;
@@ -196,6 +177,8 @@ sub ude
} }
} }
1; # keep this! 1; # keep this!
__END__ __END__

View File

@@ -1,5 +1,5 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Id: mysql.pm,v 1.5 2000/06/25 19:50:43 scip Exp scip $ # $Id: mysql.pm,v 1.1.1.1 2000/07/01 14:40:52 zarahg Exp $
# Perl module for note # Perl module for note
# mysql database backend. see docu: perldoc NOTEDB::binary # mysql database backend. see docu: perldoc NOTEDB::binary
# #
@@ -7,21 +7,10 @@
use DBI; use DBI;
use strict; use strict;
use Data::Dumper; use Data::Dumper;
use NOTEDB;
package NOTEDB; 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: # Globals:
my ($DB, $table, $fnum, $fnote, $fdate, $version, $cipher); my ($DB, $table, $fnum, $fnote, $fdate, $version, $cipher);
$table = "note"; $table = "note";
@@ -35,7 +24,6 @@ my $sql_getsingle = "SELECT $fnote,$fdate FROM $table WHERE $fnum = ?";
my $sql_all = "SELECT $fnum,$fnote,$fdate FROM $table"; my $sql_all = "SELECT $fnum,$fnote,$fdate FROM $table";
my $sql_nextnum = "SELECT max($fnum) FROM $table"; my $sql_nextnum = "SELECT max($fnum) FROM $table";
my $sql_incrnum = "SELECT $fnum FROM $table ORDER BY $fnum"; 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_setnum = "UPDATE $table SET $fnum = ? WHERE $fnum = ?";
my $sql_edit = "UPDATE $table SET $fnote = ?, $fdate = ? WHERE $fnum = ?"; my $sql_edit = "UPDATE $table SET $fnote = ?, $fdate = ? WHERE $fnum = ?";
@@ -57,11 +45,6 @@ sub new
my $database = "DBI:$dbdriver:$dbname;host=$dbhost"; my $database = "DBI:$dbdriver:$dbname;host=$dbhost";
$DB = DBI->connect($database, $dbuser, $dbpasswd) || die DBI->errstr(); $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; return $self;
} }
@@ -69,37 +52,33 @@ sub new
sub DESTROY sub DESTROY
{ {
# clean the desk! # clean the desk!
}
sub lock {
my($this) = @_;
# LOCK the database!
my $lock = $DB->prepare("LOCK TABLES $table WRITE") || die $DB->errstr();
$lock->execute() || die $DB->errstr();
}
sub unlock {
my($this) = @_;
my $unlock = $DB->prepare("UNLOCK TABLES") || die $DB->errstr; my $unlock = $DB->prepare("UNLOCK TABLES") || die $DB->errstr;
$unlock->execute() || die $DB->errstr(); $unlock->execute() || die $DB->errstr();
$DB->disconnect || die $DB->errstr; $DB->disconnect || die $DB->errstr;
} }
sub version { sub version {
return $version; return $version;
} }
sub no_crypt {
$NOTEDB::crypt_supported = 0;
}
sub use_crypt { sub get_single {
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($this, $num) = @_;
my($note, $date); my($note, $date);
my $statement = $DB->prepare($sql_getsingle) || die $DB->errstr(); my $statement = $DB->prepare($sql_getsingle) || die $DB->errstr();
@@ -114,7 +93,13 @@ sub get_single
sub get_all sub get_all
{ {
my($this, $num, $note, $date, %res); my $this = shift;
my($num, $note, $date, %res);
if ($this->unchanged) {
return %{$this->{cache}};
}
my $statement = $DB->prepare($sql_all) || die $DB->errstr(); my $statement = $DB->prepare($sql_all) || die $DB->errstr();
$statement->execute || die $DB->errstr(); $statement->execute || die $DB->errstr();
@@ -124,6 +109,8 @@ sub get_all
$res{$num}->{'note'} = ude($note); $res{$num}->{'note'} = ude($note);
$res{$num}->{'date'} = ude($date); $res{$num}->{'date'} = ude($date);
} }
$this->cache(%res);
return %res; return %res;
} }
@@ -131,6 +118,14 @@ sub get_all
sub get_nextnum sub get_nextnum
{ {
my($this, $num); my($this, $num);
if ($this->unchanged) {
$num = 1;
foreach (keys %{$this->{cache}}) {
$num++;
}
return $num;
}
my $statement = $DB->prepare($sql_nextnum) || die $DB->errstr(); my $statement = $DB->prepare($sql_nextnum) || die $DB->errstr();
$statement->execute || die $DB->errstr(); $statement->execute || die $DB->errstr();
@@ -144,30 +139,35 @@ sub get_nextnum
sub get_search sub get_search
{ {
my($this, $searchstring) = @_; my($this, $searchstring) = @_;
my($num, $note, $date, %res); my($num, $note, $date, %res, $match);
if($NOTEDB::crypt_supported != 1) {
$searchstring = "\%$searchstring\%"; my $regex = $this->generate_search($searchstring);
my $statement = $DB->prepare($sql_search) || die $DB->errstr(); eval $regex;
$statement->execute($searchstring) || die $DB->errstr(); if ($@) {
$statement->bind_columns(undef, \($num, $note, $date)) print "invalid expression: \"$searchstring\"!\n";
|| die $DB->errstr(); return;
while($statement->fetch) {
$res{$num}->{'note'} = $note;
$res{$num}->{'date'} = $date;
} }
$match = 0;
my %data;
if ($this->unchanged) {
%data = %{$this->{cache}};
} }
else { else {
my %res = $this->get_all(); %data = $this->get_all();
foreach $num (sort { $a <=> $b } keys %res) { }
$note = ude($res{$num}->{'note'}); foreach $num (sort { $a <=> $b } keys %data) {
$date = ude($res{$num}->{'date'}); $note = ude($data{$num}->{'note'});
if($note =~ /\Q$searchstring\E/i) $date = ude($data{$num}->{'date'});
{ $_ = $note;
eval $regex;
if($match) {
$res{$num}->{'note'} = $note; $res{$num}->{'note'} = $note;
$res{$num}->{'date'} = $date; $res{$num}->{'date'} = $date;
} }
$match = 0;
} }
}
return %res; return %res;
} }
@@ -178,23 +178,27 @@ sub set_edit
{ {
my($this, $num, $note, $date) = @_; my($this, $num, $note, $date) = @_;
$this->lock;
my $statement = $DB->prepare($sql_edit) || die $DB->errstr(); my $statement = $DB->prepare($sql_edit) || die $DB->errstr();
$note =~ s/'/\'/g; $note =~ s/'/\'/g;
$note =~ s/\\/\\\\/g; $note =~ s/\\/\\\\/g;
$statement->execute(uen($note), uen($date), $num) || die $DB->errstr(); $statement->execute(uen($note), uen($date), $num) || die $DB->errstr();
$this->unlock;
$this->changed;
} }
sub set_new sub set_new
{ {
my($this, $num, $note, $date) = @_; my($this, $num, $note, $date) = @_;
$this->lock;
my $statement = $DB->prepare($sql_insertnew) || die $DB->errstr(); my $statement = $DB->prepare($sql_insertnew) || die $DB->errstr();
$note =~ s/'/\'/g; $note =~ s/'/\'/g;
$note =~ s/\\/\\\\/g; $note =~ s/\\/\\\\/g;
$statement->execute($num, uen($note), uen($date)) || die $DB->errstr(); $statement->execute($num, uen($note), uen($date)) || die $DB->errstr();
$this->unlock;
$this->changed;
} }
@@ -203,6 +207,7 @@ sub set_del
my($this, $num) = @_; my($this, $num) = @_;
my($note, $date, $T); my($note, $date, $T);
$this->lock;
($note, $date) = $this->get_single($num); ($note, $date) = $this->get_single($num);
return "ERROR" if ($date !~ /^\d/); return "ERROR" if ($date !~ /^\d/);
@@ -210,6 +215,8 @@ sub set_del
# delete record! # delete record!
my $statement = $DB->prepare($sql_del) || die $DB->errstr(); my $statement = $DB->prepare($sql_del) || die $DB->errstr();
$statement->execute($num) || die $DB->errstr(); $statement->execute($num) || die $DB->errstr();
$this->unlock;
$this->changed;
return; return;
} }
@@ -217,14 +224,19 @@ sub set_del
sub set_del_all sub set_del_all
{ {
my($this) = @_; my($this) = @_;
$this->lock;
my $statement = $DB->prepare($sql_del_all) || die $DB->errstr(); my $statement = $DB->prepare($sql_del_all) || die $DB->errstr();
$statement->execute() || die $DB->errstr(); $statement->execute() || die $DB->errstr();
$this->unlock;
$this->changed;
return; return;
} }
sub set_recountnums sub set_recountnums {
{
my $this = shift; my $this = shift;
$this->lock;
my(@count, $i, $num, $setnum, $pos); my(@count, $i, $num, $setnum, $pos);
$setnum = 1; $setnum = 1;
$pos=0; $i=0; @count = (); $pos=0; $i=0; @count = ();
@@ -237,13 +249,14 @@ sub set_recountnums
$count[$i] = $num; $count[$i] = $num;
$i++; $i++;
} }
# now recount them! # now recount them!
my $sub_statement = $DB->prepare($sql_setnum) || die $DB->errstr(); my $sub_statement = $DB->prepare($sql_setnum) || die $DB->errstr();
for($pos=0;$pos<$i;$pos++) { for($pos=0;$pos<$i;$pos++) {
$setnum = $pos +1; $setnum = $pos +1;
$sub_statement->execute($setnum,$count[$pos]) || die $DB->errstr(); $sub_statement->execute($setnum,$count[$pos]) || die $DB->errstr();
} }
$this->unlock;
$this->changed;
} }
sub uen sub uen

189
README
View File

@@ -1,4 +1,4 @@
note 1.0.8 by Thomas Linden, 11/07/2000 note 1.0.9 by Thomas Linden, 08/08/2000
======================================= =======================================
Introduction Introduction
@@ -72,8 +72,11 @@ Features
stdin as well es duming to stdout instead a file. Additional, there stdin as well es duming to stdout instead a file. Additional, there
is an option --raw available, which prints everything out completely is an option --raw available, which prints everything out completely
without formatting. without formatting.
o for better performance, note can cache the database for listings
or searching.
o It can be installed without root-privileges. o It can be installed without root-privileges.
o Last, a while ago a user stated: "... it simply does, what it says ..." o Last, a while ago a user stated: "... it simply does, what it
says ..."
@@ -189,6 +192,18 @@ Usage
note will search the whole note database case insensitive for note will search the whole note database case insensitive for
an occurence of this string and tell you the number and first- an occurence of this string and tell you the number and first-
line it have. line it have.
You can extend the searchstring using B<AND>, B<OR> ( and ) and
shell-like wildcards:
$ note -s "moses AND lenin"
or:
$ note -s "(mike OR arnold) AND (jackson OR schwarzenegger)"
If note finds a note, which first line is a topic, then it will
display it's second line.
These rules apply for the interactive search too.
Instead of using note from the commandline you can use the Instead of using note from the commandline you can use the
interactive mode. Run note with "note -i". If you need assistance interactive mode. Run note with "note -i". If you need assistance
@@ -212,10 +227,10 @@ Usage
o "note -D -" creates a note-database dump and prints it out o "note -D -" creates a note-database dump and prints it out
to stantdard output. to stantdard output.
o "|" this is the shell's pipe command. It takes the 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 of the left program and gives it to the right program as
input. standard input.
o "note -o -I -" imports a note-database dump from standard input o "note -o -I -" imports a note-database dump from standard
and overwrites an existing database. input and overwrites an existing database.
Before you use the "-o" switch, I consider yuo to make a backup! Before you use the "-o" switch, I consider yuo to make a backup!
@@ -229,8 +244,9 @@ Topics
field for the topic. Instead the topic will be stored right in the field for the topic. Instead the topic will be stored right in the
note. note.
If the first line of your note contains some text bordered by slashes 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), (or whatever you prefer, set "TopicSeparator" in your config! default
then note will consider it as the topic of this certain note. For examle: is slash), then note will consider it as the topic of this certain
note. For examle:
/TodoList/ /TodoList/
If you are using topics, no data after the topic is allowed, if there 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- is any text, note will consider it as a subtopic! Therefore, don't for-
@@ -239,17 +255,24 @@ Topics
If you are in interactive mode, you can "cd" to a different note simply 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 by typing it's name at the command-prompt, or you can use the well-known
syntax "cd topic". syntax "cd topic".
The list-command will only show you notes under this topic. If you create The list-command will only show you notes under this topic. If you
a new note, it will automagically inserted under the current topic (note create a new note, it will automagically inserted under the current
will prepend the string "/topicname/" to the text of your note). topic (note will prepend the string "/topicname/" to the text of your
note).
You can use some enhanced capabilities of the cd command. If you turn on
the "ShortCd" parameter in your configuration, then you can cd to a
note number (and thus - to it's topic) i.e. "cd 13" jumps to the topic
of the note number 13. You can always go one level up using the "cd .."
command and you can go to the top-level topic using "cd /".
You can create at any time from any point a new topic. Just create a new 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) note and type the name of the new topic bordered by slashes (or
at the first line of this note. After saving, there will be available a TopicSeparator) at the first line of this note. After saving, there
new topic with one note in it. 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 You can create as many subtopics as you like, the format is similar to
filesystem-path. An example, say, you want to create such a structure: a filesystem-path. An example, say, you want to create such a
structure:
(root - top level) (root - top level)
| |
@@ -281,14 +304,15 @@ Topics
If a note does not contain the "magic" /topic/ construction on the first 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 line, it will be listed under the "root" of note, that is the point
at the startup of note. you are at the startup of note.
You can subsequently move a note without a topic to a certain topic. Simply You can subsequently move a note without a topic to a certain topic.
edit it and insert at the first line the above mentioned construction. 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. Note: Please don't forget the prepending and appending a slash of a
You will get strange results without it! topic. You will get strange results without it!
@@ -296,22 +320,22 @@ Topics
Formatting of notes Formatting of notes
=================== ===================
Another very nice feature is the possibility to format the note-text (as much as Another very nice feature is the possibility to format the note-text
shell allows it). First, you can use the note-internal "magic-strings" for color- (as much as shell allows it). First, you can use the note-internal
izing. Those strings looks much like HTML: "magic-strings" for colorizing. Those strings looks much like HTML:
"<green>here is a green line of text</green> no more green." "<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 As you see, the beginning of another color starts with a tag(kinda) of
<colorname> and ens with an end tag </colorname>. the color <colorname> and ens with an end tag </colorname>.
The following colors are available: The following colors are available:
black, red, green, yellow, blue, magenta, cyan and white. black, red, green, yellow, blue, magenta, cyan and white.
Beside colorizing text, you can also create bold or underlined text! If you decide Beside colorizing text, you can also create bold or underlined text! If
to use this (additional) feature, you need to set the Config-Option "FormatNotes" you decide to use this (additional) feature, you need to set the
to 1 which turns it on. 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 Usage is very straightforward, if a word (a word is defined as some
one space surrounded) is between a magic mark-character. Here are the available text with at least one space surrounded) is between a magic mark-
things, you can do: character. Here are the available things, you can do:
bold: **word** bold: **word**
underlined: __word__ underlined: __word__
@@ -322,30 +346,54 @@ Formatting of notes
Cache
=====
If you have many notes stored in your database then you might
find the cache feature useful. Chaching is currently supported
by the binary and the mysql backend. Set the configuration
parameter "Cache" to "1" or "yes" to turn caching on.
Note will then use an internal copy of your notes-database for
the list/search/tree commands instead of every time accessing
the physically database. If something changed (i.e. you edited
a note or added a new one) then the database will be used and
the cache will be updated.
A "%" character at the top left of the screen indicates that
the cache is in use.
I consider you not to use the cache feature if you are using
multiple instances of note using the same database.
The cache is turned off by default.
Scripting Scripting
========= =========
Since version 1.0.3 there are some additions which allows you to use note in Since version 1.0.3 there are some additions which allows you to use
scripts, without user-interaction. You might run a special script as cronjob, note in scripts, without user-interaction. You might run a special
which adds a note under a certain topic every week. Or the like. script as cronjob, which adds a note under a certain topic every week.
Or the like.
Here are the possibilies you have: Here are the possibilies you have:
You can add a new note through a pipe, another commands output becomes You can add a new note through a pipe, another commands output becomes
note's input: note's input:
$ cat /var/spool/news/daily | note - $ cat /var/spool/news/daily | note -
This command adds the content of a file "daily" as a new note. Note the dash. This command adds the content of a file "daily" as a new note. Note
it stands for "Standard Input". Note will be completely silent and it will not the dash - it stands for "Standard Input". Note will be completely
ask for something. silent and it will not ask for something.
Suppose you are using encryption. You might wonder, how note will get your Suppose you are using encryption. You might wonder, how note will get
passphrase? The solution: You need to set up an environment variable which your passphrase? The solution: You need to set up an environment
contains the password: variable which contains the password:
$ export NOTE_PASSWD=secret $ export NOTE_PASSWD=secret
If the variable is present, note will not ask you for a passphrase! 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 Another thingy you might find useful is the -r (--raw) command-line
turns note into raw mode , which means it will only print the 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, data without any formatting. Raw mode is available for list and display,
since it makes no sense, interactive mode doe not support raw mode. since it makes no sense, interactive mode doe not support raw mode.
@@ -356,8 +404,8 @@ Scripting
Format of the notedb (binary backend) Format of the notedb (binary backend)
===================================== =====================================
The database where the notes are stored is a binary fixed record length file The database where the notes are stored is a binary fixed record length
of the following format: file of the following format:
It consists of three fixed length fields per entry. The fields It consists of three fixed length fields per entry. The fields
have the following types: have the following types:
o Number: Integer (1 byte) o Number: Integer (1 byte)
@@ -441,6 +489,20 @@ Security
everytime it runs! It will *not* store this passphrase! everytime it runs! It will *not* store this passphrase!
So, don't forget it! Be careful! So, don't forget it! Be careful!
If you are using the mysql backend and if your mysql database
requires a password then you can store an encrypted version of
your mysql password instead of the cleartext one.
You need to turn on the config-parameter "encrypt_passwd" (set it
to 1). Then you need to create an encrypted string from your
mysql-password using note's commandline option --encrypt <string>.
Note will ask you for a passphrase which will be used to encrypt
the mysql-password. This passphrase must be exactly the same as
you use for mysql itself. That means you need to use encryption.
The string you get from this command must be saved in your config
file as attribute to "DbPasswd". Later on note will decrypt that
string using the supplied note-passphrase (that's why it must be
the same used for encrypt) and pass the result to the mysql server.
Once note have encrypted some data using this passphrase, you Once note have encrypted some data using this passphrase, you
cannot simply switch to another passphrase, because all data cannot simply switch to another passphrase, because all data
within the database needs to be encrypted using the same passphrase! within the database needs to be encrypted using the same passphrase!
@@ -465,30 +527,48 @@ Security
and checks if the decrypted timestamp field matches the following and checks if the decrypted timestamp field matches the following
expression: "^\d+\.\d+". Translated from perl to human: expression: "^\d+\.\d+". Translated from perl to human:
the timestamp must begin with minimum one digit (possibly more), the timestamp must begin with minimum one digit (possibly more),
followed by one dot, followed by 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 Chances are bad, that a wrong passphrase will cause a timestamp
matching the rule above. If you have other experiences, please matching the rule above. If you have other experiences, please
drop me a mail! drop me a mail!
For the paranoid: do not use the cache-feature, 'cause note stores a
copy of your note database in RAM if cache support is turned on.
This means an attacker could access your (unencrypted!) notes.
Comments Comments
======== ========
You can send any comments to Thomas Linden <tom@daemon.de>. 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 If you find a bug or if you have a suggestion for improvement of the
feel free to send me a patch ;-) script feel free to send me a patch ;-)
License License
======= =======
This script comes with absolutely NO WARRANTY. It is distributed under the This script comes with absolutely NO WARRANTY. It is distributed under
terms of the GNU General Public License. Use it at your own risk :-) 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 You can read the complete GPL at: http://www.gnu.org/copyleft/gpl.html
Recources
=========
The command-line options and all commands of the interactive mode are
described in the supplied note(1) manpage.
You may also refer to the note website http://www.0x49.org.
Author and Copyright Author and Copyright
==================== ====================
@@ -506,12 +586,13 @@ Contributors / Credits
Jens Heunemann <jens.heunemann@consol.de> - sub tree. Jens Heunemann <jens.heunemann@consol.de> - sub tree.
Peter Palmreuther - various additions. Peter Palmreuther - various additions.
And many other people who sended bug reports, feature requests. If you feel that And many other people who sent bug reports, feature requests. If you
I forgot your name in this list, then please send me an email and I'll add you. feel that I forgot your name in this list, then please send me an email
and I'll add you.
Last changed Last changed
============ ============
11/07/2000 08/08/2000

4
TODO
View File

@@ -1 +1,3 @@
- dump to palm compatible format (!) any help out there? o mysql.pm und dbm.pm generate_search testen!
o Website anpassen
o Announcement on freshmeat.

2
bin/CVS/Entries Normal file
View File

@@ -0,0 +1,2 @@
/note/1.3/Fri Jul 21 06:41:25 2000//
D

1
bin/CVS/Repository Normal file
View File

@@ -0,0 +1 @@
NOTE/bin

1
bin/CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

1681
bin/_note Executable file

File diff suppressed because it is too large Load Diff

790
bin/note

File diff suppressed because it is too large Load Diff

19
bin/system_and.patch Normal file
View File

@@ -0,0 +1,19 @@
*** note Mon Jul 10 00:10:03 2000
--- _note Fri Jul 21 08:38:22 2000
***************
*** 635,641 ****
$editor = &find_editor;
if($editor)
{
! system "touch", $TEMP && die $!;
system "chattr", "+s", $TEMP; # ignore errors, since only on ext2 supported!
system $editor, $TEMP;
}
--- 635,641 ----
$editor = &find_editor;
if($editor)
{
! system "touch", $TEMP and die $!;
system "chattr", "+s", $TEMP; # ignore errors, since only on ext2 supported!
system $editor, $TEMP;
}

2
config/CVS/Entries Normal file
View File

@@ -0,0 +1,2 @@
/noterc/1.3/Sun Jul 9 22:37:15 2000//
D

1
config/CVS/Repository Normal file
View File

@@ -0,0 +1 @@
NOTE/config

1
config/CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

View File

@@ -42,6 +42,8 @@ DbDriver binary
#FieldNumber number #FieldNumber number
#FieldNote note #FieldNote note
#FieldDate date #FieldDate date
# uncomment for using an encrypted password, generate it with note "--encrypt"
#encrypt_passwd 1
#### specific end ### #### specific end ###
@@ -152,7 +154,16 @@ TempDirectory /home/you/tmp
# You can jump to a topic by typing "cd 13" in interactive mode.
# You need to set thi soption to 1 if you want to use this feature.
ShortCd 0
# note can use a cached copy of the note database for list/tree/search
# this is currently only supported by the binary and the mysql backends
# set it to 1 to turn it on, the default is 0 (off)
Cache 0
# 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>

154
config/rc Normal file
View File

@@ -0,0 +1,154 @@
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
use an encrypted password, generate it with note "--encrypt_passwd"
encrypt_passwd 1
#### 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
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
You can jump to a topic by typing "cd 13" in interactive mode.
You need to set thi soption to 1 if you want to use this feature.
ShortCd 0
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>

5
mysql/CVS/Entries Normal file
View File

@@ -0,0 +1,5 @@
/README/1.1.1.1/Sat Jul 1 14:40:52 2000//
/install.sh/1.1.1.1/Sat Jul 1 14:40:52 2000//
/permissions/1.1.1.1/Sat Jul 1 14:40:52 2000//
/sql/1.1.1.1/Sat Jul 1 14:40:52 2000//
D

1
mysql/CVS/Repository Normal file
View File

@@ -0,0 +1 @@
NOTE/mysql

1
mysql/CVS/Root Normal file
View File

@@ -0,0 +1 @@
zarahg@cvs.htnews.sourceforge.net:/cvsroot/htnews

5
note
View File

@@ -1,5 +1,5 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Id: note,v 1.27 2000/05/16 23:51:35 thomas Exp thomas $ # $Id: note,v 1.1.1.1 2000/07/01 14:40:50 zarahg Exp $
# #
# #
# note - console notes management with database and encryption support. # note - console notes management with database and encryption support.
@@ -1560,6 +1560,9 @@ sub getconfig
__END__ __END__
# #
# $Log: note,v $ # $Log: note,v $
# Revision 1.1.1.1 2000/07/01 14:40:50 zarahg
# initial import
#
# Revision 1.27 2000/05/16 23:51:35 thomas # Revision 1.27 2000/05/16 23:51:35 thomas
# fixed many option-parsing related bugd! # fixed many option-parsing related bugd!
# #

636
note.1 Normal file
View File

@@ -0,0 +1,636 @@
.rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R
.fi
..
'''
'''
''' Set up \*(-- to give an unbreakable dash;
''' string Tr holds user defined translation string.
''' Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
''' \*(L" and \*(R", except that they are used on ".xx" lines,
''' such as .IP and .SH, which do another additional levels of
''' double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\" If the F register is turned on, we'll generate
.\" index entries out stderr for the following things:
.\" TH Title
.\" SH Header
.\" Sh Subsection
.\" Ip Item
.\" X<> Xref (embedded
.\" Of course, you have to process the output yourself
.\" in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH note 1 "note version 1.1.0" "10/Aug/2000" "Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
. \" AM - accent mark definitions
.bd B 3
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds ? ?
. ds ! !
. ds /
. ds q
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds v \h'-1'\o'\(aa\(ga'
. ds _ \h'-1'^
. ds . \h'-1'.
. ds 3 3
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
. ds oe oe
. ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
note \- a perl script for maintaining notes.
.SH "SYNPOPSIS"
note [options] [ number [,number...]]
.SH "DESCRIPTION"
\fBnote\fR is a small console program written in perl, which allows
you to manage notes similar to programs like \*(L"knotes\*(R" but from
the commandline. Note can use different database-backends for
notes-storage. It ships with a DBI\-based mysql-\fImodule\fR\|(which
can also be used for other by DBI supported DBMS), another
module, which uses a binary file for storage and a DBM module.
Note supports since version 1.0.0 \fIencryption\fR\|(IDEA or DES)!
.SH "OPTIONS"
.Ip "\fI\-c, --config file\fR" 5
Use another config file than the default ~/.noterc.
.Ip "\fI\-l, --list [topic]\fR" 5
Lists all existing notes. If no topic were specified,
it will display a list of all existing topics.
See the section \fI\s-1TOPICS\s0\fR for details about topics.
.Ip "\fI\-L, --longlist [topic]\fR" 5
The same as \fI\-l\fR but prints also the timestamp of the notes.
.Ip "\fI\-t, --topic\fR" 5
Prints a list of all topics as a tree.
.Ip "\fI\-T, --longtopic\fR" 5
Prints the topic-tree with the notes under each topic.
.Ip "\fI\-s, --search string\fR" 5
Searches for <string> trough the notes database. See the section
\fI\s-1SEARCHING\s0\fR for details about the search engine.
.Ip "\fI\-e, --edit number\fR" 5
Edit the note with the number <number> using your default editor
or the one you specified in the config file.
.Ip "\fI\-d, --delete number\fR" 5
Delete the note with the number <number>. You can delete multiple notes
with one command. \*(L"1-4\*(R" deletes the notes 1,2,3,4. And \*(L"1,5,7\*(R" deletes
the specified ones.
.Ip "\fI\-D, --Dump [file | \-]\fR" 5
Dumps all notes to the textfile <file>. If <file> is a \*(L"\-\*(R" it will
be printed out to standard output (\s-1STDOUT\s0).
.Ip "\fI\-I, --Import file | \-\fR" 5
Imports a previously dumped textfile into the
note database. Data will be appended by default.
You can also specify a dash \fInote \-I \-\fR instead of a <file>,
which causes note, silently to read in a dump from \s-1STDIN\s0.
.Ip "\fI\-o, --overwrite\fR" 5
Only suitable for use with --Import. Overwrites an
existing notedb. Use with care.
.Ip "\fI\-r, --raw\fR" 5
Raw mode, output will not be formatted. Works not in interactive
mode, only on cmd-line for list and display. That means, no colors
will be used and no lines or titles.
.Ip "\fI\-i, --interactive\fR" 5
Start note in interactive mode. See the section \fI\s-1INTERACTIVE\s0 \s-1MODE\s0\fR
for details on this mode.
.Ip "\fI--encrypt cleartext\fR" 5
Encrypt the given clear text string. You would need that if you want to
store the mysql password not in cleartext in the \fIconfig\fR\|(if you are using
the mysql backend!).
.Ip "\fI\-h, --help\fR" 5
Display this help screen.
.Ip "\fI\-v, --version\fR" 5
Display the version number.
.Ip "\fB\-\fR" 5
If you run note just with one dash: \fBnote \-\fR, then it will read in a new
note from \s-1STDIN\s0 until \s-1EOF\s0. This makes it possible to pipe text into a new note, i.e.:
.Sp
.Vb 1
\& cat sometextfile | note -
.Ve
.SH "USAGE"
.Sh "\s-1GENERAL\s0 \s-1USAGE\s0"
If you don't know, how to run note, try \*(L"note \-h\*(R" first.
It will tell you all available commandline options.
.PP
To create a new note, simply run \*(L"note\*(R". 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.
.PP
If you want to view the note, type \*(L"note 1\*(R", if the notenumber
was 1.
.PP
If you want to get an overview of all notes, type \*(L"note \-l\*(R".
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"\-L\*(R" instead of \*(L"\-l\*(R".
Read more about topics below in the section \*(L"Topics\*(R".
You can also specify the topic which notes you want to see:
\*(L"\-l mytopic\*(R" does the trick.
Additional, you might want to get an overview of your topic-
strcture. You can use the command \*(L"\-t\*(R" in this case, which
will display a tree-view of your tpic-structure. You can
use the command \*(L"\-T\*(R" if you want to see the notes under each
topic too. \*(L"\-T\*(R" will also show the number of each note.
.PP
To edit a certain note, type \*(L"note \-e 1\*(R". It will invoke your
editor (vi or pico). You can edit it, after saving, note
will store the changed note to the database.
.PP
Of course you can drop a certain note: \*(L"note \-d 1\*(R" 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 \*(L"\-d 1,2\*(R"
To delete note 1,2 and 3, use \*(L"\-d 1-3\*(R".
.Sh "\s-1SEARCHING\s0"
If you cannot remember, which note you are looking for, you
can use the search capability of note: \*(L"note \-s <searchstring>\*(R".
note will search the whole note database case insensitive for
an occurence of this string and tell you the number and first-
line it has.
.PP
You can extend the searchstring using \fB\s-1AND\s0\fR, \fB\s-1OR\s0\fR ( and ) and
shell-like wildcards:
.PP
.Vb 1
\& $ note -s "moses AND lenin"
.Ve
or:
.PP
.Vb 1
\& $ note -s "(mike OR arnold) AND (jackson OR schwarzenegger)"
.Ve
If note finds a note, which first line is a topic, then it will
display it's second line.
.PP
These rules apply for the interactive search too.
.Sh "\s-1TOPICS\s0"
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 \*(L"TopicSeparator\*(R" in your config! default
is slash), then note will consider it as the topic of this certain
note. For examle:
.PP
.Vb 1
\& B</TodoList/>
.Ve
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.
.PP
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 \*(L"/topicname/\*(R" to the text of your
note).
.PP
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.
.PP
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:
.PP
.Vb 10
\& (root - top level)
\& |
\& |----test
\& | |----subtopic
\& | | |--note 1
\& | | |--note 2
\& | |
\& | |--note 4
\& |
\& |--note 3
.Ve
Then you may create those 4 new notes:
.PP
.Vb 12
\& --- snip ---
\& /test/subtopic/
\& note 1
\& --- snip ---
\& /test/subtopic/
\& note 2
\& --- snip ---
\& note 3
\& --- snip ---
\& /test/
\& note 4
\& --- snip ---
.Ve
I hope, you got the point ;\-)
.PP
If a note does not contain the \*(L"magic\*(R" /topic/ construction on the first
line, it will be listed under the \*(L"root\*(R" of note, that is the point
you are at the startup of note.
.PP
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.
.PP
Note: Please don't forget the prepending and appending a slash of a
topic. You will get strange results without it!
.Sh "\s-1INTERACTIVE\s0 \s-1MODE\s0"
If you start note with the commandline flag \fB\-i\fR, then it starts
with an interactive interface.
It will start with a listing under the default top-topic ("/").
You can enter the name of a topic to change to that topic. This works
similar to a filesystem structure. The current topic will be
displayed on the top of the screen.
.PP
The following commands are available:
.Ip "\fBL [topic]\fR" 5
This command lists all notes with a timestamp. If you specify a topic, it
will only list the notes under this topic. If you are under a certain subtopic,
then it will only display the notes under this topic.
.Ip "\fBl [topic]\fR" 5
This commands behaves similar to \fBL\fR but it does not display the timestamp.
You can achieve the same result by simply pressing enter at any time.
.Ip "\fBN\fR" 5
You can create a new note by simply pressing \fBN\fR or \fBn\fR. You favorite
editor will be started and you can enter your note text. If you are already
under a topic then this new note will automatically go to this topic.
note adds an aditional line to the top of the note with the topic. But
you can of course specify your own topic.
.Sp
Note will tell you which number it has assigned to the newly created note.
.Ip "\fBE number\fR" 5
By entering \fBE\fR or \fBe\fR and a note-number you can edit an existing note
using your favorite editor. This way you can also move an existing note
from one topic to another one by editing the first line of the note.
.Ip "\fBD number\fR" 5
\fBE\fR or \fBe\fR deletes one or more existing \fInote\fR\|(s). It requires a note number
or a set of note numbers. 1-5 and 1,7,9 are possible values.
After one or more notes has been deleted note will recount all remaining notes.
Say if you delete 1 and 2, then 3 will become 1, 4 will become 5 and so forth.
.Ip "\fBS [expression]\fR" 5
You can search for the occurence of a text in your notes-database with the
command \fBS\fR or \fBs\fR. If you omit an expression note will ask you for one.
.Ip "\fBT\fR" 5
This prints a tree-view of your topic-structure. \fBT\fR displays the tree with
notes, \fBt\fR displays just the topics without notes.
.Ip "\fBcd topic\fR" 5
Change the actual topic under which you are. This works identical like just
entering the topic but it has some advantages. You can enter \fBcd ..\fR if
you want to go one level up in the topic-structure. And you can enter \fBcd /\fR
to go to the top of the structure.
Additional it is possible to enter a note-number instead of a topic name.
For this feature to be active you need to set the config option \fBShortCd\fR
to \fB1\fR or \fByes\fR. If you use a number and the note with this number is
under a certain topic then you will \*(L"cd\*(R" to this topic. This allows you
to do kind of jumps over multiple levels of topics.
.Ip "\fB? or h\fR" 5
Display a short help screen.
.Ip "\fBQ\fR" 5
Quit note.
.Sh "\s-1BACKUP\s0"
You can also dump the contents of your note-database into a
\s-1ASCII\s0\-\fItextfile\fR\|(\fI\-D\fR). You can use this file later to import it into
your note-\fIdatabase\fR\|(\-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).
.PP
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 \*(L"\-o\*(R" 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:
.PP
.Vb 1
\& $ note -D - | note -o -I -
.Ve
What the hell, does this do?! Step by step:
.Ip "\(bu" 5
\fBnote \-D \-\fR creates a note-database dump and prints it out
to stantdard output.
.Ip "\(bu" 5
\fB|\fR 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.
.Ip "\(bu" 5
\fBnote \-o \-I \-\fR imports a note-database dump from standard
input and overwrites an existing database.
.PP
Before you use the \fB\-o\fR switch, I consider you to make a backup!
.Sh "\s-1FORMATING\s0"
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
\*(L"magic-strings\*(R" for colorizing. Those strings looks much like \s-1HTML\s0:
\*(L"<green>here is a green line of text</green> no more green.\*(R"
As you see, the beginning of another color starts with a \fItag\fR\|(kinda) of
the color <colorname> and ens with an end tag </colorname>.
.PP
The following colors are available:
black, red, green, yellow, blue, magenta, cyan and white.
.PP
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 \*(L"FormatNotes\*(R" 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:
.PP
.Vb 3
\& bold: **word**
\& underlined:__word__
\& inverse:{{word}}
.Ve
The text will be formatted using the actually note-color.
.SH "ENCRYPTION"
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 \*(L"migrate\*(R"
to encryption, I suggest you to follow the directions in the
file UPGRADE!
.PP
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
.PP
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!
.SH "CONFIGURATION"
You can use a configuration file with note but it is not required.
Note will use default values if there is no config.
.PP
The default config file is \fB~/.noterc\fR. You may specify another
one with the commandline flag \fI--config\fR.
.PP
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).
.PP
For a detailed explanation of each possible parameter take a look
at the supplied sample configuration file in \fBconfig/noterc\fR.
.SH "SEE ALSO"
See the usage guide in the README or visit the note website:
http://www.0x49.org.
.SH "AUTHOR"
Thomas Linden <tom@daemon.de>
.rn }` ''
.IX Title "NOTE 1"
.IX Name "note - a perl script for maintaining notes."
.IX Header "NAME"
.IX Header "SYNPOPSIS"
.IX Header "DESCRIPTION"
.IX Header "OPTIONS"
.IX Item "\fI\-c, --config file\fR"
.IX Item "\fI\-l, --list [topic]\fR"
.IX Item "\fI\-L, --longlist [topic]\fR"
.IX Item "\fI\-t, --topic\fR"
.IX Item "\fI\-T, --longtopic\fR"
.IX Item "\fI\-s, --search string\fR"
.IX Item "\fI\-e, --edit number\fR"
.IX Item "\fI\-d, --delete number\fR"
.IX Item "\fI\-D, --Dump [file | \-]\fR"
.IX Item "\fI\-I, --Import file | \-\fR"
.IX Item "\fI\-o, --overwrite\fR"
.IX Item "\fI\-r, --raw\fR"
.IX Item "\fI\-i, --interactive\fR"
.IX Item "\fI--encrypt cleartext\fR"
.IX Item "\fI\-h, --help\fR"
.IX Item "\fI\-v, --version\fR"
.IX Item "\fB\-\fR"
.IX Header "USAGE"
.IX Subsection "\s-1GENERAL\s0 \s-1USAGE\s0"
.IX Subsection "\s-1SEARCHING\s0"
.IX Subsection "\s-1TOPICS\s0"
.IX Subsection "\s-1INTERACTIVE\s0 \s-1MODE\s0"
.IX Item "\fBL [topic]\fR"
.IX Item "\fBl [topic]\fR"
.IX Item "\fBN\fR"
.IX Item "\fBE number\fR"
.IX Item "\fBD number\fR"
.IX Item "\fBS [expression]\fR"
.IX Item "\fBT\fR"
.IX Item "\fBcd topic\fR"
.IX Item "\fB? or h\fR"
.IX Item "\fBQ\fR"
.IX Subsection "\s-1BACKUP\s0"
.IX Item "\(bu"
.IX Item "\(bu"
.IX Item "\(bu"
.IX Subsection "\s-1FORMATING\s0"
.IX Header "ENCRYPTION"
.IX Header "CONFIGURATION"
.IX Header "SEE ALSO"
.IX Header "AUTHOR"

501
note.pod Normal file
View File

@@ -0,0 +1,501 @@
=head1 NAME
note - a perl script for maintaining notes.
=head1 SYNPOPSIS
note [options] [ number [,number...]]
=head1 DESCRIPTION
B<note> is a small console program written in perl, which allows
you to manage notes similar to programs like "knotes" but from
the commandline. Note can use different database-backends for
notes-storage. It ships with a DBI-based mysql-module(which
can also be used for other by DBI supported DBMS), another
module, which uses a binary file for storage and a DBM module.
Note supports since version 1.0.0 encryption(IDEA or DES)!
=head1 OPTIONS
=over
=item I<-c, --config file>
Use another config file than the default ~/.noterc.
=item I<-l, --list [topic]>
Lists all existing notes. If no topic were specified,
it will display a list of all existing topics.
See the section I<TOPICS> for details about topics.
=item I<-L, --longlist [topic]>
The same as I<-l> but prints also the timestamp of the notes.
=item I<-t, --topic>
Prints a list of all topics as a tree.
=item I<-T, --longtopic>
Prints the topic-tree with the notes under each topic.
=item I<-s, --search string>
Searches for <string> trough the notes database. See the section
I<SEARCHING> for details about the search engine.
=item I<-e, --edit number>
Edit the note with the number <number> using your default editor
or the one you specified in the config file.
=item I<-d, --delete number>
Delete the note with the number <number>. You can delete multiple notes
with one command. "1-4" deletes the notes 1,2,3,4. And "1,5,7" deletes
the specified ones.
=item I<-D, --Dump [file | -]>
Dumps all notes to the textfile <file>. If <file> is a "-" it will
be printed out to standard output (STDOUT).
=item I<-I, --Import file | ->
Imports a previously dumped textfile into the
note database. Data will be appended by default.
You can also specify a dash I<note -I -> instead of a <file>,
which causes note, silently to read in a dump from STDIN.
=item I<-o, --overwrite>
Only suitable for use with --Import. Overwrites an
existing notedb. Use with care.
=item I<-r, --raw>
Raw mode, output will not be formatted. Works not in interactive
mode, only on cmd-line for list and display. That means, no colors
will be used and no lines or titles.
=item I<-i, --interactive>
Start note in interactive mode. See the section I<INTERACTIVE MODE>
for details on this mode.
=item I<--encrypt cleartext>
Encrypt the given clear text string. You would need that if you want to
store the mysql password not in cleartext in the config(if you are using
the mysql backend!).
=item I<-h, --help>
Display this help screen.
=item I<-v, --version>
Display the version number.
=item B<->
If you run note just with one dash: B<note ->, then it will read in a new
note from STDIN until EOF. This makes it possible to pipe text into a new note, i.e.:
cat sometextfile | note -
=back
=head1 USAGE
=head2 GENERAL 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".
=head2 SEARCHING
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 has.
You can extend the searchstring using B<AND>, B<OR> ( and ) and
shell-like wildcards:
$ note -s "moses AND lenin"
or:
$ note -s "(mike OR arnold) AND (jackson OR schwarzenegger)"
If note finds a note, which first line is a topic, then it will
display it's second line.
These rules apply for the interactive search too.
=head2 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:
B</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.
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!
=head2 INTERACTIVE MODE
If you start note with the commandline flag B<-i>, then it starts
with an interactive interface.
It will start with a listing under the default top-topic ("/").
You can enter the name of a topic to change to that topic. This works
similar to a filesystem structure. The current topic will be
displayed on the top of the screen.
The following commands are available:
=over
=item B<L [topic]>
This command lists all notes with a timestamp. If you specify a topic, it
will only list the notes under this topic. If you are under a certain subtopic,
then it will only display the notes under this topic.
=item B<l [topic]>
This commands behaves similar to B<L> but it does not display the timestamp.
You can achieve the same result by simply pressing enter at any time.
=item B<N>
You can create a new note by simply pressing B<N> or B<n>. You favorite
editor will be started and you can enter your note text. If you are already
under a topic then this new note will automatically go to this topic.
note adds an aditional line to the top of the note with the topic. But
you can of course specify your own topic.
Note will tell you which number it has assigned to the newly created note.
=item B<E number>
By entering B<E> or B<e> and a note-number you can edit an existing note
using your favorite editor. This way you can also move an existing note
from one topic to another one by editing the first line of the note.
=item B<D number>
B<E> or B<e> deletes one or more existing note(s). It requires a note number
or a set of note numbers. 1-5 and 1,7,9 are possible values.
After one or more notes has been deleted note will recount all remaining notes.
Say if you delete 1 and 2, then 3 will become 1, 4 will become 5 and so forth.
=item B<S [expression]>
You can search for the occurence of a text in your notes-database with the
command B<S> or B<s>. If you omit an expression note will ask you for one.
=item B<T>
This prints a tree-view of your topic-structure. B<T> displays the tree with
notes, B<t> displays just the topics without notes.
=item B<cd topic>
Change the actual topic under which you are. This works identical like just
entering the topic but it has some advantages. You can enter B<cd ..> if
you want to go one level up in the topic-structure. And you can enter B<cd />
to go to the top of the structure.
Additional it is possible to enter a note-number instead of a topic name.
For this feature to be active you need to set the config option B<ShortCd>
to B<1> or B<yes>. If you use a number and the note with this number is
under a certain topic then you will "cd" to this topic. This allows you
to do kind of jumps over multiple levels of topics.
=item B<? or h>
Display a short help screen.
=item B<Q>
Quit note.
=back
=head2 BACKUP
You can also dump the contents of your note-database into a
ASCII-textfile(I<-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 this do?! Step by step:
=over
=item *
B<note -D -> creates a note-database dump and prints it out
to stantdard output.
=item *
B<|> 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.
=item *
B<note -o -I -> imports a note-database dump from standard
input and overwrites an existing database.
=back
Before you use the B<-o> switch, I consider you to make a backup!
=head2 FORMATING
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 colorizing. 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.
=head1 ENCRYPTION
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!
=head1 CONFIGURATION
You can use a configuration file with note but it is not required.
Note will use default values if there is no config.
The default config file is B<~/.noterc>. You may specify another
one with the commandline flag I<--config>.
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).
For a detailed explanation of each possible parameter take a look
at the supplied sample configuration file in B<config/noterc>.
=head1 SEE ALSO
See the usage guide in the README or visit the note website:
http://www.0x49.org.
=head1 AUTHOR
Thomas Linden <tom@daemon.de>
=cut