import java.util.*;
import java.io.*;
import java.lang.*;


public class uuencode{

    /*==========================================================================*/

    private byte[] input;							/*1*/
    private byte[] output;							/*2*/
    private int ooffset;							/*3*/
    private int offset;								/*4*/
    private int limit;								/*5*/
    public String name;								/*6*/

    uuencode(String filename) throws IOException {				/*7*/
	FileInputStream fis = new FileInputStream(filename);			/*8*/
	input = new byte[4000000];						/*9*/
	limit = fis.read(input, 0, 4000000);					/*10*/
	output = new byte[limit*2+50];						/*11*/
    }	

    private void encode() {							/*12*/
	while (limit-offset >= 45) {						/*13*/
	    encode_line();							/*14*/
	}
	encode_last_line();							/*15*/
	return;
    }

    private void encode_line() {						/*16*/
	output[ooffset++] = encode_char(45);					/*17*/
	for(int i = 0; i<15; i++) {						/*18*/
	    encode_triplet();							/*19*/
	}
	output[ooffset++] = '\n';						/*20*/
	return;
    }

    private void encode_last_line() {						/*21*/
	int octets = limit-offset;						/*22*/
	byte ch;								/*23*/
	output[ooffset++] = encode_char(octets);				/*24*/
	while((limit-offset) >= 3) {						/*25*/
	    encode_triplet();							/*26*/
	}
	if ((limit-offset) == 1) {						/*27*/
	    ch = encode_char (input[offset] >> 2);				/*28*/
	    output[ooffset++] = ch;						/*29*/
	    ch = encode_char (input[offset] << 4);				/*30*/
	    output[ooffset++] = ch;						/*31*/
	    output[ooffset++] = '=';						/*32*/
	    output[ooffset++] = '=';						/*33*/
	    return;
	}
	if (octets == 2) {							/*34*/
	    ch = encode_char ((input[offset]) >> 2);  				/*35*/
	    output[ooffset++] = ch;						/*36*/
	    ch = encode_char ((input[offset] << 4) | (input[offset+1] >> 4));	/*37*/
	    output[ooffset++] = ch;						/*38*/
	    ch = encode_char (input[offset+1] << 2);				/*39*/
	    output[ooffset++] = ch;						/*40*/
	    output[ooffset++] = '=';						/*41*/
	    return;
	}
	return;
    }
    
    private void encode_triplet() {						/*42*/
	byte ch;								/*43*/
	ch = encode_char (input[offset] >> 2);  				/*44*/
	output[ooffset++] = ch;							/*45*/
	ch = encode_char ((input[offset] << 4)|(((input[offset+1] >> 4) & 15)));/*46*/
	output[ooffset++] = ch;							/*47*/
	ch = encode_char ((input[offset+1] << 2)|(((input[offset+2] >> 6) &3)));/*48*/
	output[ooffset++] = ch;							/*49*/
	ch = encode_char (input[offset+2]);					/*50*/
	output[ooffset++] = ch;							/*51*/
	offset += 3;								/*52*/
    }

    private byte encode_char(int c) {						/*53*/
	return (byte) (32+(c & 63));						/*54*/
    }
    
    private void run(String inname) {						/*55*/
	String init = "begin 640 ";						/*56*/
	String last = " \n";							/*57*/
	String prefix = init+inname+last;					/*58*/
	String suffix = "\n \nend";						/*59*/
	prefix.getBytes(0, prefix.length(), output, ooffset);			/*60*/
	ooffset += prefix.length();						/*61*/
	encode();								/*62*/
	suffix.getBytes(0, suffix.length(), output, ooffset);			/*63*/
	ooffset  += suffix.length();						/*64*/
	return;
    }
    
    /*==========================================================================*/
    
    private void write_file(String filename) throws IOException {
	FileOutputStream fos = new FileOutputStream(filename+".java");
	fos.write(output,0,ooffset);
    }	

    private void reset() {
	ooffset = 0;
	offset = 0;
	return;
    }

    public static void main(String[] args) throws IOException {
	uuencode bin;
	long time;
	try {
	    bin = new uuencode(args[0]);
	}
	catch (IOException e) {return;}
	long start = System.currentTimeMillis();
	for(int i=0; i<100; i+=1){
	    bin.reset();
	    bin.run(args[0]);
	}
	long end = System.currentTimeMillis();
	time = end-start;
	System.out.print("" + (float)time/1000.0);
	bin.write_file(args[0]);
	return;
	
    }
}

