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.

Reply via email to