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. G”tz 1. Grunds„tzliche Schw„chen Der Editor E_EDIT hat einige kleine Schw„chen, die einen behindern, wenn man mit ihm arbeitet: - Keine Anzeige, ob die geladene Datei seit dem letzten Speichern ge„ndert wurde. Ein kleiner Stern links neben "Line" k”nnte fr eine solche Anzeige gebraucht werden. - Keine langen Dateinamen. (Problem der Dialogboxen "Open" und "SaveAs") - Maximal 64K groáe Dateien k”nnen 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 zwangsl„ufig 32-bittiger Code enstanden. Fr die Portierung waren folgende Žnderungen n”tig, ohne, daá sich grundlegend etwas ge„ndert hat: - Die Dialogboxen, die ben”tigt 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 m”glich. 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 muáten 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 muáte die Datei OS2.H aus dem EMX-INCLUDE-Verzeichnis ge„ndert 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 n”tig, wenn der Benutzer einen Laufwerkwechsel vorgenommen hat, damit im n„chsten Dialog mit diesen Boxen das ge„nderte 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 ge”ffnet, 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 ge„ndert wurde, waren in "ClientWndProc" eine Reihe von Žnderungen n”tig. 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 gel”scht. 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). L”sung: In der AccelTable in der Datei "edit.rc", ab Zeile 44, waren die Tasten "^F", "^R" und "^G" als Kommandos angegeben. Es muá heiáen: "^f", "^r" und "^g". Wer h„tte 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 bew„ltigen, so daá MLM_IMPORT mehrmals mit 64 KByte-Happen aufgerufen werden muá. Zuvor muá allerdings mit MLM_SETTEXTLIMIT das MLE-Maximum entsprechend erh”ht worden sein. Leider bertr„gt MLM_IMPORT immer nur ganze Zeichen bzw. vollst„ndige 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 enth„lt Funktionalit„t doppelt, z.B. "OPEN" bei WM_ARGS und WM_COMMAND.IDM_OPEN. Dieses wurde zusammengefaát 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 zusammengefaát. Per Sprachselektor "English" bzw. "Deutsch" kann die Sprache ausgew„hlt werden. M”chte 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 gel”scht werden. 11. ™ffnen einer neuen Datei Der Editor-Inhalt wird nicht mehr vor dem ™ffnen-Dialog gel”scht, sondern danach. Im Fall des Abbruchs im ™ffnen-Dialog bleibt der alte Inhalt. Die M”glichkeit des Sicherns ist damit auch nach dem ™ffnen-Dialog.