Greeklish Converter (ver 1.0)

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

#include <stdio.h>
#include <string.h>
#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])>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 */
}