Greeklish Converter (ver 1.0)

/**************************************/
/*                                    */
/*     Greeklish Converter ver 1.0    */
/*        Implemented by Thunder      */
/*           thunder@isee.gr          */
/*                                    */
/* Usage: grklsh inputflnm outputflnm */
/*                                    */
/**************************************/

#include < stdio.h & gt;
#include < string.h & gt;
#define LOGO "\n\n[ Greeklish Converter ~ Thunder (C) 2002 ]\n"

const int FLNM_SIZE = 12;

int greeklish(char input[], char output[])
{
    FILE *ifile;          /* the file which will be created */
    FILE *ofile;          /* the file to use as source */
    unsigned char cur_ch; /* represents each character of the input file */
    char new_ch[3];       /* the string which will replace the character */

    if ((ifile = fopen(input, "r")) == NULL || (ofile = fopen(output, "w")) == NULL)
    { /* checks if the input can be read and if the output can be written */
        printf("\nError opening files! Exiting...");
        return (1);
    }
    else
    { /* then we proceed */
        while ((fread(& cur_ch, sizeof(cur_ch), 1, ifile)) != 0)
        { /* while it hasn't reached an end of file */
            if (cur_ch < = 143 || cur_ch > = 255)
            { /* english letters and other symbols */
                new_ch[0] = cur_ch;
                new_ch[1] = '\0';
            }
            else
            {
                switch (cur_ch)
                { /* Greek to Greeklish correspondence */
                case 193:
                case 162:
                {
                    strcpy(new_ch, "A");
                      break;
                }
                case 194:
                {
                    strcpy(new_ch, "B");
                      break;
                }
                case 195:
                {
                    strcpy(new_ch, "G");
                      break;
                }
                case 196:
                {
                    strcpy(new_ch, "D");
                      break;
                }
                case 197:
                case 184:
                {
                    strcpy(new_ch, "E");
                      break;
                }
                case 198:
                {
                    strcpy(new_ch, "Z");
                      break;
                }
                case 199:
                case 185:
                {
                    strcpy(new_ch, "H");
                      break;
                }
                case 200:
                {
                    strcpy(new_ch, "Th");
                    break;
                }
                case 201:
                case 186:
                {
                    strcpy(new_ch, "I");
                      break;
                }
                case 218:
                {
                    strcpy(new_ch, "'I'");
                      break;
                }
                case 202:
                {
                    strcpy(new_ch, "K");
                      break;
                }
                case 203:
                {
                    strcpy(new_ch, "L");
                      break;
                }
                case 204:
                {
                    strcpy(new_ch, "M");
                      break;
                }
                case 205:
                {
                    strcpy(new_ch, "N");
                      break;
                }
                case 206:
                {
                    strcpy(new_ch, "Ks");
                    break;
                }
                case 207:
                case 188:
                {
                    strcpy(new_ch, "O");
                      break;
                }
                case 208:
                {
                    strcpy(new_ch, "P");
                      break;
                }
                case 209:
                {
                    strcpy(new_ch, "R");
                      break;
                }
                case 211:
                {
                    strcpy(new_ch, "S");
                      break;
                }
                case 212:
                {
                    strcpy(new_ch, "T");
                      break;
                }
                case 213:
                case 190:
                {
                    strcpy(new_ch, "Y");
                      break;
                }
                case 219:
                {
                    strcpy(new_ch, "'Y'");
                      break;
                }
                case 214:
                {
                    strcpy(new_ch, "F");
                      break;
                }
                case 215:
                {
                    strcpy(new_ch, "X");
                      break;
                }
                case 216:
                {
                    strcpy(new_ch, "Ps");
                      break;
                }
                case 217:
                case 191:
                {
                    strcpy(new_ch, "W");
                      break;
                }
                case 225:
                case 220:
                {
                    strcpy(new_ch, "a");
                      break;
                }
                case 226:
                {
                    strcpy(new_ch, "b");
                      break;
                }
                case 227:
                {
                    strcpy(new_ch, "g");
                      break;
                }
                case 228:
                {
                    strcpy(new_ch, "d");
                      break;
                }
                case 229:
                case 221:
                {
                    strcpy(new_ch, "e");
                      break;
                }
                case 230:
                {
                    strcpy(new_ch, "z");
                      break;
                }
                case 231:
                case 222:
                {
                    strcpy(new_ch, "h");
                      break;
                }
                case 232:
                {
                    strcpy(new_ch, "th");
                    break;
                }
                case 233:
                case 223:
                {
                    strcpy(new_ch, "i");
                      break;
                }
                case 192:
                case 250:
                {
                    strcpy(new_ch, "'i'");
                      break;
                }
                case 234:
                {
                    strcpy(new_ch, "k");
                      break;
                }
                case 235:
                {
                    strcpy(new_ch, "l");
                      break;
                }
                case 236:
                {
                    strcpy(new_ch, "m");
                      break;
                }
                case 237:
                {
                    strcpy(new_ch, "n");
                      break;
                }
                case 238:
                {
                    strcpy(new_ch, "ks");
                    break;
                }
                case 239:
                case 252:
                {
                    strcpy(new_ch, "o");
                      break;
                }
                case 240:
                {
                    strcpy(new_ch, "p");
                      break;
                }
                case 241:
                {
                    strcpy(new_ch, "r");
                      break;
                }
                case 242:
                case 243:
                {
                    strcpy(new_ch, "s");
                      break;
                }
                case 244:
                {
                    strcpy(new_ch, "t");
                      break;
                }
                case 245:
                case 253:
                {
                    strcpy(new_ch, "y");
                      break;
                }
                case 224:
                case 251:
                {
                    strcpy(new_ch, "'y'");
                      break;
                }
                case 246:
                {
                    strcpy(new_ch, "f");
                      break;
                }
                case 247:
                {
                    strcpy(new_ch, "x");
                      break;
                }
                case 248:
                {
                    strcpy(new_ch, "ps");
                      break;
                }
                case 249:
                case 254:
                {
                    strcpy(new_ch, "w");
                      break;
                }
                default:
                {
                    new_ch[0] = cur_ch;
                    new_ch[1] = '\0';
                    break;
                }
                }
            }
            fwrite(new_ch, strlen(new_ch), 1, ofile); /* writes the character */
        }
    }
    fwrite(LOGO, strlen(LOGO), 1, ofile); /* writes the logo */
    fclose(ofile);                        /* closes the output */
    fclose(ifile);                        /* closes the input */
    printf(LOGO);                         /* prints the logo on the screen */
    return (0);                           /* returns all clear to main */
}

int main(int argc, char *argv[])
{
    char input[FLNM_SIZE + 1];
    char output[FLNM_SIZE + 1];

    if (argc == 1)
    { /* if no parameters are given, it exits */
        printf("\n** An input file must be defined!");
        return (1);
    }
    else
    { /* if at least on parameter is given, we proceed */

        if (strlen(argv[1]) & gt; FLNM_SIZE)
        { /* makes sure the filenames are not over the allowed size */
            printf("\n** Filename too big. %d characters max.", FLNM_SIZE);
            return (1);
        }
        else
        {
            strcpy(input, argv[1]); /* stores the input file name */
            printf("\n** Input file name : %s", input);
        }

        if (argc == 2)
        { /* if no output filename has been given, we store a default one */
            strcpy(output, "default.txt");
            printf("\n** Setting output file name to default : %s", output);
        }
        else
        {
            if (argc == 3)
            {
                strncpy(output, argv[2], 12); /* stores the output file name */
                printf("\n** Output file name : %s", output);
            }
            else
            { /* if more than two parameters are present, it exits */
                printf("\n** Too many parameters");
                return (1);
            }
        }
    }

    return (greeklish(input, output)); /* returns the int from greeklish */
}