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.

Reply via email to