#!/bin/zsh -f # packaging, library.org LIBRARYFILE=~/.library/library.rec LIBRARYDIRECTORY=~/.library GIT=detect # help-message, /home/swflint/org/library.org if [[ $# -eq 0 ]] ; then echo "library [ help | query | add | git | bulk-add | report | edit | 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/org/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/org/library.org function run-query { recsel -t Book $@ ${LIBRARYFILE} } # handle-query ends here # add-book, /home/swflint/org/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/org/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/org/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}" } # edit-field ends here # initialize-database, /home/swflint/org/library.org function initialize { OLD=`pwd` mkdir -p ${LIBRARYDIRECTORY} cd ${LIBRARYDIRECTORY} [[ -ne `basename ${LIBRARYFILE}` ]] && \ cat < `basename ${LIBRARYFILE}` # file-format, /home/swflint/org/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/org/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/org/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 ;; loan) do-loan $@ exit ;; return-book) do-return $@ exit ;; init) initialize exit ;; *) display-help exit esac # process-commands ends here # packaging ends here