MODULE EncStdMap_viscii;

	(* This file was generated automatically *)

	(* Source: http://www.math.nmsu.edu/~mleisher/Software/csets/VISCII.TXT *)

	IMPORT Codecs := EncCodecs;

	TYPE
		Encoder = POINTER TO RECORD (Codecs.Encoder) END;
		Decoder = POINTER TO RECORD (Codecs.Decoder) END;

	(* Encoder *)

	PROCEDURE (e: Encoder) Encode (IN f: ARRAY OF CHAR; VAR fR, fLen: INTEGER; VAR t: ARRAY OF SHORTCHAR; VAR tW: INTEGER);
		VAR x, y: INTEGER;
	BEGIN
		WHILE fLen > 0 DO
			x := ORD(f[fR]);
			CASE x OF
			| 00H..01H: y := x
			| 03H..04H: y := x
			| 07H..13H: y := x
			| 15H..18H: y := x
			| 1AH..1DH: y := x
			| 1FH..7FH: y := x
			| 0C0H..0C3H: y := x
			| 0C8H..0CAH: y := x
			| 0CCH..0CDH: y := x
			| 0D2H..0D4H: y := x
			| 0D5H: y := 0A0H
			| 0D9H..0DAH: y := x
			| 0DDH: y := 0DDH
			| 0E0H..0E3H: y := x
			| 0E8H..0EAH: y := x
			| 0ECH..0EDH: y := x
			| 0F2H..0F5H: y := x
			| 0F9H..0FAH: y := x
			| 0FDH: y := 0FDH
			| 0102H: y := 0C5H
			| 0103H: y := 0E5H
			| 0110H: y := 0D0H
			| 0111H: y := 0F0H
			| 0128H: y := 0CEH
			| 0129H: y := 0EEH
			| 0168H: y := 9DH
			| 0169H: y := 0FBH
			| 01A0H: y := 0B4H
			| 01A1H: y := 0BDH
			| 01AFH: y := 0BFH
			| 01B0H: y := 0DFH
			| 1EA0H: y := 80H
			| 1EA1H: y := 0D5H
			| 1EA2H: y := 0C4H
			| 1EA3H: y := 0E4H
			| 1EA4H: y := 84H
			| 1EA5H: y := 0A4H
			| 1EA6H: y := 85H
			| 1EA7H: y := 0A5H
			| 1EA8H: y := 86H
			| 1EA9H: y := 0A6H
			| 1EAAH: y := 06H
			| 1EABH: y := 0E7H
			| 1EACH: y := 87H
			| 1EADH: y := 0A7H
			| 1EAEH: y := 81H
			| 1EAFH: y := 0A1H
			| 1EB0H: y := 82H
			| 1EB1H: y := 0A2H
			| 1EB2H: y := 02H
			| 1EB3H: y := 0C6H
			| 1EB4H: y := 05H
			| 1EB5H: y := 0C7H
			| 1EB6H: y := 83H
			| 1EB7H: y := 0A3H
			| 1EB8H: y := 89H
			| 1EB9H: y := 0A9H
			| 1EBAH: y := 0CBH
			| 1EBBH: y := 0EBH
			| 1EBCH: y := 88H
			| 1EBDH: y := 0A8H
			| 1EBEH: y := 8AH
			| 1EBFH: y := 0AAH
			| 1EC0H: y := 8BH
			| 1EC1H: y := 0ABH
			| 1EC2H: y := 8CH
			| 1EC3H: y := 0ACH
			| 1EC4H: y := 8DH
			| 1EC5H: y := 0ADH
			| 1EC6H: y := 8EH
			| 1EC7H: y := 0AEH
			| 1EC8H: y := 9BH
			| 1EC9H: y := 0EFH
			| 1ECAH: y := 98H
			| 1ECBH: y := 0B8H
			| 1ECCH: y := 9AH
			| 1ECDH: y := 0F7H
			| 1ECEH: y := 99H
			| 1ECFH: y := 0F6H
			| 1ED0H: y := 8FH
			| 1ED1H: y := 0AFH
			| 1ED2H: y := 90H
			| 1ED3H: y := 0B0H
			| 1ED4H: y := 91H
			| 1ED5H: y := 0B1H
			| 1ED6H: y := 92H
			| 1ED7H: y := 0B2H
			| 1ED8H: y := 93H
			| 1ED9H: y := 0B5H
			| 1EDAH: y := 95H
			| 1EDBH: y := 0BEH
			| 1EDCH: y := 96H
			| 1EDDH: y := 0B6H
			| 1EDEH: y := 97H
			| 1EDFH: y := 0B7H
			| 1EE0H: y := 0B3H
			| 1EE1H: y := 0DEH
			| 1EE2H: y := 94H
			| 1EE3H: y := 0FEH
			| 1EE4H: y := 9EH
			| 1EE5H: y := 0F8H
			| 1EE6H: y := 9CH
			| 1EE7H: y := 0FCH
			| 1EE8H: y := 0BAH
			| 1EE9H: y := 0D1H
			| 1EEAH: y := 0BBH
			| 1EEBH: y := 0D7H
			| 1EECH: y := 0BCH
			| 1EEDH: y := 0D8H
			| 1EEEH: y := 0FFH
			| 1EEFH: y := 0E6H
			| 1EF0H: y := 0B9H
			| 1EF1H: y := 0F1H
			| 1EF2H: y := 9FH
			| 1EF3H: y := 0CFH
			| 1EF4H: y := 1EH
			| 1EF5H: y := 0DCH
			| 1EF6H: y := 14H
			| 1EF7H: y := 0D6H
			| 1EF8H: y := 19H
			| 1EF9H: y := 0DBH
			ELSE
				RETURN
			END;
			t[tW] := SHORT(CHR(y)); INC(tW);
			INC(fR); DEC(fLen)
		END
	END Encode;

	PROCEDURE NewEncoder* (): Codecs.Encoder;
		VAR e: Encoder;
	BEGIN
		NEW(e); RETURN e
	END NewEncoder;

	(* Decoder *)

	PROCEDURE (d: Decoder) Decode (IN f: ARRAY OF SHORTCHAR; VAR fR, fLen: INTEGER; VAR t: ARRAY OF CHAR; VAR tW: INTEGER; OUT state: BOOLEAN);
		VAR x, y: INTEGER;
	BEGIN
		WHILE fLen > 0 DO
			x := ORD(f[fR]);
			CASE x OF
			| 00H..01H: y := x
			| 02H: y := 1EB2H
			| 03H..04H: y := x
			| 05H: y := 1EB4H
			| 06H: y := 1EAAH
			| 07H..13H: y := x
			| 14H: y := 1EF6H
			| 15H..18H: y := x
			| 19H: y := 1EF8H
			| 1AH..1DH: y := x
			| 1EH: y := 1EF4H
			| 1FH..7FH: y := x
			| 80H: y := 1EA0H
			| 81H: y := 1EAEH
			| 82H: y := 1EB0H
			| 83H: y := 1EB6H
			| 84H: y := 1EA4H
			| 85H: y := 1EA6H
			| 86H: y := 1EA8H
			| 87H: y := 1EACH
			| 88H: y := 1EBCH
			| 89H: y := 1EB8H
			| 8AH: y := 1EBEH
			| 8BH: y := 1EC0H
			| 8CH: y := 1EC2H
			| 8DH: y := 1EC4H
			| 8EH: y := 1EC6H
			| 8FH: y := 1ED0H
			| 90H: y := 1ED2H
			| 91H: y := 1ED4H
			| 92H: y := 1ED6H
			| 93H: y := 1ED8H
			| 94H: y := 1EE2H
			| 95H: y := 1EDAH
			| 96H: y := 1EDCH
			| 97H: y := 1EDEH
			| 98H: y := 1ECAH
			| 99H: y := 1ECEH
			| 9AH: y := 1ECCH
			| 9BH: y := 1EC8H
			| 9CH: y := 1EE6H
			| 9DH: y := 0168H
			| 9EH: y := 1EE4H
			| 9FH: y := 1EF2H
			| 0A0H: y := 0D5H
			| 0A1H: y := 1EAFH
			| 0A2H: y := 1EB1H
			| 0A3H: y := 1EB7H
			| 0A4H: y := 1EA5H
			| 0A5H: y := 1EA7H
			| 0A6H: y := 1EA9H
			| 0A7H: y := 1EADH
			| 0A8H: y := 1EBDH
			| 0A9H: y := 1EB9H
			| 0AAH: y := 1EBFH
			| 0ABH: y := 1EC1H
			| 0ACH: y := 1EC3H
			| 0ADH: y := 1EC5H
			| 0AEH: y := 1EC7H
			| 0AFH: y := 1ED1H
			| 0B0H: y := 1ED3H
			| 0B1H: y := 1ED5H
			| 0B2H: y := 1ED7H
			| 0B3H: y := 1EE0H
			| 0B4H: y := 01A0H
			| 0B5H: y := 1ED9H
			| 0B6H: y := 1EDDH
			| 0B7H: y := 1EDFH
			| 0B8H: y := 1ECBH
			| 0B9H: y := 1EF0H
			| 0BAH: y := 1EE8H
			| 0BBH: y := 1EEAH
			| 0BCH: y := 1EECH
			| 0BDH: y := 01A1H
			| 0BEH: y := 1EDBH
			| 0BFH: y := 01AFH
			| 0C0H..0C3H: y := x
			| 0C4H: y := 1EA2H
			| 0C5H: y := 0102H
			| 0C6H: y := 1EB3H
			| 0C7H: y := 1EB5H
			| 0C8H..0CAH: y := x
			| 0CBH: y := 1EBAH
			| 0CCH..0CDH: y := x
			| 0CEH: y := 0128H
			| 0CFH: y := 1EF3H
			| 0D0H: y := 0110H
			| 0D1H: y := 1EE9H
			| 0D2H..0D4H: y := x
			| 0D5H: y := 1EA1H
			| 0D6H: y := 1EF7H
			| 0D7H: y := 1EEBH
			| 0D8H: y := 1EEDH
			| 0D9H..0DAH: y := x
			| 0DBH: y := 1EF9H
			| 0DCH: y := 1EF5H
			| 0DDH: y := 0DDH
			| 0DEH: y := 1EE1H
			| 0DFH: y := 01B0H
			| 0E0H..0E3H: y := x
			| 0E4H: y := 1EA3H
			| 0E5H: y := 0103H
			| 0E6H: y := 1EEFH
			| 0E7H: y := 1EABH
			| 0E8H..0EAH: y := x
			| 0EBH: y := 1EBBH
			| 0ECH..0EDH: y := x
			| 0EEH: y := 0129H
			| 0EFH: y := 1EC9H
			| 0F0H: y := 0111H
			| 0F1H: y := 1EF1H
			| 0F2H..0F5H: y := x
			| 0F6H: y := 1ECFH
			| 0F7H: y := 1ECDH
			| 0F8H: y := 1EE5H
			| 0F9H..0FAH: y := x
			| 0FBH: y := 0169H
			| 0FCH: y := 1EE7H
			| 0FDH: y := 0FDH
			| 0FEH: y := 1EE3H
			| 0FFH: y := 1EEEH
			ELSE
				RETURN
			END;
			t[tW] := CHR(y); INC(tW);
			INC(fR); DEC(fLen)
		END;
		state := FALSE
	END Decode;

	PROCEDURE (d: Decoder) Reset, EMPTY;

	PROCEDURE NewDecoder* (): Codecs.Decoder;
		VAR d: Decoder;
	BEGIN
		NEW(d); RETURN d
	END NewDecoder;

END EncStdMap_viscii.