/*T
\let\\=\par
\parindent=0pt
\def\sline{\hbox to \hsize{\hrulefill}}
\def\newpage{\vfill\eject}
FILE: {\tt stdhun.c}\\
AUTH: P\'eter Verh\'as\\
DATE: 94-04-04\\
CONTENTS:\\
Functions that perform Hungarian accented output.
*/
#include <stdio.h>
#include <stdarg.h>

#include "ctable.h"

static char buffer[512];
/*T
\newpage
*/

/*T
Written by: P\'eter Verh\'as\\
Date      : 94-04-10\\
\sline
\underline{Function description:}

Converts the input string to accented letters according to the CodePage
variable. The resulting string gets into the local variable {\tt buffer}.

\underline{Return value:}
Constant pointer to the result string stored in {\tt buffer} is returned.

*/
static char *hconvert(char *s, int CodePage){
  int i,vovel;

  for( i=0 ; *s ; s++ ){
    if( s[1] == '1' )
      switch( *s ){
        case 'A': vovel = 1;  break;
        case 'a': vovel = 2;  break;
        case 'E': vovel = 3;  break;
        case 'e': vovel = 4;  break;
        case 'I': vovel = 5;  break;
        case 'i': vovel = 6;  break;
        case 'O': vovel = 7;  break;
        case 'o': vovel = 8;  break;
        case 'U': vovel = 13; break;
        case 'u': vovel = 14; break;
        default:  vovel = 0; break;
      }
    else if( s[1] == '2' )
      switch( *s ){
        case 'O': vovel = 9;  break;
        case 'o': vovel = 10; break;
        case 'U': vovel = 15; break;
        case 'u': vovel = 16; break;
        default: vovel = 0;
        }
    else if( s[1] == '3' )
      switch( *s ){
        case 'O': vovel = 11; break;
        case 'o': vovel = 12; break;
        case 'U': vovel = 17; break;
        case 'u': vovel = 18; break;
        }
    else vovel = 0;

    if( vovel ){
      buffer[i++] = tTable[CodePage][vovel];
      s++;
      }
    else buffer[i++] = *s;
    }

  return buffer;
  }

int _charset;

int hsprintf(char *buffer, char *format, ...){
  int i,j;
  va_list argptr;
  switch( _charset ){
    case 852: j=2;break;
    case 2:   j=1; break;
    case 100: j=0; break;
    }
  va_start(argptr,format);
  i = vsprintf(buffer,hconvert(format,j),argptr);
  va_end(argptr);
  return i;
  }
int hfprintf(FILE *fp, char *format, ...){
  int i,j;
  va_list argptr;

  switch( _charset ){
    case 852: j=2;break;
    case 2:   j=1; break;
    case 100: j=0; break;
    }
  va_start(argptr,format);
  i = vfprintf(fp,hconvert(format,j),argptr);
  va_end(argptr);
  return i;
  }

