BrmBuro ======= Brmlab Bureacratic system. License ------- 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. Features -------- * members base management * member files parsing and validation * member ids validation * generating new member id * per-month statistics of active, suspended, destroyed and student members * detailed member information * querying members by id or nick Requirements ------------ There are no runtime requirements, it is possible to build binary that requires only libc. Build requirements: * Chicken Scheme 5 * make (tested with GNU make) Building static binary: make brmsaptool-static It is possible to run the main tool as script with Chicken Scheme interpreter and POSIX-compatible shell for the purpose of development. Development requirements: * POSIX shell Functional Modules ------------------ ### Configuration ### Member File ### Member Record ### Member Base ### Month ### Period ### Primes Support Modules --------------- ### ANSI ### Command Line parsing ### Dictionary ### Listing ### Progress ### Testing This module provides simple syntax forms for (unit) testing of other modules. (run-tests name body ...) * ```name``` - identifier describing the module being tested * ```body ...``` - test expressions Runs all tests specified on the ```body ...```. Firstly it prints "[test] name " at the beginning of the line. Secondly it runs all tests, printing "." for each test successfully passed. If all tests pass, prints " ok." and moves the cursor to the next line. In case any of the tests fails, exception is raised and program terminates. (test-eq? name expression expected-result) * ```name``` - identifier representing the name of the test * ```expression``` - expression to be evaluated * ```expected-result``` - expected result of the test expression Evaluates the test ```expression``` and compares the result with ```expected-result``` using ```eq?```. If the comparison fails, an exception is raised with the ```name``` of the test added to the exception. If the test passes, prints "." like all tests from this module do. ### Utils To ensure there are no external dependencies (including chicken eggs), this module re-implements any basic procedures which are required for any algorithms used. (filter pred? lst) * ```pred?``` - procedure accepting any value and returning #t or #f * ```lst``` - list to be filtered Returns a list containing only elements matching given ```pred?``` predicate.