Willkommen zu ED, einem der kleinsten Windows-Editoren der Welt! ED wurde rein in C und Win-API ohne weitere Bibliotheken wie MFC, VCL oder ATL etc. entwickelt. Ergänzend zu Notepad beherrscht er einen Vollbildmodus, einen Text-Zoom, einen Nur-Lese-Modus, die Verkleinerung in die Systemstatusleiste, einen Nachtmodus etc. Da der Quelltext offen ist, kann er leicht um weitere Funktionen erweitert werden, das macht ihn interessant.
Die nachfolgenden Sektionen dokumentieren Anwendung und Entwicklung von ED. Alternativ steht die gesamte Dokumentation im MS-HTML-Help-Format (ed.chm) und im PDF-Format (ed.pdf) z. V.
Wer hingegen einen Editor für Linux sucht, wird bei TED fündig.
ED entstand als Teilkomponente eines größeren Projektes. Gesucht wurde ein Texteditor unter Windows auf Basis der Programmiersprache C und der Win-API unter Ausschluß systemfremder Bibliotheken. Der Editor sollte literarische Texte anzeigen und editieren können und offen für Erweiterungen des Quelltextes sein.
Nun stellt ja schon Windows einen solchen bereit (Editor bzw. NotePad), jedoch ohne Quelltext. Im Internet hingegen finden sich zwar Text-Prozessoren mit deutlich größerem Funktionsumfang; keiner aber erfüllte in toto die Anforderungen an die gesuchte Komponente.
Da bei anderen Editoren immer das eine oder andere fehlte, kam es zur Eigenentwicklung. Zugegebenermaßen reizte auch die Möglichkeit, mit viel Spaß wieder einmal im reinen C zu programmieren – ohne überdimensionierte und komplexe Bibliotheken, nur mit den Windows-Funktionen und einem Compiler. Resultat dieses Ansatzes sind insgesamt ca. 1.600 Quellzeilen, die kompiliert unter LCC einen Editor ergeben, der je nach gesetzter Compiler-Direktive zwischen 17 und 29 KB groß (oder besser: klein) geraten ist.
Als Dokumentenformat verwendet ED reinen Text, der als einfachstes Format andere Dokumentenformate wie HTML, PDF, DOC, RTF etc. lange überdauern wird und somit Investitionsschutz bietet: auch in vielen Jahren werden Textdateien noch les- und schreibbar sein; ein komplexes und damit epochenabhängiges Anzeigeprogramm wird man auch zukünftig nicht benötigen. (Wer kann hingegen heute noch Wordstar-Dateien anzeigen?) Zudem benötigt man in der Phase der Texterstellung keine weitere Funktionalität.
Textdateien bieten naturgemäß keine Formatierungen wie dick, kursiv oder unterstrichen an. Da ED jedoch für literarische Zwecke gedacht war und sich in einem Roman nur vereinzelt Schriftauszeichnungen finden – zumeist werden nur Absätze und ggf. Einrückungen verwendet – wurde auf Formatierungen verzichtet. Die ENTER-Taste in ED beendet somit konsequent den Absatz und nicht die einzelne Zeile. Die sparsame Verwendung von Formatierung führt den lesenden Blick wieder auf das Wesentliche, den reinen Text, zurück und lenkt nicht mit Formatspielereien ab. Manchem mag dies spartanisch vorkommen; für den Projektzweck reichte es vollauf.
Benötigt wird das Betriebssystem Windows. Getestet wurde die Einsatzfähigkeit von ED unter den Windows-Versionen 2000, XP, 8 und 10 (Version 1.2 erst ab XP). Dies schließt nicht aus, daß ED unter anderen Windows-Versionen installierbar und lauffähig ist, wurde aber nicht überprüft.
Wer ED selbst kompilieren will, benötigt die Module ed.c, fr.c, st.c und ut.c, die Kopfdateien fr.h, st.h, ut.h, res.h, top.h, für LCC oder BCC etc.h sowie die Ressourcen ed.rc, icon.ico und ed.exe.manifest. Zu diesem Zweck kann man entweder die im Hypertext-Format vorliegenden Quelltexte im Browser als Textdateien mit der Dateierweiterung .c, .h bzw. .rc lokal speichern oder das gesamte Entwicklungsprojekt als ZIP-Archiv für die entsprechende Umgebung herunterladen:
ed-src.zip (Aktuelle Version für Kommandozeile: BCC, LCC, VC, Pelles C, GCC)
ed-src-10-cbuilder.zip (V1.0 für C-Builder von G. Behnke)
ed-src-10-mingw.zip (V1.0 für MingW/Code:Blocks von G. Behnke)
Wer ED nicht selbst kompilieren will, kann das Kompilat als ZIP-Archiv herunterladen:
ed32.zip [12 KB, 32 bit, MD5]
ed64.zip [19 KB, 64 bit, MD5]
Empfehlenswert ist anschließend die Prüfung auf Virusfreiheit und Authentizität.
Die Gesamtdokumentation steht in den Formaten CHM und PDF ebf. z. V.
Im Gegensatz zu Windows-Programmen, die sich mehr oder weniger fest mit dem System verdrahten, erzeugt ED keine Änderungen an Systemdateien (Registry etc.). Das bedeutet, zur Installation ist ED nur in einen Ordner zu kopieren, z. B. in
Schreiben auf den Programmordner kann administrative Rechte erforderlich machen.
Zur Deinstallation reicht die Löschung von ed.exe und (ggf.) ed.ini.
Anmerkung: Neuere Windows-Versionen können beim Herunterladen von ED von dieser Webpräsenz eine Benutzerwarnung ausgeben, da die Anwendung nicht digital signiert wurde. Die fehlende Signierung ist kein Versehen, sondern beabsichtigt: Eine gültige Signierung ist mit laufenden Kosten verbunden, da die Zertifizierung immer wieder erneuert werden muß. Zwar beschert sie einer ganz neuen Industriesparte (Verisign, Thawte etc.) ein beträchtliches Einkommen; sie ist aber somit für Programmierer, die ihr Wissen unentgeltlich z. V. stellen, nicht akzeptabel. Wer mehr Sicherheit benötigt, kann die MD5-Werte der Archive überprüfen oder die Archive mit einem Virenscanner überprüfen oder die Quelltexte selbst kompilieren. Falls jemand kostenlose Signaturen kennt, würde ich mich über eine Rückmeldung freuen!
ED ähnelt funktional dem Windows-Editor. Textzeilen werden allerdings immer am Fensterrand umgebrochen, da das Programm zum Editieren und Lesen von Prosa und nicht zum Bearbeiten von Quelltexten konzipiert wurde. Für letztere finden sich weitaus besser geeignete Programmeditoren im Netz. Wie beim Editor des Betriebssystems können Textdateien auf fünf unterschiedlichen Wegen geladen werden: beim Aufruf von ED als Parameter auf der Kommandozeile, innerhalb von ED über Menübefehle oder Tastenkürzel, durch das Ziehen einer Textdatei auf die ED-Programmdatei in einem Ordner oder in das offene Fenster von ED. Beginnt eine Datei im Text mit .LOG, fügt ED beim Laden das aktuelle Datum ein, um Protokolle zu ermöglichen. Bearbeitet werden können nur ANSI-, keine UNICODE-Dateien. Eine entsprechende Erweiterung war nicht geplant, da keine exotischen Zeichensätze unterstützt werden müssen, läßt sich aber bei Bedarf schnell einbinden. In Ergänzung zum Betriebssystemeditor bietet ED weitere Funktionen, die nachstehend aufgeführt sind:
Weitere Funktionen können bei Bedarf schnell eingebaut werden.
Tastatur- und Maussteuerung von ED lehnen sich an die des Betriebssystem-Editors an. Zusätzlich stehen folgende Befehle bereit:
F2 schaltet das Farbschema für den Text um. Dies kann bei wechselnden Lichtverhältnissen (Tag/Nacht) sehr hilfreich sein (z. B. dunkler Text auf hellen Hintergrund oder heller Text auf dunklem Hintergrund). Hat der Benutzer noch keine eigene Farben festgelegt, invertiert ED die aktuelle Vorder- und Hintergrundfarbe.
Zur Vergrößerung resp. Verkleinerung des Textes muß die Taste Strg zusammen mit der Taste Plus oder Minus des numerischen Ziffernblockes (Numpad) gedrückt werden, nicht des alphanumerischen.
F11 schaltet zwischen Voll- und Normalbild um.
Mit Esc flüchtet ED in die Systemstatusleiste (System Tray: das ist die kleine Symbolreihe in der Statusleiste von Windows ganz unten rechts), mit Maus-Doppelklick auf sein Symbol kommt er wieder zum Vorschein.
Kürzel | Befehl | Kürzel | Befehl | Kürzel | Befehl |
---|---|---|---|---|---|
Strg-N | Neue Datei | Strg-Einf | Kopieren | Strg-Num+ | Schrift vergrößern |
Strg-O | Datei öffnen | Strg-V | Einfügen | Strg-Num- | Schrift verkleinern |
Strg-S | Datei schließen | Shift-Einf | Einfügen | F1 | Hilfe |
Strg-P | Datei drucken | Entf | Löschen | F2 | Farbmodus |
Alt-F4 | Beenden | Strg-F | Suchen | Esc | Flüchten |
Alt-Rück | Rückgängig | F3 | Weitersuchen | ||
Strg-Z | Rückgängig | Strg-R | Ersetzen | ||
Strg-X | Ausschneiden | Strg-A | Alles markieren | ||
Shift-Entf | Ausschneiden | Strg-D | Datum einfügen | ||
Strg-C | Kopieren | F11 | Vollbild an/aus |
Anmerkung: Drückt man erst F11 und dann Esc, passiert beim Reaktivieren von ED etwas lustiges: Das Fenster erscheint zwar mit dem enthaltenen Text, aber ohne Titel-, Menü- und Statusleiste (Post-It-View wie bei Notepad Plus). Tastaturkurzkommandos (Shortcuts wie z. B. Strg-N: Neue Datei) funktionieren zwar noch, Menüzugriffskommandos (Access Keys wie z. B. Alt-D-N: Neue Datei) aber nicht mehr. Mit F11 läßt sich der Zustand wieder beheben und das Programm wandert wieder in eine voll funktionale Normalansicht. „It's not a bug, it's a feature.“
Die Maussteuerung von ED entspricht ebf. der des Betriebssystemeditors. Beim Rechtsklick auf den Text wird ein Kontextmenü offeriert.
Speichert der Benutzer Einstellungen innerhalb von ED, legt ED eine Datei namens ed.ini an, um sich die getroffenen Einstellungen zu merken. Alle Einstellungen finden sich als Einträge in ed.ini unter der Rubrik [Options] und können auch direkt (ohne ED) geändert werden. Sollte ED nach direkten Änderungen an ed.ini nicht mehr funktionieren, kann die Datei ed.ini einfach gelöscht werden; Ed startet dann wieder mit seinen fest eingetragenen Vorgabewerten.
Bis Version 1 schrieb ED seine Konfigurationsdatei in seinen Programmordner, wie es auch viele ältere Programme taten. Unter jüngeren Windows-Systemen mit Benutzerkontensteuerung (UAC), also ab Windows Vista, sind jedoch zumeist administrative Schreibrechte auf den Programmordner notwendig, die man als Benutzer vielleicht nicht hat. Um dennoch älteren Programmen das Schreiben von Anwendungsdaten zu ermöglichen, virtualisiert das Betriebssystem zwar den Ort der Konfigurationsdatei, so daß sich diese effektiv in einem anderen Ordner befindet. Windows 8 lenkt z. B. nicht-administrative Schreibzugriffe eines (fiktiven) Benutzers Tim auf den Programmordner
C:\Program Files (x86)\ed\
transparent auf den Virtualisierungsordner
C:\Users\Tim\AppData\Local\VirtualStore\Program Files (x86)\ed\
um.
Da die Virtualisierung die verwendeten Pfade jedoch noch unübersichtlicher macht, verfolgt ED ab Version 1.1 folgende Strategie:
ED sucht beim Programmstart zum Einlesen seiner Konfiguration automatisch erst im eigenen Programmordner nach ed.ini (somit ist ein portabler Betrieb vom USB-Stick möglich) und erst bei erfolgloser Suche im systemseitig vorgesehenen Anwendungsdatenordner des Benutzers, z. B. unter neueren Windows-Versionen in
C:\Users\Tim\AppData\ed\
oder unter Windows XP in
C:\Dokumente und Einstellungen\Tim\Anwendungsdaten\ed\
Die Konfiguration wird nicht automatisch gespeichert, sondern nur auf Anforderung über den entsprechenden Menübefehl. Liegt ed.ini unterhalb des Anwendungsordners des Betriebssystems, z. B. in
C:\Programs\ed\
oder unter Windows XP in
C:\Programme\ed\
können beim Schreiben unter neueren Betriebssystemen administrative Rechte erforderlich werden. Liegt ed.ini hingegen im Anwendungsdatenordner des Benutzers, sollte der Schreibzugriff funktionieren. Falls dennoch Schreibprobleme auftreten, kann man ed.ini per Hand als Administrator editieren.
Ab Version 1.2 befindet sich ein Manifest mit einer UAC-Direktive in ED, so daß Windows den Programmzugriff auf Pfade nicht grundsätzlich virtualisiert.
Eintrag | Beispielwert | Kommentar |
---|---|---|
Window | - | Fensterkoordinaten |
ScrFontName | Verdana | Bildschirmschriftart |
ScrFontSize | -21 | Bildschirmschriftgröße |
ScrFontWeight | 400 | Bildschirmschriftdicke |
PrtFontName | CG Times | Druckschriftart |
PrtFontSize | -16 | Druckschriftgröße |
PrtFontWeight | 400 | Druckschriftdicke |
ScrFontColor1 | 00000 | Bildschirmschriftfarbe |
ScrBgColor1 | E1FFE1 | Bildschirmhintergrundfarbe |
ScrFontColor2 | FFFFDD | Alternative Bildschirmschriftfarbe |
ScrBgColor2 | 00000 | Alternative Bildschirmhintergrundfarbe |
ToolBar | 0 | Werkzeugleiste an (1) oder aus (0) |
StatusBar | 0 | Statusleiste an (1) oder aus (0) |
Padding | 10 | Abstand Fensterinhalt zum Rahmen |
Anmerkungen: Der Abstand des Fensterinhaltes zum Rahmen (Padding) läßt sich unter ED nicht ändern und kann nur in ed.ini direkt eingetragen werden. Farbangaben folgen der hexadezimalen RGB-Notation (RRGGBB). Ein reines Blau als Beispiel ist also mit 0000FF zu erzeugen.
ED basiert nur auf der Programmiersprache C, auf der Win-API und setzt keine MFC o. ä. Bibliotheken voraus. Somit sollten die Quelltexte mit jedem C-Compiler problemlos übersetzt werden.
Namen eigener Funktionen und Variablen fangen zur besseren Unterscheidung von Windows-Routinen mit kleinem Buchstaben an. Entstammen sie einem anderen Modul, sind sie zudem mit Modulkürzel und Unterstrich präfigiert, um die Herkunft anzuzeigen. Die Anzahl globaler Variablen wurde auf das Mindestmaß reduziert, Seiteneffekte weitestgehend vermieden. Zur besseren Lesbarkeit wurden weitere funktionale Erweiterungen aus den Quelltexten entfernt. Das Programm läßt sich sowohl als ANSI- als auch UNICODE-Variante übersetzen. Weitere Funktionsbausteine sind variabel über Compiler-Direktiven eingebunden.
Die eigentliche Editierlogik liegt nicht im Quellcode, sondern in der Edit-Klasse des Betriebssystems. Wer also Quelltexte zu Zeilenpuffern oder abstrakte Datentypen zur Textverwaltung sucht, wird hier nicht fündig. Der gesamte Quelltext behandelt die Fensterverwaltung und in der EDIT-Klasse nicht enthaltene Funktionen wie Suchen, Ersetzen, Druck etc.
Die Quelltexte können sowohl innerhalb der integrierten Entwicklungsumgebungen als auch auf der Kommandozeile übersetzt werden. Wer noch keinen Compiler sein eigen nennt, kann einen solchen im Netz frei und kostenlos herunterladen. Beispielhaft sei nur die Kommandozeilenversion BCC32 von Borlands Entwicklungsumgebung, die Express-Edition von Visual C sowie der LCC- oder MingW-Compiler genannt. Getestet wurde der Quelltext von ED unter den Compilern (in Klammern die Größe des resultierenden Kompilats von ED Version 1) BCC32 V5.5.1 (71 KB), LCC V3.8 (23 KB), MSC V15.0 / Visual C 2008 (69 KB), Pelles C für Windows V7.00.355 (51 KB), GNU-C-Compiler/WIN64bit V7.1 (47 KB).
Wer keine Lust auf komplexe Entwicklungsumgebungen hat oder aber nur über einen älteren Rechner verfügt, kann mit den u. g. Befehlen auf der Kommandozeile den Editor selbst kompilieren. Hierfür sind entweder die Programmpfade von Compiler, Linker und Resourcen-Compiler im Programmsuchpfad (path) einzutragen oder beim Aufruf anzugeben. Zudem muß in den nachstehenden Beispielen für <INC> bzw. <LIB> der Pfad zu den Include-Dateien bzw. Bibliotheken der entsprechenden Entwicklungsumgebung eingetragen werden, sofern er der Umgebung nicht z. B. über Umgebungsvariablen (INCLUDE, LIB) o. ä. bekannt ist. Ab ED Version 1.2 wird die Bibliothek comctl.dll V6 benötigt, eine Kompilierung unter Windows 2000 ist nur mit einem Handstand möglich. Falls ein Pfad Leerzeichen enthält, ist er in Anführungszeichen einzufassen. Die Groß- und Kleinschreibung der aufgeführten Schalter und evtl. Leerzeichen dazwischen müssen zumeist beachtet werden. So muß z. B. für
brcc32 -i<INC> ed.rc
wenn die Include-Dateien im Verzeichnis c:\meine programme\bc\include liegen, konkret
brcc32 -i"c:\meine programme\bc\include" ed.rc
geschrieben werden.
Beispiel einer Kompilierung unter Borland C V5.5.1:
> brcc32 -i<INC> ed.rc
> bcc32 -I<INC> -c -d ed.c fr.c st.c ut.c
> ilink32 -L<LIB> -c -aa -Gn c0w32+ed+fr+st+ut, ed, nul, import32.lib+cw32.lib+comctl32.lib,, ed.res
Beispiel 1 einer Kompilierung unter LCC V3.8 mit Compiler-Driver:
> lc ed.c fr.c st.c ut.c ed.rc shell32.lib -subsystem windows -s
Anmerkung: LCCs C-Compiler V3.8 Build Nov. 24 2011 initialisiert das Toolbarbutton-Array zum Kompilationszeitpunkt leider fehlerhaft, LCC 3.8 Build Jul 30 2006 kompiliert das Array hingegen korrekt. Umgekehrt kompiliert LCCs Resourcen-Compiler aus dem Buld 2006 keine VERSION_INFO, dafür aber LRC aus dem Build 2011! Wer unter LCC partout alles braucht, kann entweder das Array zur Laufzeit definieren, oder die Quellen unter Build 2006 compilieren und die Resource mit einem anderen Compiler erstellen.
Beispiel 2 einer Kompilierung unter LCC V3.8:
> for %i in (*.c) do lcc %i
> lrc ed.rc
> lcclnk -s -subsystem windows ed.obj ut.obj fr.obj st.obj ed.res shell32.lib
Beispiel einer Kompilierung unter Visual C 2008:
> rc /i<INC1>;<INC2> ed.rc
> cl /I<INC1> /I<INC2> /GF ed.c fr.c st.c ut.c ed.res /link /LIBPATH:<LIB1> /LIBPATH:<LIB2> user32.lib gdi32.lib comdlg32.lib comctl32.lib shell32.lib
Beispiel 1 einer Kompilierung unter Pelles C V7.00.355:
> for %i in (*.c) do pocc /I<INC1> /I<INC2> /Ze /Gz /Os %i
> porc /I<INC1> /I<INC2> ed.rc
> polink -LIBPATH:<LIB1> -LIBPATH:<LIB2> user32.lib gdi32.lib comdlg32.lib comctl32.lib shell32.lib ed.obj ed.res fr.obj st.obj ut.obj
Beispiel 2 einer Kompilierung unter Pelles C V7.00.355 mit Compiler-Driver:
> cc /Ze /Gz /Os ed.c fr.c st.c ut.c ed.rc user32.lib gdi32.lib comdlg32.lib comctl32.lib shell32.lib
Beispiel 2 einer Kompilierung unter GNU-C-Compiler/WIN64bit V7.1:
> windres ed.rc ed64.o
> gcc -mwindows -DUNICODE -finput-charset=CP1252 -Os -o ed64.exe -s ed.c fr.c st.c ut.c ed64.o -luser32 -lgdi32 -lcomdlg32 -lcomctl32 -lshell32
Anmerkung: Ein Browser kann die obigen Kommandozeilen am Fensterrand umbrechen. Wer die Aufrufe selbst in der Konsole nachvollziehen möchte, sollte diese Umbrüche nicht als Zeilenende interpretieren.
Der eine oder andere wird nachstehend noch nützliche Hinweise zur Aufrüstung auf RichEdit finden. RichEdit bringt manches an Funktionalität schon eingebaut mit, was das EDIT-Control noch schmerzlich vermissen läßt, z. B. eine eingebaute Suchen- und Ersetzen-Funktion oder der direkte Druck aus dem Control.
Insbesondere für das Suchen und Ersetzen von Text können zwar die selbstgebauten Routinen auch für RichEdit genutzt werden; aus Performanzgründen sollten aber den RichEdit-eigenen Routinen der Vorzug gegeben werden, da hier nicht für jeden Suchvorgang ein eigener Puffer aufgebaut werden muß.
RichEdit ist konzeptuell zwar grundsätzlich schon im Quelltext hinterlegt, bedarf aber noch einer Konsolidierung, da sich diese Windows-Klasse je nach Versionsstand in Teilaspekten unterschiedlich verhält. Einige dieser Besonderheiten, die in der Entwicklung auffielen, sind nachstehend aufgeführt.
Anmerkung: Hier sind nur in Consumer-Betriebssystemen enthaltene RichEdit-Versionen aufgeführt. Server-Systeme, Office-Pakete oder Pocket-Systeme können andere Versionen mitbringen, z. B. Office 2007 mit RichEdit Version 6.0.
Bedanken möchte ich mich bei Charles Petzold für die Inspiration, die mir seine Bücher zur Windows-Programmierung verschafften und bei einigen Autoren im Internet, deren Hinweise mir über schwierige Entwicklungsphasen hinweghalfen.