;; ;; brmsaptool.scm ;; ;; Brmlab members management tool. ;; ;; ISC License ;; ;; Copyright 2023 Brmlab, z.s. ;; Dominik Pantůček ;; ;; Permission to use, copy, modify, and/or distribute this software ;; for any purpose with or without fee is hereby granted, provided ;; that the above copyright notice and this permission notice appear ;; in all copies. ;; ;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL ;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED ;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE ;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR ;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS ;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, ;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN ;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;; (import testing listing dictionary month period member-file command-line utils ansi members-base primes member-record) ;; Print banner (print "brmsaptool 0.3 (c) 2023 Brmlab, z.s.") (newline) ;; Run tests (listing-tests!) (dictionary-tests!) (month-tests!) (period-tests!) (utils-tests!) (ansi-tests!) (member-file-tests!) (command-line-tests!) (members-base-tests!) (primes-tests!) (member-record-tests!) (newline) ;; Command-line options and configurable parameters (define *members-directory* (make-parameter "members")) (define -member-id- (make-parameter #f)) (define -member-nick- (make-parameter #f)) (define -action- (make-parameter #f)) ;; Arguments parsing (command-line print-help (-h () "This help" (print "Command-line options:") (newline) (print-help) (newline) (exit 0)) (-MB (dir) "Members base directory" (*members-directory* dir)) (-mfkw () "Member-File invalid Key Warning" (*member-file-check-syntax* 'warning)) (-mfkq () "Member-File invalid Key Quiet" (*member-file-check-syntax* 'quiet)) (-mfec (n) "Member-File parser Error Context (lines)" (*member-file-context* (string->number n))) (-mi (id) "Specify member by id" (-member-id- (string->number id))) (-mn (nick) "Specify member by nick" (-member-nick- nick)) (-pi () "Print information" (-action- 'print-info)) ) ;; Load the members database (required for everything anyway) (define MB (load-members (*members-directory*) #t)) ;; If a member is specified by either id or nick, get its record (define mr (if (-member-id-) (find-member-by-id MB (-member-id-)) (if (-member-nick-) (find-member-by-nick MB (-member-nick-)) #f))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Perform requested action (case (-action-) ((print-info) (newline) (if mr (print-member-record-info mr) (print-members-base-info MB)) (newline)))