%% LyX 1.6.3 created this file. For more info, see http://www.lyx.org/. %% Do not edit unless you really know what you are doing. \documentclass[german]{scrartcl} \usepackage{mathpazo} \usepackage{berasans} \renewcommand{\ttdefault}{cmtt} \renewcommand{\familydefault}{\rmdefault} \usepackage[T1]{fontenc} \usepackage[latin9]{inputenc} \setlength{\parskip}{\medskipamount} \setlength{\parindent}{0pt} \usepackage{babel} \begin{document} \title{Das Beste beider Welten} \label{beste} \author{Carsten Strotmann} \maketitle Hin und wieder vermisse ich die simple Welt der DOS--Betriebssystem--Zeit. Keine Frage, grafische Benutzungsoberflächen wie Gnome, KDE, MacOS X Finder oder die Windows--GUI haben ihre Vorteile. Aber wenn ich nur kurz ein Forth--Progrämmchen starten möchte, dann ist ein kleines DOS--System auf einem USB--Stick genau das Richtige. Kein minutenlanges Warten, dass mehrere hundert Megabyte an Programmen geladen sind, kein Anmelden, kein scheinbar endloses Rattern der Festplatte. Sondern anschalten und loslegen. \begin{multicols}{2} Arbeite ich dann mit einem (Real--Mode--)DOS-basierten Forth wie VolksForth, so zeigt sich schnell, dass die DOS--Umgebung im Gegensatz zu neueren Betriebssystemen Einschränkungen hat: segmentiertes Speichermodell, nur 1MB direkt adressierbar, Grafikzugriff abhängig von der Grafikkarte, kein Netzwerk und vieles mehr. Wäre es nicht schön, die Vorteile von DOS (einfaches System, schnelle Ladezeit) mit dem Komfort (für Programmierer) von Windows zu verbinden? Das ist nun zum Teil möglich, mit einem DOS/Win32API--Extender. Dieser Extender nennt sich HX DOS--Extender und kann als Freeware--Anwendung (inkl.\ Quellcode) von \url{http://www.japheth.de/HX.html} geladen werden. Was ist nun dieser HX DOS--Extender? Klassische DOS--Extender sind schon seit dem Erscheinen des i386--Prozessors bekannt (1986 [1]), diese alten Extender (Phar Lap, DOS/4GW) erlaubten es DOS--Programmen die {}``Proteced Mode'' des i386--Prozessors zu benutzen. Dies ermöglichte es DOS--Programmen, den erweiterten Speicherbereich der i386--Prozessoren zu nutzen. Der HX DOS--Extender implementiert zusätzlich einen \mbox{größeren} Teil der WIN32--API (Konsole IO, Memory Management, Threads, Netzwerk etc.). Weiterhin werden einige Windows--GUI--APIs unter DOS nachgebildet (DirectDraw, OpenGL). Mit dem HX DOS--Extender ist es möglich, Windows--32Bit--Konsolen--Programme und einige einfache GUI--Programme unter DOS auszuführen. Mit Forth--Systemen für Windows 32Bit ist es somit möglich, Programme zu erstellen, die sowohl unter DOS (mit dem HX--Extender), unter Windows 32Bit (Windows 95, 2000, XP, Vista, Windows 7) und auch unter Unix (mit WINE [2]) ausführbar sind. Neben Forth ermöglicht der HX--Extender es auch anderen Windows 32Bit Programmiersprachen, unter DOS ausgeführt zu werden (Rexx, Ruby, ja sogar Java und .NET/Mono). Die Installation des HX DOS--Extenders ist denkbar einfach. Die ZIP--Dateien des HX DOS--Extenders werden auf der Festplatte entpackt (z. B. nach c:\textbackslash{}HX), das Verzeichnis mit den ausführbaren HX--Programmen wird in den DOS--Suchpfad aufgenommen (z. B. C:\textbackslash{}HX\textbackslash{}BIN) und das HX Loader TSR (HXLDR32.EXE) wird in der AUTOEXEC.BAT in den Speicher geladen. Das HX Loader TSR klinkt sich in die Routine zum Laden und Ausführen von Programmen ein, erkennt Windows--32Bit--Programme und übernimmt dann das Laden anstelle des DOS--Systems. Folgende (Windows--)Forth--Systeme habe ich (exemplarisch) mit dem HX DOS--Extender unter FreeDOS [3] getestet: GNU Forth (GForth) Version 0.7.0 [4]: GForth benötigt Unterstützung für lange Dateinamen unter DOS, es muss {}``doslfn'' geladen sein. Dann lässt sich gforth.exe unter DOS starten. Laden von Quellcode--Dateien funktioniert. Aus einem mir nicht erklärlichen Grund wird bei jeder Texteingabe/Ausgabe auf die Festplatte zugegriffen, was sich bei größerer Textausgabe bemerkbar macht (words). BigForth Version 2.3.1 [5]: Die Datei {}``bigforth.exe'' lädt, gibt das Begrüßungsbanner aus und hängt sich dann aber auf. Der Kernel {}``forthk\textasciitilde{}1.exe'' lässt sich starten und dann auch benutzen. Allerdings lassen sich keine Quelldateien hinzuladen, es kommt die Fehlermeldung {}``libc.so.0 library not found''. Ein Artefakt der Linux/Unix--Abstammung dieser BigForth--Version. 4th [6] Version 4.5d: Das 4th--System für Windows--32Bit lässt sich über die Datei 4th.exe starten. Die Beispielprogramme lassen sich über 4th cx laden und ausführen. Ich habe einige der Beispielprogramme ausgeführt und konnte keine Fehler feststellen. SP--Forth Version 4.19 [7]: SP--Forth ist ein Open--Source--Forth--System für Windows und Linux aus Russland. Auch SP--Forth für Windows läuft ohne Probleme. Dass man mit dem HX DOS--Extender die DOS--Beschränkungen hinter sich gelassen hat, merkt man am Beispiel {}``benchmark.f'' im SP--Forth: Dieser Benchmark legt ein über 1MB großes Array im Speicher an und testet auch die Geschwindigkeit einiger Win32--API--Aufrufe. Der Benchmark läuft mit dem HX DOS--Extender ohne Probleme. Fertige Programme können per {}``SAVE'' als Win32--EXE--Dateien gespeichert und unter DOS (mit HX), Windows und Linux (mit WINE) ausgeführt werden. Fazit: Der HX DOS--Extender ermöglicht es, Forth--Programme und --Systeme unter DOS auszuführen, ohne auf Windows--Annehmlichkeiten wie 4GB Speicherzugriff, Netzwerkstack und natives Multithreading zu verzichten. Nur {}``Fenster'' gibt es nicht, aber die vermisse jedenfalls ich nicht immer. In der nächsten Ausgabe zeige ich Euch, wie man ein eigenes Linux so anpasst, das es (fast) so schnell in ein Forth--System bootet wie DOS. Bis dahin, viel Spaß mit Forth und dem HX DOS--Extender. \emph{Die Links zum Artikel finden sich auf Seite \pageref{best:links}} \end{multicols} %\section{Links}\label{best:links} %{}[1] \url{http://en.wikipedia.org/wiki/DOS\_extender}\\ %{}[2] \url{http://en.wikipedia.org/wiki/Wine\_(software)}\\ %{}[3] \url{http://en.wikipedia.org/wiki/Freedos}\\ %{}[4] \url{http://www.complang.tuwien.ac.at/forth/gforth/}\\ %{}[5] \url{http://www.jwdt.com/\textasciitilde{}paysan/bigforth.html}\\ %{}[6] \url{http://www.xs4all.nl/\textasciitilde{}thebeez/4tH/}\\ %{}[7] \url{http://spf.sourceforge.net/} \end{document}