| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 | #!/bin/zsh -f# packaging, library.orgLIBRARYFILE=~/.library/library.recLIBRARYDIRECTORY=~/.libraryGIT=detect# help-message, /home/swflint/org/library.orgif [[ $# -eq 0 ]] ; then    echo "library [ help | query | add | git | bulk-add | report | edit | loan | do-return | init ]"    exitfifunction display-help {    cat <<EOFlibrary [ help | query | add | git | bulk-add | report | edit | loan | do-return | init ]help:       Display this help message.query:      Query Library Database.add:        Add a singular book record.git:        Run a git command.bulk-add:   Add a specified number of records.report:     Run a report.edit:       Edit the value of a specified field in a specified record.loan:       Loan a book out.do-return:  Process a book returninit:       Initialize the database.EOF}# help-message ends here# handle-reports, /home/swflint/org/library.orgfunction do-report {    if [[ $# -lt 1 ]] ; then        echo "library report name args*"        exit 1    fi    NAME=$1    shift    case ${NAME} in        list)            for report in ${LIBRARYDIRECTORY}/*.report ;            do                echo " - $(basename -- ${report} .report)"            done        ;;        new)            if [[ $# -lt 1 ]] ; then                echo "library report new name"                exit 1            fi            REPORT=$1            shift            echo "# -*- mode: shell-script -*-" > ${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.orgfunction 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.orgfunction run-query {    recsel -t Book $@ ${LIBRARYFILE}}# handle-query ends here# add-book, /home/swflint/org/library.orgfunction 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.orgfunction 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.orgfunction 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.orgfunction initialize {    OLD=`pwd`    mkdir -p ${LIBRARYDIRECTORY}    cd ${LIBRARYDIRECTORY}    [[ -ne `basename ${LIBRARYFILE}` ]] && \        cat <<EOF > `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 hereEOF}# initialize-database ends here# loan, /home/swflint/org/library.orgfunction 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.orgCOMMAND=$1shiftcase ${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        exitesac# process-commands ends here# packaging ends here
 |