refine `char-graphic?' to include all chars in L and N categories

Closes PR 11664
This commit is contained in:
Matthew Flatt 2011-01-24 07:05:05 -07:00
parent 8d52697a75
commit f36db863bb
3 changed files with 182 additions and 181 deletions

View File

@ -179,7 +179,8 @@ Returns @scheme[#t] if @scheme[char]'s Unicode general category is
@defproc[(char-graphic? [char char?]) boolean?]{ @defproc[(char-graphic? [char char?]) boolean?]{
Returns @scheme[#t] if @scheme[char]'s Unicode general category is Returns @scheme[#t] if @scheme[char]'s Unicode general category is
@UCat{Mn}, @UCat{Mc}, @UCat{Me}, or if one of the following produces @UCat{Ll}, @UCat{Lm}, @UCat{Lo}, @UCat{Lt}, @UCat{Lu}, @UCat{Nd}, @UCat{Nl}, @UCat{No},
@UCat{Mn}, @UCat{Mc}, or @UCat{Me}, or if one of the following produces
@scheme[#t] when applied to @scheme[char]: @scheme[char-alphabetic?], @scheme[#t] when applied to @scheme[char]: @scheme[char-alphabetic?],
@scheme[char-numeric?], @scheme[char-symbolic?], or @scheme[char-numeric?], @scheme[char-symbolic?], or
@scheme[char-punctuation?].} @scheme[char-punctuation?].}

View File

@ -1,4 +1,4 @@
#lang scheme/base #lang racket/base
;; This script parses UnicodeData.txt (the standard Unicode database, ;; This script parses UnicodeData.txt (the standard Unicode database,
;; available from the web) and other such files, and it produces ;; available from the web) and other such files, and it produces
@ -16,7 +16,7 @@
(define mark-cats '("Mn" "Mc" "Me")) (define mark-cats '("Mn" "Mc" "Me"))
(define letter-cats '("Lu" "Ll" "Lt" "Lm" "Lo")) (define letter-cats '("Lu" "Ll" "Lt" "Lm" "Lo"))
(define digit-cats '("Nd")) (define digit-cats '("Nd" "No" "Nl"))
(define space-cats '("Zl" "Zs" "Zp")) (define space-cats '("Zl" "Zs" "Zp"))
(define punc-cats '("Pc" "Pd" "Ps" "Pe" "Pi" "Pf" "Po")) (define punc-cats '("Pc" "Pd" "Ps" "Pe" "Pi" "Pf" "Po"))
(define sym-cats '("Sm" "Sc" "Sk" "So")) (define sym-cats '("Sm" "Sc" "Sk" "So"))
@ -27,14 +27,14 @@
punc-cats punc-cats
sym-cats)) sym-cats))
(define cases (cons (make-hash-table 'equal) (box 0))) (define cases (cons (make-hash) (box 0)))
(define (indirect t v limit) (define (indirect t v limit)
(let ([r (hash-table-get (car t) v (lambda () #f))]) (let ([r (hash-ref (car t) v (lambda () #f))])
(or r (or r
(let ([r (unbox (cdr t))]) (let ([r (unbox (cdr t))])
(set-box! (cdr t) (add1 r)) (set-box! (cdr t) (add1 r))
(hash-table-put! (car t) v r) (hash-set! (car t) v r)
(when (r . > . limit) (when (r . > . limit)
(error "too many indirects")) (error "too many indirects"))
r)))) r))))
@ -53,13 +53,13 @@
(define (combine-case up down title fold combining) (define (combine-case up down title fold combining)
(indirect cases (list up down title fold combining) 256)) (indirect cases (list up down title fold combining) 256))
(define general-categories (make-hash-table 'equal)) (define general-categories (make-hash))
(define (combine-cat cat) (define (combine-cat cat)
(hash-table-get general-categories cat (hash-ref general-categories cat
(lambda () (lambda ()
(let ([v (hash-table-count general-categories)]) (let ([v (hash-count general-categories)])
(hash-table-put! general-categories cat v) (hash-set! general-categories cat v)
v)))) v))))
;; So they're in order: ;; So they're in order:
(with-input-from-file "schgencat.h" (with-input-from-file "schgencat.h"
(lambda () (lambda ()
@ -73,7 +73,7 @@
(define hexes (map char->integer (string->list "0123456789abcdefABCDEF"))) (define hexes (map char->integer (string->list "0123456789abcdefABCDEF")))
(define combining-class-ht (make-hash-table)) (define combining-class-ht (make-hasheq))
;; In principle, adjust this number to tune the result, but ;; In principle, adjust this number to tune the result, but
;; the macros for accessing the table (in scheme.h) need to ;; the macros for accessing the table (in scheme.h) need to
@ -100,7 +100,7 @@
(define ccount 0) (define ccount 0)
(define (map1 c v v2 v3 cc) (define (map1 c v v2 v3 cc)
(hash-table-put! combining-class-ht c cc) (hash-set! combining-class-ht c cc)
(set! ccount (add1 ccount)) (set! ccount (add1 ccount))
(if (= c (add1 range-top)) (if (= c (add1 range-top))
(begin (begin
@ -176,8 +176,8 @@
null))) null)))
;; This code assumes that Final_Sigma is the only condition that we care about: ;; This code assumes that Final_Sigma is the only condition that we care about:
(define case-foldings (make-hash-table 'equal)) (define case-foldings (make-hash))
(define special-case-foldings (make-hash-table 'equal)) (define special-case-foldings (make-hash))
(call-with-input-file "Unicode/CaseFolding.txt" (call-with-input-file "Unicode/CaseFolding.txt"
(lambda (i) (lambda (i)
(let loop () (let loop ()
@ -189,12 +189,12 @@
[variant (list-ref m 2)] [variant (list-ref m 2)]
[folded (string->codes (list-ref m 3))]) [folded (string->codes (list-ref m 3))])
(if (string=? variant "F") (if (string=? variant "F")
(hash-table-put! special-case-foldings code folded) (hash-set! special-case-foldings code folded)
(hash-table-put! case-foldings code (car folded)))))) (hash-set! case-foldings code (car folded))))))
(loop)))))) (loop))))))
;; This code assumes that Final_Sigma is the only condition that we care about: ;; This code assumes that Final_Sigma is the only condition that we care about:
(define special-casings (make-hash-table 'equal)) (define special-casings (make-hash))
(define-struct special-casing (lower upper title folding final-sigma?) #:mutable) (define-struct special-casing (lower upper title folding final-sigma?) #:mutable)
(call-with-input-file "Unicode/SpecialCasing.txt" (call-with-input-file "Unicode/SpecialCasing.txt"
(lambda (i) (lambda (i)
@ -209,13 +209,13 @@
[upper (string->codes (list-ref m 4))] [upper (string->codes (list-ref m 4))]
[title (string->codes (list-ref m 3))] [title (string->codes (list-ref m 3))]
[final-sigma? (and (regexp-match #rx"Final_Sigma" (list-ref m 5)) #t)]) [final-sigma? (and (regexp-match #rx"Final_Sigma" (list-ref m 5)) #t)])
(let ([folding (list (hash-table-get case-foldings code (lambda () code)))]) (let ([folding (list (hash-ref case-foldings code (lambda () code)))])
(hash-table-put! special-casings code (make-special-casing lower upper title folding final-sigma?)))))) (hash-set! special-casings code (make-special-casing lower upper title folding final-sigma?))))))
(loop)))))) (loop))))))
(define lower-case (make-hash-table 'equal)) (define lower-case (make-hash))
(define upper-case (make-hash-table 'equal)) (define upper-case (make-hash))
(define alphabetic (make-hash-table 'equal)) (define alphabetic (make-hash))
(with-input-from-file "Unicode/DerivedCoreProperties.txt" (with-input-from-file "Unicode/DerivedCoreProperties.txt"
(lambda () (lambda ()
@ -235,12 +235,12 @@
[(string=? (caddr m) "Alphabetic") alphabetic] [(string=? (caddr m) "Alphabetic") alphabetic]
[else (error "unknown property section")])]) [else (error "unknown property section")])])
(let loop ([i start]) (let loop ([i start])
(hash-table-put! t i #t) (hash-set! t i #t)
(unless (= i end) (unless (= i end)
(loop (add1 i))))))) (loop (add1 i)))))))
(loop)))))) (loop))))))
(define white_spaces (make-hash-table 'equal)) (define white_spaces (make-hash))
(with-input-from-file "Unicode/PropList.txt" (with-input-from-file "Unicode/PropList.txt"
(lambda () (lambda ()
@ -255,16 +255,16 @@
(string->number (cadr m) 16) (string->number (cadr m) 16)
start))]) start))])
(let loop ([i start]) (let loop ([i start])
(hash-table-put! white_spaces i #t) (hash-set! white_spaces i #t)
(unless (= i end) (unless (= i end)
(loop (add1 i))))))) (loop (add1 i)))))))
(loop)))))) (loop))))))
(define decomp-ht (make-hash-table)) (define decomp-ht (make-hasheq))
(define k-decomp-ht (make-hash-table)) (define k-decomp-ht (make-hasheq))
(define compose-initial-ht (make-hash-table)) (define compose-initial-ht (make-hasheq))
(define compose-map (make-hash-table 'equal)) (define compose-map (make-hash))
(define do-not-compose-ht (make-hash-table 'equal)) (define do-not-compose-ht (make-hash))
(with-input-from-file "Unicode/CompositionExclusions.txt" (with-input-from-file "Unicode/CompositionExclusions.txt"
(lambda () (lambda ()
@ -274,7 +274,7 @@
(let ([m (regexp-match #rx"^([0-9A-F.]+)" l)]) (let ([m (regexp-match #rx"^([0-9A-F.]+)" l)])
(when m (when m
(let ([code (string->number (car m) 16)]) (let ([code (string->number (car m) 16)])
(hash-table-put! do-not-compose-ht code #t)))) (hash-set! do-not-compose-ht code #t))))
(loop)))))) (loop))))))
(define (extract-decomp decomp code) (define (extract-decomp decomp code)
@ -289,15 +289,15 @@
(string->number (caddr m) 16))]) (string->number (caddr m) 16))])
;; Canonical composition? ;; Canonical composition?
(when (and (positive? b) (when (and (positive? b)
(not (hash-table-get do-not-compose-ht (not (hash-ref do-not-compose-ht
code code
(lambda () #f)))) (lambda () #f))))
(hash-table-put! compose-initial-ht a #t) (hash-set! compose-initial-ht a #t)
(let ([key (bitwise-ior (arithmetic-shift a 16) b)]) (let ([key (bitwise-ior (arithmetic-shift a 16) b)])
(when (hash-table-get compose-map key (lambda () #f)) (when (hash-ref compose-map key (lambda () #f))
(error 'decomp "composition already mapped: ~e" key)) (error 'decomp "composition already mapped: ~e" key))
(hash-table-put! compose-map key code))) (hash-set! compose-map key code)))
(hash-table-put! decomp-ht code (cons a b)) (hash-set! decomp-ht code (cons a b))
#t) #t)
;; Compatibility decomp ;; Compatibility decomp
(let ([seq (let ([seq
@ -307,7 +307,7 @@
(cons (string->number (cadr m) 16) (cons (string->number (cadr m) 16)
(loop (caddr m))) (loop (caddr m)))
null)))]) null)))])
(hash-table-put! k-decomp-ht code seq) (hash-set! k-decomp-ht code seq)
#t))))) #t)))))
(call-with-input-file "Unicode/UnicodeData.txt" (call-with-input-file "Unicode/UnicodeData.txt"
@ -328,7 +328,7 @@
[up (string->number (cadddr (cddddr m)) 16)] [up (string->number (cadddr (cddddr m)) 16)]
[down (string->number (cadddr (cddddr (cdr m))) 16)] [down (string->number (cadddr (cddddr (cdr m))) 16)]
[title (string->number (cadddr (cddddr (cddr m))) 16)]) [title (string->number (cadddr (cddddr (cddr m))) 16)])
(let ([alphabetic? (hash-table-get alphabetic code #f)] (let ([alphabetic? (hash-ref alphabetic code #f)]
[numeric? (not (string=? numeric ""))] [numeric? (not (string=? numeric ""))]
[symbolic? (member cat sym-cats)] [symbolic? (member cat sym-cats)]
[punctuation? (member cat punc-cats)]) [punctuation? (member cat punc-cats)])
@ -341,8 +341,8 @@
;; Decomposition ;; Decomposition
(extract-decomp decomp code) (extract-decomp decomp code)
;; special-casing ;; special-casing
(or (hash-table-get special-casings code (lambda () #f)) (or (hash-ref special-casings code (lambda () #f))
(hash-table-get special-case-foldings code (lambda () #f))) (hash-ref special-case-foldings code (lambda () #f)))
;; case-ignoreable ;; case-ignoreable
(or (member code midletters) (or (member code midletters)
(member cat '("Mn" "Me" "Cf" "Lm" "Sk"))) (member cat '("Mn" "Me" "Cf" "Lm" "Sk")))
@ -351,9 +351,9 @@
numeric? numeric?
symbolic? symbolic?
punctuation? punctuation?
(member cat mark-cats)) (member cat graphic-cats))
;; lowercase: ;; lowercase:
(hash-table-get lower-case code (lambda () #f)) (hash-ref lower-case code (lambda () #f))
#; #;
(and (not (<= #x2000 code #x2FFF)) (and (not (<= #x2000 code #x2FFF))
(not down) (not down)
@ -361,7 +361,7 @@
(regexp-match #rx"SMALL LETTER" name) (regexp-match #rx"SMALL LETTER" name)
(regexp-match #rx"SMALL LIGATURE" name))) (regexp-match #rx"SMALL LIGATURE" name)))
;; uppercase; ;; uppercase;
(hash-table-get upper-case code (lambda () #f)) (hash-ref upper-case code (lambda () #f))
#; #;
(and (not (<= #x2000 code #x2FFF)) (and (not (<= #x2000 code #x2FFF))
(not up) (not up)
@ -381,7 +381,7 @@
;; SOMETHING - this bit not yet used ;; SOMETHING - this bit not yet used
#f #f
;; whitespace ;; whitespace
(hash-table-get white_spaces code #f) (hash-ref white_spaces code #f)
#; #;
(or (member cat space-cats) (or (member cat space-cats)
(member code '(#x9 #xa #xb #xc #xd #x85))) (member code '(#x9 #xa #xb #xc #xd #x85)))
@ -400,7 +400,7 @@
(if up (- up code) 0) (if up (- up code) 0)
(if down (- down code) 0) (if down (- down code) 0)
(if title (- title code) 0) (if title (- title code) 0)
(let ([case-fold (hash-table-get case-foldings code (lambda () #f))]) (let ([case-fold (hash-ref case-foldings code (lambda () #f))])
(if case-fold (- case-fold code) 0)) (if case-fold (- case-fold code) 0))
combining) combining)
;; Category ;; Category
@ -409,14 +409,14 @@
combining)) combining))
(loop code)))))))) (loop code))))))))
(hash-table-for-each compose-initial-ht (hash-for-each compose-initial-ht
(lambda (k v) (lambda (k v)
;; A canonical decomposition that starts with a non-0 combining ;; A canonical decomposition that starts with a non-0 combining
;; class is not re-created in a canonical composition. There ;; class is not re-created in a canonical composition. There
;; are only two such leading character as of Unicode 4.0: ;; are only two such leading character as of Unicode 4.0:
;; U+0308 and U+0F71. ;; U+0308 and U+0F71.
(when (zero? (hash-table-get combining-class-ht k)) (when (zero? (hash-ref combining-class-ht k))
(set-compose-initial! k)))) (set-compose-initial! k))))
;; Remove compositions from compose map that start with ;; Remove compositions from compose map that start with
;; a character whose combining class is not 0. As of Unicode ;; a character whose combining class is not 0. As of Unicode
@ -424,12 +424,12 @@
;; U+0F75, and U+0F81. ;; U+0F75, and U+0F81.
(for-each (lambda (k) (for-each (lambda (k)
(let ([a (arithmetic-shift k -16)]) (let ([a (arithmetic-shift k -16)])
(unless (zero? (hash-table-get combining-class-ht a)) (unless (zero? (hash-ref combining-class-ht a))
(hash-table-remove! compose-map k)))) (hash-remove! compose-map k))))
(hash-table-map compose-map (lambda (k v) k))) (hash-map compose-map (lambda (k v) k)))
(define k-decomp-map-ht (make-hash-table)) (define k-decomp-map-ht (make-hasheq))
(define k-decomp-strs-ht (make-hash-table 'equal)) (define k-decomp-strs-ht (make-hash))
(define k-decomp-strs-len 0) (define k-decomp-strs-len 0)
(define k-decomp-strs null) (define k-decomp-strs null)
@ -438,12 +438,12 @@
[(empty? s) empty] [(empty? s) empty]
[(empty? (cdr s)) [(empty? (cdr s))
(let ([code (car s)]) (let ([code (car s)])
(let ([v (hash-table-get decomp-ht code (lambda () #f))]) (let ([v (hash-ref decomp-ht code (lambda () #f))])
(if v (if v
(if (zero? (cdr v)) (if (zero? (cdr v))
(fold-decomp (list (car v))) (fold-decomp (list (car v)))
(fold-decomp (list (car v) (cdr v)))) (fold-decomp (list (car v) (cdr v))))
(let ([v (hash-table-get k-decomp-ht code (lambda () #f))]) (let ([v (hash-ref k-decomp-ht code (lambda () #f))])
(if v (if v
(fold-decomp v) (fold-decomp v)
(list code))))))] (list code))))))]
@ -454,25 +454,25 @@
(lambda (p) (lambda (p)
(let* ([code (car p)] (let* ([code (car p)]
[seq (fold-decomp (cdr p))] [seq (fold-decomp (cdr p))]
[pos (hash-table-get k-decomp-strs-ht seq [pos (hash-ref k-decomp-strs-ht seq
(lambda () (lambda ()
(begin0 (begin0
k-decomp-strs-len k-decomp-strs-len
(hash-table-put! k-decomp-strs-ht seq (hash-set! k-decomp-strs-ht seq
k-decomp-strs-len) k-decomp-strs-len)
(set! k-decomp-strs (set! k-decomp-strs
(append (reverse seq) k-decomp-strs)) (append (reverse seq) k-decomp-strs))
(set! k-decomp-strs-len (+ k-decomp-strs-len (set! k-decomp-strs-len (+ k-decomp-strs-len
(length seq))))))]) (length seq))))))])
(hash-table-put! k-decomp-map-ht code (cons pos (length seq))))) (hash-set! k-decomp-map-ht code (cons pos (length seq)))))
;; Sort to keep it deterministic: ;; Sort to keep it deterministic:
(sort (hash-table-map k-decomp-ht cons) (sort (hash-map k-decomp-ht cons)
(lambda (a b) (< (car a) (car b))))) (lambda (a b) (< (car a) (car b)))))
(define vectors (make-hash-table 'equal)) (define vectors (make-hash))
(define vectors2 (make-hash-table 'equal)) (define vectors2 (make-hash))
(define vectors3 (make-hash-table 'equal)) (define vectors3 (make-hash))
(define pos 0) (define pos 0)
(define pos2 0) (define pos2 0)
@ -485,9 +485,9 @@
(unless (= i hi-count) (unless (= i hi-count)
(let ([vec (vector-ref top i)]) (let ([vec (vector-ref top i)])
(when vec (when vec
(unless (hash-table-get vectors vec (lambda () #f)) (unless (hash-ref vectors vec (lambda () #f))
(set-pos! (add1 (get-pos))) (set-pos! (add1 (get-pos)))
(hash-table-put! vectors vec (get-pos)))) (hash-set! vectors vec (get-pos))))
(loop (add1 i)))))) (loop (add1 i))))))
(hash-vectors! top vectors (lambda () pos) (lambda (v) (set! pos v))) (hash-vectors! top vectors (lambda () pos) (lambda (v) (set! pos v)))
@ -495,18 +495,18 @@
(hash-vectors! top3 vectors3 (lambda () pos3) (lambda (v) (set! pos3 v))) (hash-vectors! top3 vectors3 (lambda () pos3) (lambda (v) (set! pos3 v)))
;; copy folding special cases to the special-cases table, if not there already: ;; copy folding special cases to the special-cases table, if not there already:
(hash-table-for-each special-case-foldings (hash-for-each special-case-foldings
(lambda (k v) (lambda (k v)
(let ([sc (hash-table-get special-casings k (lambda () (let ([sc (hash-ref special-casings k (lambda ()
(let ([sc (make-special-casing (let ([sc (make-special-casing
(list k) (list k)
(list k) (list k)
(list k) (list k)
(list k) (list k)
#f)]) #f)])
(hash-table-put! special-casings k sc) (hash-set! special-casings k sc)
sc)))]) sc)))])
(set-special-casing-folding! sc v)))) (set-special-casing-folding! sc v))))
(define world-count (expt 2 10)) (define world-count (expt 2 10))
@ -515,16 +515,16 @@
(printf "/* Character count: ~a */\n" ccount) (printf "/* Character count: ~a */\n" ccount)
(printf "/* Total bytes for all tables: ~a */\n\n" (printf "/* Total bytes for all tables: ~a */\n\n"
(+ (* (add1 low) (+ (* (add1 low)
(* 2 (add1 (length (hash-table-map vectors cons))))) (* 2 (add1 (length (hash-map vectors cons)))))
(* (add1 low) (* (add1 low)
(* 1 (add1 (length (hash-table-map vectors2 cons))))) (* 1 (add1 (length (hash-map vectors2 cons)))))
(* (add1 low) (* (add1 low)
(* 1 (add1 (length (hash-table-map vectors3 cons))))) (* 1 (add1 (length (hash-map vectors3 cons)))))
(* (hash-table-count decomp-ht) (* (hash-count decomp-ht)
8) 8)
(* (hash-table-count compose-map) (* (hash-count compose-map)
2) 2)
(* (hash-table-count k-decomp-map-ht) (+ 4 1 2)) (* (hash-count k-decomp-map-ht) (+ 4 1 2))
(* 2 k-decomp-strs-len) (* 2 k-decomp-strs-len)
(* 4 4 (unbox (cdr cases))) (* 4 4 (unbox (cdr cases)))
(* 4 (* 2 hi-count)))) (* 4 (* 2 hi-count))))
@ -534,13 +534,13 @@
" via the scheme_uchar_find() macro in scheme.h. */\n\n")) " via the scheme_uchar_find() macro in scheme.h. */\n\n"))
(printf "/* Character properties: */\n") (printf "/* Character properties: */\n")
(printf "unsigned short *scheme_uchar_table[~a];\n" hi-count) (printf "READ_ONLY unsigned short *scheme_uchar_table[~a];\n" hi-count)
(printf "\n/* Character case mapping as index into scheme_uchar_ups, etc.: */\n") (printf "\n/* Character case mapping as index into scheme_uchar_ups, etc.: */\n")
(printf "unsigned char *scheme_uchar_cases_table[~a];\n" hi-count) (printf "READ_ONLY unsigned char *scheme_uchar_cases_table[~a];\n" hi-count)
(printf "\n/* Character general categories: */\n") (printf "\n/* Character general categories: */\n")
(printf "unsigned char *scheme_uchar_cats_table[~a];\n" hi-count) (printf "READ_ONLY unsigned char *scheme_uchar_cats_table[~a];\n" hi-count)
(printf "\n/* The udata... arrays are used by init_uchar_table to fill the above mappings.*/\n\n") (printf "\n/* The udata... arrays are used by init_uchar_table to fill the above mappings.*/\n\n")
@ -559,11 +559,11 @@
(loop (add1 i)))))) (loop (add1 i))))))
(define (print-table type suffix vectors pos hex?) (define (print-table type suffix vectors pos hex?)
(printf "static unsigned ~a udata~a[] = {\n" type suffix) (printf "READ_ONLY static unsigned ~a udata~a[] = {\n" type suffix)
(print-row (make-vector (add1 low) 0) 0 pos hex?) (print-row (make-vector (add1 low) 0) 0 pos hex?)
(map (lambda (p) (map (lambda (p)
(print-row (car p) (cdr p) pos hex?)) (print-row (car p) (cdr p) pos hex?))
(sort (hash-table-map vectors cons) (sort (hash-map vectors cons)
(lambda (a b) (< (cdr a) (cdr b))))) (lambda (a b) (< (cdr a) (cdr b)))))
(printf "};\n")) (printf "};\n"))
(print-table "short" "" vectors pos #t) (print-table "short" "" vectors pos #t)
@ -571,14 +571,14 @@
(print-table "char" "_cases" vectors2 pos2 #f) (print-table "char" "_cases" vectors2 pos2 #f)
(print-table "char" "_cats" vectors3 pos3 #f) (print-table "char" "_cats" vectors3 pos3 #f)
(printf "\n/* Case mapping size: ~a */\n" (hash-table-count (car cases))) (printf "\n/* Case mapping size: ~a */\n" (hash-count (car cases)))
(printf "/* Find an index into the ups, downs, etc. table for a character\n") (printf "/* Find an index into the ups, downs, etc. table for a character\n")
(printf " by using scheme_uchar_cases_table; then, the value at the index\n") (printf " by using scheme_uchar_cases_table; then, the value at the index\n")
(printf " is relative to the original character (except for combining class,\n") (printf " is relative to the original character (except for combining class,\n")
(printf " of course). */\n") (printf " of course). */\n")
(define (print-shift t end select type name) (define (print-shift t end select type name)
(printf "\n~a scheme_uchar_~a[] = {\n" type name) (printf "\nREAD_ONLY ~a scheme_uchar_~a[] = {\n" type name)
(for-each (lambda (p) (for-each (lambda (p)
(printf " ~a~a" (printf " ~a~a"
(select (car p)) (select (car p))
@ -587,7 +587,7 @@
",")) ","))
(when (zero? (modulo (add1 (cdr p)) 16)) (when (zero? (modulo (add1 (cdr p)) 16))
(newline))) (newline)))
(sort (hash-table-map t cons) (sort (hash-map t cons)
(lambda (a b) (< (cdr a) (cdr b))))) (lambda (a b) (< (cdr a) (cdr b)))))
(printf " };\n")) (printf " };\n"))
@ -597,10 +597,10 @@
(print-shift (car cases) (unbox (cdr cases)) cadddr "int" "folds") (print-shift (car cases) (unbox (cdr cases)) cadddr "int" "folds")
(print-shift (car cases) (unbox (cdr cases)) (lambda (x) (cadddr (cdr x))) "unsigned char" "combining_classes") (print-shift (car cases) (unbox (cdr cases)) (lambda (x) (cadddr (cdr x))) "unsigned char" "combining_classes")
(let ([l (sort (hash-table-map general-categories cons) (let ([l (sort (hash-map general-categories cons)
(lambda (a b) (< (cdr a) (cdr b))))]) (lambda (a b) (< (cdr a) (cdr b))))])
(printf "\n#define NUM_GENERAL_CATEGORIES ~a\n" (length l)) (printf "\n#define NUM_GENERAL_CATEGORIES ~a\n" (length l))
(printf "static const char *general_category_names[] = {") (printf "READ_ONLY static const char *general_category_names[] = {")
(for-each (lambda (c) (for-each (lambda (c)
(printf (if (zero? (cdr c)) (printf (if (zero? (cdr c))
"\n ~s" "\n ~s"
@ -614,7 +614,7 @@
(printf "\n#define NUM_UCHAR_RANGES ~a\n" (length ranges)) (printf "\n#define NUM_UCHAR_RANGES ~a\n" (length ranges))
(printf "\n#define URANGE_VARIES 0x40000000\n") (printf "\n#define URANGE_VARIES 0x40000000\n")
(printf "static int mapped_uchar_ranges[] = {\n") (printf "READ_ONLY static int mapped_uchar_ranges[] = {\n")
(for-each (lambda (r) (for-each (lambda (r)
(printf " 0x~x, 0x~x~a~a\n" (printf " 0x~x, 0x~x~a~a\n"
(car r) (car r)
@ -643,7 +643,7 @@
(if (equal? vec (vector-ref top j)) (if (equal? vec (vector-ref top j))
(loop (add1 j)) (loop (add1 j))
(- j i)))] (- j i)))]
[vec-pos (* (add1 low) (hash-table-get vectors vec))]) [vec-pos (* (add1 low) (hash-ref vectors vec))])
(if (> same-count 4) (if (> same-count 4)
(begin (begin
(printf " for (i = ~a; i < ~a; i++) {\n" (printf " for (i = ~a; i < ~a; i++) {\n"
@ -686,10 +686,10 @@
(set! special-count (+ special-count (length l)))) (set! special-count (+ special-count (length l))))
(- special-count (length l)))) (- special-count (length l))))
(printf "#define NUM_SPECIAL_CASINGS ~a\n\n" (hash-table-count special-casings)) (printf "#define NUM_SPECIAL_CASINGS ~a\n\n" (hash-count special-casings))
(printf "static int uchar_special_casings[] = {\n") (printf "READ_ONLY static int uchar_special_casings[] = {\n")
(printf " /* code, down len, off, up len, off, title len, off, fold len, off, final-sigma? */\n") (printf " /* code, down len, off, up len, off, title len, off, fold len, off, final-sigma? */\n")
(let ([n (hash-table-count special-casings)]) (let ([n (hash-count special-casings)])
(for-each (lambda (p) (for-each (lambda (p)
(set! n (sub1 n)) (set! n (sub1 n))
(let ([code (car p)] (let ([code (car p)]
@ -706,11 +706,11 @@
(length (special-casing-folding sc)) folding-start (length (special-casing-folding sc)) folding-start
(if (special-casing-final-sigma? sc) 1 0) (if (special-casing-final-sigma? sc) 1 0)
(if (zero? n) " " ",\n"))))) (if (zero? n) " " ",\n")))))
(sort (hash-table-map special-casings cons) (sort (hash-map special-casings cons)
(lambda (a b) (< (car a) (car b)))))) (lambda (a b) (< (car a) (car b))))))
(printf "};\n") (printf "};\n")
(printf "\n/* Offsets in scheme_uchar_special_casings point into here: */\n") (printf "\n/* Offsets in scheme_uchar_special_casings point into here: */\n")
(printf "static int uchar_special_casing_data[] = {\n ") (printf "READ_ONLY static int uchar_special_casing_data[] = {\n ")
(let ([n 0]) (let ([n 0])
(for-each (lambda (v) (for-each (lambda (v)
(printf (printf
@ -725,7 +725,7 @@
(printf "\n#define SPECIAL_CASE_FOLD_MAX ~a\n" (apply (printf "\n#define SPECIAL_CASE_FOLD_MAX ~a\n" (apply
max max
(hash-table-map (hash-map
special-casings special-casings
(lambda (k v) (lambda (k v)
(length (special-casing-folding v)))))) (length (special-casing-folding v))))))
@ -735,45 +735,45 @@
(let () (let ()
(define canon-composes (define canon-composes
(list->vector (sort (hash-table-map compose-map cons) (list->vector (sort (hash-map compose-map cons)
(lambda (a b) (< (car a) (car b)))))) (lambda (a b) (< (car a) (car b))))))
(define count (hash-table-count compose-map)) (define count (hash-count compose-map))
(define-values (all-composes decomp-vector long-composes) (define-values (all-composes decomp-vector long-composes)
(let ([decomp-pos-ht (make-hash-table)] (let ([decomp-pos-ht (make-hasheq)]
[counter count] [counter count]
[extra null] [extra null]
[long-counter 0] [long-counter 0]
[longs null]) [longs null])
(hash-table-for-each decomp-ht (hash-for-each decomp-ht
(lambda (k v) (lambda (k v)
;; Use table of composed shorts: ;; Use table of composed shorts:
(let ([key (+ (arithmetic-shift (car v) 16) (cdr v))]) (let ([key (+ (arithmetic-shift (car v) 16) (cdr v))])
(let ([pos (let ([pos
(if (and ((car v) . <= . #xFFFF) (if (and ((car v) . <= . #xFFFF)
((cdr v) . <= . #xFFFF)) ((cdr v) . <= . #xFFFF))
(if (hash-table-get compose-map key (lambda () #f)) (if (hash-ref compose-map key (lambda () #f))
;; Find index in comp vector: ;; Find index in comp vector:
(let loop ([i 0]) (let loop ([i 0])
(if (= key (car (vector-ref canon-composes i))) (if (= key (car (vector-ref canon-composes i)))
i i
(loop (add1 i)))) (loop (add1 i))))
;; Add to compose table: ;; Add to compose table:
(begin0 (begin0
counter counter
(set! extra (cons (cons key #f) extra)) (set! extra (cons (cons key #f) extra))
(set! counter (add1 counter)))) (set! counter (add1 counter))))
;; Use table of long+long sequences: ;; Use table of long+long sequences:
(begin (begin
(set! long-counter (add1 long-counter)) (set! long-counter (add1 long-counter))
(set! longs (cons (cdr v) (cons (car v) longs))) (set! longs (cons (cdr v) (cons (car v) longs)))
(- long-counter)))]) (- long-counter)))])
(hash-table-put! decomp-pos-ht k pos))))) (hash-set! decomp-pos-ht k pos)))))
(values (values
(list->vector (append (vector->list canon-composes) (list->vector (append (vector->list canon-composes)
(reverse extra))) (reverse extra)))
(list->vector (list->vector
(sort (hash-table-map decomp-pos-ht cons) (sort (hash-map decomp-pos-ht cons)
(lambda (a b) (< (car a) (car b))))) (lambda (a b) (< (car a) (car b)))))
(list->vector (reverse longs))))) (list->vector (reverse longs)))))
@ -783,7 +783,7 @@
(let ([print-compose-data (let ([print-compose-data
(lambda (type suffix which composes count hex? row-len) (lambda (type suffix which composes count hex? row-len)
(printf "static ~a utable_~a[] = {\n" (printf "READ_ONLY static ~a utable_~a[] = {\n"
type suffix) type suffix)
(let loop ([i 0]) (let loop ([i 0])
(let ([v (which (vector-ref composes i))]) (let ([v (which (vector-ref composes i))])
@ -826,7 +826,7 @@
(let ([k-decomp-vector (let ([k-decomp-vector
(list->vector (list->vector
(sort (hash-table-map k-decomp-map-ht cons) (sort (hash-map k-decomp-map-ht cons)
(lambda (a b) (< (car a) (car b)))))]) (lambda (a b) (< (car a) (car b)))))])
(printf "\n") (printf "\n")
(printf "/* utable_kompat_decomp_keys identifies characters that have a compatability decomposition;\n") (printf "/* utable_kompat_decomp_keys identifies characters that have a compatability decomposition;\n")

View File

@ -47,7 +47,7 @@ READ_ONLY static unsigned short udata[] = {
0x8, 0x8, 0x8, 0x8, 0x8, 0x18, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x18, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8,
0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8,
0x4011, 0x804, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0xd802, 0x802, 0x4c80, 0x804, 0x802, 0x1000, 0x802, 0x5802, 0x4011, 0x804, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0xd802, 0x802, 0x4c80, 0x804, 0x802, 0x1000, 0x802, 0x5802,
0x802, 0x802, 0x4840, 0x4840, 0x5802, 0x4c80, 0x802, 0x1804, 0x5802, 0x4840, 0x4c80, 0x804, 0x4000, 0x4000, 0x4000, 0x804, 0x802, 0x802, 0x4840, 0x4840, 0x5802, 0x4c80, 0x802, 0x1804, 0x5802, 0x4840, 0x4c80, 0x804, 0x4800, 0x4800, 0x4800, 0x804,
0x4a80, 0x4a80, 0xca80, 0x4a80, 0xca80, 0xca80, 0x8a80, 0xca80, 0x4a80, 0x4a80, 0xca80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0xca80, 0x4a80, 0x4a80, 0xca80, 0x4a80, 0xca80, 0xca80, 0x8a80, 0xca80, 0x4a80, 0x4a80, 0xca80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0xca80,
0xa80, 0x4a80, 0x4a80, 0x4a80, 0xca80, 0xca80, 0xca80, 0x802, 0x8a80, 0x4a80, 0x4a80, 0x4a80, 0xca80, 0x4a80, 0xa80, 0x2c80, 0xa80, 0x4a80, 0x4a80, 0x4a80, 0xca80, 0xca80, 0xca80, 0x802, 0x8a80, 0x4a80, 0x4a80, 0x4a80, 0xca80, 0x4a80, 0xa80, 0x2c80,
0x4c80, 0x4c80, 0xcc80, 0x4c80, 0xcc80, 0xcc80, 0x8c80, 0xcc80, 0x4c80, 0x4c80, 0xcc80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0xcc80, 0x4c80, 0x4c80, 0xcc80, 0x4c80, 0xcc80, 0xcc80, 0x8c80, 0xcc80, 0x4c80, 0x4c80, 0xcc80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0xcc80,
@ -187,7 +187,7 @@ READ_ONLY static unsigned short udata[] = {
0x880, 0x1880, 0x1880, 0x1880, 0x1880, 0x0, 0x0, 0x8880, 0x880, 0x0, 0x0, 0x4880, 0x4880, 0x1800, 0x880, 0x0, 0x880, 0x1880, 0x1880, 0x1880, 0x1880, 0x0, 0x0, 0x8880, 0x880, 0x0, 0x0, 0x4880, 0x4880, 0x1800, 0x880, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x0, 0x0, 0x0, 0x4880, 0x4880, 0x0, 0x4880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x0, 0x0, 0x0, 0x4880, 0x4880, 0x0, 0x4880,
0x880, 0x880, 0x1880, 0x1880, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x880, 0x880, 0x1880, 0x1880, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840,
0x880, 0x880, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x880, 0x802, 0x802, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0,
/* 10 */ /* 10 */
0x0, 0x1880, 0x1880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x1880, 0x1880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x880,
0x880, 0x0, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
@ -221,7 +221,7 @@ READ_ONLY static unsigned short udata[] = {
0x1880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x8880, 0x8880, 0x880, 0x0, 0x4880, 0x4880, 0x4880, 0x1800, 0x0, 0x0, 0x1880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x8880, 0x8880, 0x880, 0x0, 0x4880, 0x4880, 0x4880, 0x1800, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840,
0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x800, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0,
/* 12 */ /* 12 */
0x0, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880,
0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
@ -276,8 +276,8 @@ READ_ONLY static unsigned short udata[] = {
/* 15 */ /* 15 */
0x880, 0x802, 0x802, 0x802, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x4804, 0x804, 0x804, 0x804, 0x880, 0x802, 0x802, 0x802, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x4804, 0x804, 0x804, 0x804,
0x804, 0x804, 0x804, 0x802, 0x802, 0x802, 0x802, 0x802, 0x1800, 0x1800, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x804, 0x804, 0x804, 0x802, 0x802, 0x802, 0x802, 0x802, 0x1800, 0x1800, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
0x0, 0x0, 0x0, 0x0, 0x802, 0x1800, 0x802, 0x1800, 0x802, 0x1800, 0x804, 0x804, 0x804, 0x804, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x802, 0x1800, 0x802, 0x1800, 0x802, 0x1800, 0x804, 0x804, 0x804, 0x804, 0x800, 0x800,
0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880,
0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x4880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -349,7 +349,7 @@ READ_ONLY static unsigned short udata[] = {
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x1880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x1880,
0x802, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x802, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840,
0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x0, 0x0, 0x0,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
@ -425,7 +425,7 @@ READ_ONLY static unsigned short udata[] = {
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x1880, 0x880, 0x880, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x1880, 0x880, 0x880, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800,
0x1800, 0x1800, 0x1800, 0x1800, 0x804, 0x804, 0x804, 0x1880, 0x804, 0x804, 0x804, 0x802, 0x880, 0x1800, 0x0, 0x0, 0x1800, 0x1800, 0x1800, 0x1800, 0x804, 0x804, 0x804, 0x1880, 0x804, 0x804, 0x804, 0x802, 0x880, 0x1800, 0x0, 0x0,
0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* 24 */ /* 24 */
0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x1800, 0x1800, 0x1800, 0x11, 0x0, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x1800, 0x1800, 0x1800, 0x11, 0x0,
0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -568,7 +568,7 @@ READ_ONLY static unsigned short udata[] = {
0x4802, 0x4802, 0x4802, 0x802, 0x4a80, 0x802, 0x4a80, 0x802, 0x4a80, 0x802, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x802, 0x4c80, 0x4802, 0x4802, 0x4802, 0x802, 0x4a80, 0x802, 0x4a80, 0x802, 0x4a80, 0x802, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x802, 0x4c80,
0x4a80, 0x4a80, 0xa80, 0x4a80, 0x4c80, 0x4880, 0x4880, 0x4880, 0x4880, 0x4c80, 0x802, 0x4802, 0x4c80, 0x4c80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0xa80, 0x4a80, 0x4c80, 0x4880, 0x4880, 0x4880, 0x4880, 0x4c80, 0x802, 0x4802, 0x4c80, 0x4c80, 0x4a80, 0x4a80,
0x4802, 0x802, 0x802, 0x802, 0x802, 0x4a80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x802, 0x802, 0x802, 0x802, 0xc80, 0x0, 0x4802, 0x802, 0x802, 0x802, 0x802, 0x4a80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x802, 0x802, 0x802, 0x802, 0xc80, 0x0,
0x0, 0x0, 0x0, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x0, 0x0, 0x0, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800,
0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a80,
0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c80,
0x880, 0x880, 0x880, 0xa80, 0xc80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x880, 0x880, 0xa80, 0xc80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -620,16 +620,16 @@ READ_ONLY static unsigned short udata[] = {
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800,
0x4000, 0x4000, 0x4000, 0x4000, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4000, 0x4000, 0x4000, 0x4800, 0x4800, 0x4800, 0x4800, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4800, 0x4800, 0x4800,
0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840, 0x4840,
0x4840, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4802, 0x4802, 0x4802, 0x4802, 0x4840, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82,
0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82, 0x4a82,
0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82,
0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4c82, 0x4840, 0x800, 0x800, 0x800, 0x800, 0x800,
0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x840, 0x800, 0x800, 0x800, 0x800, 0x800, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x800, 0x840,
/* 36 */ /* 36 */
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
@ -672,9 +672,9 @@ READ_ONLY static unsigned short udata[] = {
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x802, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x802, 0x0, 0x802,
0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x802, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x802, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0,
0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804,
0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x800,
0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x0, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840, 0x800, 0x840, 0x840, 0x840, 0x840, 0x840, 0x840,
0x840, 0x840, 0x840, 0x0, 0x802, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x840, 0x840, 0x840, 0x800, 0x802, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0,
0x802, 0x802, 0x802, 0x802, 0x802, 0x804, 0x804, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x804, 0x804, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -748,7 +748,7 @@ READ_ONLY static unsigned short udata[] = {
0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80,
0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80, 0xa80, 0xc80,
0xa80, 0xc80, 0xa80, 0xc80, 0xc80, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa80, 0xc80, 0xa80, 0xc80, 0xc80, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x804, 0x804, 0x804, 0x804, 0x0, 0x804, 0x804, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x804, 0x804, 0x804, 0x804, 0x800, 0x804, 0x804,
/* 43 */ /* 43 */
0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80,
0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80, 0xc80,
@ -827,7 +827,7 @@ READ_ONLY static unsigned short udata[] = {
0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880,
0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880,
0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x0, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x0,
0x802, 0x802, 0x4000, 0x4000, 0x4000, 0x4000, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x802, 0x802, 0x4800, 0x4800, 0x4800, 0x4800, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
@ -837,16 +837,16 @@ READ_ONLY static unsigned short udata[] = {
/* 48 */ /* 48 */
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x0, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x0,
0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4802, 0x4802, 0x4802, 0x4802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x4802, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4802, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x802,
0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4802, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800, 0x4800,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802, 0x4802,
@ -1124,15 +1124,15 @@ READ_ONLY static unsigned short udata[] = {
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0,
/* 65 */ /* 65 */
0x804, 0x804, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x804, 0x804, 0x802, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x800, 0x800, 0x800, 0x800, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x880, 0x880, 0x880, 0x880, 0x880, 0x800, 0x800, 0x800, 0x800, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x800, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -1143,7 +1143,7 @@ READ_ONLY static unsigned short udata[] = {
/* 66 */ /* 66 */
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x800, 0x800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -1193,7 +1193,7 @@ READ_ONLY static unsigned short udata[] = {
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* 69 */ /* 69 */
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x804, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x800, 0x800, 0x800, 0x800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x804,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -1213,7 +1213,7 @@ READ_ONLY static unsigned short udata[] = {
0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x0, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880, 0x880,
0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x1800, 0x1800, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x880, 0x880, 0x880, 0x880, 0x0, 0x0, 0x0, 0x0, 0x1800, 0x1800, 0x1800, 0x0, 0x0, 0x0, 0x0, 0x1800,
0x840, 0x840, 0x840, 0x840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x840, 0x840, 0x840, 0x840, 0x800, 0x800, 0x800, 0x800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x804, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -1317,8 +1317,8 @@ READ_ONLY static unsigned short udata[] = {
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802,
0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x802, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,