vixie-time: Refactor 'parse-vixie-time'
* src/mcron/vixie-time.scm (parse-vixie-time): Use 'match' to avoid complex 'car' and 'cdr' usage.
This commit is contained in:
parent
68be2dd2dd
commit
cf3146b3c5
1 changed files with 61 additions and 66 deletions
|
|
@ -307,73 +307,68 @@ accounted for."
|
||||||
((< (length tokens) 5)
|
((< (length tokens) 5)
|
||||||
(throw 'mcron-error 9
|
(throw 'mcron-error 9
|
||||||
"Not enough fields in Vixie-style time specification")))
|
"Not enough fields in Vixie-style time specification")))
|
||||||
(let ((time-spec-list
|
(match (map-in-order
|
||||||
(map-in-order (lambda (x) (vector
|
(λ (x)
|
||||||
(let* ((n (vector-ref x 0))
|
(vector
|
||||||
(tok (list-ref tokens n)))
|
(let* ((n (vector-ref x 0))
|
||||||
(cond
|
(tok (list-ref tokens n)))
|
||||||
((and (= n 4)
|
(cond
|
||||||
(string=? tok "*")
|
((and (= n 4)
|
||||||
(not (string=?
|
(string=? tok "*")
|
||||||
(list-ref tokens 2) "*")))
|
(not (string=?
|
||||||
'())
|
(list-ref tokens 2) "*")))
|
||||||
((and (= n 2)
|
'())
|
||||||
(string=? tok "*")
|
((and (= n 2)
|
||||||
(not (string=?
|
(string=? tok "*")
|
||||||
(list-ref tokens 4) "*")))
|
(not (string=?
|
||||||
'())
|
(list-ref tokens 4) "*")))
|
||||||
(else
|
'())
|
||||||
(parse-vixie-element
|
(else
|
||||||
tok
|
(parse-vixie-element
|
||||||
(vector-ref x 1)
|
tok
|
||||||
(vector-ref x 2))))) ; [0]
|
(vector-ref x 1)
|
||||||
(vector-ref x 3)
|
(vector-ref x 2))))) ; [0]
|
||||||
(vector-ref x 4)))
|
(vector-ref x 3)
|
||||||
;; token range-top+1 getter setter
|
(vector-ref x 4)))
|
||||||
`( #( 0 0 60 ,tm:min ,set-tm:min )
|
;; token range-top+1 getter setter
|
||||||
#( 1 0 24 ,tm:hour ,set-tm:hour )
|
`( #( 0 0 60 ,tm:min ,set-tm:min )
|
||||||
#( 2 1 32 ,tm:mday ,set-tm:mday )
|
#( 1 0 24 ,tm:hour ,set-tm:hour )
|
||||||
#( 3 0 12 ,tm:mon ,set-tm:mon )
|
#( 2 1 32 ,tm:mday ,set-tm:mday )
|
||||||
#( 4 0 7 ,tm:wday ,set-tm:wday ))))) ;; [1]
|
#( 3 0 12 ,tm:mon ,set-tm:mon )
|
||||||
|
#( 4 0 7 ,tm:wday ,set-tm:wday ))) ;; [1]
|
||||||
|
((and time-spec-list (min hour day month wday))
|
||||||
|
(vector-set! wday
|
||||||
|
0
|
||||||
|
(map (lambda (time-spec)
|
||||||
|
(if (eqv? time-spec 7) 0 time-spec))
|
||||||
|
(vector-ref wday 0))) ;; [2]
|
||||||
|
|
||||||
(vector-set! (car (last-pair time-spec-list))
|
(vector-set! day
|
||||||
0
|
0
|
||||||
(map (lambda (time-spec)
|
(remove (lambda (d) (eqv? d 0))
|
||||||
(if (eqv? time-spec 7) 0 time-spec))
|
(vector-ref day 0))) ;; [2.1]
|
||||||
(vector-ref (car (last-pair time-spec-list)) 0))) ;; [2]
|
|
||||||
|
|
||||||
(vector-set! (caddr time-spec-list)
|
(λ (current-time) ;; [3]
|
||||||
0
|
(let ((time (localtime current-time))) ;; [4]
|
||||||
(remove (lambda (day) (eqv? day 0))
|
(unless (member (tm:mon time) (time-spec:list month))
|
||||||
(vector-ref (caddr time-spec-list) 0))) ;; [2.1]
|
(nudge-month! time (cdddr time-spec-list))
|
||||||
|
(set-tm:mday time 0))
|
||||||
|
(when (or (eqv? (tm:mday time) 0)
|
||||||
(lambda (current-time) ;; [3]
|
(not (member (tm:mday time)
|
||||||
(let ((time (localtime current-time))) ;; [4]
|
(interpolate-weekdays
|
||||||
|
(time-spec:list day)
|
||||||
(if (not (member (tm:mon time)
|
(time-spec:list wday)
|
||||||
(time-spec:list (cadddr time-spec-list))))
|
(tm:mon time)
|
||||||
(begin
|
(tm:year time)))))
|
||||||
(nudge-month! time (cdddr time-spec-list))
|
(nudge-day! (pk time) (pk (cddr time-spec-list)))
|
||||||
(set-tm:mday time 0)))
|
(set-tm:hour time -1))
|
||||||
(if (or (eqv? (tm:mday time) 0)
|
(unless (member (tm:hour time)
|
||||||
(not (member (tm:mday time)
|
(time-spec:list hour))
|
||||||
(interpolate-weekdays
|
(nudge-hour! time (cdr time-spec-list))
|
||||||
(time-spec:list (caddr time-spec-list))
|
(set-tm:min time -1)) ;; [5]
|
||||||
(time-spec:list (caddr (cddr time-spec-list)))
|
|
||||||
(tm:mon time)
|
(set-tm:sec time 0)
|
||||||
(tm:year time)))))
|
(nudge-min! time time-spec-list) ;; [6]
|
||||||
(begin
|
(first (mktime time)))))))) ;; [7]
|
||||||
(nudge-day! time (cddr time-spec-list))
|
|
||||||
(set-tm:hour time -1)))
|
|
||||||
(if (not (member (tm:hour time)
|
|
||||||
(time-spec:list (cadr time-spec-list))))
|
|
||||||
(begin
|
|
||||||
(nudge-hour! time (cdr time-spec-list))
|
|
||||||
(set-tm:min time -1))) ;; [5]
|
|
||||||
|
|
||||||
(set-tm:sec time 0)
|
|
||||||
(nudge-min! time time-spec-list) ;; [6]
|
|
||||||
(car (mktime time))))))) ;; [7]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue