Start > Algorithmik > ED

ED: Texteditor in C und Win-API

Willkommen zu ED, einem der kleinsten Windows-Editoren der Welt! ED wurde rein in C und Win-API ohne weitere Biblio­theken wie MFC, VCL oder ATL etc. entwickelt. Ergänzend zu Notepad beherrscht er einen Vollbild­modus, einen Text-Zoom, einen Nur-Lese-Modus, die Verkleine­rung in die System­status­leiste, 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 Ent­wick­lung von ED. Alternativ steht die gesamte Dokumen­tation im CHM-Format MS-HTML-Help-Format (ed.chm) und im PDF-Format PDF-Format (ed.pdf) z. V.

Wer hingegen einen Editor für Linux sucht, wird bei TED fündig.

  1. Einführung
  2. Systemvoraussetzungen
  3. Download
  4. Installation und Deinstallation
  5. Funktionsumfang
  6. Tastatur- und Maussteuerung
  7. Konfiguration
  8. Entwicklungsgrundlage
  9. Kompilierung
  10. Entwicklungsgeschichte
  11. Hinweise zu RichEdit
  12. Danksagung
  13. Nutzung

Einführung

ED

ED entstand als Teilkomponente eines größeren Projektes. Gesucht wurde ein Texteditor unter Windows auf Basis der Programmier­sprache C und der Win-API unter Ausschluß system­fremder Biblio­theken. Der Editor sollte literarische Texte anzeigen und editieren können und offen für Erweite­rungen des Quell­textes 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 Eigen­entwicklung. Zugegebenermaßen reizte auch die Möglichkeit, mit viel Spaß wieder einmal im reinen C zu programmieren – ohne über­dimensio­nierte und komplexe Biblio­theken, 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.

ED

Als Dokumenten­format verwendet ED reinen Text, der als einfachstes Format andere Dokumenten­formate wie HTML, PDF, DOC, RTF etc. lange überdauern wird und somit Investi­tions­schutz bietet: auch in vielen Jahren werden Textdateien noch les- und schreibbar sein; ein komplexes und damit epochen­abhängiges Anzeige­programm wird man auch zukünftig nicht benötigen. (Wer kann hingegen heute noch Wordstar-Dateien anzeigen?) Zudem benötigt man in der Phase der Text­erstellung keine weitere Funktio­nalität.

ED

Text­dateien bieten natur­gemäß keine Formatierungen wie dick, kursiv oder unterstrichen an. Da ED jedoch für literarische Zwecke gedacht war und sich in einem Roman nur vereinzelt Schrift­auszeich­nungen finden – zumeist werden nur Absätze und ggf. Ein­rü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 Format­spielereien ab. Manchem mag dies spartanisch vorkommen; für den Projektzweck reichte es vollauf.

Systemvoraussetzungen

Benötigt wird das Betriebs­system Windows. Getestet wurde die Einsatz­fä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.

Download

Quellen

Wer ED selbst kompilieren will, benötigt die Module ed.c, fr.c, st.c und ut.c, die Kopf­dateien 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 Text­dateien mit der Datei­erweiterung .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)

Ausführbare Kompilate

Wer ED nicht selbst kompilieren will, kann das Kompilat als ZIP-Archiv herunterladen:

Windows: ed32.zip [12 KB, 32 bit, MD5]
Windows: ed64.zip [19 KB, 64 bit, MD5]

Empfehlenswert ist anschließend die Prüfung auf Virusfreiheit und Authentizität.

Dokumentation

Die Gesamt­dokumentation steht in den Formaten CHM CHM-Format und PDF PDF-Format ebf. z. V.

Installation und Deinstallation

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

C:\Programme\ed\

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 Benutzer­warnung 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 Industrie­sparte (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ück­meldung freuen!

Funktionsumfang

ED ähnelt funktional dem Windows-Editor. Textzeilen werden aller­dings immer am Fenster­rand umge­brochen, da das Pro­gramm zum Editieren und Lesen von Prosa und nicht zum Bear­beiten von Quell­texten konzipiert wurde. Für letztere finden sich weitaus besser geeig­nete Programm­editoren im Netz. Wie beim Editor des Betriebs­systems können Textdateien auf fünf unter­schiedlichen Wegen geladen werden: beim Aufruf von ED als Parameter auf der Kommando­zeile, innerhalb von ED über Menü­befehle oder Tastenkürzel, durch das Ziehen einer Textdatei auf die ED-Programm­datei 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 ent­sprech­ende Erweite­rung war nicht geplant, da keine exotischen Zeichen­sätze unterstützt werden müssen, läßt sich aber bei Bedarf schnell einbinden. In Ergänzung zum Betriebs­system­editor bietet ED weitere Funktionen, die nachstehend aufgeführt sind:

Weitere Funktionen können bei Bedarf schnell eingebaut werden.

Tastatur- und Maussteuerung

Tastatur- und Maussteuerung von ED lehnen sich an die des Betriebs­system-Editors an. Zusätzlich stehen folgende Befehle bereit:

Tastatur

F2 schaltet das Farbschema für den Text um. Dies kann bei wechselnden Licht­verhält­nissen (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 Ziffern­blockes (Numpad) gedrückt werden, nicht des alpha­numerischen.

F11 schaltet zwischen Voll- und Normalbild um.

Mit Esc flüchtet ED in die System­status­leiste (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.

Tastenkürzel von ED
KürzelBefehlKürzelBefehlKürzelBefehl
Strg-NNeue DateiStrg-EinfKopierenStrg-Num+Schrift vergrößern
Strg-ODatei öffnenStrg-VEinfügenStrg-Num-Schrift verkleinern
Strg-SDatei schließenShift-EinfEinfügenF1Hilfe
Strg-PDatei druckenEntfLöschenF2Farbmodus
Alt-F4BeendenStrg-FSuchenEscFlüchten
Alt-RückRückgängigF3Weitersuchen
Strg-ZRückgängigStrg-RErsetzen
Strg-XAusschneidenStrg-AAlles markieren
Shift-EntfAusschneidenStrg-DDatum einfügen
Strg-CKopierenF11Vollbild an/aus

Anmerkung: Drückt man erst F11 und dann Esc, passiert beim Reakti­vieren von ED etwas lustiges: Das Fenster erscheint zwar mit dem enthaltenen Text, aber ohne Titel-, Menü- und Status­leiste (Post-It-View wie bei Notepad Plus). Tastatur­kurz­kommandos (Shortcuts wie z. B. Strg-N: Neue Datei) funktionieren zwar noch, Menü­zugriffs­kommandos (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 Normal­ansicht. „It's not a bug, it's a feature.“

Maus

Die Maus­steuerung von ED entspricht ebf. der des Betriebs­system­editors. Beim Rechtsklick auf den Text wird ein Kontextmenü offeriert.

Konfiguration

Speichert der Benutzer Einstellungen innerhalb von ED, legt ED eine Datei namens ed.ini an, um sich die getroffenen Ein­stel­lungen zu merken. Alle Ein­stel­lungen 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 Vorgabe­werten.

Bis Version 1 schrieb ED seine Konfigurationsdatei in seinen Programm­ordner, wie es auch viele ältere Programme taten. Unter jüngeren Windows-Systemen mit Benutzer­konten­steuerung (UAC), also ab Windows Vista, sind jedoch zumeist administrative Schreibrechte auf den Programm­ordner notwendig, die man als Benutzer vielleicht nicht hat. Um dennoch älteren Programmen das Schreiben von Anwendungsdaten zu ermöglichen, virtualisiert das Betriebs­system zwar den Ort der Konfigurations­datei, so daß sich diese effektiv in einem anderen Ordner befindet. Windows 8 lenkt z. B. nicht-admini­strative Schreib­zugriffe eines (fiktiven) Benutzers Tim auf den Programm­ordner

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:

Konfiguration lesen

ED sucht beim Programm­start zum Einlesen seiner Konfiguration automatisch erst im eigenen Programm­ordner nach ed.ini (somit ist ein portabler Betrieb vom USB-Stick möglich) und erst bei erfolgloser Suche im systemseitig vorgesehenen Anwendungs­daten­ordner 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\

Konfiguration speichern

Die Konfiguration wird nicht automatisch gespeichert, sondern nur auf Anforderung über den entsprechenden Menübefehl. Liegt ed.ini unterhalb des Anwendungsordners des Betriebs­systems, 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 Anwendungs­daten­ordner 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.

Konfigurationsdatei

Konfigurationseinträge von ed.ini
EintragBeispielwertKommentar
Window-Fensterkoordinaten
ScrFontNameVerdanaBildschirmschriftart
ScrFontSize-21Bildschirmschriftgröße
ScrFontWeight400Bildschirmschriftdicke
PrtFontNameCG TimesDruckschriftart
PrtFontSize-16Druckschriftgröße
PrtFontWeight400Druckschriftdicke
ScrFontColor100000Bildschirmschriftfarbe
ScrBgColor1E1FFE1Bildschirmhintergrundfarbe
ScrFontColor2FFFFDDAlternative Bildschirmschriftfarbe
ScrBgColor200000Alternative Bildschirmhintergrundfarbe
ToolBar0Werkzeugleiste an (1) oder aus (0)
StatusBar0Statusleiste an (1) oder aus (0)
Padding10Abstand Fensterinhalt zum Rahmen

Anmerkungen: Der Abstand des Fenster­inhaltes zum Rahmen (Padding) läßt sich unter ED nicht ändern und kann nur in ed.ini direkt eingetragen werden. Farbangaben folgen der hexa­dezimalen RGB-Notation (RRGGBB). Ein reines Blau als Beispiel ist also mit 0000FF zu erzeugen.

Entwicklungsgrundlage

ED basiert nur auf der Programmier­sprache C, auf der Win-API und setzt keine MFC o. ä. Biblio­theken voraus. Somit sollten die Quelltexte mit jedem C-Compiler problemlos übersetzt werden.

Namen eigener Funktionen und Variablen fangen zur besseren Unter­scheidung von Windows-Routinen mit kleinem Buch­staben an. Entstammen sie einem anderen Modul, sind sie zudem mit Modul­kürzel und Unter­strich präfigiert, um die Herkunft anzuzeigen. Die Anzahl globaler Variablen wurde auf das Mindestmaß reduziert, Seiteneffekte weitest­gehend vermieden. Zur besseren Les­bar­keit wurden weitere funktionale Erweite­rungen aus den Quell­texten entfernt. Das Programm läßt sich sowohl als ANSI- als auch UNICODE-Variante übersetzen. Weitere Funktions­bau­steine sind variabel über Compiler-Direktiven eingebunden.

Die eigentliche Editierlogik liegt nicht im Quellcode, sondern in der Edit-Klasse des Betriebs­systems. Wer also Quelltexte zu Zeilen­puffern oder abstrakte Daten­typen zur Text­verwaltung sucht, wird hier nicht fündig. Der gesamte Quelltext behandelt die Fenster­verwaltung und in der EDIT-Klasse nicht enthaltene Funktionen wie Suchen, Ersetzen, Druck etc.

Kompilierung

Die Quelltexte können sowohl innerhalb der integrierten Entwicklungs­umgebungen als auch auf der Kommando­zeile übersetzt werden. Wer noch keinen Compiler sein eigen nennt, kann einen solchen im Netz frei und kostenlos herunterladen. Beispielhaft sei nur die Kommando­zeilen­version BCC32 von Borlands Entwicklungs­umgebung, 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 Entwicklungs­umgebungen 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. Biblio­theken der entsprechenden Entwicklungs­umgebung 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ührungs­zeichen einzufassen. Die Groß- und Klein­schreibung 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 Toolbar­button-Array zum Kompilations­zeitpunkt 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 nach­voll­ziehen möchte, sollte diese Umbrüche nicht als Zeilenende interpretieren.

Entwicklungsgeschichte

Version 1.2

Version 1.1

Version 1.0

Offen

Zurückgestellt

Hinweise zu RichEdit

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 Perfor­manz­grü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 Konsoli­dierung, da sich diese Windows-Klasse je nach Versionsstand in Teilaspekten unterschiedlich verhält. Einige dieser Besonder­heiten, die in der Entwicklung auffielen, sind nachstehend aufgeführt.

Besonderheiten

RichEdit-Bibliotheken

Betriebssystem-Unterstützung

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.

Danksagung

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 Entwicklungs­phasen hinweghalfen.

Nutzung

Hinweise zur Nutzung.

© 2008, 2018 asdala.de: Kon­takt & Daten­obhut