From f75c5e4a8292a284e9c5929ed5df5b05520e176f Mon Sep 17 00:00:00 2001 From: Dave Peticolas Date: Mon, 17 Jul 2000 08:26:56 +0000 Subject: [PATCH] Add nascent design documentation. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2589 57a11ea4-9604-0410-9ed3-97b8803252fd --- configure | 2 + configure.in | 1 + src/doc/Makefile.am | 3 + src/doc/Makefile.in | 159 +++++++++-- src/doc/design/.cvsignore | 4 + src/doc/design/Makefile.am | 8 + src/doc/design/Makefile.in | 382 ++++++++++++++++++++++++++ src/doc/design/concept-index.texinfo | 4 + src/doc/design/engine.texinfo | 2 + src/doc/design/gnucash-design.texinfo | 112 ++++++++ src/doc/design/intro.texinfo | 44 +++ src/doc/design/mdate-sh | 92 +++++++ src/doc/design/register.texinfo | 41 +++ src/doc/design/reports.texinfo | 2 + src/doc/design/texinfo.tex | 0 src/doc/design/top-level.texinfo | 78 ++++++ 16 files changed, 908 insertions(+), 26 deletions(-) create mode 100644 src/doc/design/.cvsignore create mode 100644 src/doc/design/Makefile.am create mode 100644 src/doc/design/Makefile.in create mode 100644 src/doc/design/concept-index.texinfo create mode 100644 src/doc/design/engine.texinfo create mode 100644 src/doc/design/gnucash-design.texinfo create mode 100644 src/doc/design/intro.texinfo create mode 100755 src/doc/design/mdate-sh create mode 100644 src/doc/design/register.texinfo create mode 100644 src/doc/design/reports.texinfo create mode 100644 src/doc/design/texinfo.tex create mode 100644 src/doc/design/top-level.texinfo diff --git a/configure b/configure index 1baeca936a..1197761cd8 100755 --- a/configure +++ b/configure @@ -5962,6 +5962,7 @@ trap 'rm -fr `echo " Makefile src/Makefile src/calculation/Makefile src/doc/Makefile + src/doc/design/Makefile src/engine/Makefile src/engine/sql/Makefile src/experimental/Makefile @@ -6152,6 +6153,7 @@ CONFIG_FILES=\${CONFIG_FILES-"Makefile src/Makefile src/calculation/Makefile src/doc/Makefile + src/doc/design/Makefile src/engine/Makefile src/engine/sql/Makefile src/experimental/Makefile diff --git a/configure.in b/configure.in index 05b3bcb3d0..e320d79f00 100644 --- a/configure.in +++ b/configure.in @@ -420,6 +420,7 @@ AC_OUTPUT( src/Makefile src/calculation/Makefile src/doc/Makefile + src/doc/design/Makefile src/engine/Makefile src/engine/sql/Makefile src/experimental/Makefile diff --git a/src/doc/Makefile.am b/src/doc/Makefile.am index 0847316b86..8f5e57cc8d 100644 --- a/src/doc/Makefile.am +++ b/src/doc/Makefile.am @@ -1,4 +1,7 @@ +SUBDIRS = \ + design + EXTRA_DIST = \ architecture.txt \ backup.txt \ diff --git a/src/doc/Makefile.in b/src/doc/Makefile.in index fe51810efc..39ad90d67e 100644 --- a/src/doc/Makefile.in +++ b/src/doc/Makefile.in @@ -115,6 +115,9 @@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ l = @l@ +SUBDIRS = design + + EXTRA_DIST = architecture.txt backup.txt budget.txt coding-style.txt plugin.txt tax.txt mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -136,9 +139,95 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status -tags: TAGS -TAGS: +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) @@ -160,30 +249,41 @@ distdir: $(DISTFILES) || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done info-am: -info: info-am +info: info-recursive dvi-am: -dvi: dvi-am +dvi: dvi-recursive check-am: all-am -check: check-am +check: check-recursive installcheck-am: -installcheck: installcheck-am +installcheck: installcheck-recursive install-exec-am: -install-exec: install-exec-am +install-exec: install-exec-recursive install-data-am: -install-data: install-data-am +install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-am +install: install-recursive uninstall-am: -uninstall: uninstall-am +uninstall: uninstall-recursive all-am: Makefile -all-redirect: all-am +all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: +installdirs: installdirs-recursive +installdirs-am: mostlyclean-generic: @@ -195,31 +295,38 @@ distclean-generic: -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: -mostlyclean-am: mostlyclean-generic +mostlyclean-am: mostlyclean-tags mostlyclean-generic -mostlyclean: mostlyclean-am +mostlyclean: mostlyclean-recursive -clean-am: clean-generic mostlyclean-am +clean-am: clean-tags clean-generic mostlyclean-am -clean: clean-am +clean: clean-recursive -distclean-am: distclean-generic clean-am +distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool -distclean: distclean-am +distclean: distclean-recursive -maintainer-clean-am: maintainer-clean-generic distclean-am +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." -maintainer-clean: maintainer-clean-am +maintainer-clean: maintainer-clean-recursive -.PHONY: tags distdir info-am info dvi-am dvi check check-am \ -installcheck-am installcheck install-exec-am install-exec \ -install-data-am install-data install-am install uninstall-am uninstall \ -all-redirect all-am all installdirs mostlyclean-generic \ -distclean-generic clean-generic maintainer-clean-generic clean \ -mostlyclean distclean maintainer-clean +.PHONY: install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/src/doc/design/.cvsignore b/src/doc/design/.cvsignore new file mode 100644 index 0000000000..7fc966f601 --- /dev/null +++ b/src/doc/design/.cvsignore @@ -0,0 +1,4 @@ +Makefile +version.texi +stamp-vti +*.info diff --git a/src/doc/design/Makefile.am b/src/doc/design/Makefile.am new file mode 100644 index 0000000000..a7f23ed441 --- /dev/null +++ b/src/doc/design/Makefile.am @@ -0,0 +1,8 @@ + +info_TEXINFOS = gnucash-design.texinfo +gnucash_design_TEXINFOS = concept-index.texinfo \ + engine.texinfo \ + intro.texinfo \ + register.texinfo \ + reports.texinfo \ + top-level.texinfo diff --git a/src/doc/design/Makefile.in b/src/doc/design/Makefile.in new file mode 100644 index 0000000000..6ea9b0bdc4 --- /dev/null +++ b/src/doc/design/Makefile.in @@ -0,0 +1,382 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = ../../.. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +DLLTOOL = @DLLTOOL@ +GENCAT = @GENCAT@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG_BIN = @GLIB_CONFIG_BIN@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GNC_CONFIGDIR = @GNC_CONFIGDIR@ +GNC_DOC_INSTALL_DIR = @GNC_DOC_INSTALL_DIR@ +GNC_LIBDIR = @GNC_LIBDIR@ +GNC_SCM_INSTALL_DIR = @GNC_SCM_INSTALL_DIR@ +GNC_SHAREDIR = @GNC_SHAREDIR@ +GNOME_CFLAGS = @GNOME_CFLAGS@ +GNOME_CONFIG_BIN = @GNOME_CONFIG_BIN@ +GNOME_LIBS = @GNOME_LIBS@ +GNOME_STATIC_TARGET = @GNOME_STATIC_TARGET@ +GNOME_TARGET = @GNOME_TARGET@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +GUILE = @GUILE@ +GUILE_COMPILE_ARGS = @GUILE_COMPILE_ARGS@ +GUILE_CONFIG = @GUILE_CONFIG@ +GUILE_LINK_ARGS = @GUILE_LINK_ARGS@ +G_WRAP = @G_WRAP@ +G_WRAP_COMPILE_ARGS = @G_WRAP_COMPILE_ARGS@ +G_WRAP_CONFIG = @G_WRAP_CONFIG@ +G_WRAP_LINK_ARGS = @G_WRAP_LINK_ARGS@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LOCALE_DIR = @LOCALE_DIR@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +PERLINCL = @PERLINCL@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SWIG = @SWIG@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +l = @l@ + +info_TEXINFOS = gnucash-design.texinfo +gnucash_design_TEXINFOS = concept-index.texinfo engine.texinfo intro.texinfo register.texinfo reports.texinfo top-level.texinfo + +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../../../config.h +CONFIG_CLEAN_FILES = +TEXI2DVI = texi2dvi +INFO_DEPS = gnucash-design.info +DVIS = gnucash-design.dvi +TEXINFOS = gnucash-design.texinfo +DIST_COMMON = $(gnucash_design_TEXINFOS) Makefile.am Makefile.in \ +mdate-sh stamp-vti texinfo.tex version.texi + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +.SUFFIXES: .dvi .info .ps .texi .texinfo .txi +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu src/doc/design/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +$(srcdir)/version.texi: stamp-vti + @: + +$(srcdir)/stamp-vti: gnucash-design.texinfo $(top_srcdir)/configure.in + @echo "@set UPDATED `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/gnucash-design.texinfo`" > vti.tmp + @echo "@set EDITION $(VERSION)" >> vti.tmp + @echo "@set VERSION $(VERSION)" >> vti.tmp + @cmp -s vti.tmp $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi"; \ + cp vti.tmp $(srcdir)/version.texi) + -@rm -f vti.tmp + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp + +clean-vti: + +distclean-vti: + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi + +gnucash-design.info: gnucash-design.texinfo version.texi $(gnucash_design_TEXINFOS) +gnucash-design.dvi: gnucash-design.texinfo version.texi $(gnucash_design_TEXINFOS) + + +DVIPS = dvips + +.texi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texi.dvi: + TEXINPUTS=.:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.texi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo.dvi: + TEXINPUTS=.:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.txi.dvi: + TEXINPUTS=.:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` +.dvi.ps: + $(DVIPS) $< -o $@ + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(infodir) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + d=$(srcdir); \ + for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ + if test -f $$d/$$ifile; then \ + echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ + $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ + else : ; fi; \ + done; \ + done + @$(POST_INSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ + install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ + done; \ + else : ; fi + +uninstall-info: + $(PRE_UNINSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + ii=yes; \ + else ii=; fi; \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + test -z "$ii" \ + || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ + done + @$(NORMAL_UNINSTALL) + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ + done + +dist-info: $(INFO_DEPS) + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + d=$(srcdir); \ + for file in `cd $$d && eval echo $$base*`; do \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done; \ + done + +mostlyclean-aminfo: + -rm -f gnucash-design.aux gnucash-design.cp gnucash-design.cps \ + gnucash-design.dvi gnucash-design.fn gnucash-design.fns \ + gnucash-design.ky gnucash-design.kys gnucash-design.ps \ + gnucash-design.log gnucash-design.pg gnucash-design.toc \ + gnucash-design.tp gnucash-design.tps gnucash-design.vr \ + gnucash-design.vrs gnucash-design.op gnucash-design.tr \ + gnucash-design.cv gnucash-design.cn + +clean-aminfo: + +distclean-aminfo: + +maintainer-clean-aminfo: + cd $(srcdir) && for i in $(INFO_DEPS); do \ + rm -f $$i; \ + if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ + rm -f $$i-[0-9]*; \ + fi; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = src/doc/design + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/doc/design/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info +info-am: $(INFO_DEPS) +info: info-am +dvi-am: $(DVIS) +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: install-info-am +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-info +uninstall: uninstall-am +all-am: Makefile $(INFO_DEPS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(infodir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-vti clean-aminfo clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-vti distclean-aminfo distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-vti maintainer-clean-aminfo \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \ +install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \ +clean-aminfo maintainer-clean-aminfo tags distdir info-am info dvi-am \ +dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/doc/design/concept-index.texinfo b/src/doc/design/concept-index.texinfo new file mode 100644 index 0000000000..024fc17497 --- /dev/null +++ b/src/doc/design/concept-index.texinfo @@ -0,0 +1,4 @@ +@node Concept Index, , Reports, Top +@unnumbered Concept Index + +@printindex cp diff --git a/src/doc/design/engine.texinfo b/src/doc/design/engine.texinfo new file mode 100644 index 0000000000..1efa0b762f --- /dev/null +++ b/src/doc/design/engine.texinfo @@ -0,0 +1,2 @@ +@node Engine, Register, Top Level, Top +@chapter Engine diff --git a/src/doc/design/gnucash-design.texinfo b/src/doc/design/gnucash-design.texinfo new file mode 100644 index 0000000000..67ce3ee2e0 --- /dev/null +++ b/src/doc/design/gnucash-design.texinfo @@ -0,0 +1,112 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename gnucash-design.info +@settitle GnuCash Design Document +@c %**end of header + +@comment 'version.texi' is a magic filename that, when included, +@comment will be auto-generated courtesy of automake. +@include version.texi + +@ifinfo +This file documents the design of the GnuCash program. + +Copyright 2000 Linas Vepstas + +This is Edition @value{EDITION}, last updated @value{UPDATED}, +of the @cite{GnuCash Design Document}, version @value{VERSION}. + +Permission is granted to make and distribute verbatim +copies of this manual provided the copyright notice and +this permission notice are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX +and print the results, provided the printed document +carries a copying permission notice identical to this +one except for the removal of this paragraph (this +paragraph not being relevant to the printed manual). +@end ignore + +Permission is granted to copy and distribute modified +versions of this manual under the conditions for +verbatim copying, provided also that the sections +entitled ``Copying'' and ``GNU General Public License'' +are included exactly as in the original, and provided +that the entire resulting derived work is distributed +under the terms of a permission notice identical to this +one. + +Permission is granted to copy and distribute +translations of this manual into another language, +under the above conditions for modified versions, +except that this permission notice may be stated in a +translation approved by the Free Software Foundation. +@end ifinfo + +@titlepage +@title GnuCash Design Document +@subtitle Edition @value{EDITION} for Version @value{VERSION} +@author Rob Browning +@author Bill Gribble +@author Dave Peticolas +@author Linas Vepstas +@page +@vskip 0pt plus 1filll +@copyright{} 2000 Linas Vepstas + +Permission is granted to make and distribute verbatim +copies of this manual provided the copyright notice and +this permission notice are preserved on all copies. + +Permission is granted to copy and distribute modified +versions of this manual under the conditions for +verbatim copying, provided also that the sections +entitled ``Copying'' and ``GNU General Public License'' +are included exactly as in the original, and provided +that the entire resulting derived work is distributed +under the terms of a permission notice identical to this +one. + +Permission is granted to copy and distribute +translations of this manual into another language, +under the above conditions for modified versions, +except that this permission notice may be stated in a +translation approved by the Free Software Foundation. +@end titlepage + +@ifinfo +@node Top, Introduction, (dir), (dir) +@top GnuCash Design Document +This is Edition @value{EDITION}, last updated @value{UPDATED}, +of the @cite{GnuCash Design Document}, version @value{VERSION}. +@end ifinfo + +@menu +* Introduction:: +* Top Level:: +* Engine:: +* Register:: +* Reports:: +* Concept Index:: + +@detailmenu --- The Detailed Node Listing --- + +Register + +* Cells:: + +@end detailmenu +@end menu + +@include intro.texinfo +@include top-level.texinfo +@include engine.texinfo +@include register.texinfo +@include reports.texinfo +@include concept-index.texinfo + +@summarycontents +@contents + +@bye diff --git a/src/doc/design/intro.texinfo b/src/doc/design/intro.texinfo new file mode 100644 index 0000000000..20f182be87 --- /dev/null +++ b/src/doc/design/intro.texinfo @@ -0,0 +1,44 @@ +@node Introduction, Top Level, Top, Top +@unnumbered Introduction + +This document defines the design and architecture of the GnuCash +program, an application for tracking finances. GnuCash is composed +of several subsystems or modules. This document describes each module, +specifying its interface and, where appropriate, its implementation, +as well as describing the interactions between each module. + +@unnumberedsec Who Should Read This Document? + +Anyone who plans on making a significant change or addition to GnuCash's +functionality should read this document. By adhering to the structure +presented here, your contribution will be more likely to work correctly +with existing and future features. + +@unnumberedsec Goals + +GnuCash is intended to be a finance and accounting program for +individuals and small businesses. As such, it should have the +following primary features: + +@itemize + +@item +A sound underlying model for financial entities such as currencies, +transactions, and accounts. + +@item +A user interface which provides an efficient way to accomplish +common tasks, such as transaction entry, account reconciliation, +etc. + +@item +The ability to generate and print standard financial reports +such as Income Statements, Balance Sheets, etc. + +@item +The ability to generate and print graphs of financial information. + +@end itemize + +A more comprehensive list of current and planned features for GnuCash +is at @uref{http://cvs.gnucash.org/linux/gnucash/projects.html}. diff --git a/src/doc/design/mdate-sh b/src/doc/design/mdate-sh new file mode 100755 index 0000000000..37171f21fb --- /dev/null +++ b/src/doc/design/mdate-sh @@ -0,0 +1,92 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. +# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# 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, 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. + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# Get the extended ls output of the file or directory. +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +if ls -L /dev/null 1>/dev/null 2>&1; then + set - x`ls -L -l -d $1` +else + set - x`ls -l -d $1` +fi +# The month is at least the fourth argument +# (3 shifts here, the next inside the loop). +shift +shift +shift + +# Find the month. Next argument is day, followed by the year or time. +month= +until test $month +do + shift + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +day=$2 + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year diff --git a/src/doc/design/register.texinfo b/src/doc/design/register.texinfo new file mode 100644 index 0000000000..6cc9f83aaf --- /dev/null +++ b/src/doc/design/register.texinfo @@ -0,0 +1,41 @@ +@node Register, Reports, Engine, Top +@chapter Register + +The register is an infrastructure for building a modular matrix of cells +in which each cell may be specialized to perform a particular function, +e.g., to read dates, numerical amounts, or text. The register has been +designed to be easy to extend, modular, easy to maintain, and memory +efficient. It is intended to be used for building financial apps and +spread-sheets. + +The register object should not have any 'knowledge' of the accounting +model of GnuCash or of the workings of the main application. The +register should not be specific to a particular GUI (such as Gnome/GTK). +It should be possible to use the register in a stand-alone fashion. + +The register is built from severl types of components: Cells, +Cellblocks, Cursors, the Table, and the Split Register. + +@menu +* Cells:: +@end menu + +@node Cells, , Register, Register +@section Cells + +A @dfn{Cell} is an active object which is designed to read a specific +kind of user input. A Cell object has callbacks that are called when +the user enters the cell (e.g. by mouse-clicking on a cell in a table, +or tabbing into it), when the user attempts to modify text in the cell +(e.g. by typing in it), and when the user leaves the cell (e.g. by +mouse-clicking elsewhere, or tabbing away). + +Special-purpose cells can be created by "inheriting" from the basic cell +object. Thus, there are special-purpose cells for handling dates, +pull-down menus, text fields, monetary amounts, etc. + +Cells implementations may or may not contain GUI code. Cells which +require only that text be displayed are completely "GUI-independent", +that is, they depend on the underlying table to display the text. Cells +which require additional GUI elements (such as pull-down menus) must +implement the proper GUI handling on their own (using, e.g., GTK). diff --git a/src/doc/design/reports.texinfo b/src/doc/design/reports.texinfo new file mode 100644 index 0000000000..e23190eb41 --- /dev/null +++ b/src/doc/design/reports.texinfo @@ -0,0 +1,2 @@ +@node Reports, Concept Index, Register, Top +@chapter Reports diff --git a/src/doc/design/texinfo.tex b/src/doc/design/texinfo.tex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/doc/design/top-level.texinfo b/src/doc/design/top-level.texinfo new file mode 100644 index 0000000000..cf15e0e530 --- /dev/null +++ b/src/doc/design/top-level.texinfo @@ -0,0 +1,78 @@ +@node Top Level, Engine, Introduction, Top +@chapter Top Level Design + +GnuCash currently consists of the following modules. + +@section The Engine + +The @dfn{Engine} (located under the src/engine directory in the GnuCash +codebase) provides an interface for creating, manipulating, and +destroying three basic financial entities: Accounts, Transactions (known +as Journal Entries in accounting practice), and Splits (known as Ledger +Entries). These three entities are the central data structures of the +GnuCash financial data model. + +The Engine code contains no GUI code whatsoever, and is essentially +OS-neutral. + + +@section The Register + +The @dfn{Register} (located under src/register) implements a ledger-like +GUI that allows the user to dynamically enter dates, prices, memos +descriptions, etc. in an intuitive fashion that should be obvious to +anyone who's used a checkbook register. The code is highly configurable, +allowing the ledger columns and rows to be laid out in any way, with no +restrictions on the function, type, and number of columns/rows. For +example, one can define a ledger with three date fields, one price +field, and four memo fields in a straightforward fashion. Cell handling +objects support and automatically validate date entry, memo entry +(w/auto-completion), prices, combo-boxes (pull-down menus), and +multi-state check-boxes. Cells can be marked read-write, or output-only. +Cells can be assigned unique colors. The currently active ledger +row-block can be highlighted with a unique color. + +The register code is completely independent of the engine code, knows +nothing about accounting or any of the other GnuCash subsystems. It +can be used in independent projects that have nothing to do with +accounting. + + +@section Reports + +The @dfn{Reports} module (src/reports) is a scheme (guile) based system +to create balance sheets, profit & loss statements, etc. by using the +engine API's to fetch and display data. + + +@section Quotes + +The @dfn{Quotes} module (src/quotes) is a perl system to fetch stock +price data off the Internet and insert it into the GnuCash Engine. This +is now a separate project called Finance::Quote available at +SourceForge. + + +@section Options + +The @dfn{Options} module (src/scm/options.scm) provides an +infrastructure for defining both user-configurable and internal options +or 'preferences'. User-configurable options are 'implemented' by +providing a GUI which allows the user to see and change option values. + +@section GnuCash + +The GnuCash module (src/gnome, src/register/gnome and src/*.[ch]) is the +main GUI application. It consists of a collection of miscellaneous GUI +code to glue together all of the pieces above into a coherent, +point-and-click whole. It is meant to be easy to use and intuitive to +the novice user without sacrificing the power and flexibility that a +professional might expect. When people say that GnuCash is trying to be +a "Quicken or MSMoney look/work/act-alike", this is the piece that they +are referring to. It really is meant to be a personal-finance manager +with enough power for the power user and the ease of use for the +beginner. + +Currently, the Gnome interface is the only operational interface. There +is an obsolete Motif interface which is not maintained. The Qt code +won't compile, and most/all functions are missing.