/**************************************/ /* */ /* 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 */ }