#include <ctype.h>

void get_char_in_latin_1 (unsigned char *buffer, unsigned char c)
{
    unsigned char c1='?';
    if (c<0x80) 
    {	
        // Regular line-21 character set, mostly ASCII except these exceptions
        switch (c)
        {
            case 0x2a: // lowercase a, acute accent
                c1=0xe1;
                break;
            case 0x5c: // lowercase e, acute accent
                c1=0xe9;
                break;
            case 0x5e: // lowercase i, acute accent
                c1=0xed;
                break;			
            case 0x5f: // lowercase o, acute accent
                c1=0xf3;
                break;
            case 0x60: // lowercase u, acute accent
                c1=0xfa;
                break;
            case 0x7b: // lowercase c with cedilla
                c1=0xe7;
                break;
            case 0x7c: // division symbol
                c1=0xf7;
                break;
            case 0x7d: // uppercase N tilde
                c1=0xd1;
                break;
            case 0x7e: // lowercase n tilde
                c1=0xf1;
                break;
            default:
                c1=c;
                break;
        }
        *buffer=c1;
        return;
    }
    switch (c)
    {
        // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS
        // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F		
        case 0x80: // Registered symbol (R)
            c1=0xae;
            break;			
        case 0x81: // degree sign
            c1=0xb0;
            break;
        case 0x82: // 1/2 symbol			
            c1=0xbd;
            break;
        case 0x83: // Inverted (open) question mark			
            c1=0xbf;
            break;
        case 0x84: // Trademark symbol (TM) - Does not exist in Latin 1
            break;			
        case 0x85: // Cents symbol			
            c1=0xa2;
            break;
        case 0x86: // Pounds sterling			
            c1=0xa3;
            break;
        case 0x87: // Music note - Not in latin 1, so we use 'pilcrow'
            c1=0xb6;
            break;
        case 0x88: // lowercase a, grave accent
            c1=0xe0;
            break;
        case 0x89: // transparent space, we make it regular
            c1=0x20;			
            break;
        case 0x8a: // lowercase e, grave accent
            c1=0xe8;
            break;
        case 0x8b: // lowercase a, circumflex accent
            c1=0xe2;
            break;
        case 0x8c: // lowercase e, circumflex accent
            c1=0xea;			
            break;
        case 0x8d: // lowercase i, circumflex accent
            c1=0xee;
            break;
        case 0x8e: // lowercase o, circumflex accent
            c1=0xf4;
            break;
        case 0x8f: // lowercase u, circumflex accent
            c1=0xfb;
            break;
        // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS
        // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F
        case 0x90: // capital letter A with acute
            c1=0xc1;
            break;
        case 0x91: // capital letter E with acute
            c1=0xc9;
            break;
        case 0x92: // capital letter O with acute
            c1=0xd3;
            break;
        case 0x93: // capital letter U with acute
            c1=0xda;
            break;
        case 0x94: // capital letter U with diaresis
            c1=0xdc;
            break;
        case 0x95: // lowercase letter U with diaeresis
            c1=0xfc;
            break;
        case 0x96: // apostrophe
            c1=0x27;			
            break;
        case 0x97: // inverted exclamation mark			
            c1=0xa1;
            break;
        case 0x98: // asterisk
            c1=0x2a;			
            break;
        case 0x99: // apostrophe (yes, duped). See CCADI source code.
            c1=0x27;			
            break;
        case 0x9a: // hyphen-minus
            c1=0x2d;			
            break;
        case 0x9b: // copyright sign
            c1=0xa9;
            break;
        case 0x9c: // Service Mark - not available in latin 1
            break;
        case 0x9d: // Full stop (.)
            c1=0x2e;
            break;
        case 0x9e: // Quoatation mark
            c1=0x22;			
            break;
        case 0x9f: // Quoatation mark
            c1=0x22;			
            break;
        case 0xa0: // uppercase A, grave accent
            c1=0xc0;
            break;
        case 0xa1: // uppercase A, circumflex
            c1=0xc2;
            break;			
        case 0xa2: // uppercase C with cedilla
            c1=0xc7;
            break;
        case 0xa3: // uppercase E, grave accent
            c1=0xc8;
            break;
        case 0xa4: // uppercase E, circumflex
            c1=0xca;
            break;
        case 0xa5: // capital letter E with diaresis
            c1=0xcb;
            break;
        case 0xa6: // lowercase letter e with diaresis
            c1=0xeb;
            break;
        case 0xa7: // uppercase I, circumflex
            c1=0xce;
            break;
        case 0xa8: // uppercase I, with diaresis
            c1=0xcf;
            break;
        case 0xa9: // lowercase i, with diaresis
            c1=0xef;
            break;
        case 0xaa: // uppercase O, circumflex
            c1=0xd4;
            break;
        case 0xab: // uppercase U, grave accent
            c1=0xd9;
            break;
        case 0xac: // lowercase u, grave accent
            c1=0xf9;
            break;
        case 0xad: // uppercase U, circumflex
            c1=0xdb;
            break;
        case 0xae: // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
            c1=0xab;
            break;
        case 0xaf: // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
            c1=0xbb;
            break;
        // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS
        // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F
		case 0xb0: // Uppercase A, tilde
            c1=0xc3;
			break;
		case 0xb1: // Lowercase a, tilde
            c1=0xe3;
			break;
		case 0xb2: // Uppercase I, acute accent
            c1=0xcd;
            break;
		case 0xb3: // Uppercase I, grave accent
            c1=0xcc;
            break;
		case 0xb4: // Lowercase i, grave accent
            c1=0xec;
            break;
		case 0xb5: // Uppercase O, grave accent
            c1=0xd2;
            break;
		case 0xb6: // Lowercase o, grave accent
            c1=0xf2;
            break;
		case 0xb7: // Uppercase O, tilde
            c1=0xd5;
            break;
		case 0xb8: // Lowercase o, tilde
            c1=0xf5;
			break;
		case 0xb9: // Open curly brace
            c1=0x7b;
            break;
		case 0xba: // Closing curly brace
            c1=0x7d;            
            break;
		case 0xbb: // Backslash
            c1=0x5c;
            break;
		case 0xbc: // Caret
            c1=0x5e;
            break;
		case 0xbd: // Underscore
            c1=0x5f;
            break;
		case 0xbe: // Pipe (broken bar)            
			c1=0xa6;
            break;
		case 0xbf: // Tilde
            c1=0x7e; 
			break;
		case 0xc0: // Uppercase A, umlaut            
			c1=0xc4;
			break;
		case 0xc1: // Lowercase A, umlaut
            c1=0xe3; 
			break;
		case 0xc2: // Uppercase O, umlaut
            c1=0xd6;
			break;
		case 0xc3: // Lowercase o, umlaut
            c1=0xf6;
			break;
		case 0xc4: // Esszett (sharp S)
            c1=0xdf;
			break;
		case 0xc5: // Yen symbol
            c1=0xa5;
			break;
		case 0xc6: // Currency symbol
            c1=0xa4;
			break;            
		case 0xc7: // Vertical bar
            c1=0x7c;
			break;            
		case 0xc8: // Uppercase A, ring
            c1=0xc5;
            break;
		case 0xc9: // Lowercase A, ring
            c1=0xe5;
            break;
		case 0xca: // Uppercase O, slash
            c1=0xd8;
            break;
		case 0xcb: // Lowercase o, slash
            c1=0xf8;
            break;
		case 0xcc: // Upper left corner
		case 0xcd: // Upper right corner
		case 0xce: // Lower left corner
		case 0xcf: // Lower right corner
        default: // For those that don't have representation
            *buffer='?'; // I'll do it eventually, I promise
            break; // This are weird chars anyway
    }
    *buffer=c1;	
}

void get_char_in_unicode (unsigned char *buffer, unsigned char c)
{
    unsigned char c1,c2;
    switch (c)
    {
        case 0x84: // Trademark symbol (TM) 
            c2=0x21;
            c1=0x22;
            break;
        case 0x87: // Music note
            c2=0x26;
            c1=0x6a;
            break;
        case 0x9c: // Service Mark
            c2=0x21;
            c1=0x20;
            break;
		case 0xcc: // Upper left corner
            c2=0x23;
            c1=0x1c;
            break;			
		case 0xcd: // Upper right corner
            c2=0x23;
            c1=0x1d;
            break;
		case 0xce: // Lower left corner
            c2=0x23;
            c1=0x1e;
            break;
		case 0xcf: // Lower right corner
            c2=0x23;
            c1=0x1f;
            break;
        default: // Everything else, same as latin-1 followed by 00			
            get_char_in_latin_1 (&c1,c);
            c2=0;
            break;
    }
    *buffer=c1;
    *(buffer+1)=c2;
}

int get_char_in_utf_8 (unsigned char *buffer, unsigned char c) // Returns number of bytes used
{
    if (c<0x80) // Regular line-21 character set, mostly ASCII except these exceptions
    {
        switch (c)
        {
        case 0x2a: // lowercase a, acute accent
            *buffer=0xc3;
            *(buffer+1)=0xa1;
            return 2;
        case 0x5c: // lowercase e, acute accent
            *buffer=0xc3;
            *(buffer+1)=0xa9;
            return 2;
        case 0x5e: // lowercase i, acute accent
            *buffer=0xc3;
            *(buffer+1)=0xad;
            return 2;
        case 0x5f: // lowercase o, acute accent
            *buffer=0xc3;
            *(buffer+1)=0xb3;
            return 2;
        case 0x60: // lowercase u, acute accent
            *buffer=0xc3;
            *(buffer+1)=0xba;
            return 2;
        case 0x7b: // lowercase c with cedilla
            *buffer=0xc3;
            *(buffer+1)=0xa7;
            return 2;
        case 0x7c: // division symbol
            *buffer=0xc3;
            *(buffer+1)=0xb7;
            return 2;
        case 0x7d: // uppercase N tilde
            *buffer=0xc3;
            *(buffer+1)=0x91;
            return 2;
        case 0x7e: // lowercase n tilde
            *buffer=0xc3;
            *(buffer+1)=0xb1;
            return 2;
        default:
            *buffer=c;
            return 1;
        }
    }
    switch (c)
    {
        // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS
        // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F		
        case 0x80: // Registered symbol (R)
            *buffer=0xc2;
            *(buffer+1)=0xae;			
            return 2;
        case 0x81: // degree sign
            *buffer=0xc2;
            *(buffer+1)=0xb0;
            return 2;
        case 0x82: // 1/2 symbol
            *buffer=0xc2;
            *(buffer+1)=0xbd;
            return 2;
        case 0x83: // Inverted (open) question mark
            *buffer=0xc2;
            *(buffer+1)=0xbf;
            return 2;
        case 0x84: // Trademark symbol (TM)
            *buffer=0xe2;
            *(buffer+1)=0x84;
            *(buffer+2)=0xa2;
            return 3;
        case 0x85: // Cents symbol
            *buffer=0xc2;
            *(buffer+1)=0xa2;
            return 2;
        case 0x86: // Pounds sterling
            *buffer=0xc2;
            *(buffer+1)=0xa3;
            return 2;
        case 0x87: // Music note			
            *buffer=0xe2;
            *(buffer+1)=0x99;
            *(buffer+2)=0xaa;
            return 3;
        case 0x88: // lowercase a, grave accent
            *buffer=0xc3;
            *(buffer+1)=0xa0;
            return 2;
        case 0x89: // transparent space, we make it regular
            *buffer=0x20;			
            return 1;
        case 0x8a: // lowercase e, grave accent
            *buffer=0xc3;
            *(buffer+1)=0xa8;
            return 2;
        case 0x8b: // lowercase a, circumflex accent
            *buffer=0xc3;
            *(buffer+1)=0xa2;
            return 2;
        case 0x8c: // lowercase e, circumflex accent
            *buffer=0xc3;
            *(buffer+1)=0xaa;
            return 2;
        case 0x8d: // lowercase i, circumflex accent
            *buffer=0xc3;
            *(buffer+1)=0xae;
            return 2;
        case 0x8e: // lowercase o, circumflex accent
            *buffer=0xc3;
            *(buffer+1)=0xb4;
            return 2;
        case 0x8f: // lowercase u, circumflex accent
            *buffer=0xc3;
            *(buffer+1)=0xbb;
            return 2;
        // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS
        // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F
        case 0x90: // capital letter A with acute
            *buffer=0xc3;
            *(buffer+1)=0x81;
            return 2;
        case 0x91: // capital letter E with acute
            *buffer=0xc3;
            *(buffer+1)=0x89;
            return 2;
        case 0x92: // capital letter O with acute
            *buffer=0xc3;
            *(buffer+1)=0x93;
            return 2;
        case 0x93: // capital letter U with acute
            *buffer=0xc3;
            *(buffer+1)=0x9a;
            return 2;
        case 0x94: // capital letter U with diaresis
            *buffer=0xc3;
            *(buffer+1)=0x9c;
            return 2;
        case 0x95: // lowercase letter U with diaeresis
            *buffer=0xc3;
            *(buffer+1)=0xbc;
            return 2;
        case 0x96: // apostrophe
            *buffer=0x27;			
            return 1;
        case 0x97: // inverted exclamation mark
            *buffer=0xc1;
            *(buffer+1)=0xa1;
            return 2;
        case 0x98: // asterisk
            *buffer=0x2a;			
            return 1;
        case 0x99: // apostrophe (yes, duped). See CCADI source code.
            *buffer=0x27;			
            return 1;
        case 0x9a: // hyphen-minus
            *buffer=0x2d;			
            return 1;
        case 0x9b: // copyright sign
            *buffer=0xc2;
            *(buffer+1)=0xa9;
            return 2;
        case 0x9c: // Service mark 
            *buffer=0xe2;			
            *(buffer+1)=0x84;
            *(buffer+2)=0xa0;
            return 3;
        case 0x9d: // Full stop (.)
            *buffer=0x2e;			
            return 1;
        case 0x9e: // Quoatation mark
            *buffer=0x22;			
            return 1;
        case 0x9f: // Quoatation mark
            *buffer=0x22;			
            return 1;
        case 0xa0: // uppercase A, grave accent
            *buffer=0xc3;
            *(buffer+1)=0x80;
            return 2;
        case 0xa1: // uppercase A, circumflex
            *buffer=0xc3;
            *(buffer+1)=0x82;
            return 2;
        case 0xa2: // uppercase C with cedilla
            *buffer=0xc3;
            *(buffer+1)=0x87;
            return 2;
        case 0xa3: // uppercase E, grave accent
            *buffer=0xc3;
            *(buffer+1)=0x88;
            return 2;
        case 0xa4: // uppercase E, circumflex
            *buffer=0xc3;
            *(buffer+1)=0x8a;
            return 2;
        case 0xa5: // capital letter E with diaresis
            *buffer=0xc3;
            *(buffer+1)=0x8b;
            return 2;
        case 0xa6: // lowercase letter e with diaresis
            *buffer=0xc3;
            *(buffer+1)=0xab;
            return 2;
        case 0xa7: // uppercase I, circumflex
            *buffer=0xc3;
            *(buffer+1)=0x8e;
            return 2;
        case 0xa8: // uppercase I, with diaresis
            *buffer=0xc3;
            *(buffer+1)=0x8f;
            return 2;
        case 0xa9: // lowercase i, with diaresis
            *buffer=0xc3;
            *(buffer+1)=0xaf;
            return 2;
        case 0xaa: // uppercase O, circumflex
            *buffer=0xc3;
            *(buffer+1)=0x94;
            return 2;
        case 0xab: // uppercase U, grave accent
            *buffer=0xc3;
            *(buffer+1)=0x99;
            return 2;
        case 0xac: // lowercase u, grave accent
            *buffer=0xc3;
            *(buffer+1)=0xb9;
            return 2;
        case 0xad: // uppercase U, circumflex
            *buffer=0xc3;
            *(buffer+1)=0x9b;
            return 2;
        case 0xae: // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
            *buffer=0xc2;
            *(buffer+1)=0xab;
            return 2;
        case 0xaf: // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
            *buffer=0xc2;
            *(buffer+1)=0xbb;
            return 2;
        // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS
        // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F
		case 0xb0: // Uppercase A, tilde
            *buffer=0xc3;
            *(buffer+1)=0x83;
            return 2;
		case 0xb1: // Lowercase a, tilde
            *buffer=0xc3;
            *(buffer+1)=0xa3;
            return 2;
		case 0xb2: // Uppercase I, acute accent
            *buffer=0xc3;
            *(buffer+1)=0x8d;
            return 2;
		case 0xb3: // Uppercase I, grave accent
            *buffer=0xc3;
            *(buffer+1)=0x8c;
            return 2;
		case 0xb4: // Lowercase i, grave accent
            *buffer=0xc3;
            *(buffer+1)=0xac;
            return 2;
		case 0xb5: // Uppercase O, grave accent
            *buffer=0xc3;
            *(buffer+1)=0x92;
            return 2;
		case 0xb6: // Lowercase o, grave accent
            *buffer=0xc3;
            *(buffer+1)=0xb2;
            return 2;
		case 0xb7: // Uppercase O, tilde
            *buffer=0xc3;
            *(buffer+1)=0x95;
            return 2;
		case 0xb8: // Lowercase o, tilde
            *buffer=0xc3;
            *(buffer+1)=0xb5;
            return 2;
		case 0xb9: // Open curly brace
            *buffer=0x7b;
            return 1;
		case 0xba: // Closing curly brace
            *buffer=0x7d;            
            return 1;
		case 0xbb: // Backslash
            *buffer=0x5c;
            return 1;
		case 0xbc: // Caret
            *buffer=0x5e;
            return 1;
		case 0xbd: // Underscore
            *buffer=0x5f;
            return 1;
		case 0xbe: // Pipe (broken bar)
            *buffer=0xc2; 
			*(buffer+1)=0xa6;
            return 1;
		case 0xbf: // Tilde
            *buffer=0x7e; // Not sure
            return 1;
		case 0xc0: // Uppercase A, umlaut
            *buffer=0xc3; 
			*(buffer+1)=0x84;
			return 2;
		case 0xc1: // Lowercase A, umlaut
            *buffer=0xc3; 
			*(buffer+1)=0xa4;
			return 2;
		case 0xc2: // Uppercase O, umlaut
            *buffer=0xc3; 
			*(buffer+1)=0x96;
			return 2;
		case 0xc3: // Lowercase o, umlaut
            *buffer=0xc3; 
			*(buffer+1)=0xb6;
			return 2;
		case 0xc4: // Esszett (sharp S)
            *buffer=0xc3;
            *(buffer+1)=0x9f;
            return 2;
		case 0xc5: // Yen symbol
            *buffer=0xc2;
            *(buffer+1)=0xa5;
            return 2;
		case 0xc6: // Currency symbol
            *buffer=0xc2;
            *(buffer+1)=0xa4;
            return 2;
		case 0xc7: // Vertical bar
            *buffer=0x7c; 
            return 1;
		case 0xc8: // Uppercase A, ring
            *buffer=0xc3;
            *(buffer+1)=0x85;
            return 2;
		case 0xc9: // Lowercase A, ring
            *buffer=0xc3;
            *(buffer+1)=0xa5;
            return 2;
		case 0xca: // Uppercase O, slash
            *buffer=0xc3;
            *(buffer+1)=0x98;
            return 2;
		case 0xcb: // Lowercase o, slash
            *buffer=0xc3;
            *(buffer+1)=0xb8;
            return 2;
		case 0xcc: // Upper left corner
            *buffer=0xe2;
            *(buffer+1)=0x8c;
			*(buffer+2)=0x9c;
			return 3;
		case 0xcd: // Upper right corner
            *buffer=0xe2;
            *(buffer+1)=0x8c;
			*(buffer+2)=0x9d;
			return 3;
		case 0xce: // Lower left corner
            *buffer=0xe2;
            *(buffer+1)=0x8c;
			*(buffer+2)=0x9e;
			return 3;
		case 0xcf: // Lower right corner
            *buffer=0xe2;
            *(buffer+1)=0x8c;
			*(buffer+2)=0x9f;
			return 3;
        default: // 
            *buffer='?'; // I'll do it eventually, I promise
            return 1; // This are weird chars anyway
    }
}

unsigned char cctolower (unsigned char c)
{
	if (c>='A' && c<='Z')
		return tolower(c);
	switch (c)
	{
		case 0x7d: // uppercase N tilde
			return 0x7e;
        case 0x90: // capital letter A with acute
			return 0x2a;
		case 0x91: // capital letter E with acute
			return 0x5c; 
		case 0x92: // capital letter O with acute
			return 0x5f; 
		case 0x93: // capital letter U with acute
			return 0x60; 
		case 0xa2: // uppercase C with cedilla
			return 0x7b; 
		case 0xa0: // uppercase A, grave accent
			return 0x88; 
        case 0xa3: // uppercase E, grave accent
			return 0x8a; 
		case 0xa1: // uppercase A, circumflex
			return 0x8b; 
        case 0xa4: // uppercase E, circumflex
			return 0x8c; 
		case 0xa7: // uppercase I, circumflex
			return 0x8d; 
        case 0xaa: // uppercase O, circumflex
			return 0x8e; 
        case 0xad: // uppercase U, circumflex
			return 0x8f; 
		case 0x94: // capital letter U with diaresis
			return 0x95; 
        case 0xa5: // capital letter E with diaresis
			return 0xa6; 
		case 0xa8: // uppercase I, with diaresis
            return 0xa9; 
		case 0xab: // uppercase U, grave accent
			return 0xac; 
		case 0xb0: // Uppercase A, tilde
			return 0xb1;
		case 0xb2: // Uppercase I, acute accent
			return 0x5e;
		case 0xb3: // Uppercase I, grave accent
			return 0xb4;
		case 0xb5: // Uppercase O, grave accent
			return 0xb6;
		case 0xb7: // Uppercase O, tilde
			return 0xb8;
		case 0xc0: // Uppercase A, umlaut
			return 0xc1;
		case 0xc2: // Uppercase O, umlaut
			return 0xc3;
		case 0xc8: // Uppercase A, ring
			return 0xc9;
		case 0xca: // Uppercase O, slash
			return 0xcb;
	}
	return c;
}

unsigned char cctoupper (unsigned char c)
{
	if (c>='a' && c<='z')
		return toupper(c);
	switch (c)
	{
		case 0x7e: // lowercase n tilde
			return 0x7d;
		case 0x2a: // lowercase a, acute accent
			return 0x90;
        case 0x5c: // lowercase e, acute accent
			return 0x91;
        case 0x5e: // lowercase i, acute accent
			return 0xb2;
        case 0x5f: // lowercase o, acute accent
			return 0x92;
        case 0x60: // lowercase u, acute accent
			return 0x93;
        case 0x7b: // lowercase c with cedilla
			return 0xa2;
        case 0x88: // lowercase a, grave accent
			return 0xa0;
        case 0x8a: // lowercase e, grave accent
			return 0xa3;
        case 0x8b: // lowercase a, circumflex accent
			return 0xa1;
        case 0x8c: // lowercase e, circumflex accent
			return 0xa4;
        case 0x8d: // lowercase i, circumflex accent
			return 0xa7;
        case 0x8e: // lowercase o, circumflex accent
			return 0xaa;
        case 0x8f: // lowercase u, circumflex accent
			return 0xad;
        case 0x95: // lowercase letter U with diaeresis
			return 0x94;
        case 0xa6: // lowercase letter e with diaresis
			return 0xa5;
        case 0xa9: // lowercase i, with diaresis
			return 0xa8;
        case 0xac: // lowercase u, grave accent
			return 0xab;
		case 0xb1: // Lowercase a, tilde
			return 0xb0; 
		case 0xb4: // Lowercase i, grave accent
			return 0xb3;
		case 0xb6: // Lowercase o, grave accent
			return 0xb5; 
		case 0xb8: // Lowercase o, tilde	
			return 0xb7;
		case 0xc1: // Lowercase A, umlaut	
			return 0xc0; 
		case 0xc3: // Lowercase o, umlaut
			return 0xc2;
		case 0xc9: // Lowercase A, ring
			return 0xc8; 
		case 0xcb: // Lowercase o, slash
			return 0xca; 
	}
	return c;
}
