;; Copyright (C) 2018 Thomas Balzer
;; This file is part of tomd.
;; tomd is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; tomd is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with tomd. If not, see .
(define-module (tomd job)
#:use-module (srfi srfi-9)
#:export (create-job make-job
job-command-line c-job-cmd
job-args c-job-args
job-start-trigger c-job-start-trigger
job-end-trigger c-job-end-trigger
job-name c-job-name
c-check-job))
;;; records
(define-record-type
(make-job name command-line args start-trigger end-trigger)
job?
(name job-name)
(command-line job-command-line)
(args job-args)
(start-trigger job-start-trigger)
(end-trigger job-end-trigger))
;;; this sillyness is because i'm not sure how to expand macros in scm_call
(define (c-check-job obj)
(job? obj))
(define (c-job-cmd obj)
(job-command-line obj))
(define (c-job-args obj)
(job-args obj))
(define (c-job-start-trigger obj)
(job-start-trigger obj))
(define (c-job-end-trigger obj)
(job-end-trigger obj))
(define (c-job-name obj)
(job-name obj))
;;; functions
(define (get-keyword-value args keyword default)
(let ((keyword-value (memq keyword args)))
(if (and keyword-value (>= (length keyword-value) 2))
(cadr keyword-value)
default)))
(define (create-job . rest)
(let ((command-line (get-keyword-value rest #:command-line #f))
(args (get-keyword-value rest #:args (list)))
(start-trigger (get-keyword-value rest #:start-trigger 'login))
(end-trigger (get-keyword-value rest #:end-trigger #f))
(name (get-keyword-value rest #:name "default")))
;; do thing with keyword-ed variables
;; (display "settings:") (newline)
;; (format (current-output-port)
;; "command-line:~a" command-line)
;; (newline)
;; (format (current-output-port)
;; "args:~a" args)
;; (newline)
;; (format (current-output-port)
;; "start-trigger:~a" start-trigger)
;; (newline)
;; (format (current-output-port)
;; "end-trigger:~a" end-trigger)
;; (newline)
;; create a new object that represents the args given.
(make-job name
command-line
args
start-trigger
end-trigger)
))