+ (let ((hard (if output-crlf "\r\n" "\n"))
+ (soft (if output-crlf "=\r\n" "=\n"))
+ (eof-block-branches nil)
+ (eof-block-reg 'r4)
+ (after-wsp 'r5)
+ (column 'r6)
+ (type 'r3)
+ (current 'r0)
+ (type-raw 0)
+ (type-enc 1)
+ (type-wsp 2)
+ (type-brk 3)
+ )
+ (` (4
+ (((, column) = 0)
+ ((, after-wsp) = 0)
+ (, (mel-ccl-set-eof-block '(end)))
+ (read r0)
+ (loop ; invariant: column <= 75
+ (loop
+ (loop
+ (branch
+ r0
+ (,@ (mapcar
+ (lambda (r0)
+ (let ((tmp (aref mel-ccl-qp-table r0)))
+ (cond
+ ((eq r0 (char-int ?F))
+ (` (if ((, column) == 0)
+ ((, (mel-ccl-set-eof-block '((write "F") (end))))
+ (read-if (r0 == ?r)
+ ((, (mel-ccl-set-eof-block '((write "Fr") (end))))
+ (read-if (r0 == ?o)
+ ((, (mel-ccl-set-eof-block '((write "Fro") (end))))
+ (read-if (r0 == ?m)
+ ((, (mel-ccl-set-eof-block '((write "From") (end))))
+ (read-if (r0 == ? )
+ (((, column) = 7)
+ ((, after-wsp) = 1)
+ (, (mel-ccl-set-eof-block '((write "From=20") (end))))
+ (read r0)
+ (write-repeat "=46rom "))
+ (((, column) = 4)
+ (write-repeat "From"))))
+ (((, column) = 3)
+ (write-repeat "Fro"))))
+ (((, column) = 2)
+ (write-repeat "Fr"))))
+ (((, column) = 1)
+ (write-repeat "F"))))
+ (((, type) = (, type-raw)) (break)) ; RAW
+ )))
+ ((eq r0 (char-int ?.))
+ (` (if ((, column) == 0)
+ (, (mel-ccl-try-to-read-crlf
+ input-crlf 'r0
+ ;; "." CR LF (input-crlf: t)
+ ;; "." LF (input-crlf: nil)
+ (` ((write (, (concat "=2E" hard)))
+ (, (mel-ccl-set-eof-block '(end)))
+ (read r0)
+ (repeat)))
+ ;; "." <EOF>
+ '((write ".") (end))
+ ;; "." noCR (input-crlf: t)
+ (` (((, column) = 1)
+ (write-repeat ".")))
+ ;; "." CR <EOF> (input-crlf: t)
+ '((write ".=0D") (end))
+ ;; "." CR noLF (input-crlf: t)
+ (` (((, column) = 4)
+ (write-repeat ".=0D")))
+ ;; "." <EOF> (input-crlf: nil)
+ '((write ".") (end))
+ ;; "." noLF (input-crlf: nil)
+ (` (((, column) = 1)
+ (write-repeat ".")))))
+ (((, type) = (, type-raw)) (break)) ; RAW
+ )))
+ ((eq tmp 'raw) (` (((, type) = (, type-raw)) (break))))
+ ((eq tmp 'enc) (` (((, type) = (, type-enc)) (break))))
+ ((eq tmp 'wsp) (` (((, type) = (, type-wsp)) (break))))
+ ((eq tmp 'cr) (` (((, type) = (, (if input-crlf type-brk type-enc)))
+ (break))))
+ ((eq tmp 'lf) (` (((, type) = (, (if input-crlf type-enc type-brk)))
+ (break))))
+ )))
+ mel-ccl-256-table))))
+ ;; r0:type{raw,enc,wsp,brk}
+ (branch
+ (, type)
+ ;; r0:type-raw
+ (if ((, column) < 75)
+ (((, column) += 1)
+ ((, after-wsp) = 0)
+ (, (mel-ccl-set-eof-block '(end)))
+ (write-read-repeat r0))
+ ((r1 = (r0 + 0))
+ ((, after-wsp) = 0)
+ (,@ (mel-ccl-try-to-read-crlf
+ input-crlf 'r0
+ (` (((, column) = 0)
+ (write r1)
+ (, (mel-ccl-set-eof-block (` ((write (, hard)) (end)))))
+ (read r0)
+ (write-repeat (, hard))))
+ '((write r1) (end))
+ (` (((, column) = 1)
+ (write (, soft)) (write-repeat r1)))
+ (` ((write (, soft)) (write r1) (write "=0D") (end)))
+ (` (((, column) = 4)
+ (write (, soft)) (write r1) (write-repeat "=0D")))
+ '((write r1) (end))
+ (` (((, column) = 1)
+ (write (, soft)) (write-repeat r1)))))))
+ ;; r0:type-enc
+ (((, after-wsp) = 0)
+ (if ((, column) < 73)
+ (((, column) += 3)
+ (write "=")
+ (write r0 (, mel-ccl-high-table))
+ (, (mel-ccl-set-eof-block '(end)))
+ (write-read-repeat r0 (, mel-ccl-low-table)))
+ (if ((, column) < 74)
+ ((r1 = (r0 + 0))
+ ((, after-wsp) = 0)
+ (,@ (mel-ccl-try-to-read-crlf
+ input-crlf 'r0
+ (` (((, column) = 0)
+ (write "=")
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (write (, hard))
+ (, (mel-ccl-set-eof-block '(end)))
+ (read r0)
+ (repeat)))
+ (` ((write "=")
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (end)))
+ (` (((, column) = 3)
+ (write (, (concat soft "=")))
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (repeat)))
+ (` ((write (, (concat soft "=")))
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (write "=0D")
+ (end)))
+ (` (((, column) = 6)
+ (write (, (concat soft "=")))
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (write-repeat "=0D")))
+ (` ((write "=")
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (end)))
+ (` (((, column) = 3)
+ (write (, (concat soft "=")))
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (repeat))))))
+ (((, column) = 3)
+ (write (, (concat soft "=")))
+ (write r0 (, mel-ccl-high-table))
+ (, (mel-ccl-set-eof-block '(end)))
+ (write-read-repeat r0 (, mel-ccl-low-table))))))
+ ;; r0:type-wsp
+ (if ((, column) < 73)
+ ((r1 = (r0 + 0))
+ (,@ (mel-ccl-try-to-read-crlf
+ input-crlf 'r0
+ (` (((, column) = 0)
+ ((, after-wsp) = 0)
+ (write "=")
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (write (, hard))
+ (, (mel-ccl-set-eof-block (` (end))))
+ (read r0)
+ (repeat)))
+ (` ((write "=")
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (end)))
+ (` (((, column) += 1)
+ ((, after-wsp) = 1)
+ (write-repeat r1)))
+ (` ((write r1)
+ (write "=0D")
+ (end)))
+ (` (((, column) += 4)
+ ((, after-wsp) = 0)
+ (write r1)
+ (write-repeat "=0D")))
+ (` ((write "=")
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table)) (end)))
+ (` (((, column) += 1)
+ ((, after-wsp) = 1)
+ (write-repeat r1))))))
+ (if ((, column) < 74)
+ ((r1 = (r0 + 0))
+ (,@ (mel-ccl-try-to-read-crlf
+ input-crlf 'r0
+ (` (((, column) = 0)
+ ((, after-wsp) = 0)
+ (write "=")
+ (write r1 (, mel-ccl-high-table))
+ (write r1 (, mel-ccl-low-table))
+ (write (, hard))
+ (, (mel-ccl-set-eof-block (` (end))))