diff options
| author | haturatu <taro@eyes4you.org> | 2024-12-10 21:28:04 +0900 | 
|---|---|---|
| committer | haturatu <taro@eyes4you.org> | 2024-12-10 21:28:04 +0900 | 
| commit | fe6c36e18042603bb096d3685fe3988e32331ebf (patch) | |
| tree | 359c42bed67e5eee7342b2e95810dfe501c69665 /Java/basE91.java | |
Diffstat (limited to 'Java/basE91.java')
| -rw-r--r-- | Java/basE91.java | 137 | 
1 files changed, 137 insertions, 0 deletions
| diff --git a/Java/basE91.java b/Java/basE91.java new file mode 100644 index 0000000..56d7fda --- /dev/null +++ b/Java/basE91.java @@ -0,0 +1,137 @@ +/* + * basE91 encoding/decoding routines + * + * Copyright (c) 2000-2006 Joachim Henke + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + *  - Redistributions of source code must retain the above copyright notice, + *    this list of conditions and the following disclaimer. + *  - Redistributions in binary form must reproduce the above copyright notice, + *    this list of conditions and the following disclaimer in the documentation + *    and/or other materials provided with the distribution. + *  - Neither the name of Joachim Henke nor the names of his contributors may + *    be used to endorse or promote products derived from this software without + *    specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +public class basE91 +{ +	private int ebq, en, dbq, dn, dv; +	public final byte[] enctab; +	private final byte[] dectab; + +	public int encode(byte[] ib, int n, byte[] ob) +	{ +		int i, c = 0; + +		for (i = 0; i < n; ++i) { +			ebq |= (ib[i] & 255) << en; +			en += 8; +			if (en > 13) { +				int ev = ebq & 8191; + +				if (ev > 88) { +					ebq >>= 13; +					en -= 13; +				} else { +					ev = ebq & 16383; +					ebq >>= 14; +					en -= 14; +				} +				ob[c++] = enctab[ev % 91]; +				ob[c++] = enctab[ev / 91]; +			} +		} +		return c; +	} + +	public int encEnd(byte[] ob) +	{ +		int c = 0; + +		if (en > 0) { +			ob[c++] = enctab[ebq % 91]; +			if (en > 7 || ebq > 90) +				ob[c++] = enctab[ebq / 91]; +		} +		encReset(); +		return c; +	} + +	public void encReset() +	{ +		ebq = 0; +		en = 0; +	} + +	public int decode(byte[] ib, int n, byte[] ob) +	{ +		int i, c = 0; + +		for (i = 0; i < n; ++i) { +			if (dectab[ib[i]] == -1) +				continue; +			if (dv == -1) +				dv = dectab[ib[i]]; +			else { +				dv += dectab[ib[i]] * 91; +				dbq |= dv << dn; +				dn += (dv & 8191) > 88 ? 13 : 14; +				do { +					ob[c++] = (byte) dbq; +					dbq >>= 8; +					dn -= 8; +				} while (dn > 7); +				dv = -1; +			} +		} +		return c; +	} + +	public int decEnd(byte[] ob) +	{ +		int c = 0; + +		if (dv != -1) +			ob[c++] = (byte) (dbq | dv << dn); +		decReset(); +		return c; +	} + +	public void decReset() +	{ +		dbq = 0; +		dn = 0; +		dv = -1; +	} + +	public basE91() +	{ +		int i; +		String ts = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~\""; + +		enctab = ts.getBytes(); +		dectab = new byte[256]; +		for (i = 0; i < 256; ++i) +			dectab[i] = -1; +		for (i = 0; i < 91; ++i) +			dectab[enctab[i]] = (byte) i; +		encReset(); +		decReset(); +	} +} | 
