source: project/release/4/dissector/util.scm @ 12396

Last change on this file since 12396 was 12286, checked in by felix winkelmann, 12 years ago

ported to chicken-4

File size: 1.5 KB
Line 
1;;;;;; Utilities used by the Dissector
2
3;;; Copyright (C) 2004, Taylor Campbell
4;;; All rights reserved.
5;;; See the LICENCE file for details.
6
7(define (read-objects-from-string string limit)
8  (let ((port (open-input-string string)))
9    (let recur ((count 0))
10      (receive (ok? elt)
11               (carefully-read port)
12        (cond ((not ok?)          #f)   ; Order is important: ELT will
13              ((eof-object? elt) '())   ;   be an EOF if not OK?, but
14              ((> count limit)          ;   not necessarily vice versa.
15               (error "Too many items read"
16                      `(maximum is ,limit)))
17              (else (cons elt (recur (+ count 1)))))))))
18
19(define (length>=? l len)
20  (let loop ((l l) (len len))
21    (cond ((zero? len) #t)
22          ((null? l)   #f)
23          (else        (loop (cdr l) (- len 1))))))
24
25(define (length=? l len)
26  (let loop ((l l) (len len))
27    (cond ((null? l)   (zero? len))
28          ((zero? len) #f)
29          (else        (loop (cdr l) (- len 1))))))
30
31(define (any? f l)
32  (and (not (null? l))
33       (or (f (car l)) (any? f (cdr l)))))
34
35(define (pad-string s width)
36  (string-append (make-string (- width (string-length s))
37                              #\space)
38                 s))
39
40(define (maybe-drop lst count)
41  (cond ((null? lst)   #f)              ; This case must come first:
42        ((zero? count) lst)             ;   COUNT may be 0 if LST is ()
43        (else          (maybe-drop (cdr lst) (- count 1)))))
Note: See TracBrowser for help on using the repository browser.