+(declaim (inline inches->mm))
+(defun inches->mm (d)
+ (* d +inches->mm+))
+
+(declaim (inline mm->inches))
+(defun mm->inches (d)
+ (/ d +inches->mm+))
+
+(defun length->mm (d units)
+ "Convert a length in units to mm."
+ (ecase units
+ (:mm d)
+ (:inches (inches->mm d))
+ (:feet (* 12 (inches->mm d)))
+ (:yards (* 36 (inches->mm d)))
+ (:meters (* 1000 d))))
+
+(defun mm->length (d units)
+ "Convert a number of mm to units."
+ (ecase units
+ (:mm d)
+ (:inches (mm->inches d))
+ (:feet (/ (mm->inches d) 12))
+ (:yards (/ (mm->inches d) 36))
+ (:meters (/ d 1000))))
+
+(defun format-dimensions (format)
+ "Returns format dimensions in mm."
+ (ecase format
+ (:aps-c (cons 22.7 15.1))
+ ((:aps :dx) (cons 24 16))
+ ((:35 :35mm) (cons 36 24))
+ ((:645 :6x4.5cm) (cons 60 45))
+ ((:6x6 :6x6cm) (cons 60 60))
+ ((:6x7 :6x7cm) (cons 60 70))
+ ((:6x9 :6x9cm) (cons 60 90))
+ ((:4x5 :4x5in) (cons (* 4 +inches->mm+) (* 5 +inches->mm+)))
+ ((:5x7 :5x7in) (cons (* 5 +inches->mm+) (* 7 +inches->mm+)))
+ ((:8x10 :8x10in) (cons (* 8 +inches->mm+) (* 10 +inches->mm+)))
+ (:11x13.75in (cons (* 11 +inches->mm+) (* 13.75 +inches->mm+)))
+ (:11x16.5in (cons (* 11 +inches->mm+) (* 16.5 +inches->mm+)))
+ (:13x19in (cons (* 13 +inches->mm+) (* 19 +inches->mm+)))
+ (:16x20in (cons (* 13 +inches->mm+) (* 19 +inches->mm+)))
+ (:16x24in (cons (* 13 +inches->mm+) (* 19 +inches->mm+)))
+ (:18x22.5in (cons (* 13 +inches->mm+) (* 19 +inches->mm+)))
+ (:18x24in (cons (* 13 +inches->mm+) (* 19 +inches->mm+)))
+ (:24x30in (cons (* 13 +inches->mm+) (* 19 +inches->mm+)))
+ (:24x36in (cons (* 13 +inches->mm+) (* 19 +inches->mm+)))
+ ))