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