55 lines
2.3 KiB
Scheme
55 lines
2.3 KiB
Scheme
;;; unit/information.scm
|
|
|
|
(define-module (unit information)
|
|
#:use-module (ice-9 match)
|
|
#:export (parse-unit/information))
|
|
|
|
|
|
(define (parse-unit/information unit)
|
|
;; Parse the units of information (bits and bytes)
|
|
(match unit
|
|
('b 1)
|
|
('Kib (* 1024 (parse-unit/information 'b)))
|
|
('Mib (* 1024 (parse-unit/information 'Kib)))
|
|
('Gib (* 1024 (parse-unit/information 'Mib)))
|
|
('Tib (* 1024 (parse-unit/information 'Gib)))
|
|
('Pib (* 1024 (parse-unit/information 'Pib)))
|
|
('Eib (* 1024 (parse-unit/information 'Eib)))
|
|
('Zib (* 1024 (parse-unit/information 'Zib)))
|
|
('Yib (* 1024 (parse-unit/information 'Yib)))
|
|
('Rib (* 1024 (parse-unit/information 'Rib)))
|
|
('Qib (* 1024 (parse-unit/information 'Qib)))
|
|
('Kb (* 1000 (parse-unit/information 'b)))
|
|
('Mb (* 1000 (parse-unit/information 'Kb)))
|
|
('Gb (* 1000 (parse-unit/information 'Mb)))
|
|
('Tb (* 1000 (parse-unit/information 'Gb)))
|
|
('Pb (* 1000 (parse-unit/information 'Pb)))
|
|
('Eb (* 1000 (parse-unit/information 'Eb)))
|
|
('Zb (* 1000 (parse-unit/information 'Zb)))
|
|
('Yb (* 1000 (parse-unit/information 'Yb)))
|
|
('Rb (* 1000 (parse-unit/information 'Rb)))
|
|
('Qb (* 1000 (parse-unit/information 'Qb)))
|
|
|
|
('B 1)
|
|
((or 'KiB 'K) (* 1024 (parse-unit/information 'B)))
|
|
((or 'MiB 'M) (* 1024 (parse-unit/information 'KiB)))
|
|
((or 'GiB 'G) (* 1024 (parse-unit/information 'MiB)))
|
|
((or 'TiB 'G) (* 1024 (parse-unit/information 'GiB)))
|
|
((or 'PiB 'G) (* 1024 (parse-unit/information 'PiB)))
|
|
((or 'EiB 'G) (* 1024 (parse-unit/information 'EiB)))
|
|
((or 'ZiB 'G) (* 1024 (parse-unit/information 'ZiB)))
|
|
((or 'YiB 'G) (* 1024 (parse-unit/information 'YiB)))
|
|
((or 'RiB 'G) (* 1024 (parse-unit/information 'RiB)))
|
|
((or 'QiB 'G) (* 1024 (parse-unit/information 'QiB)))
|
|
('KB (* 1000 (parse-unit/information 'B)))
|
|
('MB (* 1000 (parse-unit/information 'KB)))
|
|
('GB (* 1000 (parse-unit/information 'MB)))
|
|
('TB (* 1000 (parse-unit/information 'GB)))
|
|
('PB (* 1000 (parse-unit/information 'PB)))
|
|
('EB (* 1000 (parse-unit/information 'EB)))
|
|
('ZB (* 1000 (parse-unit/information 'ZB)))
|
|
('YB (* 1000 (parse-unit/information 'YB)))
|
|
('RB (* 1000 (parse-unit/information 'RB)))
|
|
('QB (* 1000 (parse-unit/information 'QB)))
|
|
|
|
(else (error "Invalid unit" unit))))
|