/*
 * latin2tex.c - maps ECMA-94 Latin1 8-bit extended chars to TeX commands
 *
 * Bruno Costa - 19 Apr 91 - 19 Apr 91
 */

#include <stdio.h>

#define TRUE  1
#define FALSE 0

#define FIRST 160
#define LAST  255

#define isspecial(c) ((c) <= LAST  &&  (c) >= FIRST)

char *table[LAST-FIRST+1] = {
/* NBSP	*/	"~",
/* i	*/	NULL,
/* c|	*/	NULL,
/* L-	*/	NULL,
/* o	*/	NULL,
/* Y-	*/	NULL,
/* |	*/	"|",
/* SS	*/	NULL,
/* "	*/	NULL,
/* (c)	*/	NULL,
/* a_	*/	NULL,
/* <<	*/	"<<",
/* -	*/	NULL,
/* SHY	*/	"-",
/* (r)	*/	NULL,
/* -	*/	"-",
/* deg	*/	NULL,
/* +_	*/	NULL,
/* ^2	*/	NULL,
/* ^3	*/	NULL,
/* '	*/	"'",
/* u	*/	NULL,
/* <> P	*/	NULL,
/* .	*/	NULL,
/* ,	*/	NULL,
/* 1	*/	NULL,
/* o_	*/	NULL,
/* >>	*/	">>",
/* 1/4	*/	NULL,
/* 1/2	*/	NULL,
/* 3/4	*/	NULL,
/* ^ ?	*/	NULL,
/* `A	*/	"\\`A",
/* 'A	*/	"\\'A",
/* ^A	*/	"\\^A",
/* ~A	*/	"\\~A",
/* "A	*/	"\\\"A",
/* oA	*/	"\\.A",
/* AE	*/	"AE",
/* C,	*/	"{\\C C}",
/* `E	*/	"\\`E",
/* 'E	*/	"\\'E",
/* ^E	*/	"\\^E",
/* "E	*/	"\\\"E",
/* `I	*/	"\\`I",
/* 'I	*/	"\\'I",
/* ^I	*/	"\\^I",
/* "I	*/	"\\\"I",
/* -D	*/	NULL,
/* ~N	*/	"\\~N",
/* `O	*/	"\\`O",
/* 'O	*/	"\\'O",
/* ^O	*/	"\\^O",
/* ~O	*/	"\\~O",
/* "O	*/	"\\\"O",
/* x	*/	NULL,
/* 0	*/	NULL,
/* `U	*/	"\\`U",
/* 'U	*/	"\\'U",
/* ^U	*/	"\\^U",
/* "U	*/	"\\\"U",
/* 'Y	*/	"\\'Y",
/* Thorn */	NULL,
/* Beta	*/	NULL,
/* `a	*/	"\\`a",
/* 'a	*/	"\\'a",
/* ^a	*/	"\\^a",
/* ~a	*/	"\\~a",
/* "a	*/	"\\\"a",
/* oa	*/	"\\.a",
/* ae	*/	"ae",
/* c,	*/	"{\\c c}",
/* `e	*/	"\\`e",
/* 'e	*/	"\\'e",
/* ^e	*/	"\\^e",
/* "e	*/	"\\\"e",
/* `i	*/	"{\\`\\i}",
/* 'i	*/	"{\\'\\i}",
/* ^i	*/	"{\\^\\i}",
/* "i	*/	"{\\\"\\i}",
/* d	*/	NULL,
/* ~n	*/	"\\~n",
/* `o	*/	"\\`o",
/* 'o	*/	"\\'o",
/* ^o	*/	"\\^o",
/* ~o	*/	"\\~o",
/* "o	*/	"\\\"o",
/* :-	*/	NULL,
/* o/	*/	NULL,
/* `u	*/	"\\`u",
/* 'u	*/	"\\'u",
/* ^u	*/	"\\^u",
/* "u	*/	"\\\"u",
/* 'y	*/	"\\'y",
/* thorn */	NULL,
/* "y	*/	"\\\"y"
};


int map (FILE *in, FILE *out)
{
 int c;

 while ((c = fgetc (in)) != EOF)
   if (isspecial (c)  &&  table[c - FIRST])
   {
     if (fputs (table[c - FIRST], out) == EOF)
       return FALSE;
   }
   else
   {
     if (fputc (c, out) == EOF)
       return FALSE;
   }

 return TRUE;
}


void main (int argc, char *argv[])
{
 if (!map (stdin, stdout))
   fputs ("latin2tex: error mapping stdin to stdout\n", stderr);
}
