package benno.progs;import java.util.*;public class Quine{
static java.io.PrintStream o=System.out;
public static void main(String args[]){
boo();
pre("package benno.progs;import java.util.*;public class Quine{");
pre("static java.io.PrintStream o=System.out;");
pre("public static void main(String args[]){");
pre("boo();");
boo();
pre("static Vector preV,postV;");
pre("static void boo(){preV=postV;postV=new Vector();}");
pre("static void pre(String s){postV.addElement(s);}");
pre("static void oe(Enumeration e,String prefix,String postfix,boolean f)");
pre("{while(e.hasMoreElements()){");
pre("String s=(String)e.nextElement();");
pre("if(f)o.println(s);else{o.print(prefix);");
pre("for(int i=0;i<s.length();i++){char c;");
pre("switch(c=s.charAt(i)){");
pre("case'\"':o.print(\"\\\\\\\"\");break;case'\\\\':o.print(\"\\\\\\\\\");break;");
pre("default:o.print(c);break;}}o.println(postfix);}}}");
pre("static void dump(){");
pre("oe(preV.elements(),\"\",\"\",true);");
pre("oe(preV.elements(),\"pre(\\\"\",\"\\\");\",false);");
pre("o.println(\"boo();\");");
pre("oe(postV.elements(),\"pre(\\\"\",\"\\\");\",false);");
pre("o.println(\"dump();}\");");
pre("oe(postV.elements(),\"\",\"\",true);");
pre("}}");
dump();}
static Vector preV,postV;
static void boo(){preV=postV;postV=new Vector();}
static void pre(String s){postV.addElement(s);}
static void oe(Enumeration e,String prefix,String postfix,boolean f)
{while(e.hasMoreElements()){
String s=(String)e.nextElement();
if(f)o.println(s);else{o.print(prefix);
for(int i=0;i<s.length();i++){char c;
switch(c=s.charAt(i)){
case'"':o.print("\\\"");break;case'\\':o.print("\\\\");break;
default:o.print(c);break;}}o.println(postfix);}}}
static void dump(){
oe(preV.elements(),"","",true);
oe(preV.elements(),"pre(\"","\");",false);
o.println("boo();");
oe(postV.elements(),"pre(\"","\");",false);
o.println("dump();}");
oe(postV.elements(),"","",true);
}}
