/* $Log: javac.cc,v $ * Revision 1.4 2003/05/22 20:56:40 stuart * Convert to STL * * Revision 1.3 2003/05/22 20:39:25 stuart * recognize java source with endsWith(), use 127.0.0.1 instead of localhost * * Revision 1.2 2000/03/07 20:20:51 stuart * front end to Java compile server * */ #include #include #include #include #include #include static void writeShort(FILE *out,int v) { putc(v>>8,out); putc(v,out); } static void writeUTF(FILE *out,const string &s) { int len = s.length(); writeShort(out,len); const char *p = s.c_str(); for (int i = 0; i < len; ++i) { putc(p[i]&0x7f,out); } } static bool startsWith(const char *s,const char *prefix) { return strncmp(s,prefix,strlen(prefix)) == 0; } static bool endsWith(const char *s,const char *suffix) { int slen = strlen(suffix); int len = strlen(s); return slen < len && strcmp(s + len - slen,suffix) == 0; } int main(int argc,char **argv) { bool quiet = true; int rc = 0; char buf[4096]; getcwd(buf,sizeof buf); string cwd(buf); Socket server; if (server.connect("127.0.0.1",2009)) { perror("localhost:2009"); return 1; } FILE *out = fdopen(server.getfd(),"w"); if (argc > 1 && strcmp(argv[1],"-v") == 0) { quiet = false; ++argv; --argc; } writeShort(out,argc - 1); for (int i = 1; i < argc; ++i) { string s(argv[i]); if (endsWith(s.c_str(),".java") && !startsWith(s.c_str(),"/")) { s = cwd + '/' + s; } else if (startsWith(s.c_str(),"./")) { s = cwd + s.substr(1); } else if (s == ".") { s = cwd; } //fprintf(stderr,"%s\n",s.c_str()); writeUTF(out,s); } fflush(out); FILE *in = fdopen(server.getfd(),"r"); while (fgets(buf,sizeof buf,in)) { if (startsWith(buf,"Exit ")) { int res = atoi(buf+5); if (res > rc) rc = res; return rc; } if (quiet && startsWith(buf,"javac")) continue; if (quiet && startsWith(buf,"Accepting ")) continue; fputs(buf,stdout); } perror("fgets"); return 1; }