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.