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.
