Welcome to the eJourn development guide.
Here I'll try and help get you a jump start into writing patches and plugins for eJourn.


First, we'll talk about the useful files you have to help you...
libejourn contains all the shared code, virtually all the code, for ejourn..  You must take advantage of it.  I won't accept code that contains:
fopen(..)  /*here you should be using io_initialize*/
The abstractions are provided for a reason..  So let's talk about the most pertinent ones..
First, I'll start off by mentioning that the header files, while they appear to be decently documented, are not all perfect.  And I would happily accept in your patch updates to problems with the documentation in them.  So don't fully trust the header files, check the source code if somethings not working right.
The modules as listed:
Module Name	Prefix Used	Header File	Source File	STATUS	TYPE
calendar	cal		calendar.h	calendar.c	+	2
clipboard	clip		clipboard.h	clipboard.c	-	0
crypt		none		crypt.h		crypt.c		*	0
error		err		error.h		error.c		+	2
export		exp		export.h	export.c	+	2
edit		edit		edit.h		edit.c		+	2
gui al		gui_al		gui_al.h	gui_al.c	*	0
gui_io		gio_io		gui_io.h	gui_io.c	*	0
images		img		images.h	images.c	*	0
io		io		io.h		io.c		*	1
journal		journ		journal.h	journal.c	*	0
listen		lsn		listen.h	listen.c	*	2
login		lgn		login.h		login.c		*	0
meta		meta_func	meta_functions.h/c		*	2
months		mnth		months.h	months.c	*	0
plugin		plgn		plugins.h	plugins.c	*	0
prefix		none		prefix.h	prefix.c	*	0
search		srch		search.h	search.c	*	0
search_tab	srch		search_tab.h	search_tab.c	+	2
settings	set		settings.h	settings.c	*	0
simple		sp		simple.h	simple.c	*	2
structure	strct		structure.h	structure.c	*	2
tabs		tab		tabs.h		tabs.c		+	0
talk		tlk		talk.h		talk.c		*	2
threads		thrd		threads.h	thread.c	*	1
time		tm		time.h		time.c		*	0
undo		gui_io		undo.h		undo.c		*	0
xml		xml		xml.h		xml.c		*	1


KEY:
STATUS:
	* means that it's ready for use and you need to use it
	+ means you need to use it, but it's marked for changes/additions
	- means you'll need to use it later, but don't use it now, it's broken
TYPE:
	0 means it's a module which has a single internal state for the whole program.
	1 means it's a support library which gives you a state file, much like a c++ class.
		It should come with new and free functions for you to use.
	2 means it's a support file without any sort of state or type
	
About specific ones:
io
	io exists for file operations.  It's pretty simple to use, but it's rife with 
	outdated functions.  So I'll go over the important ones here:
	elog_io_initialize(char *name, int type);
	This function will open up name as either, READ, WRITE, or RW depending on type.  
	If you open as WRITE or RW it will create the needed structure of directories for
	the file to exists:  Even if you don't write, those directories will be there.
	In READ no directories are created.

	elog_io_close(elog_io_file *f);
	This closes the file.  And it frees f.
	elog_io_readRestofFile(...);
	
	This reads the file from the current pointer (0 if just opened) into a data space.  
	It will even allocate the data space for you.
	So here's an example:

	#include "io.h"
	#include "error.h"
	#include "simple.h"
	struct elog_io_file *f = elog_io_initialize("jack.dry", ELOG_IO_READ);
	if (f)
	{
		int len;
		unsigned char *jack = elog_io_readRestofFile(f, &len);
		elog_io_close(f);
		char *jack_c = elog_sp_toChar(jack, len);
		printf("%s\n", jack_c);
		free(jack_c);
	}
	else
		elog_err_print("jack.dry not found ... \n");

	See how I checked if the file was opened?  That's very important ;).
	You'll notice that the majority of the file functionality in ejourn is written around
	reading the whole file then working with the string you get.  This means that huge files
	will get you into trouble:  But eJourn, as a rule, shouldn't need to access hardly any
	of these!  People's journal entries just don't end up as 20MB!

err
	err exists to centralize error printing.  It's going to be massively revised:
	elog_err_print_console(char *); prints to console
	elog_err_print(char *); probably prents to the gui



simple
	simple is useful for all sorts of random tasks.  I recommended taking a gander at its header file.  There's a lot of useful string manipulation stuff, like elog_sp_cat (which is faster than a series of strcats).
	ex: 
	char *dogsandcats;
	elog_sp_cat(&docsandcats, dogs, cats, NULL);


callbacks, interface, etc
	Sorry about the mess.  It'l gonna get slowly cleaned up.  You'll see the callback stuff and
	accessor functions split across three different files, one for each tab.  This should help
	when you want to find something!