import java.io.File;
import java.io.FileReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedReader;

public class MakeCurves{
    public static void main(String[] args){
	String fileName=null;
	int modulus=191;

	if(args.length<1){
	    System.out.println("");
	    System.out.println("MakeCurves - reads blocks of input file and");
	    System.out.println("             writes blocks to separate files, appending");
	    System.out.println("             first line of the block to end of the block");
	    System.out.println("");
	    System.out.println("usage: java MakeCurves fileName [modulus]");
	    System.out.println("");
	    System.out.println("  file name : input file name");
	    System.out.println("  modulus   : number of lines in block ["+modulus+"]");
	}else{
	    /*
	    System.out.println(args.length+" args:");
	    for(int i=0;i<args.length;i++)
		System.out.println("args["+i+"]="+args[i]);
	    */
	    fileName=args[0];
	    File infile=new File(args[0]);
	    if(!infile.exists()){
		System.out.println("Can't find file "+infile);
		return;
	    }

	    if(args.length>1){
		try{
		    int test=Integer.parseInt(args[1],10);
		    modulus=test;
		}catch(Exception e){
		    System.err.println("invalid modulus "+args[1]);
		    return;
		}
	    }
	    try{
		FileInputStream fis=new FileInputStream(infile);
		BufferedReader br=new BufferedReader(new FileReader(fileName));
		FileOutputStream fos=null;
		int section=0;
		while(fis.available()>0){

		    String line=br.readLine();
		    if(line==null){
			return;
		    }

		    System.out.println("section "+section);
		    String firstLine=line;
		    String outFileName="section_"+section+".txt";
		    File outfile=new File(outFileName);
		    fos=new FileOutputStream(outfile);
		    fos.write(firstLine.getBytes());
		    fos.write("\n".getBytes());

		    for(int i=0;i<(modulus-1);i++){
			line=br.readLine();
			if(line==null){
			    System.out.println("Reached end of file - last section may be incomplete");
			    return;
			}
			fos.write(line.getBytes());
			fos.write("\n".getBytes());
			if(i==0)
			    firstLine=line;
		    }
		    fos.write(firstLine.getBytes());
		    fos.write("\n".getBytes());
		    section++;
		    if(fos!=null)
			fos.close();
		}
		fis.close();
	    }catch(Exception e){
		e.printStackTrace();
	    }
	}    
    }
}
