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.
