unit data;


interface

uses pathunit;

(* options: *)

var corelfix, generate, split, ttfix, verbose, stdenc, 
    noOtherSubrs, afmcheck: Boolean;

(* flags: *)

var afmopen, ccopen: Boolean;

(* CharStrings storage *)

const	maxCharStrings = 300;

var	CharStrings: array [1..maxCharStrings] of CharStrpointer;
	CharStringscount: integer;

(* Encoding vectors *)

const	(* Windows encoding vector used for ttfix option *)
	WinANSI: array [0..255] of string [30] = (
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/space', '/exclam', '/quotedbl', '/numbersign', '/dollar', '/percent', '/ampersand', '/quotesingle',
	'/parenleft', '/parenright', '/asterisk', '/plus', '/comma', '/hyphen', '/period', '/slash',
	'/zero', '/one', '/two', '/three', '/four', '/five', '/six', '/seven',
	'/eight', '/nine', '/colon', '/semicolon', '/less', '/equal', '/greater', '/question',
	'/at', '/A', '/B', '/C', '/D', '/E', '/F', '/G', '/H', '/I', '/J', '/K', '/L', '/M', '/N', '/O',
	'/P', '/Q', '/R', '/S', '/T', '/U', '/V', '/W',
	'/X', '/Y', '/Z', '/bracketleft', '/backslash', '/bracketright', '/asciicircum', '/underscore',
	'/grave', '/a', '/b', '/c', '/d', '/e', '/f', '/g', '/h', '/i', '/j', '/k', '/l', '/m', '/n', '/o',
	'/p', '/q', '/r', '/s', '/t', '/u', '/v', '/w',
	'/x', '/y', '/z', '/braceleft', '/bar', '/braceright', '/asciitilde', '/.notdef',
	'/.notdef', '/.notdef', '/quotesinglbase', '/florin',
	'/quotedblbase', '/ellipsis', '/dagger', '/daggerdbl',
	'/circumflex', '/perthousand', '/Scaron', '/guilsinglleft', '/OE', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/quoteleft', '/quoteright', '/quotedblleft',
	'/quotedblright', '/bullet', '/endash', '/emdash',
	'/tilde', '/trademark', '/scaron', '/guilsinglright', '/oe', '/.notdef', '/.notdef', '/Ydieresis',
	'/space', '/exclamdown', '/cent', '/sterling', '/currency', '/yen', '/brokenbar', '/section',
	'/dieresis', '/copyright', '/ordfeminine', '/guillemotleft',
	'/logicalnot', '/minus', '/registered', '/macron',
	'/degree', '/plusminus', '/twosuperior', '/threesuperior',
	'/acute', '/mu', '/paragraph', '/periodcentered',
	'/cedilla', '/onesuperior', '/ordmasculine', '/guillemotright',
	'/onequarter', '/onehalf', '/threequarters', '/questiondown',
	'/Agrave', '/Aacute', '/Acircumflex', '/Atilde', '/Adieresis', '/Aring', '/AE', '/Ccedilla',
	'/Egrave', '/Eacute', '/Ecircumflex', '/Edieresis', '/Igrave', '/Iacute', '/Icircumflex', '/Idieresis',
	'/Eth', '/Ntilde', '/Ograve', '/Oacute', '/Ocircumflex', '/Otilde', '/Odieresis', '/multiply',
	'/Oslash', '/Ugrave', '/Uacute', '/Ucircumflex', '/Udieresis', '/Yacute', '/Thorn', '/germandbls',
	'/agrave', '/aacute', '/acircumflex', '/atilde', '/adieresis', '/aring', '/ae', '/ccedilla',
	'/egrave', '/eacute', '/ecircumflex', '/edieresis', '/igrave', '/iacute', '/icircumflex', '/idieresis',
	'/eth', '/ntilde', '/ograve', '/oacute', '/ocircumflex', '/otilde', '/odieresis', '/divide',
	'/oslash', '/ugrave', '/uacute', '/ucircumflex', '/udieresis', '/yacute', '/thorn', '/ydieresis'
	);

	(* StandardEncoding vector used for generate option *)
	StandardEncoding: array [0..255] of string [30] = (
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/space', '/exclam', '/quotedbl', '/numbersign', '/dollar', '/percent', '/ampersand', '/quoteright',
	'/parenleft', '/parenright', '/asterisk', '/plus', '/comma', '/hyphen', '/period', '/slash',
	'/zero', '/one', '/two', '/three', '/four', '/five', '/six', '/seven',
	'/eight', '/nine', '/colon', '/semicolon', '/less', '/equal', '/greater', '/question',
	'/at', '/A', '/B', '/C', '/D', '/E', '/F', '/G', '/H', '/I', '/J', '/K', '/L', '/M', '/N', '/O',
	'/P', '/Q', '/R', '/S', '/T', '/U', '/V', '/W',
	'/X', '/Y', '/Z', '/bracketleft', '/backslash', '/bracketright', '/asciicircum', '/underscore',
	'/quoteleft', '/a', '/b', '/c', '/d', '/e', '/f', '/g', '/h', '/i', '/j', '/k', '/l', '/m', '/n', '/o',
	'/p', '/q', '/r', '/s', '/t', '/u', '/v', '/w',
	'/x', '/y', '/z', '/braceleft', '/bar', '/braceright', '/asciitilde', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/exclamdown', '/cent', '/sterling', '/fraction', '/yen', '/florin', '/section',
	'/currency', '/quotesingle', '/quotedblleft', '/guillemotleft',
	'/guilsinglleft', '/guilsinglright', '/fi', '/fl',
	'/.notdef', '/endash', '/dagger', '/daggerdbl',
	'/periodcentered', '/.notdef', '/paragraph', '/bullet',
	'/quotesinglbase', '/quotedblbase', '/quotedblright', '/guillemotright',
	'/ellipsis', '/perthousand', '/.notdef', '/questiondown',
	'/.notdef', '/grave', '/acute', '/circumflex', '/tilde', '/macron', '/breve', '/dotaccent',
	'/dieresis', '/.notdef', '/ring', '/cedilla', '/.notdef', '/hungarumlaut', '/ogonek', '/caron',
	'/emdash', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/AE', '/.notdef', '/ordfeminine', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/Lslash', '/Oslash', '/OE', '/ordmasculine', '/.notdef', '/.notdef', '/.notdef', '/.notdef',
	'/.notdef', '/ae', '/.notdef', '/.notdef', '/.notdef', '/dotlessi', '/.notdef', '/.notdef',
	'/lslash', '/oslash', '/oe', '/germandbls', '/.notdef', '/.notdef', '/.notdef', '/.notdef'
	);

function getCharString (n: string): CharStrpointer;
function getSEcode (n: string): integer;
procedure makefilebuffer (var buf: text; name: string);
procedure getfilebuffer (var buf, out: text);


implementation

uses Dos;

function getCharString (n: string): CharStrpointer;
var i: integer;
begin
	i := 1;
	getCharString := nil;
	while i <= CharStringscount do
		if CharStrings [i] ^.name = n then begin
			getCharString := CharStrings [i];
			i := CharStringscount + 1
		end
		else	i := i + 1
end;

function getSEcode (n: string): integer;
var i: integer;
    weiter: Boolean;
begin
	i := 255;
	weiter := true;
	while weiter and (i >= 0) do
		if StandardEncoding [i] = n
		then	weiter := false
		else	i := i - 1;
	getSEcode := i
end;

procedure makefilebuffer (var buf: text; name: string);
begin
	if getenv ('TEMP') <> ''
	then	assign (buf, getenv ('TEMP') + '\' + name)
	else	assign (buf, name);
	rewrite (buf);
end;

procedure getfilebuffer (var buf, out: text);
var s: string;
begin
	reset (buf);
	while not eof (buf) do begin
		readln (buf, s);
		writeln (out, s)
	end;
	close (buf);
	erase (buf);
end;

end.
