It sounds like you want more control over things than the default behavior.
I would avoid preRun and postRun, then. Just call your own JS (to set up
files, etc.) directly when you want, consider avoiding a main() method
(which would invoke some default behavior for when to call it), and instead
call your compiled methods when you want (using one of the methods on
http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html
).

On Thu, Jul 16, 2015 at 1:18 AM, Bryan Duggan <[email protected]> wrote:

> Thanks
>
> That makes a lot of sense. Ive changed that but it still does not work,
> unless I am misunderstanding something. Here is what I am doing now:
>
> Compiling with -s INVOKE_RUN=0
> In test.html:
> Defining Module
> Including the compiled js
> Calling run
>
> And here is what is happening:
>
> preRun always gets called regardless or whether I use -s INVOKE_RUN=0 or
> ever call run. Commenting out run() makes no difference. Surely this should
> only happen when I run the program?
> run() does nothing. If I debug it, I see that doRun has already been
> called and the flag Module['calledRun'] has been set to true and hence the
> run() exits early. If I set it to be false in MY code, then in the method
> doRun, the flag shouldRunNow is set to be false and therefore the method
> exits.
>
> What I want to happen:
>
> Nothing to happen when the page loads
> On some event, copy the file (in preRun), run the program get the file
> generated by the program (in postRun)
>
> Thanks for your help so far. Ive checked in my changes to
>
> https://github.com/skooter500/emstest
>
> Bryan
>
>
>
> On Thursday, 16 July 2015 01:04:43 UTC+1, Alon Zakai wrote:
>>
>> Ok, so test.html is the one to run? Then I think the problem is that you
>> have
>>
>> <script src = "emstest.js"></script>
>>
>> and later down you define Module. So your Module does not exist when the
>> program emstest.js executes. You need to reverse the order.
>>
>>
>> On Wed, Jul 15, 2015 at 3:37 PM, Bryan Duggan <[email protected]> wrote:
>>
>>> Unless you compile with -s INVOKE_RUN=0 in which case the Module
>>> definition seems to be used but then the program wont run
>>>
>>>
>>> On Wednesday, 15 July 2015 23:36:23 UTC+1, Bryan Duggan wrote:
>>>>
>>>> Ok just comment out the first compile then. It's not relevant. Just do
>>>> the second compile to Javascript and look at test.html. If you load it in
>>>> Chrome you will see straight away what is happening
>>>>
>>>> The Module definition in test.html is ignored
>>>>
>>>> Bryan
>>>>
>>>> On Wednesday, 15 July 2015 23:20:18 UTC+1, Alon Zakai wrote:
>>>>>
>>>>> I'm confused by the build. It's creating both *.html and *.js, but the
>>>>> first command also emits a js file, so the two commands overwrite each
>>>>> other? Is that perhaps part of the problem?
>>>>>
>>>>>
>>>>> On Wed, Jul 15, 2015 at 3:13 PM, Bryan Duggan <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Ok
>>>>>>
>>>>>> Ive made a minimal example to show whats happening:
>>>>>>
>>>>>> https://github.com/skooter500/emstest
>>>>>>
>>>>>> I left everything in the repo
>>>>>>
>>>>>> The program test.c just takes the first file passed on the command
>>>>>> line and copies it to the next file on the command line.
>>>>>> The batch file build.bat will compile the test program using VC
>>>>>> command line (just to prove the program compiles and works ok. If you 
>>>>>> dont
>>>>>> have Visual Studio installed, this bit wont work, but its not necessary. 
>>>>>> It
>>>>>> then builds 2 versions of test.c using emcc. One html version and one
>>>>>> javascript version. The HTML version runs the compiled c program and if I
>>>>>> modify the HTML to include the command line parameters, they get passed
>>>>>> into the exe
>>>>>> Ive included a file emstest_mod.html where I have done this.
>>>>>> noInitialRun is set to true in the file and indeed it doesnt run 
>>>>>> initially.
>>>>>> In this version I get the error run is undefined though
>>>>>>
>>>>>> If you take a look at the file test.html you will see what I am
>>>>>> trying to do. Ive copied over the Module code from the HTML file and
>>>>>> modified it a little. In this version, preRun is not called, arguments 
>>>>>> are
>>>>>> ignored as is noInitialRun:true. The program just runs. If you comment 
>>>>>> out
>>>>>> the last line in build.bat, it compiles with the flag INVOKE_RUN=0.
>>>>>>
>>>>>> In this build, running test.html, preRun is called, but the compiled
>>>>>> C program is never called!
>>>>>>
>>>>>> So I can get the C program to run with no parameters (the Module
>>>>>> definition is ignored) and only on page load, not triggered or I can get
>>>>>> the module definition to be recognised (as preRun gets called) but the
>>>>>> compiled C program wont run
>>>>>>
>>>>>> Hope all this makes sense! I must be doing something wrong as I guess
>>>>>> this is a standard use case. I have a load of C code I want to call
>>>>>> repeatedly to convert some files as part of of bigger web app.
>>>>>>
>>>>>> Bryan
>>>>>>
>>>>>> On Wednesday, 15 July 2015 08:44:29 UTC+1, Stefan Meier wrote:
>>>>>>>
>>>>>>> Hi Bryan,
>>>>>>>
>>>>>>> actually your solution should work, I think. That is what I am doing
>>>>>>> and it looks like your way:
>>>>>>> var Module = {
>>>>>>>         arguments: [gametag,idxdb],
>>>>>>>         preRun: [],
>>>>>>>         postRun: [],
>>>>>>>         print: (function() {
>>>>>>>             if (debug==1)
>>>>>>>             {...
>>>>>>>
>>>>>>> Can you perhaps try to create javascript and html output, add the
>>>>>>> arguments to the generated html and see if it works?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Am Montag, 13. Juli 2015 15:51:17 UTC+2 schrieb Bryan Duggan:
>>>>>>>>
>>>>>>>> Really sorry
>>>>>>>>
>>>>>>>> I read that and I dont understand your answer at all...
>>>>>>>>
>>>>>>>> Here is what I want to do:
>>>>>>>>
>>>>>>>> Create a file (this should be in preRun?)
>>>>>>>> Execute abc2midi - I want this to be triggered not run when the
>>>>>>>> page loads
>>>>>>>> Get the generated midi file (this should be in postRun?)
>>>>>>>>
>>>>>>>> Can emscriptren be made to do this? Are there any simple examples
>>>>>>>> of how to set this up?
>>>>>>>>
>>>>>>>> WRT To your answer. I am not generating HTML, just JavaScript. Here
>>>>>>>> is my full HTML page:
>>>>>>>>
>>>>>>>> <html>
>>>>>>>> <head>
>>>>>>>> <script src = "abc2midi.js"></script>
>>>>>>>> </head>
>>>>>>>> <body>
>>>>>>>> <script>
>>>>>>>> var abcContents = "X:1\nT:Jimmy Ward's Jig\nR:jig\nD:Matt Molloy:
>>>>>>>> Heathery Breeze\nZ:id:hn-jig-103\nM:6/8\nK:G\n~G3 GAB|AGE GED|~G3 
>>>>>>>> AGE|GED
>>>>>>>> DEF|~G3 GAB|AGE GAB|cBA BGE|1 DED DEF:|2 DED D2B||\n|:cBA BAG|~A3 
>>>>>>>> AGE|BcA
>>>>>>>> BGE|EDE GAB|c2c BAG|ABA ABc|dcA AGE|1 GED D2B:|2 GED DEF||\n\n"
>>>>>>>> var argv = [ "in.abc", "1", "-o", "out.mid"];
>>>>>>>>
>>>>>>>> var Module = {
>>>>>>>>    "arguments": argv,
>>>>>>>>    "print": function(text){
>>>>>>>>     console.log('print');
>>>>>>>> console.log(text)
>>>>>>>>   },
>>>>>>>>   "printErr": function(text){
>>>>>>>> console.log(text)
>>>>>>>>   },
>>>>>>>>   "preRun" : function(){
>>>>>>>> console.log('prerun');
>>>>>>>> FS.createDataFile("/", "in.abc", abcContents, true, true);
>>>>>>>>   },
>>>>>>>>   "setStatus": function(text){
>>>>>>>>     console.log('setStatus');
>>>>>>>> console.log(text)
>>>>>>>> },
>>>>>>>>   "noInitialRun": true,
>>>>>>>> };
>>>>>>>> run(); // This does not run abc2midi though preRun gets called
>>>>>>>> </script>
>>>>>>>> </body>
>>>>>>>> </html>`
>>>>>>>>
>>>>>>>> And here is how I am compiling:
>>>>>>>>
>>>>>>>> emcc genmidi.c midifile.c parseabc.c parser2.c queues.c store.c -o
>>>>>>>> abc2midi.js -s EXPORTED_FUNCTIONS="['_main', '_abc2midi']"
>>>>>>>>
>>>>>>>> Im at a loss as to what to try next
>>>>>>>>
>>>>>>>> Bryan
>>>>>>>>
>>>>>>>>
>>>>>>>> On Monday, 13 July 2015 13:23:39 UTC+1, chronotext wrote:
>>>>>>>>>
>>>>>>>>> It looks like you work with Module as if you were still in Node
>>>>>>>>> mode.
>>>>>>>>>
>>>>>>>>> But when working in HTML mode, Module has already been defined, as
>>>>>>>>> explained here:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> https://kripken.github.io/emscripten-site/docs/api_reference/module.html#creating-the-module-object
>>>>>>>>>
>>>>>>>>> On Monday, July 13, 2015 at 2:41:55 PM UTC+3, Bryan Duggan wrote:
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>>
>>>>>>>>>> Here is my problem though. If I compile like this:
>>>>>>>>>>
>>>>>>>>>> emcc genmidi.c midifile.c parseabc.c parser2.c queues.c store.c
>>>>>>>>>> -o abc2midi.js -s EXPORTED_FUNCTIONS="['_main', '_abc2midi']"
>>>>>>>>>>
>>>>>>>>>> Even if I set noInitialRun: true in Module like this:
>>>>>>>>>>
>>>>>>>>>> var argv = [ "in.abc", "1", "-o", "out.mid"];
>>>>>>>>>> var Module = {
>>>>>>>>>>    arguments: argv,
>>>>>>>>>>    print: function(text){
>>>>>>>>>>     console.log('print');
>>>>>>>>>> console.log(text)
>>>>>>>>>>   },
>>>>>>>>>>   printErr: function(text){
>>>>>>>>>> console.log(text)
>>>>>>>>>>   },
>>>>>>>>>>   preRun : function(){
>>>>>>>>>> console.log('prerun');
>>>>>>>>>> FS.createDataFile("/", "in.abc", abcContents, true, true);
>>>>>>>>>>   },
>>>>>>>>>>   noInitialRun: true,
>>>>>>>>>> };
>>>>>>>>>>
>>>>>>>>>> The C program runs, but does not take the command line
>>>>>>>>>> arguments!! I can see the output on the Javascript console. Also 
>>>>>>>>>> preRun is
>>>>>>>>>> never called
>>>>>>>>>>
>>>>>>>>>> If I compile like this:
>>>>>>>>>>
>>>>>>>>>> emcc genmidi.c midifile.c parseabc.c parser2.c queues.c store.c
>>>>>>>>>> -o abc2midi.js -s EXPORTED_FUNCTIONS="['_main', '_abc2midi']" -s
>>>>>>>>>> INVOKE_RUN=0
>>>>>>>>>>
>>>>>>>>>> And try this in my HTML page:
>>>>>>>>>>
>>>>>>>>>> var argv = [ "in.abc", "1", "-o", "out.mid"];
>>>>>>>>>>
>>>>>>>>>> var Module = {
>>>>>>>>>>    arguments: argv,
>>>>>>>>>>    print: function(text){
>>>>>>>>>>     console.log('print');
>>>>>>>>>> console.log(text)
>>>>>>>>>>   },
>>>>>>>>>>   printErr: function(text){
>>>>>>>>>> console.log(text)
>>>>>>>>>>   },
>>>>>>>>>>   preRun : function(){
>>>>>>>>>> console.log('prerun');
>>>>>>>>>> FS.createDataFile("/", "in.abc", abcContents, true, true);
>>>>>>>>>>   },
>>>>>>>>>>   noInitialRun: false, // Makes no difference
>>>>>>>>>> };
>>>>>>>>>> run();
>>>>>>>>>>
>>>>>>>>>> preRun gets called but the C program doesnt run
>>>>>>>>>>
>>>>>>>>>> Whats going on!?
>>>>>>>>>>
>>>>>>>>>> Bryan
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Monday, 13 July 2015 10:52:54 UTC+1, chronotext wrote:
>>>>>>>>>>>
>>>>>>>>>>> Hi there,
>>>>>>>>>>>
>>>>>>>>>>> I think Module.arguments is what you're looking for:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> https://kripken.github.io/emscripten-site/docs/api_reference/module.html#affecting-execution
>>>>>>>>>>>
>>>>>>>>>>> HTH,
>>>>>>>>>>> Ariel
>>>>>>>>>>>
>>>>>>>>>>> On Monday, July 13, 2015 at 2:07:13 AM UTC+3, Bryan Duggan wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Hey
>>>>>>>>>>>>
>>>>>>>>>>>> I presume this is standard enough usage for emscripten, but I
>>>>>>>>>>>> cant figure out how to do it. I am trying to port a command line C 
>>>>>>>>>>>> program
>>>>>>>>>>>> called abc2midi to emscripten.
>>>>>>>>>>>>
>>>>>>>>>>>> Everything compiles fine and I can get both the javascript to
>>>>>>>>>>>> generate and run in node and the HTML to generate and run in the 
>>>>>>>>>>>> browser.
>>>>>>>>>>>>
>>>>>>>>>>>> Now I want to do the following:
>>>>>>>>>>>>
>>>>>>>>>>>> 1 Write a text file to the virtual file system. This is how Im
>>>>>>>>>>>> doing it:
>>>>>>>>>>>>
>>>>>>>>>>>> var Module = {
>>>>>>>>>>>>   'print': function(text){
>>>>>>>>>>>> console.log(text)
>>>>>>>>>>>>   },
>>>>>>>>>>>>   'printErr': function(text){
>>>>>>>>>>>> console.log(text)
>>>>>>>>>>>>   },
>>>>>>>>>>>>   'preRun' : function(){
>>>>>>>>>>>> console.log('prerun');
>>>>>>>>>>>> //FS is not defined
>>>>>>>>>>>> FS.createDataFile("/", "in.abc", abcContents, true, true);  },
>>>>>>>>>>>>   'noInitialRun': true,
>>>>>>>>>>>> };
>>>>>>>>>>>>
>>>>>>>>>>>> 2. Call the main method and pass in some command line arguments
>>>>>>>>>>>> including the file name. I cant find an example of how to do this 
>>>>>>>>>>>> and
>>>>>>>>>>>> everything Ive tried has not worked
>>>>>>>>>>>>
>>>>>>>>>>>> 3. Read back the generated file from the file system
>>>>>>>>>>>>
>>>>>>>>>>>> Surprisingly hard to find an example of this pretty
>>>>>>>>>>>> straightforward scenario! Any help would be much appreciated
>>>>>>>>>>>>
>>>>>>>>>>>> Bryan
>>>>>>>>>>>>
>>>>>>>>>>>  --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "emscripten-discuss" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "emscripten-discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to