%
% Dies soll in chapter 4 Prorammieren mit ...

\section{Aufsteigen von Version 3.3}

Leider ergibt sich durch die enorme Aufwertung des neuen Compilers
f"ur die Benutzer der alten Version 3.3 eine Menge Arbeit bei der
Umstellung auf die Versionen ab 4.0. Die wichtigsten Unterschiede in K"urze:

\begin{itemize}
\item Compiler-Optionen haben nun eine andere Syntax. Alle
 Optionen in der alten Syntax m"ussen umgestellt werden!

 Die Option {\tt LongAlign} ist nun stapelbar.

 Neu sind die Optionen {\tt EntryClear}, {\tt CaseChk} und {\tt NilChk}.

\item {\tt INLINE} wurde durch den leistungsf"ahigeren
  Befehl {\tt ASSEMBLE} ersetzt.

\item
 Alle Prozeduren haben die Registerkonvention \cite{RKMLib} zu
 befolgen. Dies betrifft nur alte {\tt INLINE}-Prozeduren. Durchsuchen
 Sie auch Ihre Quelltexte nach nunmehr unn"otigen {\tt SAVEREGS}- und
 {\tt LOADREGS}-Aufrufen!

\item Das Register A4 wird nicht mehr innerhalb der Prozeduren neu
 geladen. Daraus ergeben sich einige wichtige Aspekte:

  Der Stackframe globaler Prozeduren ist anders, weil das Register
A4 nicht mehr gerettet wird. Dadurch "andern sich auch die relativen
Offsets der Parameter. Dies betrifft ebenfalls nur {\tt INLINE}-Prozeduren.

Alle Prozeduren, die dem Betriebssystem zur Verf"ugung gestellt werden ---
 also InputHandler, TrapHandler, ExceptionHandler, Prozeduren f"ur RawDoFmt,
Kollisionsprozeduren, und so fort ---  m"ussen
umgeschrieben werden. Eigene Subtasks und Prozesse m"ussen unter
Umst"anden --- wenn sie
Zugriff auf globale Variablen ben"otigen --- umgestellt
werden. Nutzen Sie hierbei die Optionen "`{\tt LoadA4}"' und
"`{\tt SaveA4}"'!


\item {\tt Exec.UByte} und {\tt Exec.Byte} wurden durch
  die neu vordefinierten Typen
  {\tt SHORTINT} und {\tt SHORTCARD} ersetzt.
  Ebenfalls neu ist der Typ {\tt SYSTEM.SHORTSET}.

\item Das Zeichen "`\verb|\|"' hat in konstanten Zeichenketten nun eine
 spezielle Bedeutung (siehe \ref{refCStrings}).

\item F"ur Library-Moduln wird automatisch eine Objektdatei erzeugt.

\item Libraries bestehen nun aus {\cmsltt library\/\tt D} und
  {\cmsltt library\/\tt L}. Libraries der Betriebssystemversion 2.0 
  gibt es {\em zus"atzlich\/} als {\tt Opt\cmsltt library\/\tt L},
  um bei {\em vorsichtiger\/} Versionsabfrage die neuen
  M"oglichkeiten der Workbench 2.0 nutzen zu k"onnen,
  das Programm aber in eingeschr"ankter Weise auch unter 1.3
  ablaufen zu lassen.

\item Die Definition des Moduls {\tt Arts} ist stark ver"andert.
 {\tt TermProcedure}s,
 {\tt DebugProcedure}s, {\tt DetectCtrlC} und das Level-Konzept sind nicht mehr
 vorhanden. Sie wurden durch neue, leistungsf"ahigere
 Mechanismen ersetzt.

  {\bf Alle alten Moduln m"ussen angepasst und neu "ubersetzt werden!}

  Statt der {\tt TermProcedure}s gibt es neu das
  "`CLOSE"'-Konzept (\ref{refClose}).

  F"ur das Level-Konzept gibt es ein eigenes Modul "`Call"'.

  F"ur \keyctrl[C] und mehr existiert neu das Modul "`Break"'.

  Neu ist die Variable "`{\tt Arts.programName}"', die den Namen des eigenen
  Programmes sowohl beim Start vom CLI als auch von der Workbench zur
  Verf"ugung stellt.

\item Das Modul {\tt Terminal} wurde stark erweitert. Die Ausgaben werden
nun gepuffert, was einen erheblichen Geschwindigkeitsgewinn mit sich
bringt. Falls Ausgaben auf einer Zeile "`st"uckweise"' erfolgen sollen, ist
jeweils dazwischen nun ein Aufruf der Prozedur "`Flush"' einzuf"ugen,
damit der Pufferinhalt
ausgegeben wird. Dies geschieht sonst nur beim Zeilenvorschub, Puffer"uberlauf,
beim Aufruf von Lese-Prozeduren und am Programmende.

\item Weder Arts noch Arguments arbeiten mit {\tt Dos.DupLock()}.
Ein Anwender darf nur noch die Locks freigeben, die er selbst
erzeugt hat. Ein anderes Verhalten
der beiden Moduln 
hat in der Vergangenheit zu vielen Problemen gef"uhrt.
Bei der Umstellung ist besondere Vorsicht geboten.
Der Programmierer ist f"ur die Freigabe der erzeugten Locks selbst
verantwortlich; daf"ur existiert als Hilfe nun das Modul "`DosSupport"'.

\item Wegen des hochoptimierenden Linkers sind nun wieder sehr
grosse Moduln mit vielen Prozeduren vertretbar. Von einigen
Programmierern wurden Definitionsmoduln auf den nicht-optimierenden
Linker der Version 3.3 zugeschnitten und somit "`k"unstlich"' kleinere
Teilmoduln geschaffen, die eigentlich (aus struktureller Sicht)
zusammengeh"oren.
Man sollte seine eigenen Definitionsmoduln daraufhin durchsehen!

\end{itemize}

