Sorry for this: The CHANGES.TXT are written in German. I haven't any time to 
translate. See the comments inside the source files, they are written in 
English.

20. Februar 1994 / 8. April 1994 / 18. August 1994

nderungen am E_EDIT.                                           Thomas K. Gtz

1. Grundstzliche Schwchen

Der Editor E_EDIT hat einige kleine Schwchen, die einen behindern, wenn
man mit ihm arbeitet:

 - Keine Anzeige, ob die geladene Datei seit dem letzten Speichern gendert
   wurde. Ein kleiner Stern links neben "Line" knnte fr eine solche 
   Anzeige gebraucht werden.
 - Keine langen Dateinamen. (Problem der Dialogboxen "Open" und "SaveAs")
 - Maximal 64K groe Dateien knnen gelesen werden.
 - 16bittiger Code.


2. Die Portierung

Um dies auszubessern habe ich den E_EDIT auf den EMX-GCC Compiler (Version 0.8h) 
portiert. Dabei ist zwangslufig 32-bittiger Code enstanden. Fr die Portierung
waren folgende nderungen ntig, ohne, da sich grundlegend etwas gendert hat:
- Die Dialogboxen, die bentigt wurden, um Dateien zu laden (ffnen)
  und um sie unter einem anderen Namen zu speichern (Speichern als) 
  brachten in der 32-bittigen Version den PM zu Absturz. Es war keine
  Benutzereingabe mehr mglich. Deshalb wurden die Dialogboxen durch den
  Standard-File-Dialog ersetzt. In der Datei EDIT.C gab es dafr in der
  Funktion "ClientWndProc" einige nderungen (WM_COMMAND.IDM_OPEN und
  WM_COMMAND.IDM_SAVEAS). In EDLG.C wurden eine Reihe von Funktionen
  (z.B. OpenDlgProc und SaveasDlgProc) schlicht gestrichen.
- Eine Menge von Variablen und Parameter muten von USHORT auf ULONG
  umdefiniert werden. Die entsprechenden Stellen habe ich mit meinen
  Initialen "tkg" gekennzeichnet.
- Eine Reihe weiterer kleiner nderungen, die ich ebenfalls mit
  "tkg" gekennzeichnet habe
- Die Such-Operationen funktionierten nicht.
  Egal was gesucht wurde, nichts war aufzufinden. Nachdem anstelle des
  OS2EMX.H-Headers die Header des IBM-Toolkits benutzt wurden, war dieses
  Problem beseitigt. (Offensichtlich ein Fehler in dem Header OS2EMX.H)
  Dafr mute die Datei OS2.H aus dem EMX-INCLUDE-Verzeichnis gendert werden 
  und die Environment-Variable C_INCLUDE_PATH entsprechend gesetzt werden.
- Probleme mit den Hot-Keys (s.u)

3. Die Dialogboxen bzw. lange Dateinamen

Die Dialogboxen "Open" und "SaveAs" wurden entfernt (s. 2., erster
Spiegelstrich). Damit hat sich auch das Problem mit den langen Dateinamen 
erledigt, denn dies war ein Problem dieser beiden Dialog-Boxen. Auch Dateien 
mit langen Namen sind lad- und speicherbar.
Damit die OS/2-Dialogboxen "Open" und "SaveAs" arbeiten, mu ihnen ein 
Laufwerksbuchstabe bergeben werden. Dieser wird in der globalen Variable
"drive" gespeichert. Nach einem erfolgreichen Open bzw. SaveAs wird
der Laufwerksbuchstabe aus dem Dateinamen in diese Variable bernommen.
Dies ist ntig, wenn der Benutzer einen Laufwerkwechsel vorgenommen hat,
damit im nchsten Dialog mit diesen Boxen das genderte Laufwerk
angezeigt wird. All dies geschieht in der ClientWndProc unter 
WM_COMMAND.IDM_OPEN bzw. .IDM_SAVEAS und WM_ARGS. (Unter WM_ARGS wird die
Datei geffnet, die als Parameter bergeben wurde).
Initialisiert wird die Variable  "drive" in der Funktion "main" mit dem 
aktuellen Laufwerk. Leider stehen die Dialogboxen dann nicht immer im 
erwarteten Pfad. 
Ein Experiment:
  - In einem Befehlszeilenfenster werden folgende Kommandos eingegeben:
    (Ich unterstelle, da die genannten Laufwerke und Verzeichnisse existieren.
     Es funktioniert auch mit anderen.)
    - e:
    - cd c:\texfonts
    - cd \user
    - start edit32
  - In dem gestarteten Editor wird die Open-Box benutzt: (File--Open)
    (File--Open: Kommando aus der Menleiste des Editors. Restliche Kommandos 
     sind in der Box zu finden.)
    lfd. Nr. Kommando                 angezeigtes Laufwerk    angezeigter Pfad
    --------------------------------------------------------------------------
     1.      File--Open               E:                      \user
     2.      lw-Wechsel nach C:       C:                      \
     3.      Selektiere AUTOEXEC.BAT  C:                      \
     4.      ffne mit OK             -                       -
     5.      File-Open                C:                      \texfonts

Das Ergebnis dieses Experiments ist unerwartet, deshalb mu der Pfad nach "Open" bzw.
"SaveAs" mit DosSetCurrentDir gesetzt werden. Jetzt ergibt das obige Experiment das
erwartete Ergebnis:
    lfd. Nr. Kommando                 angezeigtes Laufwerk    angezeigter Pfad
    --------------------------------------------------------------------------
     5.      File-Open                C:                      \

4. Das Sternchen bzw. "Schon gespeichert?"
 
Um das Sternchen zu erzeugen, welches anzeigt, ob die Datei nach dem 
Laden bzw. letzten Speichern gendert wurde, waren in "ClientWndProc"
eine Reihe von nderungen ntig. Es wurde eine Variable "needToSaveOld"
eingefhrt, die bei der Message "WM_TIME" abgefragt und ggf. neu gesetzt
wird. Das Sternchen selbst wird wie die Angabe der Zeilen und Spaltennummer
bei WM_PAINT entweder gezeigt oder gelscht. Unter WM_TIME wird ggf.
ein WM_PAINT erzwungen.

6. Hot-Keys

Die Hot-Keys mit Control-Taste mit Buchstaben funktionieren nicht 
(CTRL-G, CTRL-F, CTRL-R), wohl aber die Funktionstasten (F3) und andere
Kombinationen (Shift-Ins,  Shift-Entf, CTRL-Ins, ALT-BS).
Lsung: In der AccelTable in der Datei "edit.rc", ab Zeile 44, waren die Tasten
"^F", "^R" und "^G" als Kommandos angegeben. Es mu heien: "^f", "^r" und "^g".
Wer htte das gedacht.

Weitere Hot-Keys fr New "^n", Open "^o", Save "^s" und Save As "^a" eingefhrt.

7. bersetzung mit dem IBM-Compiler
Da ich jetzt auch den IBM C/C++ First Step besitze, habe ich den Editor
auch mit diesem Compiler bersetzt und den Editor getestet. Es funktioniert
gut. Da mit dieser Variante das Source-Code-Debuggen mit dem IBM-IPDM 
funktioniert, wird in Zukunft auf diesem Compiler entwickelt und die
bersetzbarkeit mit dem EMX-GCC nur gelengentlich berprft.

8. Dateien ber 64 KByte
Unter OS/2 2.x sollte es kein Problem bereiten, Dateien ber 64 KByte
zu laden. Leider kann MLM_IMPORT offensichtlich keine Datenmengen
ber 64 KByte bewltigen, so da MLM_IMPORT mehrmals mit 64 KByte-Happen 
aufgerufen werden mu. Zuvor mu allerdings mit MLM_SETTEXTLIMIT das 
MLE-Maximum entsprechend erhht worden sein. Leider bertrgt MLM_IMPORT 
immer nur ganze Zeichen bzw. vollstndige Zeichenkombinationen. Wird 
nur das "CR" von "CR LF" als letztes Zeichen bertragen mu entsprechend
reagiert werden. Wegen dieses Problems und hnlicher Problem bei
MLM_EXPORT und MLM_QUERYTEXTLENGTH bzw. MLM_DELETE (PM hing) habe
ich dieses Vorhaben aufgegeben.

9. Zusammenfassen von Quellcode:
Der Editor enthlt Funktionalitt doppelt, z.B. "OPEN" bei WM_ARGS und 
WM_COMMAND.IDM_OPEN. Dieses wurde zusammengefat und in Prozeduren
gesteckt.

10. Verschiedene Sprachen
Meldungen an die Benutzenden waren ber die gesamte Datei "edit.c" 
verteilt. Sie wurden in einer Reihe von Konstanten zusammengefat.
Per Sprachselektor "English" bzw. "Deutsch" kann die Sprache
ausgewhlt werden. Mchte jemand die Meldungen in einer anderen 
Sprache haben, so ist er aufgefordert in gleicher Art die Meldungen
zu bersetzen, einen weiteren Selektor hinzuzufgen und "edit32.exe" 
neu zu erzeugen. Dabei sollten die Meldungen in den vorhanden Sprachen
nicht gelscht werden.

11. ffnen einer neuen Datei
Der Editor-Inhalt wird nicht mehr vor dem ffnen-Dialog gelscht, sondern
danach. Im Fall des Abbruchs im ffnen-Dialog bleibt der alte Inhalt.
Die Mglichkeit des Sicherns ist damit auch nach dem ffnen-Dialog.
