ED: Texteditor in C und Win32-API

www.asdala.de > Algorithmik > ED

EDWillkommen zu ED, einem der kleinsten Windows-Editoren der Welt! ED wurde rein in C und Win32-API ohne weitere Biblio­theken wie MFC etc. entwickelt. Er ist wie NotePad ein Editor für Windows, beherrscht aber zusätzliche Funktionen wie einen Vollbild­modus auf Knopfdruck, einen Text-Zoom, einen Nur-Lese-Modus, die Verkleine­rung in die System­status­leiste, unter­schied­liche Textfarben etc.

Die nachfolgenden Sektionen dokumentieren Anwendung und Ent­wick­lung von ED. Alternativ steht die gesamte Dokumen­tation als einzelne Datei im CHM-Format MS-HTML-Help-Format (ed.chm) und im PDF-Format PDF-Format (ed.pdf) z.V.

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

Einführung

EDED entstand als Teilkomponente eines größeren Projektes. Gesucht wurde ein Texteditor unter Windows auf Basis der Programmier­sprache C und der Win32-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 23 KB groß (oder besser: klein) geraten ist.

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 Investitions­schutz bietet: auch in vielen Jahren werden Textdateien noch les- und schreibbar sein; ein komplexes und damit epochenabhä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.

In einem Roman finden sich auch nur vereinzelt Schrift­auszeich­nungen; zumeist werden nur Absätze und ggf. Einrückungen verwendet. 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 Windows-Betriebs­system. Getestet wurde die Einsatz­fähigkeit von ED unter den Betriebs­systemen Windows 2000 und XP. Dies schließt nicht aus, daß ED unter früheren Versionen des Betriebs­systems 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 Header-Dateien fr.h, st.h, ut.h, res.h, top.h und für LCC lcc.h sowie die Ressourcendatei ed.rc und die Bilddatei ed.ico. 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-Projekt für Kommandozeile unter BCC, LCC oder Visual C

ED-Projekt für C-Builder-IDE (bereitgestellt von Gerhard Behnke)

ED-Projekt für MingW/Code:Blocks-IDE (bereitgestellt von Gerhard Behnke)

Ausführbare Datei

Wer ED nicht selbst kompilieren will, kann das Programm als ZIP-Archiv (MD5) herunterladen. Empfehlenswert ist die anschließende Viren-Prüfung und MD5-Kontrolle der ausführbaren Datei.

Dokumentation

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

Installation und Deinstallation

Im Gegensatz zu vielen Windows-Programmen, die sich mehr oder weniger fest mit dem System verdrahten, erzeugt ED...

  1. keine Dateien außerhalb seines Datei-Ordners und
  2. keine Änderungen an Systemdateien (Registry etc.)

Das bedeutet, zur Installation ist ED nur in einen Ordner zu kopieren, z.B. unter c:\Programme. Falls der Benutzer Einstellungen bleibend speichern will, erzeugt ED im selben Ordner noch eine Konfigurationsdatei namens ed.ini. Zur Deinstallation von ED reicht die Löschung von ed.exe und (ggf.) ed.ini.

Funktionsumfang

EDED ähnelt funktional dem Editor von Windows XP. 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. 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. 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 aber beheben und das Programm wandert wieder in eine voll funktionale Normal­ansicht. Da es jedoch für viel Heiterkeit sorgte, als diese Merk­würdig­keit das erste Mal auffiel, wurde der Fehler nicht behoben: „It's not a bug, it's a feature.“

Maus

Die Maus­steuerung von ED entspricht ebf. der des Betriebs­system­editors. Beim Rechtsklick (für Rechtshänder) auf den Text wird ein Kontextmenü offeriert.

Konfigurationsdatei

Speichert der Benutzer Einstellungen in ED, legt dieser in seinem Pro­gramm­verzeichnis eine Datei 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.

Konfigurationseinträge von ed.ini
EintragBeispielwertKommentar
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.

Entwicklungs­grundlage und Aufbau der Quelltexte

ED basiert nur auf der Programmier­sprache C, auf der Win32-API und setzt keine MFC o.ä. Biblio­theken voraus. Somit sollten die Quelltexte mit jedem C-Compiler problemlos übersetzt werden. Danken möchte ich an dieser Stelle den Autoren im Internet, deren Ansätze mich bei der Ent­wick­lung von ED inspiriert haben.

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) BCC32 V5.5.1 (69 KB), LCC V3.8 (23 KB) und MSC V15.0 / Visual C 2008 (67 KB).

Wer keine Lust auf komplexe Entwicklungs­umgebungen hat oder aber nur über einen älteren Rechner verfügt, kann mit den o.g. Befehlen auf der Kommandozeile den Editor selbst kompilieren. Hierfür sind entweder die Programmpfade von Compiler, Linker und Ressourcen-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 anderweitig bekannt ist. Falls ein Pfad Leerzeichen enthält, ist er in Anführungs­zeichen einzufassen. Die Groß- und Klein­schreibung der aufgeführten Schalter und evt. Leerzeichen dazwischen müssen 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.

Kompilierung unter Borland C:

> 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,, ed.res

Kompilierung unter LCC:

> lc ed.c fr.c st.c ut.c ed.rc shell32.lib -s -subsystem windows

Kompilierung unter Visual C:

> 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> kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib comctl32.lib

Achtung: 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.

Entwicklungs­geschichte

Offen

Zurückgestellt

Erledigt

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-Biblio­theken und zugehörige Klassennamen

Vom Betriebs­system unterstützte RichEdit-Versionen

Nutzung

ED steht unter der BSD-Lizenz und darf daher frei verwendet werden. Es ist erlaubt, die Quelltexte oder Kompilate von ED zu kopieren, zu verändern und zu verbreiten, sofern der Rechtevermerk des Ursprungs­materials nicht entfernt wird. Eine Gewähr für die Verwendbarkeit oder Korrektheit von ED kann nicht gegeben, eine Haftung für Schäden nicht übernommen werden.

© 2009 Asdala. Alle Rechte vorbehalten.

© 2009, 2010 www.asdala.de:
Kontakt