Copyright (c) 2004 Jim Huang.