#lang scheme/base (require file/gunzip file/gzip mzlib/trace scheme/file scheme/system (planet bzlib/os) (planet bzlib/base) "port.ss" "filter.ss" (rename-in file/gunzip (gunzip-through-ports input-gzip-filter)) ) (define (gzip/exe) (find-executable-path (+:windows "gzip.exe" "gzip"))) (define (gzip/sys path) (system* (gzip/exe) path)) (define (gunzip/sys path) (system* (gzip/exe) "-d" path)) (define (gzipped-path path) (string->path (string-append (if (path? path) (path->string path) path) ".gz"))) (define (open-input-gzip-port in) (make-input-filter-port in input-gzip-filter #f)) (define call-with-input-gzip-port (make-call-with-input-port open-input-gzip-port in)) (define (open-input-gzip-file path) (open-input-gzip-port (open-input-file path))) (define call-with-input-gzip-file (make-call-with-input-port open-input-gzip-file path)) (define (output-gzip-filter in out) (gzip-through-ports in out #f (current-seconds))) (define (open-output-gzip-port out) (make-output-filter-port out output-gzip-filter #f)) (define call-with-output-gzip-port (make-call-with-output-port open-output-gzip-port out)) (define (open-output-gzip-file path #:exists (exists 'replace)) (open-output-gzip-port (open-output-file path #:exists exists))) (define call-with-output-gzip-file (make-call-with-output-port open-output-gzip-file path #:exists (exists 'replace))) (provide/contract (gzip/sys (-> path-string? any)) (gunzip/sys (-> path-string? any)) (open-input-gzip-port (-> input-port? input-port?)) (call-with-input-gzip-port (-> input-port? (-> input-port? any) any)) (open-input-gzip-file (-> path-string? input-port?)) (call-with-input-gzip-file (-> path-string? (-> input-port? any) any)) (open-output-gzip-port (-> output-port? output-port?)) (call-with-output-gzip-port (-> output-port? (-> output-port? any) any)) (open-output-gzip-file (->* (path-string?) (#:exists (or/c 'replace 'truncate)) output-port?)) (call-with-output-gzip-file (->* (path-string? (-> output-port? any)) (#:exists (or/c 'replace 'truncate)) any)) (gzipped-path (-> path-string? path-string?)) (output-gzip-filter port-filter/c) ) (provide input-gzip-filter)