(module util mzscheme (require (prefix list: (lib "list.ss" "srfi" "1"))) (require (lib "etc.ss")) (require (lib "match.ss")) ;; TODO: Ryan, help! just doesn't work. #;(define-syntax (in-this-directory stx) (syntax-case stx () [(_ e1 e2 ...) (begin (syntax/loc stx (parameterize ([current-directory (this-expression-source-directory)]) e1 e2 ...)))])) ;; write-lines : (listof string) -> any (define (write-lines lines) (for-each (lambda (line) (printf "~a~n" line)) lines)) ;; read-lines : -> (listof string) (define (read-lines) (let loop ([result '()]) (let ([line (read-line (current-input-port) 'any)]) (if (eof-object? line) (reverse result) (loop (cons line result)))))) (define (rm-rf dir) (when (directory-exists? dir) (rm-r dir))) (define (rm-r dir) (for-each (lambda (entry) (let ([path (build-path dir entry)]) (if (directory-exists? path) (rm-r path) (delete-file path)))) (directory-list dir)) (delete-directory dir)) (define (build-dir-tree src) (match src [('dir dir-name rest ...) (rm-rf dir-name) (make-directory dir-name) (parameterize ([current-directory dir-name]) (for-each build-dir-tree rest))] [('file i) (with-output-to-file (format "test~a.txt" i) (lambda () (printf "(test~a a b c)~n" i)) 'replace)])) (define (all-files dir) (list:append-map (lambda (entry) (let ([path (build-path dir entry)]) (if (directory-exists? path) (all-files path) (list path)))) (directory-list dir))) (provide (all-defined)))