#lang racket/base (require racket/list racket/math "constants.rkt") (provide (all-defined-out)) (define (qr-alignment-pattern-coords version) (vector-ref qr-alignment-coord-table (sub1 version))) (define (qr-alignment-pattern-count version) (if (> version 1) (- (sqr (+ (quotient version 7) 2)) 3) 0)) (define (qr-data/edc-block-sizes version edc-level) (let* ([ns (vector-ref (cadr (assq edc-level qr-edc-block-count-table)) (sub1 version))] [n1 (car ns)] [n2 (cadr ns)] [total-words (qr-word-count version)] [data-words (qr-data-word-count version edc-level)] [d1 (quotient data-words (+ n1 n2))] [d2 (add1 d1)] [e (quotient (- total-words data-words) (+ n1 n2))]) (values (append (make-list n1 d1) (make-list n2 d2)) (make-list (+ n1 n2) e)))) (define (qr-data+edc-module-count version) (- (qr-encoding-module-count version) (if (qr-has-format-information? version) 31 0) (if (qr-has-version-information? version) 36 0))) (define (qr-data-word-count version edc-level) (vector-ref (cadr (assq edc-level qr-data-word-count-table)) (sub1 version))) (define (qr-encoding-module-count version) (- (qr-module-count version) (qr-function-module-count version))) (define (qr-finder-pattern-count version) 3) (define (qr-function-module-count version) (+ (* (qr-alignment-pattern-count version) 25) (* (qr-finder-pattern-count version) 64) (qr-timing-module-count version))) (define (qr-has-format-information? version) #t) (define (qr-has-version-information? version) (>= version 7)) (define (qr-module-count version) (sqr (qr-size version))) (define (qr-size version) (+ (* version 4) 17)) (define (qr-timing-module-count version) (* (- (qr-size version) 16 (* (quotient version 7) 5)) 2)) (define (qr-word-count version) (quotient (qr-data+edc-module-count version) 8))