Stdin einem emscripten HTML-Programm zur Verfügung stellen?

9

Ich habe ein C-Programm, das ein Argument (ein Char-Array / String) über die Befehlszeile und liest auch von stdin. Ich habe es in JavaScript mit emscripten kompiliert. Dies war erfolgreich und ich kann es wie das normale C-Programm mit node.js:

ausführen %Vor%

Wie Sie sehen, gebe ich die Zeichenfolge "foo" als Argument und den Inhalt von bar.txt als stdin ein. Jetzt möchte ich, dass es sich um eine eigenständige HTML-Datei handelt.

Durch Ändern der Ausgabe in HTML:

%Vor%

Ich stelle das Argument zur Verfügung durch das Hinzufügen von arguments: ['foo'], zu den Definitionen in var Module . Dies funktioniert wie erwartet, das Programm erhält das Argument korrekt.

Nun, wie stelle ich die Standardeingabe für dieses Programm bereit? Ich muss das nicht dynamisch machen. Es wäre in Ordnung, eine Zeichenfolge irgendwo im HTML mit dem erforderlichen stdin-Inhalt zu deklarieren.

Bearbeiten

Habe gerade eine Lösung gefunden, die für mich funktioniert. In der JS-Datei für den generierten HTML-Code gibt es einen Standard-Eingabehandler, der prompt() s für den Benutzer verwendet, wenn keine andere Eingabemethode definiert ist. Bearbeiten Sie einfach die Variable result oder rufen Sie Ihre eigene Funktion auf:

%Vor%     
mınxomaτ 02.10.2015, 16:55
quelle

3 Antworten

5

Ein Weg wäre, die Emscript-Dateisystem-API zu verwenden, beispielsweise indem FS.init in der Module preRun-Funktion, die benutzerdefinierte Funktionen für Standardeingabe, -ausgabe und -fehler übergibt.

%Vor%

Die Funktionen sind ziemlich niedrig: Sie behandeln jeweils ein Zeichen als ASCII-Code. Wenn Sie Zeichenfolgen haben, die Sie übergeben möchten, müssen Sie die Zeichen der Zeichenfolge selbst durchlaufen. Ich vermute charCodeAt wäre hilfreich. Um Strings von stdout oder stderr auszugeben, vermute ich fromCharCode hilfreich.

Beispiel (nicht sehr gut getestet!) Implementierungen mit jedem sind unten.

%Vor%     
Michal Charemza 14.10.2015 08:03
quelle
0

Nach der Frage "Edit" habe ich meine Funktion gemacht, sehr viel.

Ich hoffe, der folgende Code kann jemand anderem helfen.

  1. Kommentar run (); am Ende des Emscriptes

    %Vor%
  2. result = areaInput(); // Wie die Frage erwähnt

  3. Fügen Sie den folgenden Code in Ihre HTML-Datei ein, um run () in emscript

    zu aktivieren %Vor%
  4. erinnere mich an io textareas in deinem html

    <textarea id="input" cols="80" rows="30"></textarea>

    <textarea id="output" cols="80" rows="30"></textarea>

  5. und eine Schaltfläche

    <button onclick="execEmscript();">run</button>

nobodyzxc 25.05.2017 19:12
quelle
-1

Anstatt die Ausgabe von Emscripten zu editieren, könntest du das Window-Objekt mit einem Patch versehen

%Vor%

Nicht wunderbar, aber ich würde das weniger als einen Hack ansehen, als das Emscript-erzeugte Javascript zu bearbeiten.

    
Michal Charemza 12.10.2015 07:19
quelle

Tags und Links