class Compiler { private $c_cpp; private $version; private $mode; private $compiler; private $project; private $includes; private $library_paths; private $libraries; public function __construct() { $this->top(); if(!isset($_GET["prj"])) // se non è definito il nome del progetto da compilare { $this->form(); // compare il form di selezione } else { $this->init(); // inizializzazione if(isset($_GET["clr"])) // pulisce e ricompila soluzione { $files = glob($this->path . "/debug/*"); foreach($files as $file) { if(is_file($file)) { unlink($file); } } } $this->compileProject(); // compilazione $this->linkProject(); // link $this->executeProject(); // execute } $this->bottom(); } private function top() { print"<!DOCTYPE html>\n"; print"<html>\n"; print"<head>\n"; print"<style>\n"; print"body{font-family:Arial, Helvetica, sans-serif; background-color:#111; color:#ccc;}\n"; print"table, th, td{border:1px solid #333;padding:2px;}\n"; print"div{margin:10px;}\n"; print"input[type=submit]{background-color:#05f; color:#fff; padding:5px; cursor:pointer; border:0;}\n"; print".top{position:fixed; top:0; left:0; background-color:#05f; color:#fff; margin:0; width:100%; padding-left:10px;}\n"; print".main{margin-top:150px;}\n"; print".code{font-family:Courier New, monospace;}\n"; print"</style>\n"; print"</head>\n"; print"<body>\n"; print"<div class=\"top\"><h1>MinGW C/C++</h1>\n"; print"<h6>Cosimo Saccone</h6></div>\n"; print"<div class=\"main\">\n"; } private function form() { print"<h3>project</h3>\n"; print"<form action=\"index.php\" method=\"GET\">\n"; print"<input type=\"text\" name=\"prj\">\n"; print"<input type=\"submit\" value=\"open\">\n"; print"</form>\n"; } private function bottom() { print"</div>\n"; print"</body>\n"; print"</html>"; } private function getName($str) { $p = strrpos($str, "/"); $q = strpos($str, "."); return substr($str, $p + 1, $q - $p - 1); // dalla stringa del file elimina il percorso e il formato } private function newProject() { $str = ""; $str .= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; $str .= "<root>\n"; $str .= "<c_cpp>g++</c_cpp>\n"; $str .= "<version>-std=c++0x</version>\n"; $str .= "<mode>exe</mode>\n"; $str .= "<include>\n"; $str .= "<path>C:/MinGW/include</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/glm/glm</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/glfw-3.3.6.bin.WIN32/include</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/SFML-2.5.1/include</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/freeglut/include</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/freetype-2.3.5/include</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/freetype-2.3.5/include/freetype2</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/glew-2.1.0-win32/glew-2.1.0/include</path>\n"; $str .= "</include>\n"; $str .= "<library>\n"; $str .= "<path>C:/MinGW/lib</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/glfw-3.3.6.bin.WIN32/lib-mingw</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/SFML-2.5.1/lib</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/freeglut/lib</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/freetype-2.3.5/lib</path>\n"; $str .= "<path>C:/Users/aquar/Desktop/cosimo/glew-2.1.0-win32/glew-2.1.0/lib</path>\n"; $str .= "<lib>glfw3dll</lib>\n"; $str .= "<lib>sfml-graphics</lib>\n"; $str .= "<lib>sfml-window</lib>\n"; $str .= "<lib>sfml-system</lib>\n"; $str .= "<lib>freeglut</lib>\n"; $str .= "<lib>glew32</lib>\n"; $str .= "<lib>glu32</lib>\n"; $str .= "<lib>opengl32</lib>\n"; $str .= "<lib>freetype</lib>\n"; $str .= "</library>\n"; $str .= "<compDec>\n"; $str .= "-Wl,--disable-stdcall-fixup\n"; $str .= "</compDec>\n"; $str .= "<precompiled>\n"; $str .= "windres C:/xampp/htdocs/compiler/g++/SFML/resource/my.rc C:/xampp/htdocs/compiler/g++/SFML/debug/my.o\n"; $str .= "</precompiled>\n"; $str .= "</root>\n"; $file = fopen($this->path . "/make.xml", "w") or die("Unable to open file!"); fwrite($file, $str); fclose($file); $str = ""; $str .= "#include <gl/freeglut.h>\n"; $str .= "\n"; $str .= "void display()\n"; $str .= "{\n"; $str .= "\t// 2d\n"; $str .= "\tglClearColor(0.0f, 0.0f, 0.0f, 0.0f);\n"; $str .= "\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n"; $str .= "\tGLint v[4];\n"; $str .= "\tglGetIntegerv(GL_VIEWPORT, v);\n"; $str .= "\tglMatrixMode(GL_PROJECTION);\n"; $str .= "\tglLoadIdentity();\n"; $str .= "\tglOrtho(0, v[2], v[3], 0, 0, 1);\n"; $str .= "\tglMatrixMode(GL_MODELVIEW);\n"; $str .= "\tglLoadIdentity();\n"; $str .= "\t//\n"; $str .= "\tglutSwapBuffers();\n"; $str .= "}\n"; $str .= "\n"; $str .= "int main(int argc, char **argv)\n"; $str .= "{\n"; $str .= "\tglutInit(&argc, argv);\n"; $str .= "\tglutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);\n"; $str .= "\tglutInitWindowPosition(100,100);\n"; $str .= "\tglutInitWindowSize(500, 500);\n"; $str .= "\tglutCreateWindow(\"window\");\n"; $str .= "\tglutDisplayFunc(display);\n"; $str .= "\tglutMainLoop();\n"; $str .= "}"; $file = fopen($this->path . "/main.cpp", "w") or die("Unable to open file!"); fwrite($file, $str); fclose($file); } private function init() { $this->compiler = str_replace(chr(92), chr(47), getcwd()) . "/"; // indirizzo del compiler $this->project = $_GET["prj"]; $this->path = $this->compiler . $this->project; if(!is_dir($this->path)) // se la cartella manca viene creato un nuovo progetto { mkdir($this->path . "/debug", 0777, true); // creazione della cartella di debug mkdir($this->path . "/log", 0777, true); // creazione della cartella di log $this->newProject(); header("Refresh:0"); } else { $xml = simplexml_load_file($this->path . "/make.xml"); // xml $include_path = @$xml->include->path; // array con tutti gli include $library_path = @$xml->library->path; // array con tutti i percorsi per le librerie $library = @$xml->library->lib; // array con tutte le librerie $this->c_cpp = @$xml->c_cpp; // C o C++ $this->version = @$xml->version; $this->mode = @$xml->mode; // exe, dll, lib $this->preprocessing = @$xml->preprocessing->set; $this->precompiled = @$xml->precompiled; $this->compDec = @$xml->compDec; $this->linkDec = @$xml->linkDec; $this->includes = ""; $this->library_paths = ""; $this->libraries = ""; $len = @count($include_path); for($i = 0; $i < $len; $i++) { if(strlen($include_path[$i]) > 0) { $this->includes .= "-I " . $include_path[$i] . " "; } } $len = @count($library_path); for($i = 0; $i < $len; $i++) { if(strlen($library_path[$i]) > 0) { $this->library_paths .= "-L " . $library_path[$i] . " "; } } $len = @count($library); for($i = 0; $i < $len; $i++) { if(strlen($library[$i]) > 0) { $this->libraries .= "-l" . $library[$i] . " "; } } print("<h3>" . $this->project . "</h3>"); } } private function compileProject() { $count = 0; $str = ""; foreach(glob($this->path . "/*.cpp") as $file) { $filename = $this->getName($file); $file_cpp = $this->path . "/" . $filename . ".cpp"; $file_o = $this->path . "/debug/" . $filename . ".o";//print($file_cpp."<br>"); if(file_exists($file_o)) { $date_cpp = intval(date("YmdHis", filemtime($file_cpp))); $date_o = intval(date("YmdHis", filemtime($file_o))); if($date_cpp > $date_o) // se la data del file cpp è superiore a quella dell'obj il file va ricompilato { $str .= " -c " . $file_cpp; $count++; } } else { $str .= " -c " . $file_cpp; $count++; } } $str = $this->c_cpp . " -g " . $this->version . " " . @$this->preprocessing . " " . $this->includes . $str . " > " . $this->path . "/log/compiling.log 2>&1"; print("<div class = \"code\">"); if($count > 0) { shell_exec($str); clearstatcache(); print($str . "<br><br>"); } print($count . " file(s) compiled...<br><br></div>"); foreach(glob($this->compiler . "*.o") as $file) { $filename = $this->getName($file); rename($file, $this->path . "/debug/" . $filename . ".o"); // trasferisce tutti i file .o nella cartella debug } } private function linkProject() { $str = ""; $name = $this->path . "/" . $this->project; // definizione del nome if($this->mode == "exe") { $str .= $this->c_cpp . " " . $this->version . " -o " . $name . " "; // realizzazione di un eseguibile } else if($this->mode == "lib") { $str .= "ar -rcs " . $name . ".a "; // realizzazione di una libreria statica } else if($this->mode == "dll") { $str .= $this->c_cpp . " " . $this->version . " -shared -o " . $name . ".so "; // realizzazione di una libreria dinamica } else { print"mode ERROR<br>"; exit(); } $str .= " " . $this->path . "/debug/*.o "; // tutti i file .o nella cartella debug $str .= " " . $this->library_paths; // aggiunge i percorsi delle librerie $str .= " " . $this->libraries; // aggiunge le librerie $str .= " 2> " . $this->path . "/log/linking.log"; // scrive il log con gli errori $str .= " " . $this->linkDec; print("<div class=\"code\">" . $str . "<br><br>file(s) linked...<br><br></div>"); shell_exec($str); clearstatcache(); print("<form action=\"index.php\" method=\"GET\">\n"); print("<input name=\"prj\" type=\"hidden\" value=\"" . $this->project . "\">\n"); print("<input name=\"clr\" type=\"submit\" value=\"clear solution\">\n"); print("</form>\n"); } private function executeProject() { $str = $this->path . "/" . $this->project; $str = "C:/xampp/htdocs/compiler/g++/SFML/SFML"; //system($str); } } new Compiler();
Mi chiamo Cosimo Saccone e sono un programmatore napoletano di 44 anni con oltre 35 anni di esperienza nella programmazione (BASIC, Assembly). Realizzo progetti e programmi utilizzando i principali e più diffusi linguaggi (C, C++, PHP, Javascript, HTML) e software per la grafica (Photoshop, Illustrator, 3dsMax). Anche se la grafica rappresenta il mio principale settore di interesse, non disdegno il lavoro di back-end e di organizzazione dati e sono attento agli aspetti di efficienza e di risparmio delle risorse tipica della programmazione di basso livello (specie nel settore della grafica 3d). Realizzo siti internet, applicativi desktop e servizi di vario tipo. Ho una buona conoscenza della libreria OpenGL per lo sviluppo di applicazioni 3d interattive in C/C++. Cerco di adottare uno stile di programmazione fortemente ordinato e modulare. Possiedo, inoltre, una buona capacità di elaborazione della documentazione. Ho vari hobbies tra cui la pittura, la ginnastica e le lunghe passeggiate in solitudine.
Al fine di migliorare l’esperienza di navigazione sul nostro sito noi di cosimosaccone.com e i nostri partner selezionati elaboriamo i dati personali, compreso l’indirizzo IP e le pagine visitate, in relazione alla tua navigazione nei contenuti del sito, per i seguenti scopi:
Accesso alle informazioni
Dati precisi di geolocalizzazione
Misurazione del pubblico
Pubblicità e contenuti personalizzati
Ti ricordiamo che il termine cookie si riferisce a una porzione di dati inviati al tuo browser da un web server. Il cookie viene memorizzato sul tuo dispositivo e riconosciuto dal sito web che lo ha inviato in ogni navigazione successiva. Se vuoi saperne di più e compiere una scelta diversa, come il rifiuto del trattamento dei tuoi dati personali, clicca qui sulla nostra privacy policy. Potrai sempre modificare le tue scelte e impostare i singolo cookies selezionando il bottone qui sotto.
OK