netlabs.org EPM Distribution Version 1.21

(DE) Neuigkeiten zu den Themen OS/2, eCS, und dem OS/2-Forum
(EN) News about OS/2, eCS and the OS/2 Forum
aschn
Posts: 952
Joined: Wed 25. Dec 2013, 22:47

netlabs.org EPM Distribution Version 1.21

Post by aschn » Tue 17. Mar 2020, 00:59

Die Version 1.21 von NEPMD wurde gestern veröffentlicht. Nach fast einem Jahr seit 1.20 war dies auch überfällig. Der extrem lange Zeitraum hat sich leider durch Verbesserungen an Grundsätzlichem ergeben.

Grob zusammengefasst sind Änderungen zu folgenden Themen gegnüber der Version 1.20 enthalten:
  • Backup
  • RecompileNew
  • Syntaxexpansion
  • Prüfung ob neue NEPMD-Version existiert
  • Suchen-Dialog
  • Vermeidung von unerwüschtem Scrolling
  • Schnelleres Klammer-Suchen beim Scrollen
  • Installation.
Auf der Webseite ist die Changes-Datei aktualisiert worden.

Die aktuelle Version ist hier unter dem Download-Link nepmd121_eng.wpi erhältlich.
Zuletzt geändert von aschn am Fri 20. Mar 2020, 22:53, insgesamt 1-mal geändert.
Andreas Schnellbacher

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

Post by MKH » Fri 20. Mar 2020, 21:34

Erstaunlich, was man mit dem alten Editor alles anstellen kann.
Vielen Dank für die unermüdliche Arbeit!

Konnte man bei EPM nicht die Zeilennummern direkt am linken Rand einblenden? Oder täusche ich mich da?

Gruß
Michael

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

Post by aschn » Fri 20. Mar 2020, 22:38

MKH wrote:
Fri 20. Mar 2020, 21:34
Erstaunlich, was man mit dem alten Editor alles anstellen kann.
Ja, das liegt daran, dass die Makrosprache REXX-ähnlich ist, nur viel schneller und dass vieles als E-Makro ausgeführt wurde bzw. dass viele Callbacks vorhanden sind, die die Konfiguration von ansonsten Closed-Source-Aufrufen ermöglichen. Ich würde gerne den C-Quellcode von allem haben, dann ließe sich vieles fixen, das man jetzt entweder so hinnehmen muss oder mit schlechten Workarounds überdecken kann.

Das ganze sehe ich nicht als Test an, was man damit alles hinbekommt, sondern, NEPMD ist für mich jetzt schon brauchbarer als z.B. MED. An Visual SlickEdit für OS/2 (jetzt VSlick) lommt der wohl noch nicht ran, aber den konnte ich nicht mehr ergattern.
MKH wrote:
Fri 20. Mar 2020, 21:34
Vielen Dank für die unermüdliche Arbeit!
Ich freue mich über jede Rückmeldung (oder Frage), besonders wenn sie so positiv ausfällt.
MKH wrote:
Fri 20. Mar 2020, 21:34
Konnte man bei EPM nicht die Zeilennummern direkt am linken Rand einblenden? Oder täusche ich mich da?
Nein, geht nicht. Auf die Anzeige der Zeilennummer hätte ich auch gerne Zugriff (in C), so dass man auch sinnvolles Folding ermöglichen könnte. Das wird aber wohl nicht kommen, weil die mögliche Umgehung mit E wahrscheinlich viel zu langsam ist. Irgendwann wollte ich es aber noch mal ausprobieren.

Bei der aktuellen Version find ich es ziemlich gut, dass man die Kodierung ändern kann, noch dazu ohne dass EAs und Datum/Uhrzeit verloren gehen. (Einfach uconv aus dem .rpm-Paket icu installieren.) Beim Backup wird nicht mehr jede Version mit einer neueren überschrieben, sondern je älter sie sind, um so länger bleiben sie erhalten. Ich hab lokal die Anzahl von 10 auf 20 gestellt.

Bei den Preferences gibt es jetzt zusätzlich zu den Presets "Main items", so dass man gleich sehen kann, welche Einstellungen sich verändern. Das Scrollen durch Code mit Hervorhebung der komplementären Klammern geht jetzt auch viel flüssiger.

Die Syntaxexpansion hat auch viel Arbeit gemacht. Sie funktioniert jetzt auch, wenn man einen beliebigen Code mit einem anderen als dem ursprünglichen Coding-Style bearbeitet. Das ist bereits die erste Stufe zur Neuformatierung. Die ist für später geplant. Als nächstes will ich ein paar wenige Sachen bei HyperText/2 verbessern und dann die Hilfe endlich brauchbar hinkriegen. Außer Anfängen waren meine Versuche bisher nichts.
Andreas Schnellbacher

Andi B.
Posts: 505
Joined: Tue 24. Dec 2013, 16:40

Post by Andi B. » Sat 21. Mar 2020, 15:34

An Visual SlickEdit für OS/2 (jetzt VSlick) lommt der wohl noch nicht ran, aber den konnte ich nicht mehr ergattern.
Ich hab mehrfach versucht mit MicroEdge Kontakt aufzunehmen wegen der OS/2 sourcen. Leider haben die nie geantwortet. Obwohl die 4.0 Version auch ein paar Macken hat, zum Programmieren unter OS/2 ist VS meiner Meinung aber noch immer unschlagbar. Nur wenn man auch die Win Version kennt merkt man, dass die OS/2 Version doch schon sehr alt ist.

MicroEdge dürfte es mittlerweile wohl auch egal sein, wenn die letzten paar verbliebenen OS/2 Hobbyprogrammierer mit einer Kopie arbeiten. Wenn jemand eine haben will....

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

Post by aschn » Sat 21. Mar 2020, 17:37

Vielen Dank, Andi, für diesen Beitrag. Die Reaktion von MicroEdge hätte ich auch genau so erwartet.

Bisher hatte ich zum Vergleich der Features (macht sich immer gut, wenn man Apps herausbringt) immer veraltete Versionen für W 4+ herangezogen, dazu natürlich vereinzelt Makros, wie die von Knut oder Dmitriy. Das taugt super als Vergleich.
Andreas Schnellbacher

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

Post by aschn » Mon 23. Mar 2020, 21:43

Fix für NEPMD 1.21

Ich hab zwar 4 Wochen getestet, aber das hab ich doch übersehen: Keys mit leeren Werten werden manchmal nicht in NEPMD.INI gesichert. Das macht sich z.B. bei "Preferences -> Basic configuration -> CUA keyset" bemerkbar. Hier ein Skript, um den Fix zu installieren:

Code: Select all

/* Fix for NEPMD 1.21 - Download and replace config.e and apply it. */
/* See http://trac.netlabs.org/nepmd/changeset/3919 for details.    */
/* o  Save this as replace_config_e.erx or similar.                 */
/* o  Load this into NEPMD.                                         */
/* o  Press the Run button in the toolbar for execution.            */
/* Don't apply this to other versions than 1.21 - it may require    */
/* a re-install!                                                    */
/* After that, you can check with the EPM command 'NepmdInfo' if    */
/* the loaded epm.ex is newer than the other netlabs files.         */
CALL RxFuncAdd 'SysLoadFuncs', 'REXXUTIL', 'SysLoadFuncs'
CALL SysLoadFuncs

Url      = 'http://svn.netlabs.org/repos/nepmd/!svn/bc/3919/trunk/src/netlabs/macros/config.e'
TmpFile  = VALUE( 'TMP',, 'OS2ENVIRONMENT')'\config.e'
DestFile = '%NEPMD_ROOTDIR%\netlabs\macros\config.e'

CALL SysFileDelete TmpFile
'wget -T 10 -t 3 "'Url'" -O "'TmpFile'"'
/* rc of newer wget versions can't be used. */
fWgetFailed = 0
DO 1
   IF STREAM( TmpFile, 'C', 'query exists') = '' THEN
   DO
      fWgetFailed = 1
      LEAVE
   END
   IF STREAM( TmpFile, 'C', 'query size') = 0 THEN
   DO
      fWgetFailed = 1
      LEAVE
   END
END
IF fWgetFailed THEN
DO
   'ErrorMsgBox 'TmpFile',Download failed. File can''t be installed. Url = 'Url
   EXIT
END

'COPY "'TmpFile'" "'DestFile'"'
'Etpm epm.e %NEPMD_ROOTDIR%\netlabs\ex\epm'
/* Can't check rc. rc of an E command in REXX is always 0. */

'Restart closeother NepmdInfo'

EXIT
Zuletzt geändert von aschn am Mon 30. Mar 2020, 20:27, insgesamt 2-mal geändert.
Andreas Schnellbacher

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Tue 7. Apr 2020, 09:36

Wenn ich das REXX script ausführe bekomme ich am Ende:

epm: G:\downloads > Restart closeother NepmdInfo
SYS1041: The name Restart is not recognized as an
internal or external command, operable program or batch file.
43 *-* 'Restart closeother NepmdInfo';
+++ RC(1041)

Ich habe es sowohl von einer normalen Kommandozeile als auch von der EPM Shell aus versucht.

Wenn ich die letzte Zeile in :

address epm 'Restart closeother NepmdInfo' ändere bekomme ich:
43 *-* Address epm 'Restart closeother NepmdInfo';
+++ RC(30)
Zuletzt geändert von erdmann am Tue 7. Apr 2020, 09:39, insgesamt 1-mal geändert.

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Tue 7. Apr 2020, 11:45

Hallo Andreas ich bekomme diese Fehler in epm.log und zwar vielfach
[2020-04-07 9:43:05] DosAllocSeg failed err=0x8 in mymalloc; size=256; called from 0xb0a80ff2
[2020-04-07 9:43:05] DosAllocSeg failed err=0x8 in mymalloc; size=16368; called from 0xb10a0079

1) hast du die Routine "mymalloc" irgendwo implementiert oder ist die Teil von ETKE603.DLL bzw. EPM.EXE ? Das "DosAllocSeg" benutzt wird, sagt mir, dass offensichtlich einfach der alte 16-bit Code mittels 32-bit Compiler neu übersetzt wurde. Das ist eher schlecht (DosAllocSeg hat viele 16-bit bedingte Einschränkungen die in einem 32-bit System nicht relevant sind. Z.B. kann man mit DosAllocSeg nicht im High Memory Speicher alloziieren).

2) ETKE603.DLL: das Problem war und ist, dass diese DLL leider 234 Code Segmente definiert, offensichtlich wegen seiner 16-bittigen Vergangenheit und weil die Makefiles etc. nicht richtig an 32-bit angepasst wurden. Wie schon bekannt, hinterläßt EPM beim Programmende dann 234 Speicherlücken im Shared Memory Bereich, und das passiert mit jedem Programmstart von EPM immer wieder.
Jetzt hab ich gesehen das NEPMD mit seiner eigenen Datei ETKE63.DLL kommt. Hast du die irgendwo erzeugt oder wo kommt die her ? Mein Plan wäre es, die einzelnen Objektdateien zu extrahieren und dann alle Segmente in einem Codesegment zu kombinieren. Ich weiss nicht ob ich das nur mit der DLL hinbekomme weil ich nicht weiß ob es ein Tool gibt (IDA ?) welches eine DLL in seine Objektdateien zerlegen kann, aber wenn du die Objektdateien einzeln hast wäre das einfach.

3) Der EPM Programmierdokumentation kann man entnehmen, dass in ETKE603.DLL sowohl die E-MLE Fensterklasse (also quasi das Editorfenster) als auch die EPM Frame Fensterklasse (also quasi der ganze Editor, inklusive Toolbar, Statuszeile etc.) exportiert ist. Die Doku beschreibt auch, wie man damit seinen eigenen Editor bauen kann. Ich frage mich langsam, ob das nicht die einfachere Lösung wäre. Wenn man, wie in der Doku beschrieben, die Fensterklassen mittels WinSubclassWindow unterklassiert, könnte man dann eben auch die ganzen Editorfehler beheben/umgehen.

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

Post by aschn » Tue 7. Apr 2020, 12:52

erdmann wrote:
Tue 7. Apr 2020, 09:36

Wenn ich das REXX script ausführe bekomme ich am Ende:

epm: G:\downloads > Restart closeother NepmdInfo
SYS1041: The name Restart is not recognized as an
internal or external command, operable program or batch file.
43 *-* 'Restart closeother NepmdInfo';
+++ RC(1041)

Ich habe es sowohl von einer normalen Kommandozeile als auch von der EPM Shell aus versucht.
Beides ist nicht richtig. Man muss tatsächlich das als EPM-REXX-Datei ausführen. Dort sind E-Befehle bekannt, wozu auch Restart gehört.

Das Ausführen von EPM-REXX-Skripten geht z.B. dadurch, dass man die Datei (am besten mit der Endung .erx) in den EPM lädt und dann den Run-Button anklickt. Eine andere Möglichkeit ist es mit Ctrl+I oder Esc eine EPM-Befehlszeile zu öffnen (keine Shell) und dort auszuführen:

rx replace_config_e.erx

Wenn man das Skript in myepm\bin sichert, kann man sich den Pfad vor dem Dateinamen schenken, wie im Beispiel oben angegeben.

Falls Du das doch von außen starten willst, dann würde der Befehl oben dem hier entsprechen (EPM-Befehl in Hochkommata):

start epm /r 'rx replace_config_e.erx'
Zuletzt geändert von aschn am Wed 8. Apr 2020, 09:56, insgesamt 2-mal geändert.
Andreas Schnellbacher

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

Post by aschn » Tue 7. Apr 2020, 19:11

Hallo Lars,
erdmann wrote:
Tue 7. Apr 2020, 11:45
Hallo Andreas ich bekomme diese Fehler in epm.log und zwar vielfach
[2020-04-07 9:43:05] DosAllocSeg failed err=0x8 in mymalloc; size=256; called from 0xb0a80ff2
[2020-04-07 9:43:05] DosAllocSeg failed err=0x8 in mymalloc; size=16368; called from 0xb10a0079
Das kommt sicherlich vom fehlenden Shared Memory. Das hab ich selbst nur alle paar Monate mal. Eher crashen die Moster-Apps wie die Mozillen oder OOo oder Java.

Ich hab das mal mit Theseus kontrolliert und war darauf gekommen, dass der Verbrauch an Shared Memory durch EPM um Größenordnungen kleiner ist als der der Monster-Apps. Außerdem wird nach Schließen aller EPM-Fenster auch der gesamte Speicher wieder freigegeben, vorher aber eben nicht, was natürlich ein heftiger Fehler ist. Selbst das Hochladen von ETLE603.DLL ist möglich, bringt aber wegen der Größe und des noch ungefixten Problems des aktuellen Kernels mit DLLs im hohen Speicherbereich auch Nachteile.

Richtig nervig ist dagegen das Problem, das Andy Willis beschrieben hat. So etwas ähnliches hatte ich früher auch, wie dort berichtet. Man sieht, dass nicht der Frame (EPM.EXE), sondern der Client (ETKE603.DLL) der Schuldige ist.
erdmann wrote:
Tue 7. Apr 2020, 11:45
1) hast du die Routine "mymalloc" irgendwo implementiert oder ist die Teil von ETKE603.DLL bzw. EPM.EXE ? Das "DosAllocSeg" benutzt wird, sagt mir, dass offensichtlich einfach der alte 16-bit Code mittels 32-bit Compiler neu übersetzt wurde. Das ist eher schlecht (DosAllocSeg hat viele 16-bit bedingte Einschränkungen die in einem 32-bit System nicht relevant sind. Z.B. kann man mit DosAllocSeg nicht im High Memory Speicher alloziieren).

2) ETKE603.DLL: das Problem war und ist, dass diese DLL leider 234 Code Segmente definiert, offensichtlich wegen seiner 16-bittigen Vergangenheit und weil die Makefiles etc. nicht richtig an 32-bit angepasst wurden. Wie schon bekannt, hinterläßt EPM beim Programmende dann 234 Speicherlücken im Shared Memory Bereich, und das passiert mit jedem Programmstart von EPM immer wieder.
Nein, ich bin nicht schuld, das ist reiner IBM-Code. ;-) Dass das eine Quick-and-Dirty-Portierung von 16- in 32-Bit-Code ist, hattest Du schon
vor einigen Wochen vermutet. Klar ist das der Fall. Das wird auch der Grund sein, weshalb bei der max. Dateigröße bei etwas über 60 MB Schluss ist.
erdmann wrote:
Tue 7. Apr 2020, 11:45
Jetzt hab ich gesehen das NEPMD mit seiner eigenen Datei ETKE63.DLL kommt. Hast du die irgendwo erzeugt oder wo kommt die her ?
Das ist nur eine gepatchte Version der Originalversion aus \OS2\APPS\DLL, in der die 16 Farben für das Highlighting geändert sind.
Die Datei wurde mit lxLite entpackt.
erdmann wrote:
Tue 7. Apr 2020, 11:45
Mein Plan wäre es, die einzelnen Objektdateien zu extrahieren und dann alle Segmente in einem Codesegment zu kombinieren. Ich weiss nicht ob ich das nur mit der DLL hinbekomme weil ich nicht weiß ob es ein Tool gibt (IDA ?) welches eine DLL in seine Objektdateien zerlegen kann, aber wenn du die Objektdateien einzeln hast wäre das einfach.
Nein, hört sich interessant an, aber ohne Quelldateien...
erdmann wrote:
Tue 7. Apr 2020, 11:45
3) Der EPM Programmierdokumentation kann man entnehmen, dass in ETKE603.DLL sowohl die E-MLE Fensterklasse (also quasi das Editorfenster) als auch die EPM Frame Fensterklasse (also quasi der ganze Editor, inklusive Toolbar, Statuszeile etc.) exportiert ist. Die Doku beschreibt auch, wie man damit seinen eigenen Editor bauen kann. Ich frage mich langsam, ob das nicht die einfachere Lösung wäre.
Darauf war schon Christian 2002 gekommen. Die Fenster "drumherum" nerven zwar auch etwas mit ihren Fehlern und Unzulänglichkeiten, aber das Hauptproblem sind die extrem fehlerhaften Funktionen im E-MLE. Die sind in ETKE603.DLL drin, aber Closed Source.

Das lohnt irgendwie nicht. Wenn jemand das machen will, OK. Dann bau ich das natürlich ein, aber das Hauptproblem bleiben dann noch die E-Funktionen. Ohne Quellcode hab ich viele Workarounds eingebaut, die die Fehler für den Nutzer fixen. Schlimm sind z.B. das Wiederherstellen von Positionen, das Suchen und Tags. Das hätte ich gerne auf C-Ebene bearbeitet, auch wenn ich da nicht richtig fit bin. Zum Fixen bleibt da jetzt fast nur noch die Zwischenablage, die den Buffer-Code aus dem E-MLE verwendet und damit auf 64 KB gegrenzt ist.

Da würde es wahrscheinlich mehr lohnen, die Zeit in FTE zu stecken oder vielleicht MED wiederzubeleben. KON ist da auch noch ein guter Kandidat, hat aber leider, ähnlich wie FTE, etwas zu wenig Features zum Programmieren.
Zuletzt geändert von aschn am Tue 7. Apr 2020, 19:19, insgesamt 2-mal geändert.
Andreas Schnellbacher

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

Post by MKH » Wed 8. Apr 2020, 07:13

Wie sieht es denn eigentlich mit dem Editor LPEX aus? Wären denn EPM-Makros kompatibel damit?
Vielleicht würde man ja eine Genehmigung bekommen, den Editor verteilen zu dürfen. Aber wahrscheinlich würde es ja bei IBM ohnehin niemanden mehr jucken...

User avatar
efbe
Posts: 64
Joined: Thu 11. Sep 2014, 19:33
Location: Dortmund

Post by efbe » Wed 8. Apr 2020, 09:44

MKH wrote:
Wed 8. Apr 2020, 07:13
Wie sieht es denn eigentlich mit dem Editor LPEX aus? Wären denn EPM-Makros kompatibel damit?
Vielleicht würde man ja eine Genehmigung bekommen, den Editor verteilen zu dürfen. Aber wahrscheinlich würde es ja bei IBM ohnehin niemanden mehr jucken...
LPEX hat mir damals nicht gefallen, aber ich weiss nicht nicht mehr warum.
Intensiv verwendet habe ich lange Zeit x2, weil dieser dieselbe Funktionalität/Oberfläche unter OS/2 und Winxx mit REXX bietet, inzwischen auch Linux.
http://www.tangbu.com
Allerdings nicht opensource.

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Wed 8. Apr 2020, 09:58

LPEX hat ein massives Problem welches ich als KO Kriterium werte: er kann mit grossen/16:9 (?) Bildschirmauflösungen nicht umgehen und verzerrt dann komplett die Editorfensterausgabe, ist also nicht zu gebrauchen. Der Himmel weiss warum IBM nicht in der Lage war, mit jeder Auflösung umgehen zu können.
Makros kann man allerdings schreiben,sowohl in C/C++, also auch in REXX. Weder das eine noch das andere ist mit EPM kompatibel.

Ich hab mal in C eine Drag and Drop Erweiterung implementiert,so dass man Dateien per Drag and Drop öffnen kann (zu finden auf Hobbes). Das war auch nötig, weil der Dateiöffnendialog von LPEX keine Dateien mit Leerzeichen im Pfad/Dateinamen öffnen kann...

Man muss leider sagen,dass das Angebot an guter und stabiler OS/2 Software sehr übersichtlich ist,um es mal höflich zu formulieren.

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Wed 8. Apr 2020, 11:12

aschn wrote:
Tue 7. Apr 2020, 19:11
Hallo Lars,
erdmann wrote:
Tue 7. Apr 2020, 11:45
Hallo Andreas ich bekomme diese Fehler in epm.log und zwar vielfach
[2020-04-07 9:43:05] DosAllocSeg failed err=0x8 in mymalloc; size=256; called from 0xb0a80ff2
[2020-04-07 9:43:05] DosAllocSeg failed err=0x8 in mymalloc; size=16368; called from 0xb10a0079
Das kommt sicherlich vom fehlenden Shared Memory. Das hab ich selbst nur alle paar Monate mal. Eher crashen die Moster-Apps wie die Mozillen oder OOo oder Java.

Ich hab das mal mit Theseus kontrolliert und war darauf gekommen, dass der Verbrauch an Shared Memory durch EPM um Größenordnungen kleiner ist als der der Monster-Apps. Außerdem wird nach Schließen aller EPM-Fenster auch der gesamte Speicher wieder freigegeben, vorher aber eben nicht, was natürlich ein heftiger Fehler ist. Selbst das Hochladen von ETLE603.DLL ist möglich, bringt aber wegen der Größe und des noch ungefixten Problems des aktuellen Kernels mit DLLs im hohen Speicherbereich auch Nachteile.
Bei mir wird nach Schließen des letzten EPM Fenster nicht der gesamte Speicher freigeben. Was freigegeben wird sind Speicherbereiche die aus ETKE603.DLL heraus dynamisch alloziiert wurden. Aber die 234 Codesegmente die ETKE603.DLL anlegt leben als 234 "Speicherlöcher" weiter, weil ich den Code mittels HIMEM in den oberen Shared Memory Bereich lade, liegen die eben im Shared Memory.
Und mit JEDEM Neustart und Programmbeendigung von EPM kommen dann 234 neue Speicherlöcher hinzu (die Länge des Codesegments + die Länge des entsprechenden Speicherlochs ergeben dabei immer 64 kByte).
Wenn man dann irgendwann mal Firefox oder Thunderbird startet knallt des natürlich, weil dann irgendwann kein oberes Shared Memory vorhanden ist (im unteren Shared Memory Bereich sieht es natürlich von Haus auch noch viel schlechter aus).

Oder sagst du, dass wenn man den ETKE603.DLL Code in den Low Memory Bereich lädt, dass dann alles korrekt freigegeben wird ?

Andi B.
Posts: 505
Joined: Tue 24. Dec 2013, 16:40

Post by Andi B. » Wed 8. Apr 2020, 12:53

LPEX hat ein massives Problem welches ich als KO Kriterium werte: er kann mit grossen/16:9 (?) Bildschirmauflösungen nicht umgehen und verzerrt dann komplett die Editorfensterausgabe, ist also nicht zu gebrauchen.
Ich hab grad den LPEX vom VAC4 Paket ausprobiert (P:\IBMCPP40\bin\cppxlx40.exe) auf meinem 3820x1200 Arbeitsplatz. Ich sehe da kein Verzerrungsproblem. Eine 3,5 MB Datei mit knapp 35.000 Zeilen hat er hier problemlos geöffnet. Font SystemVIO 5. hab ich wahrscheinlich mal vor ewigen Zeiten so eingestellt. Ich benutze den praktisch nie.

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

Post by aschn » Wed 8. Apr 2020, 13:05

erdmann wrote:
Wed 8. Apr 2020, 11:12
Oder sagst du, dass wenn man den ETKE603.DLL Code in den Low Memory Bereich lädt, dass dann alles korrekt freigegeben wird ?
Genau so. Das Verhalten mit hochgeladener ETKE603.DLL konnte ich auch damals grob nachvollziehen.
Andreas Schnellbacher

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Thu 9. Apr 2020, 13:11

Andi B. wrote:
Wed 8. Apr 2020, 12:53
LPEX hat ein massives Problem welches ich als KO Kriterium werte: er kann mit grossen/16:9 (?) Bildschirmauflösungen nicht umgehen und verzerrt dann komplett die Editorfensterausgabe, ist also nicht zu gebrauchen.
Ich hab grad den LPEX vom VAC4 Paket ausprobiert (P:\IBMCPP40\bin\cppxlx40.exe) auf meinem 3820x1200 Arbeitsplatz. Ich sehe da kein Verzerrungsproblem. Eine 3,5 MB Datei mit knapp 35.000 Zeilen hat er hier problemlos geöffnet. Font SystemVIO 5. hab ich wahrscheinlich mal vor ewigen Zeiten so eingestellt. Ich benutze den praktisch nie.
Wie gesagt hängt es mit der Bildschirmauflösung zusammen,ich benutze 1920x1080 also 16:9. Ich habe aber nur den LPEX von VAC 3.x probiert. Ich probier mal den von VAC 4.x.

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Thu 9. Apr 2020, 13:19

Der LPEX aus dem VAC 4.x Paket funktioniert auch hier einwandfrei ! Vielen Dank für den Hinweis! Dann werde ich den einfach über den bestehenden drüberbügeln. Ich fand den LPEX nämlich gut.
Zuletzt geändert von erdmann am Thu 9. Apr 2020, 13:19, insgesamt 1-mal geändert.

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Sat 2. May 2020, 10:21

Hallo Andreas,

vielen Dank für deine Mühen. Nachdem ich NEPMD 1.21 nun eine Weile benutzt habe hätte ich diese Anmerkungen:
1) Wenn man "Tabs" über Edit->Preferences->Special keys->Default tabs setzt, bleiben die nicht über einen Restart enthalten. Ich habe keine Ahnung wie ich das dauerhaft ändern kann.
2) für die "Shift" Einträge im Kontextmenü für selektierten Text wäre es besser wenn diese den Tab Settings folgen würden und es damit auch nur EIN Shift-Left und EIN Shift-Right Einträg gäbe. Im Allgemeinen sollten die nämlich in Deckung zu dem sein, was automatisch im Programmiereditormodus als Einrückungen gewählt wird.

Bevor ich auf NEPMD gestossen bin hatte ich das mal per REXX gelöst. Ist auch nicht perfekt weil multiple TAB settings nicht berücksichtigt werden aber das ließe sich anpassen, ERX für "Shift-Right":
/* this is an EPM REXX script */
'extract /getmarktype'
if getmarktype.1 == '' then
   return 1

'extract /tabs'
arg = word(tabs.1,1)
tmp = arg(1)
if tmp <> '' then do
   arg = tmp
end

'extract /getmark'
if getmark.1 <> getmark.2 then do
   'extract /col'
   if col.1 == 1 then
      getmark.2 = getmark.2-1
end /* do */

do i=getmark.1 to getmark.2
   call etksetfilefield 'line',i
   'extract /getline'
   call etkreplacetext right(getline.1,length(getline.1)+arg),i
end /* do */
call etksetfilefield 'line',getmark.1
sowie hier das ERX für "Shift-Left":
/* this is an EPM REXX script */
'extract /getmarktype'
if getmarktype.1 == '' then
   return 1

'extract /tabs'
arg = word(tabs.1,1)
tmp = arg(1)
if tmp <> '' then do
   arg = tmp
end
arg = arg+1

'extract /getmark'
if getmark.1 <> getmark.2 then do
   'extract /col'
   if col.1 == 1 then
      getmark.2 = getmark.2-1
end /* do */

idx = 999999
do i=getmark.1 to getmark.2
   call etksetfilefield 'line',i
   'extract /getline'
   line = strip(getline.1)
   if line == '' then
      iterate
   tmp = wordindex(line,1)
   if tmp < idx then
      idx = tmp
end /* do */

/* if arg <= idx then do */
   do i=getmark.1 to getmark.2
      call etksetfilefield 'line',i
      'extract /getline'
      call etkreplacetext substr(getline.1,arg),i
   end /* do */
/*end */ /* do */
call etksetfilefield 'line',getmark.1
Das ist jetzt in REXX und nicht in E, aber ich glaube der Sinn was erreicht werden soll, sollte ersichtlich sein. Was ebenso fehlt ist die Sperre beim "Shift-Left", so dass kein Text gelöscht wird wenn man an den Anschlag kommt. Ließe sich aber leicht ergänzen.
Zuletzt geändert von erdmann am Sat 2. May 2020, 10:36, insgesamt 1-mal geändert.

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Sat 2. May 2020, 10:47

Und hier der Fix für "Shift-Left" der verhindert, dass beim Anschlag Text gelöscht wird:
/* this is an EPM REXX script */
'extract /getmarktype'
if getmarktype.1 == '' then
   return 1

'extract /tabs'
arg = word(tabs.1,1)
tmp = arg(1)
if tmp <> '' then do
   arg = tmp
end
arg = arg+1

'extract /getmark'
if getmark.1 <> getmark.2 then do
   'extract /col'
   if col.1 == 1 then
      getmark.2 = getmark.2-1
end /* do */

idx = 999999
do i=getmark.1 to getmark.2
   call etksetfilefield 'line',i
   'extract /getline'
   line = strip(getline.1)
   if line == '' then
      iterate
   tmp = wordindex(getline.1,1)
   if tmp < idx then
      idx = tmp
end /* do */

if arg <= idx then do
   do i=getmark.1 to getmark.2
      call etksetfilefield 'line',i
      'extract /getline'
      call etkreplacetext substr(getline.1,arg),i
   end /* do */
end /* do */
call etksetfilefield 'line',getmark.1

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

Post by aschn » Sat 2. May 2020, 15:50

Hallo Lars,
erdmann wrote:
Sat 2. May 2020, 10:21
1) Wenn man "Tabs" über Edit->Preferences->Special keys->Default tabs setzt, bleiben die nicht über einen Restart enthalten. Ich habe keine Ahnung wie ich das dauerhaft ändern kann.
um das zu erreichen gibt es mehrere Möglichkeiten. Ich beschreib mal alle, deshalb wird es etwas länger.

Das hatte früher auch schon viele gestört. Das gleiche gilt übrigens auch für Margins. Es wird unterschieden zwischen Default tabs und mode-abhängigen Tabs. Die mode-abhängigen werden in MODECFG.E konfiguriert, genauso wie alle anderen mode-abhängigen Einstellungen. Es gibt bei NEPMD für viele Einstellungen eine Gewichtung (rechts hat Vorrang): Default -> Mode -> File (nicht permanent) -> EA, wobei häufig nicht jede Stufe existiert.

Wenn bei Dir also Default nichts bewirkt ht, dann war irgendeine höherwertige Einstellung aktiv. Die Details kannst Du mit Edit -> Show file and mode settings anzeigen lassen. Außerdem wird Dir beim Menüpunkt für "Default tabs" auch angezeigt, wenn diese Einstellung für die aktuelle Datei nicht wirkt. Hier steht z.B. gerade: "Default tabs [8]... (overridden by file EAs)".

Seit Version 1.21 sind endlich folgende Möglichkeiten hinzugekommen: Unter dem Menüpunkt "Default tabs" gibt es jetzt den Menüpunkt "(o) Mode-specific tabs and indent". Wenn Du den deaktivierst, dann brauchst Du in der Datei MODECFG.E nichts zu ändern. Dann gilt der Wert für "Default tabs" für alle Modes, es sei denn, eine höherwertige Gewichtung ist aktiv. Das gleiche gilt für Margins.

EAs kannst Du übrigens über File -> File properties setzen. Die Gewichtung "File" geht nur über die EPM-Befehlszeile, den "Command dialog" einzustellen. Das lass ich mal hier weg. Beide sind auch nur dateispezifisch.

Hier noch wie man MODECFG.E editiert: Edit -> Preferences -> Highlighting and expansion -> Edit MODECFG.E. Das geht auch einfacher über Befehlszeile: "ep modecfg.e". In beiden Fällen öffnet NEPMD\netlabs\macros\modecfg.e. Diese Datei kannst Du editieren. Beim Sichern wirst Du gefragt, ob Du diese im "user tree" sichern willst. Das mit "Yes" beantworten.

Für die Modes "C" und "REXX" existieren Coding styles. Damit kannst Du u.a. Tabs und Indent verändern. Was dort alles eingestellt ist, siehst Du am Anfang von MODECFG.E. Das lässt sich alles verändern und erweitern und dann im "myepm"-Baum sichern. Nach dem Sichern in der Toolbar den "Run"-Button drücken. Das führt RecompileNew aus und erkennt welche Dateien neu kompiliert werden müssen. In vielen Fällen geht das ohne Neustart, aber auch das übernimmt RecompileNew.

Zum Umschalten der Coding styles: Edit -> Preferences -> Highlighting and expansion -> Select coding style [...] for mode ... Das geht genau so über Format -> Coding style -> Select coding style [...] for mode ... Also, es existieren nur welche für C und REXX.
erdmann wrote:
Sat 2. May 2020, 10:21
2) für die "Shift" Einträge im Kontextmenü für selektierten Text wäre es besser wenn diese den Tab Settings folgen würden und es damit auch nur EIN Shift-Left und EIN Shift-Right Einträg gäbe. Im Allgemeinen sollten die nämlich in Deckung zu dem sein, was automatisch im Programmiereditormodus als Einrückungen gewählt wird.
Dafür gibt es Indent und UnIndent. Das macht das genau so. Das geht mit Alt+I und Alt+Sh+I. ShiftLeft und ShiftRight (Ctrl+F7 und Ctrl+F8) hab ich gelassen, weil es manchmal ganz praktisch ist einen Block nur um 1 Spalte zu verschieben. Alle vier findet man auch im Menü unter Format -> Indent.

Die aktuelle Tastenbelegung kann man sich übrigens unter Help -> Current keyset definitions anzeigen lassen.
erdmann wrote:
Sat 2. May 2020, 10:21
[...]
Das ist jetzt in REXX und nicht in E, aber ich glaube der Sinn was erreicht werden soll, sollte ersichtlich sein. Was ebenso fehlt ist die Sperre beim "Shift-Left", so dass kein Text gelöscht wird wenn man an den Anschlag kommt.
Danke, seh ich mir an, auch Deinen Fix. Aus dem Gedächtnis: Bei ShiftLeft müsste das Überschreiben der Zeichen am linken Rand noch aktiv sein, aber bei UnIndent müsste ich das eigentlich gefixt haben. Bei ShiftLeft hab ich es bis jetzt wieder vergessen gehabt. Das hatte mich früher auch schon heftig genervt. Werd ich einbauen. So in 1 Woche wird übrigens 1.22 herauskommen.
Zuletzt geändert von aschn am Sat 2. May 2020, 15:53, insgesamt 2-mal geändert.
Andreas Schnellbacher

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

Post by aschn » Sat 2. May 2020, 16:25

Lars, ich muss gestehen, dass ich mir Deinen Code noch nicht angesehen hab ;-) - kommt aber noch.

Ich hatte das tatsächlich bei UnIndent mal eingebaut: INDENTBLOCK.E:"defc IndentBlock". (Nach NEPMD kopiert, Cursor darauf und Alt+1 lädt diese Stelle komfortabel.)

Dann hab ich ShiftLeft gesucht: "findef shiftleft e" in der EPM-Befehlszeile. Dann lässt sich die gefundene Datei KEYS.E laden. In Zeile 2965 findet man das eigentliche Statement "shift_left". Darüber hab ich folgende Zeilen eingefügt:

Code: Select all

   -- Get minimum indent of current block
   MinIndent = 1599
   do l = firstline to lastline
      getline LineStr, l
      CurIndent = max( 1, verify( LineStr, ' '\t)) - 1
      -- Don't count indent of empty lines
      if substr( LineStr, CurIndent + 1) = '' then
         iterate
      endif
      if CurIndent < MinIndent then
         MinIndent = CurIndent
      endif
   enddo
   -- Don't delete chars at the left
   if MinIndent < 1 then
      return
   endif
Dann im "myepm"-Baum sichern. (Man wird wieder automtisch gefragt.) Anschließend den "Run"-Button drücken und testen.
Andreas Schnellbacher

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

Post by aschn » Sat 2. May 2020, 20:51

Hab ich mir jetzt angesehen. Sollte funktionieren, bin aber zu faul um das hier zu testen. Bei der ersten Version war mir schon die Schleife aufgefallen, die beginnend mit "idx =" in etwa das macht, was ich mit meinen zusätzlichen E-Zeilen versucht hab.

Kommentare, hoffentlich ermutigend doch besser E statt REXX zu verwenden: Mir ist das Hantieren mit "extract /..." immer zu unhandlich gewesen. Mit E braucht man das nicht mehr. Außerdem kann man dort nicht nur defcs, sondern auch defprocs verwenden. Es gibt von der Sprache her wirklich kaum Änderungen gegenüber REXX und deutlich schneller ist es auch noch. Bei Fragen bitte melden.

Zu E: Wenn man eine vorhandene Definition für ein defc oder defproc umdefinieren will, dann kann man bei NEPMD auch einfach die alte Definition kopieren und in (eine neue Datei) NEPMD\myepm\macros\mystuff.e einfügen. Dann wieder den "Run"-Button drücken und die Funktion ist ersetzt. Man muss nicht gleich ganze .e-Dateien in myepm\macros neu erstellen.

Es fehlt echt die Doku. Ich werd wohl demnächst richtig damit anfangen, nachdem es schon einige Versuche gegeben hat. Die deutsche Version wird dann noch länger dauern, wenn es damit überhaupt noch etwas wird.
Andreas Schnellbacher

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

Post by aschn » Sun 3. May 2020, 23:57

Zu ShiftLeft: Ich hab die Begrenzung jetzt auch für Blockmarkierung ermöglicht. Einen Block zu verschieben hatte vorher nicht mehr funktioniert. Der Text innerhalb einer Blockmarkierung wird jetzt nur soweit nach links verschoben, bis noch nichts abgeschnitten wurde.

Für Blockmarkierung ergibt auch die Begrenzung für ShiftRight Sinn. Hab ich auch eingbaut.

http://trac.netlabs.org/nepmd/changeset/3976

Die gesamte Datei KEYS.E gibt es hier.

Lars, noch mal besten Dank.
Andreas Schnellbacher

erdmann
Posts: 354
Joined: Mon 4. Jan 2016, 14:36

Post by erdmann » Mon 4. May 2020, 14:31

Und noch zwei Dinge. Sag mir Bescheid wenn ich stattdessen im NEPMD Bugtracker etwas anlegen soll:

1) dass man mit Alt-1 aus einer C/C++ Datei eine include Datei öffnen kann ist natürlich gut (das hatte ich ebenfalls schon als REXX Skript implementiert). Allerdings sollte da eine sinnvolle Prüfung stattfinden ob die selektierte Zeile/Text auch wirklich eine Datei angibt. Wenn man nämlich beliebigen Text selektiert fängt NEPMD an, die komplette Festplatte nach einer "Datei" mit dem Namen des selektierten Textes zu durchsuchen. Da kann man dann nur noch NEPMD hart abschießen oder ewig warten. Ich würde empfehlen, den selektierten Text wenigstens auf eine Dateiendung zu untersuchen. Bei meinem Skript hab ich dann nach dem keyword #include geprüft und noch nach .h und .idl Dateien unterschieden um dann ggf. nach INCLUDE bzw. SMINCLUDE Environment variable die zu öffnende Datei zu suchen und öffnen.

2) Es wäre für C/C++ super, wenn man nach Selektion eines Strukturtyps, die Struktur angezeigt bekäme. Ich habe das jetzt per REXX Skript so gelöst, dass ich den VAC C/C++ Compiler (icc.exe) mit entsprechenden Parametern aufrufe um aus der C/C++ Datei eine Listing Datei zu erzeugen, die (bei geeigneten Compilerparametern) auch die kompletten Typbeschreibungen enthält. Die so entstandene Datei öffne ich dann und suche nach dem Strukturnamen und zeige die Struktur so an.
Viel besser wäre natürlich eine Lösung, die ohne Aufruf eines spezifischen Tools auskommt und in den eingebundenen Include Dateien nach dem Strukturnamen sucht. Nur können Include Dateien ja weitere Include Dateien einbinden ...
Zuletzt geändert von erdmann am Mon 4. May 2020, 14:45, insgesamt 2-mal geändert.