foxbox/mod/unit/information.scm

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))))