<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5906236296724437200</id><updated>2011-09-07T15:03:20.067+03:00</updated><title type='text'>FCSH Wrapper</title><subtitle type='html'>access flex compiler shell from ant tasks</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fcshwrapper.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fcshwrapper.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mihai Vasilache</name><uri>http://www.blogger.com/profile/15904989253787343185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_9UuPeCOFIqY/SJGMk9fiB6I/AAAAAAAAAD0/sUNV-mXszHQ/S220/identity.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5906236296724437200.post-2287828616819967904</id><published>2008-04-22T22:30:00.004+03:00</published><updated>2008-04-25T17:35:37.455+03:00</updated><title type='text'>Welcome</title><content type='html'>This is a wrapper over the fcsh (Flex Compiler Shell) that expose the fcsh.exe to be accessed from an ant task. You can send mxmlc commands from ant tasks to a wrapped fcsh instance.&lt;br/&gt;

You can post comments on the blog's topics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5906236296724437200-2287828616819967904?l=fcshwrapper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fcshwrapper.blogspot.com/feeds/2287828616819967904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5906236296724437200&amp;postID=2287828616819967904' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/2287828616819967904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/2287828616819967904'/><link rel='alternate' type='text/html' href='http://fcshwrapper.blogspot.com/2008/04/welcome.html' title='Welcome'/><author><name>Mihai Vasilache</name><uri>http://www.blogger.com/profile/15904989253787343185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_9UuPeCOFIqY/SJGMk9fiB6I/AAAAAAAAAD0/sUNV-mXszHQ/S220/identity.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5906236296724437200.post-6463998099346863184</id><published>2008-04-22T22:24:00.055+03:00</published><updated>2008-12-09T08:50:27.122+02:00</updated><title type='text'>Some detailes about code</title><content type='html'>&lt;div&gt;
Sources are available to download as an archive on &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=225225"&gt;sourceforge&lt;/a&gt; (&lt;a href="http://downloads.sourceforge.net/fcshwrapper/fcshWrapper-src.0.1.2.tgz?modtime=1208783800&amp;big_mirror=0"&gt;fcshWrapper-src.0.1.2.tgz&lt;/a&gt;).
Or can be checked out from &lt;a href="http://sourceforge.net/cvs/?group_id=225225"&gt;CSV&lt;/a&gt;.
&lt;p/&gt;
Unfortunately I made the wrapper to run only on Windows because is all that I need. But it can be easily modified to run on other platforms (Windows specific is jdic from dev.java.net that makes the app available in system tray and some hardcoded calls to fcsh.exe). 
&lt;p/&gt;
If the LoggingFrame is made abstract and an implementation redirect the fcsh output to a file and then the TaskbarStatusArea is removed or is made to be a generic notification system on errors, the wrapper can be made available to an OS without a graphical user interface.
&lt;p/&gt;
As I see now, in java 6, there is a built in support for system tray, but i don't see any jvm 6 for Mac. And jdic has support only for Windows/Linux/Solaris. So, sorry for Mac users (maybe a version without sys tray).
&lt;p/&gt;
&lt;p/&gt;
Classes:
&lt;p/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mihai.vasilache.googlepages.com/classDiagram.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_9UuPeCOFIqY/SA9grnO-QFI/AAAAAAAAABc/ib1BOJdvrXI/s400/classDiagram.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192475197763895378" /&gt;&lt;/a&gt;

&lt;p/&gt;
&lt;p/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/AntTaskGateway.java.html"&gt;AntTaskGateway.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/CommandArg.java.html"&gt;CommandArg.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/CommandsHistory.java.html"&gt;CommandsHistory.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/FcshCommandHandler.java.html"&gt;FcshCommandHandler.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/FcshCommandListener.java.html"&gt;FcshCommandListener.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/FcshProcessWrapper.java.html"&gt;FcshProcessWrapper.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/FcshTask.java.html"&gt;FcshTask.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/LoggingFrame.java.html"&gt;LoggingFrame.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/Main.java.html"&gt;Main.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/TaskbarStatusArea.java.html"&gt;TaskbarStatusArea.java&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://mihai.vasilache.googlepages.com/WrapperCreator.java.html"&gt;WrapperCreator.java&lt;/a&gt;&lt;br/&gt;
&lt;p/&gt;
This is the story:
&lt;p/&gt;
ANT calls FcshTask's execute() method that instantiate an AntTaskGateway ant call his  send(command, args) function.
&lt;p/&gt;
AntTaskGateway first tries to create a socket connection on localhost (initConnection() method that calls connect()), then it simply serialize to the socket the command and his arguments and wait for the response from fcsh.exe.
&lt;p/&gt;
If initConnection() fails, the build fails. If the first call to the connect() fails,  initConnection() creates a WrapperCreator ant calls the method startAndWaitForInit().
&lt;p/&gt;
WrapperCreator.startAndWaitForInit() start the ro.arhinet.fcshwrapper.wrapper.Main (that is a main class) in a separate process. Then capture the subprocess output and wait for a signal that all is initialized OK. If something goes wrong the build fail.
&lt;p/&gt;
That's almost all for the first part. The ANT process exits, but the lunched subprocess stays up and listen for upcoming compile commands.
&lt;p/&gt;
The main class of the wcshWrapper process is ro.arhinet.fcshwrapper.wrapper.Main that luches 4 services:
&lt;/div&gt;
&lt;p/&gt;
&lt;div&gt;&lt;pre style="background-color: #eeeeee; font-weight: normal; font-family: Courier New;padding-left:7px;color:#000000;border:1px solid #006897"&gt;&lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;class&lt;/span&gt; Main{
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;static&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; main(String args[]) &lt;span style="color: #0000e6"&gt;throws&lt;/span&gt; Exception {
        LoggingFrame.initUI();
        TaskbarStatusArea.initSysTray();
        FcshProcessWrapper.startFcshProcess();
        FcshCommandListener.startServer();
        System.out.println(&lt;span style="color: #ce7b00"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ce7b00"&gt;[FCSH initalized]&lt;/span&gt;&lt;span style="color: #ce7b00"&gt;&amp;quot;&lt;/span&gt;);
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p/&gt;
A little to many singletons in a package wint 5 classes. But i look at these classes as services and services must be available anywhere via static calls.
&lt;p/&gt;
LoggingFrame maintains history with issued command, the output from the fcsh and any other errors/messages. The service can be accessed via:
&lt;/div&gt;
&lt;div&gt;
&lt;pre style="background-color: #eeeeee; font-weight: normal; font-family: Courier New;padding-left:7px;color:#000000;border:1px solid #006897"&gt;    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; logMessage(String content, String color)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; logMessage(String content)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; logError(String content)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; logFcshCommand(String content)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; logWarning(String content)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; logSystemError(String content, Throwable error)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; clearLog()&lt;/pre&gt;
&lt;/div&gt;
&lt;p/&gt;
&lt;div&gt;
TaskbarStatusArea controls the visibility of the LoggingFrame and displays notification balloons. Services exposed:
&lt;/div&gt;
&lt;div&gt;
&lt;pre style="background-color: #eeeeee; font-weight: normal; font-family: Courier New;padding-left:7px;color:#000000;border:1px solid #006897"&gt;    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;static&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; reportErrorInSysTray(String title, String error)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;static&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; reportErrorInSysTray(String title, Throwable error)
    &lt;span style="color: #0000e6"&gt;public&lt;/span&gt; &lt;span style="color: #0000e6"&gt;static&lt;/span&gt; &lt;span style="color: #0000e6"&gt;void&lt;/span&gt; reportErrorInSysTray(Throwable error)&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p/&gt;
FcshProcessWrapper start the fcsh.exe subprocess on the time of his static initialization. It knows how to handle the subprocess output that redirects it to LoggingFrame and how to execute a command on the fcsh.exe.
&lt;p/&gt;
FcshCommandListener listen for incoming connections and for each request create an instance of FcshCommandHandler that manage the communication with the client.
&lt;p/&gt;
FcshCommandHandler works with other service: CommandsHistory that maintains a HashMap of issued fcsh commands using the md5 of the command (+args.) for hash keys. Each entry in the HashMap contains the id allocated by the fcsh.exe for that command.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5906236296724437200-6463998099346863184?l=fcshwrapper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fcshwrapper.blogspot.com/feeds/6463998099346863184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5906236296724437200&amp;postID=6463998099346863184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/6463998099346863184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/6463998099346863184'/><link rel='alternate' type='text/html' href='http://fcshwrapper.blogspot.com/2008/04/some-detailes-about-code.html' title='Some detailes about code'/><author><name>Mihai Vasilache</name><uri>http://www.blogger.com/profile/15904989253787343185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_9UuPeCOFIqY/SJGMk9fiB6I/AAAAAAAAAD0/sUNV-mXszHQ/S220/identity.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9UuPeCOFIqY/SA9grnO-QFI/AAAAAAAAABc/ib1BOJdvrXI/s72-c/classDiagram.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5906236296724437200.post-8614846586061500253</id><published>2008-04-21T14:18:00.022+03:00</published><updated>2008-12-09T08:50:27.734+02:00</updated><title type='text'>How to use fcshWrapper</title><content type='html'>Download the binaries [&lt;a href="http://sourceforge.net/project/downloading.php?group_id=225225&amp;filesize=164520&amp;filename=fcshWrapper-bin.0.1.2.tgz&amp;90369712"&gt;FCSH Wrapper 0.1.2&lt;/a&gt;], unpack to any directory you want.
Specify FCSHWRAPP_HOME property to point to the directory where you unpacked the binaries, FLEX_HOME to your flex sdk directory. FCSHWRAPP_JRE and FCSHWRAPP_PORT are not mandatory.
&lt;p/&gt;
FCSHWRAPP_JRE must point to a jre 1.5 or higher, but if it is not specify, the jre used to lunch the wrapper will be searched in JAVA_HOME then JRE_HOME. If none of these are specified, it relays on the system PATH to lunch the wrapper.
The default port on which the wrapper accepts commands is 52795. If you wont another port you can specify it on the FCSHWRAPP_PORT property.
&lt;p/&gt;
A sample build file using fcshWrapper:
&lt;p/&gt;
&lt;div style="background-color: #eeeeee; font-weight: normal; font-family: Courier New;padding-left:7px;color:#000000;border:1px solid #006897"&gt;&lt;div style="color: rgb(0, 0, 0); font-family: Monospaced; font-size: 12px; font-weight:normal;"&gt;&lt;table style="margin-left:-3px; font-size: 16px; color: rgb(0, 0, 0); background-color: rgb(233, 232, 226); font-family: Verdana;" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;testScript.xml&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;pre&gt;&lt;span style="color: rgb(0, 0, 124); font-weight: bold;font-family:Monospaced;" &gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(0, 0, 124); font-weight: bold;font-family:Monospaced;" &gt;xml&lt;/span&gt; &lt;span style="color: rgb(0, 0, 124);"&gt;version="1.0" encoding="UTF-8"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 124); font-weight: bold;font-family:Monospaced;" &gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;project&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;name&lt;/span&gt;="changeme" &lt;span style="color: rgb(0, 153, 0);"&gt;default&lt;/span&gt;="all" &lt;span style="color: rgb(0, 153, 0);"&gt;basedir&lt;/span&gt;="."&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;property&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;name&lt;/span&gt;="FCSHWRAPP_PORT" &lt;span style="color: rgb(0, 153, 0);"&gt;valu&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;e&lt;/span&gt;="52797"&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;property&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;name&lt;/span&gt;="FCSHWRAPP_JRE" &lt;span style="color: rgb(0, 153, 0);"&gt;value&lt;/span&gt;="C:/Program Files/Java/jdk1.5.0_11"&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;property&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;name&lt;/span&gt;="FCSHWRAPP_HOME" &lt;span style="color: rgb(0, 153, 0);"&gt;value&lt;/span&gt;="d:/fcshWrapper-bin/bin"&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;property&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;name&lt;/span&gt;="FLEX_HOME" &lt;span style="color: rgb(0, 153, 0);"&gt;value&lt;/span&gt;="c:/flex-sdk"&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
  
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;path&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;id&lt;/span&gt;="mypath"&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;fileset&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;dir&lt;/span&gt;="${FCSHWRAPP_HOME}" &lt;span style="color: rgb(0, 153, 0);"&gt;includes&lt;/span&gt;="fcshWrapper.jar"&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;/path&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
  
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;taskdef&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;name&lt;/span&gt;="fcsh" &lt;span style="color: rgb(0, 153, 0);"&gt;classname&lt;/span&gt;="ro.arhinet.fcshwrapper.ant.FcshTask"&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;classpath&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;r&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;efid&lt;/span&gt;="mypath"&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;/taskdef&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
  
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;target&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;name&lt;/span&gt;="all"&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;fcsh&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;command&lt;/span&gt;="mxmlc"&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;arg&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;value&lt;/span&gt;="c:\ArhiNET.project\arhinet\web\flex-pages\app1.mxml"&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
           &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;arg&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;value&lt;/span&gt;=" "&lt;span style="color: rgb(0, 0, 230);"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;/fcsh&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
   &lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;/target&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;lt;/project&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p/&gt;
Unfortunately I have build the application to work only on windows, but with some minor changes (another jdic binaries and removing '.exe' hardcoded calls in code) can be made to run on any other platform.
&lt;p/&gt;
The first time the ant task is called, it observes that nobody is listening on the specified port and auto-lunches the wrapper as a separate process that can be observed on the system tray.
&lt;p/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_9UuPeCOFIqY/SA4_fHO-P-I/AAAAAAAAAAo/Edmsprt4evY/s1600-h/console.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_9UuPeCOFIqY/SA4_fHO-P-I/AAAAAAAAAAo/Edmsprt4evY/s400/console.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5192157224155103202" /&gt;&lt;/a&gt;
&lt;p/&gt;
The output of the fcsh.exe is redirected to the ant task.
The ant task fails if there is an error compiling flex files.
The fcshWrapper remember the commands received and their assigned ids by the fcsh. 
&lt;p/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9UuPeCOFIqY/SA5DlnO-P_I/AAAAAAAAAAw/-U6aPC3OlbA/s1600-h/console2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_9UuPeCOFIqY/SA5DlnO-P_I/AAAAAAAAAAw/-U6aPC3OlbA/s400/console2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5192161733870764018" /&gt;&lt;/a&gt;
&lt;p/&gt;
The wrapper stays on the system tray and notifies you when the build fails.  
&lt;p/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9UuPeCOFIqY/SA5GznO-QDI/AAAAAAAAABM/KhOz6FPpxYA/s1600-h/systray1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_9UuPeCOFIqY/SA5GznO-QDI/AAAAAAAAABM/KhOz6FPpxYA/s400/systray1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5192165272923815986" /&gt;&lt;/a&gt;
&lt;p/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9UuPeCOFIqY/SA5HM3O-QEI/AAAAAAAAABU/RkZItYocxwA/s1600-h/systray2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_9UuPeCOFIqY/SA5HM3O-QEI/AAAAAAAAABU/RkZItYocxwA/s400/systray2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5192165706715512898" /&gt;&lt;/a&gt;
&lt;p/&gt;
And there is also a console with all the commands received by the wrapper that can be hided/displayed from the system tray.
&lt;p/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9UuPeCOFIqY/SA5D4XO-QAI/AAAAAAAAAA4/Szp5lRa6Hb8/s1600-h/UIconsole.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_9UuPeCOFIqY/SA5D4XO-QAI/AAAAAAAAAA4/Szp5lRa6Hb8/s400/UIconsole.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5192162055993311234" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5906236296724437200-8614846586061500253?l=fcshwrapper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fcshwrapper.blogspot.com/feeds/8614846586061500253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5906236296724437200&amp;postID=8614846586061500253' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/8614846586061500253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/8614846586061500253'/><link rel='alternate' type='text/html' href='http://fcshwrapper.blogspot.com/2008/04/how-to-use-fcshwrapper.html' title='How to use fcshWrapper'/><author><name>Mihai Vasilache</name><uri>http://www.blogger.com/profile/15904989253787343185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_9UuPeCOFIqY/SJGMk9fiB6I/AAAAAAAAAD0/sUNV-mXszHQ/S220/identity.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9UuPeCOFIqY/SA4_fHO-P-I/AAAAAAAAAAo/Edmsprt4evY/s72-c/console.gif' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5906236296724437200.post-1421315641124620004</id><published>2008-04-21T00:28:00.010+03:00</published><updated>2008-04-25T17:48:15.041+03:00</updated><title type='text'>Publishing FCSH Wrapper on sourceforge.net</title><content type='html'>I have published sources and jars on sourceforge at &lt;a href="http://sourceforge.net/projects/fcshwrapper/"&gt;http://sourceforge.net/projects/fcshwrapper&lt;/a&gt;
&lt;br/&gt;
&lt;p/&gt;
A few words about this project:
&lt;p/&gt;
Few months ago I decided to use flex as my presentation tier for my new project.
The first think I make it was to use Flex Ant Tasks from Adobe Labs, but soon I found that it takes too long to compile a simple mxml file.&lt;br/&gt;
I founded on Adobe Labs a project named Flex Compiler Shell (FCSH), that now is included in flex sdk. 
&lt;p/&gt;
So, here comes the bad news ... FCSH is very, very poor designed so it cannot be used into an automated build script.&lt;br/&gt;
The only project that I found on the net that seems to resolve that problem is iFac (&lt;a href="http://ifac-plugin.com/"&gt;http://ifac-plugin.com/&lt;/a&gt;).
Again bad news: &lt;br/&gt;
- iFac is intended to be used only as a Eclipse plug-in,&lt;br/&gt;
- the binaries are available only from eclipse "Software Updates -&gt; Find and install",&lt;br/&gt;
 -,and worse, I believe that sources are not available since they adopt a license that forbid you to modify their sources.&lt;br/&gt;&lt;p/&gt;
So I decided to write my on wrapper over the fcsh.exe.&lt;br/&gt;

The sources and binaries are available at sourceforge: &lt;a href="http://sourceforge.net/projects/fcshwrapper/"&gt;http://sourceforge.net/projects/fcshwrapper/&lt;/a&gt;
And you are free to adapt the sources to your needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5906236296724437200-1421315641124620004?l=fcshwrapper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sourceforge.net/projects/fcshwrapper/' title='Publishing FCSH Wrapper on sourceforge.net'/><link rel='replies' type='application/atom+xml' href='http://fcshwrapper.blogspot.com/feeds/1421315641124620004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5906236296724437200&amp;postID=1421315641124620004' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/1421315641124620004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5906236296724437200/posts/default/1421315641124620004'/><link rel='alternate' type='text/html' href='http://fcshwrapper.blogspot.com/2008/04/publishing-fcsh-wrapper-on.html' title='Publishing FCSH Wrapper on sourceforge.net'/><author><name>Mihai Vasilache</name><uri>http://www.blogger.com/profile/15904989253787343185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://bp0.blogger.com/_9UuPeCOFIqY/SJGMk9fiB6I/AAAAAAAAAD0/sUNV-mXszHQ/S220/identity.gif'/></author><thr:total>8</thr:total></entry></feed>
