ADVゲームぽいページャもどき on Ruby

ファイルを読み込んで、一文ごとにキー入力待ちしながら標準出力に出力するプログラムです。ただ端末に垂れ流すだけで大した機能はありませんが、ADVゲームぽい雰囲気が味わえます。
あ、そうそう、以下のプログラムは文字コードに依存していますので、文字コードEUCとして保存してください。

#!/usr/bin/env ruby

$KCODE = 'e'
require 'kconv'

def read_book(input)
  sepre = /(」|[。!?]+」?)/
  book = []
  Kconv.toeuc(input.read).gsub(/\r?\n/, "\r\n").split(sepre).each do |s|
    if s =~ sepre and book.size > 0
      book[-1] << s
    else
      book << s
    end
  end
  book
end

def raw_term
  trap(15) do
    `stty echo cooked`
    exit(1)
  end

  begin
    `stty -echo raw`
    yield
  ensure
    `stty echo cooked`
  end
end

def print_sentence(s)
  s.split(//).each do |c|
    print c
    $stdout.flush
    sleep(0.01)
  end
end

def wait_key
  case $stdin.getc
  when 3 # Ctrl-C
    return true
  when ?q
    return true
  end
  false
end

book = read_book(ARGF)
raw_term do
  book.each do |s|
    print_sentence(s)
    break if wait_key
  end
end

BUGS: 端末の文字コードEUCで決め打ち。機能不足(早送り、栞、行番号ジャンプなどの機能はありません)。富豪的プログラム(ファイルを全てメモリに読み込んでいます)。