MShell: cmd.exe/4os2.exe frontend

(DE) Projekte für OS/2, eCS und ArcaOS
(EN) OS/2, eCS and ArcaOS related projects
Martin Vieregg
Posts: 238
Joined: Tue 19. Aug 2014, 09:30

MShell: cmd.exe/4os2.exe frontend

Post by Martin Vieregg » Mon 13. Jan 2020, 10:38

Ich bin der Autor des ME Editors und anderer Editoren. ME kann schon von stdin einlesen:

ME Editor

dir /s | me in

Ich bin dabei, daraus ein vollständiges Frontend für cmd.exe / 4os2.exe zu erstellen, das nicht die ärgerliche 8192-Zeichen-Beschränkung hat. Alle Daten einer Sitzung kann man mit der Scrollbar dank Editorfunktionalität wieder herholen. Zwischenablage u.a. funktioniert wie bei einem richtigen Editor. Mein Programm, das ich vorläufig MShell nenne, startet von sich aus cmd.exe oder 4os2.exe, erzeugt entsprechende Pipes und leitet stdin, stderr und stdout entsprechend um.

Es laufen aber nur die Programme, die stdin/stdout unterstützen. Farben gehen mit ESC-Ansi-Sequenzen auch. Doch die wenigen Programme mit crt VIO Aufrufen gehen nicht und müssen dann über ein herkömmliches Kommandozeilenfenster ausgeführt werden, das ggfs. dann automatisch gestartet wird, wahrscheinlich mit Hilfe einer editierbaren Ausnahme-Liste.

Ich versuche erstmal, das look-and-feel der alten Kommandozeile nachzuprogrammieren und baue dann in einem zweiten Schritt die gewünschten "Goodies" ein.

Neben dem reinen Textin- und output werde ich zuerst die Cursor-rauf-runter Funktion zur Wiederherstellung alter Eingaben implementieren. Die Tab-Erweiterung wird es wie in 4os2.exe, Linux oder Windows auch geben. Dann werde ich mein Kommandozeilenprogramm cd-shortcut zum schnellen Springen in Verzeichnisse ebenfalls integrieren, weil es eines der wenigen Programme ist, das VIO Aufrufe nutzt und deswegen in der MShell nicht funktioniert. Evtl. baue ich noch in einem separaten PM-Fenster eine Liste der alten Befehle ein. Ich denke außerdem über ein mauscursor-nahes Dropdownfeld nach, das einem bei der Suche nach Verzeichnisnamen oder Dateinamen unterstützt (in Ergänzung zur Tab-Erweiterung).

Meine Frage an euch: Welche weitere Funktionalität wäre euch wichtig ?
Wo finde ich eine vollständige Liste der Tastenfunktionen von cmd.exe ?

User avatar
LotharS
Posts: 603
Joined: Sun 29. Dec 2013, 20:07
Location: Düsseldorf

Post by LotharS » Mon 13. Jan 2020, 12:15

Martin Vieregg wrote:
Mon 13. Jan 2020, 10:38
Ich bin der Autor des ME Editors ...
hat der etwas zu tun mit diesem Editor:
http://www.utopia-planitia.de/index.html

Martin Vieregg
Posts: 238
Joined: Tue 19. Aug 2014, 09:30

Post by Martin Vieregg » Mon 13. Jan 2020, 17:29

nein, MED ist ein Programmierereditor. ME ist ein Ersatz für den OS/2 Systemeditor und bewusst relativ einfach gehalten. Es gibt allerdings beispielsweise HTML-Syntax-Highlightning. Die ME Spezialität ist der Umgang mit verschiedenen Zeichensätzen und Betriebsssystemen (Dateiendungen, IBM und ANSI Zeichensatz), dann u.a. eine automatische Aktualiserung wenn sich die Datei geändert hat. Oder eine sehr praktische Suchfunktion mit Anleuchten der gefundenen Begriffe.

ehemaliger
Posts: 83
Joined: Wed 22. Nov 2017, 23:46

Post by ehemaliger » Mon 13. Jan 2020, 19:41

Martin Vieregg wrote:Mein Programm, das ich vorläufig MShell nenne...
Kein so gute Idee: https://ecsoft2.org/mshell-mini-pm-shell

Martin Vieregg
Posts: 238
Joined: Tue 19. Aug 2014, 09:30

Post by Martin Vieregg » Tue 14. Jan 2020, 08:41

>mshell

Danke für den Hinweis. Denkbar wäre aus meiner Sicht
cmdfront
mecmd
cmdme

Letzteres wäre ein nettes kleines Wortspiel: cmd-Martins-Editor und "befehle mir", doch es gibt ein paar andere Treffer bei Google, allerdings kein Computerprogramm.

Wer hat noch Vorschläge?
Zuletzt geändert von Martin Vieregg am Tue 14. Jan 2020, 22:20, insgesamt 1-mal geändert.

Martin Vieregg
Posts: 238
Joined: Tue 19. Aug 2014, 09:30

Post by Martin Vieregg » Tue 28. Jan 2020, 15:21

Inzwischen habe ich mich erst einmal für "cmdme" entschieden.

Es dauert noch ein bißchen, bis ich etwas vorzeigen kann, ich werde es aber hier schreiben, wenn ich so weit bin.

Eine auf den ersten Blick banale Geschichte hat sich als extrem anspruchsvoll zu programmieren herausgestellt, ich werde gut in der "Programmers" section auf www.os2world.com/forum betreut und komme auch voran. Es geht um eine auf den ersten Blick Lapalie, von meinem PM Editor die Nutzereingabe von Ctrl-C in eine Exception für cmd.exe umzuwandeln, damit cmd.exe die Ausführung unterbricht, aber nicht beendet wird. Nach 4 Seiten Foren-Diskussion hat sich hausgestellt, dass ich eine helper exe benötige, die vom PM Editor aus in einer eigenen Session gestartet wird und die dann als child in derselben Session den Prozess cmd.exe startet. Zwischen dem PM Editor und dem Helper wird mit Event Semaphoren und Shared Memory kommuniziert, die Helper exe wandelt dann diese Information in exceptions um. Zwischen den unterschiedlichen Sessions muss man named pipes verwenden. Zwischen der helper exe und cmd.exe wird unter Verwendung von DosDupPipe stdin und stdout vererbt. Alles wird sowohl mit cmd.exe als auch mit 4os2.exe getestet.

User avatar
thorolf
Posts: 390
Joined: Wed 25. Dec 2013, 16:14
Location: Rhein-Main

Post by thorolf » Fri 7. Feb 2020, 22:19

Martin Vieregg wrote:
Tue 14. Jan 2020, 08:41
>mshell

Danke für den Hinweis. Denkbar wäre aus meiner Sicht
cmdfront
mecmd
cmdme
finde ich alle nicht sooo toll, denn es ist kein "Kommando", sondern eine Shell oder Terminal oder Kommando-Zeile.
Wer hat noch Vorschläge?
Irgendwas mit Shell fände ich am besten, "mvshell", "mvsh" oder "msh" wenn Du Deinen Namen drin haben willst, sonst vielleicht das "Linux-übliche" wie "yash" ("yet another...) , "os2sh" oder sowas eben.

Im Grunde ist das fehlen einer brauchbaren Shell, neben dem Fehlen eines aktuellen Web-Browsers und der allgemeinen Instabilität und Inkompatibilität, seit sehr vielen Jahren für mich eines der größten Mankos unter OS/2.

Ein Terminal mit einer ordentlichen History, die auch Neustarts überlebt, TAB-Vervollständigung von Befehlen, mit anständigen Maus-markier-/kopier-Funktionen, mit Registern/TABs, bequem konfigurierbar und frei in der Fenstergröße veränderbar sind seit Jahren Standard bei richtigen Betriebssystemen. Nur unter OS/2 gab's sowas leider nie :-(
Grüße,

Thorolf

ehemaliger
Posts: 83
Joined: Wed 22. Nov 2017, 23:46

Post by ehemaliger » Sat 8. Feb 2020, 08:34

Das Problem ist, daß eigentlich das gesamte VIO-Subsystem hätte überarbeitet werden müssen. Ansätze dazu gab es wohl in OS/2 für PowerPC, die aber - Gegensatz zu GRADD - nicht in das "normale" OS/2 zurückgeflossen sind. Somit läuft es auf solche Frickellösungen wie die hier besprochene hinaus, die nie alle Fälle sicher abdecken können.

MKH
Posts: 34
Joined: Sun 1. Jul 2018, 08:18

Post by MKH » Sat 8. Feb 2020, 09:44

Ein Terminal mit einer ordentlichen History, die auch Neustarts überlebt, TAB-Vervollständigung von Befehlen, mit anständigen Maus-markier-/kopier-Funktionen, mit Registern/TABs, bequem konfigurierbar und frei in der Fenstergröße veränderbar sind seit Jahren Standard bei richtigen Betriebssystemen.
Nur mal aus Neugierde: Welches PC-Betriebssystem bringt das mit? Ich glaube Windows eher nicht. Und für den Mac war die Kommandozeile lange ein Fremdwort, soweit ich weiß.
Aber natürlich wäre hier mehr Komfort wünschenswert.

User avatar
Sandra Asja Eickel
Posts: 16
Joined: Sat 30. Dec 2017, 01:00

Post by Sandra Asja Eickel » Sat 8. Feb 2020, 22:22

Unixoide Betriebssysteme können das schon sehr lange, inklusive der Befehlshistorie.
Es gibt dort auch nur verhältnismäßig wenige Programme, die nicht nur einfach Ein- und Ausgabe über STDIN und STDOUT machen, da es üblich ist, mehrere Programme miteinander zu verketten. Das zweite Programm nimmt die Ausgaben des ersten Programms entgegen und schickt seine Ausgaben als Eingabe an ein drittes Programm weiter.
Aber auch die anderen Programme wie Editoren können sich an geänderte Fenstergrößen problemlos anpassen. Maussteuerung in Konsolenfenstern geht außer für Copy&Paste so gut wie nie (bzw. wird es zumindest nicht verwendet).

Bei Windows 10 hat M$ die normale Kommandozeile komplett überarbeitet, freie Größenänderung geht jetzt auch - solange kein MODE-Befehl erfolgt, dann ist die Größe fest.

Die Konsolen merken sich, welche Ausgaben erfolgt sind, insbesondere, wo sich echte Zeilenumbrüche befinden und wo einfach nur das alte Fenster zu schmal war - dementsprechend werden die Inhalte bei einer Breitenänderung passend neu ausgegeben.

Sandra Asja

Martin Vieregg
Posts: 238
Joined: Tue 19. Aug 2014, 09:30

Post by Martin Vieregg » Wed 12. Feb 2020, 00:15

Die heiklen OS/2-nahen Programmierungen habe ich nun tatsächlich auch hinbekommen. Das meiste in den letzten Posts erwähnten Punkte bekomme ich tatsächlich auch hin. Die Einschränkungen beziehen sich auf ein paar spezielle Dinge. Das wichtigste ist, dass ich noch die VIO-Programme, also die Programme, die nicht (nur) stdout und stderr verwenden, sondern direkt in den Bildschirmspeicher schreiben (das sind die Programme, die den Cursor beliebig positionieren können, z. B. dfsee), sicher erkennen muss. Diese werden dann in einer eigenen cmd Sitzung gestartet. Ich habe schon im englischen Forum angefragt, ich müsste das Binary analysieren und das am Code erkennen. Eine wesentlich schlechtere Variante wäre es, wenn man eine Ausnahmeliste anlegen würde.

Dann gibt es noch ein Thema, wenn cmd.exe eine cmd-Datei ausführt. Befehle wie "mode" oder "cls" bekommt dann der Editor nicht mit. Ich werde das das so lösen, dass wenn der Benutzer eine Datei mit explizitem Dateiende .cmd übergibt, der Editor dann die Datei (ggfs. rekursive bei "call") liest und Zeile für Zeile cmd.exe zusendet. Die Grenze ist dann bei REXX-Programmen, diese kann ich nicht zeilenweise an den Editor schieben. Wenn in REXX-Programmen "mode" oder "cls" steht, wird das der Editor nicht mitbekommen.

Farben gehen auch, 4os2 wird auch unterstützt. Man kann nachträglich die Fenstergröße ändern und die bisherigen Eingaben werden dann auch korrekt wieder umgebrochen (das geht jetzt schon mit ME, mit dem man auch den Output von anderen Programmen einfangen kann), denn der Editor unterscheidet zwischen Zeilen mit weichen und harten Zeilenumbrüchen.

Code: Select all

[C:\]dir /s | me in
Das einzige, was ich lassen werde, ist dass wenn man die Bildschirmbreite ändert, die Farben gelöscht werden (ist mir zu frickelig das zu programmieren, es ginge schon, wäre aber relativ viel Arbeit.).

Inzwischen habe ich das Basisprogramm fertig, noch vollkommen spartanisch bzgl. der Goodies, die dann den Unterschied zu cmd.exe ausmachen werden. Ich teile es hier mit, wenn ihr die erste Version einmal testen könnt. Ich werde aber erst noch ein bißchen Features einbauen. Die Goodies zu programmieren, wird dann einfacher sein, weil ich viel ja im ME Editor schon implementiert habe und nur Code freigeben bzw. kopieren muss. Ich möchte das Programm aber erst mit eiiner gewissen Reife herausgeben, um unnötigen Mailverkehr zu vermeiden.

User avatar
thorolf
Posts: 390
Joined: Wed 25. Dec 2013, 16:14
Location: Rhein-Main

Post by thorolf » Sun 16. Feb 2020, 19:47

MKH wrote:
Sat 8. Feb 2020, 09:44
Ein Terminal mit einer ordentlichen History, die auch Neustarts überlebt, TAB-Vervollständigung von Befehlen, mit anständigen Maus-markier-/kopier-Funktionen, mit Registern/TABs, bequem konfigurierbar und frei in der Fenstergröße veränderbar sind seit Jahren Standard bei richtigen Betriebssystemen.
Nur mal aus Neugierde: Welches PC-Betriebssystem bringt das mit? Ich glaube Windows eher nicht. Und für den Mac war die Kommandozeile lange ein Fremdwort, soweit ich weiß.
Aber natürlich wäre hier mehr Komfort wünschenswert.
alles was nicht Windows ist (und selbst da ist es besser geworden), v.a. natürlich alles was Bash hat, jedes Linux, BSD und Unix aber selbstverständlich auch Mac OS X von Anfang an, was ja eine gewisse Nähe zu BSD hat(te).

Für mich war u.a. das Fehlen einer brauchbaren Kommandozeile ein Grund nicht mehr mit OS/2 zu arbeiten, der Komfortgewinn mit Terminal&Co. war einfach gigantisch.
Grüße,

Thorolf

Martin Vieregg
Posts: 238
Joined: Tue 19. Aug 2014, 09:30

Post by Martin Vieregg » Sun 16. Feb 2020, 21:24

Ich mache Fortschritte mit meinem Kommandozeilen-Frontend.

Nochmal zurück zu den Namensgebungen. Thorolf hat geschrieben:
Irgendwas mit Shell fände ich am besten, "mvshell", "mvsh" oder "msh" wenn Du Deinen Namen drin haben willst, sonst vielleicht das "Linux-übliche" wie "yash" ("yet another...) , "os2sh" oder sowas eben.
Ein hübscher Name wäre "meshell", weil sich das, wenn man es sauber englisch ausspricht, wie der französische Mädchenname "Michelle" anhört. Doch es gibt schon eine Musikerin mit dem Künstlernamen "me'shell". Ob das ein Problem sein könnte? Auf jeden Fall gehen Google-Suchanfragen dann ziemlich unter.

aschn
Posts: 859
Joined: Wed 25. Dec 2013, 22:47

Post by aschn » Sun 16. Feb 2020, 22:35

Das wär mir egal. Neben meshell fallen mir noch ein:

mecmdshell
meos2shell

Interessant ist die Verwechslung mit cmd's hell, die mich stören würde. Beim EPM heißen die virtuellen Dateien .command_shell_#, aber das hat sicherlich den Grund, dass E2 ein DOS-Programm war.
Zuletzt geändert von aschn am Sun 16. Feb 2020, 22:37, insgesamt 1-mal geändert.
Andreas Schnellbacher