%% 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 <quelldatei.4th> 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}
