/* * $Id: ZCharDecoder.java 536 2008-02-19 06:03:27Z weiju $ * * Created on 2005/09/23 * Copyright 2005-2008 by Wei-ju Wu * This file is part of The Z-machine Preservation Project (ZMPP). * * ZMPP is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ZMPP is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ZMPP. If not, see <http://www.gnu.org/licenses/>. */ package org.zmpp.encoding; import org.zmpp.base.Memory; /** * This interface provides decoding for the Z character encoding into the Java * character system. It is important to point out that there is a difference * between Z characters and the ZCSII encoding. Where ZSCII is a character set * that is similar to ASCII/iso-8859-1, the Z characters are a encoded form of * characters in memory that provide some degree of compression and encryption. * * ZCharConverter uses the alphabet tables specified in the Z machine standards * document 1.0, section 3. * * @author Wei-ju Wu * @version 1.0 */ public interface ZCharDecoder { /** * This interface defines the abstract access to an abbreviations table in * memory, this will be used for decoding if needed. */ public interface AbbreviationsTable { int getWordAddress(int entryNum); } /** * Performs a ZSCII decoding at the specified position of the given memory * object, this method is exclusively designed to deal with the problems of * dictionary entries. These can be cropped, leaving the string in a state, * that can not be decoded properly otherwise. If the provided length is 0, * the semantics are equal to the method without the length parameter. * * @param memory a Memory object * @param address the address of the string * @param length the maximum length in bytes * @return the decoded string */ ZsciiString decode2Zscii(Memory memory, int address, int length); /** * Decodes the given byte value to the specified buffer using the working * alphabet. * * @param zchar a z encoded character, needs to be a non-shift character */ char decodeZChar(char zchar); /** * Returns the ZStringTranslator. * * @return the translator */ ZCharTranslator getTranslator(); }