#!/bin/sh # packaging, library.org LIBRARYFILE=~/.library/library.rec LIBRARYDIRECTORY=~/.library GIT=detect # help-message, /home/swflint/Projects/library/library.org if [[ $# -eq 0 ]] ; then echo "library [ help | query | add | git | bulk-add | report | edit | edit-matching | loan | return-book | init ]" exit fi function display_help { cat < ${LIBRARYDIRECTORY}/${REPORT}.report emacsclient --alternate-editor="" -n ${LIBRARYDIRECTORY}/${REPORT}.report ;; *) if [[ -e ${LIBRARYDIRECTORY}/${NAME}.report ]] ; then sh ${LIBRARYDIRECTORY}/${NAME}.report $@ fi esac } # handle-reports ends here # handle-git, /home/swflint/Projects/library/library.org function do_git { if [[ $# -lt 1 ]] ; then echo "library git args*" exit 1 fi FIRST=$1 if [[ $FIRST == "init" ]] ; then OLD=`pwd` cd ${LIBRARYDIRECTORY} git $@ cd ${OLD} else if [[ $GIT == "detect" ]] ; then OLD=`pwd` cd ${LIBRARYDIRECTORY} git "$@" cd ${OLD} fi fi } # handle-git ends here # handle-query, /home/swflint/Projects/library/library.org function run_query { recsel -t Book $@ ${LIBRARYFILE} } # handle-query ends here # add-book, /home/swflint/Projects/library/library.org function add_single { if [[ $# -lt 7 ]] ; then echo -n "Title: " read TITLE echo -n "Author: " read AUTHOR echo -n "LCCN: " read LCCN echo -n "Copyright: " read COPYRIGHT echo -n "Publisher: " read PUBLISHER echo -n "ISBN: " read ISBN echo -n "Location: " read LOCATION else TITLE=$1 shift AUTHOR=$1 shift LCCN=$1 shift COPYRIGHT=$1 shift PUBLISHER=$1 shift ISBN=$1 shift LOCATION=$1 shift fi recins -t Book \ -f Title -v "${TITLE}" \ -f Author -v "${AUTHOR}" \ -f LCCN -v "${LCCN}" \ -f Copyright -v "${COPYRIGHT}" \ -f Publisher -v "${PUBLISHER}" \ -f ISBN -v "${ISBN}" \ -f Location -v "${LOCATION}" \ ${LIBRARYFILE} do_git add `basename ${LIBRARYFILE}` do_git commit -m "Added record for \"${TITLE}\"" } # add-book ends here # add-in-bulk, /home/swflint/Projects/library/library.org function bulk_add { if [[ $@ -lt 1 ]] ; then echo "library bulk-add number" exit 1 fi GITOLD=${GIT} GIT=FALSE for i in {1..$1} ; do echo "Adding book number ${i}" add_single done GIT=${GITOLD} do_git add `basename ${LIBRARYFILE}` do_git commit -m "Added ${1} records" } # add-in-bulk ends here # edit-field, /home/swflint/Projects/library/library.org function do_edit { if [[ $# -lt 2 ]] ; then echo "ledger edit id field [ value ]" exit 1 fi ID=$1 shift FIELD=$1 shift if [[ $FIELD = "Withdrawn" ]] ; then recset -e "ID = ${ID}" \ -f "Withdrawn" -S "`date +"%a, %d %b %Y %H:%M:%S %z"`" \ ${LIBRARYFILE} else VALUE=$1 shift recset -e "ID = ${ID}" \ -f "${FIELD}" -s "${VALUE}" \ ${LIBRARYFILE} fi do_git add `basename ${LIBRARYFILE}` do_git commit -m "Edited record id ${ID}" } function do_edit_exp { if [[ $# -lt 3 ]] ; then echo "ledger edit-matching match-exp field value [ commit-message ]" exit 1 fi MATCHEXPRESSION=$1 shift FIELDNAME=$1 shift VALUE=$1 shift recset -e "${MATCHEXPRESSION}" \ -f "${FIELDNAME}" -S "${VALUE}" \ ${LIBRARYFILE} do_git add $(basename ${LIBRARYFILE}) if [[ $1 != "" ]] ; then do_git commit -m "${1}" else do_git commit -m "Bulk edited records" fi } # edit-field ends here # initialize-database, /home/swflint/Projects/library/library.org function initialize { OLD=`pwd` mkdir -p ${LIBRARYDIRECTORY} cd ${LIBRARYDIRECTORY} [[ ! -e `basename ${LIBRARYFILE}` ]] && \ cat < `basename ${LIBRARYFILE}` # file-format, /home/swflint/Projects/library/library.org # -*- mode: rec -*- %rec: Book %doc: Foo %key: ID %unique: Title %type: ID int %type: Title line %type: Author line %type: LCCN line %type: ISBN regexp /[0-9]*X?/ %type: Publisher line %type: Copyright int %type: Location line %type: Withdrawn date %type: Inserted date %type: LoanTo line %type: LoanOn date %mandatory: Title Author LCCN Inserted %allowed: ISBN Publisher Copyright Location Withdrawn LoanTo LoanOn %auto: ID Inserted # file-format ends here EOF } # initialize-database ends here # loan, /home/swflint/Projects/library/library.org function do_loan { if [[ $# -lt 2 ]] ; then echo "library loan id name" exit 1 fi ID=$1 shift NAME=$1 shift recset -e "ID = ${ID}" \ -f "LoanTo" -S "${NAME}" \ ${LIBRARYFILE} recset -e "ID = ${ID}" \ -f "LoanOn" -S "`date +"%a, %d %b %Y %H:%M:%S %z"`" \ ${LIBRARYFILE} do_git add `basename ${LIBRARYFILE}` do_git commit -m "Loaned Book ${ID} to ${NAME}" } function do_return { if [[ $# -lt 1 ]] ; then echo "library return-book id" exit 1 fi ID=$1 shift recset -e "ID = ${ID}" \ -f "LoanTo" -d \ ${LIBRARYFILE} recset -e "ID = ${ID}" \ -f "LoanOn" -d \ ${LIBRARYFILE} do_git add `basename ${LIBRARYFILE}` do_git commit -m "Returned Book ${ID}" } # loan ends here # process-commands, /home/swflint/Projects/library/library.org COMMAND=$1 shift case ${COMMAND} in help) display_help exit ;; query) run_query "$@" exit ;; add) add_single "$@" exit ;; git) do_git "$@" exit ;; bulk-add) bulk_add "$@" exit ;; report) do_report "$@" exit ;; edit) do_edit "$@" exit ;; edit-matching) do_edit_exp "$@" exit ;; loan) do_loan "$@" exit ;; return-book) do_return "$@" exit ;; init) initialize exit ;; *) display_help exit esac # process-commands ends here # packaging ends here