home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.pasteur.org/FAQ/
/
ftp-pasteur-org-FAQ.zip
/
FAQ
/
de-amiga-faq
/
part2
< prev
next >
Wrap
Text File
|
1996-04-12
|
55KB
|
1,244 lines
Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!gatech!newsfeed.internetmci.com!EU.net!Germany.EU.net!informatik.tu-muenchen.de!kellerer
From: kellerer@informatik.tu-muenchen.de (Ignaz Kellerer)
Newsgroups: de.comp.sys.amiga.misc,z-netz.rechner.amiga.allgemein,de.answers,news.answers
Subject: German Amiga-FAQ (Haeufig gestellte Fragen) (Part 2 of 4)
Supersedes: <AmigaFAQg-2-824230830@informatik.tu-muenchen.de>
Followup-To: de.comp.sys.amiga.misc
Date: 9 Apr 1996 16:00:36 GMT
Organization: InternetNews at TUM, Technical University of Munich, Germany
Lines: 1219
Approved: news-answers-request@MIT.EDU
Distribution: world
Expires: Sunday, 12 May 96 18:00:33 MESZ
Message-ID: <AmigaFAQg-2-829065633@informatik.tu-muenchen.de>
References: <AmigaFAQg-1-829065633@informatik.tu-muenchen.de>
Reply-To: kellerer@informatik.tu-muenchen.de (Ignaz Kellerer)
NNTP-Posting-Host: hphalle3g.informatik.tu-muenchen.de
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Summary: German language Amiga-FAQ:
Haeufig gestellte Fragen und Antworten zum Amiga.
Neue Anwender sollten dies lesen!
Originator: kellerer@hphalle3g.informatik.tu-muenchen.de
Xref: senator-bedfellow.mit.edu de.comp.sys.amiga.misc:45077 de.answers:587 news.answers:69085
Posted-By: auto-faq 2.4
Archive-name: de-amiga-faq/part2
Last-modified: Dienstag, den 9. MΣrz 1996
Posting-Frequency: ever fourth week
Posting-Frequency: Alle vier Wochen
HΣufig gestellte Fragen (FAQ) zum Amiga [2/4]
----------------------------------------------
Dies ist der zweite Teil der Amiga-FAQ. (FAQ = Frequently asked questions)
Die Liste ist in Ascii-Format, damit sie von jedem gelesen werden kann.
Sie ist auch in AmigaGuide-, Dvi- und html-Format (fⁿr WWW-Server) erhΣltlich
als Teil des Amiga-FAQ-Archivs. (Datei docs/misc/AmigaFAQg.lha auf dem Aminet)
Bitte beachten Sie das Folgende:
- ─nderungen der letzten zwei Wochen sind markiert.
! diese Zeile bzw. dieser Abschnitt wurden geΣndert
+ diese Zeile ist neu
< vor dieser Zeile wurde etwas gel÷scht
- Ein Index ist am Ende dieses Teils. Wenn auch dies nicht
weiterhilft: Bitte schicken Sie mir eine E-Mail. Vielleicht kann
ich eine Antwort in die FAQ aufnehmen.
- VorschlΣge, BeitrΣge, Kritik und Bierflaschen sind sehr
willkommen. :-)
Ignaz Kellerer
Georg-Habel-Str. 11
81241 Mⁿnchen (Germany)
Tel. (+49) 089 / 885147
Internet: kellerer@informatik.tu-muenchen.de
==========================(Schnipp-Schnapp)===================================
Disclaimer
1 Hardware
1 Was sind 68EC020, 68EC030 und 68LC040?
2 Was ist ein mathematischer Coprozessor (FPU) ?
3 Kann ich eine 3.5'-Festplatte im A1200 verwenden?
2 Das Betriebssystem
1 Kann ich eine andere als die eingebaute Kickstart benutzen?
2 Die grafische OberflΣche des Amiga
1 Was ist MUI?
2 Iconsammlungen und Hintergrⁿnde
3 Was entspricht unter AmigaDOS dem . (Aktuelles Directory)?
4 Der Queue-Handler PIPE:
1 Verwendung von PIPE: in einer AmigaShell
2 Das Pipe-Kommando
3 Das Pipe-Kommando in der AmigaShell
4 Die _mchar-Variable
5 Bekannte Probleme
5 ARexx, die Programm-Steuerungs-Sprache
3 Grafik
1 Was hei▀t Chunky- und Planar-Display?
2 Was ist Doublebuffering?
3 Was fⁿr Monitore arbeiten am Amiga 1200 oder 4000?
4 Programmierung
1 Was ist die beste Dokumentation fⁿr Programmierer?
2 Was ist CATS?
3 Wo bekomme ich die Amiga-Include-Dateien?
4 Wie werde ich Developer?
5 Was fⁿr Compiler (und Assembler) gibt es?
6 Warum funktioniert keine Esc-Sequenz?
7 Kann ich AmigaBasic auf dem A1200 verwenden?
8 Wie lokalisiere ich mein Programm?
9 Wie erhΣlt man einen Zeiger auf das Fenster einer Konsole?
10 Was sind Pragmas?
11 Mein Compiler/Linker vermi▀t Symbole.
12 Wie erfahre ich, was fⁿr Funktionen es gibt?
13 Der GNU C Compiler: Allgemeine Informationen und Installation
1 Aktuelle Version
2 Hardwareanforderungen
3 Wer hat es gemacht?
4 Wo finde ich die gcc-Quelltexte?
5 Inline-Dateien
6 Wie konvertiere ich die Amiga-Libraries fⁿr den gcc?
7 Wie installiere ich den gcc?
8 Kompilieren
9 Wichtige Informationsquellen
5 Anwendungen
1 Text-Editoren
2 Was fⁿr Textverarbeitungsprogramme gibt es?
3 Desktop Publishing
4 Was ist TeX und wo bekomme ich es?
5 Gibt es PostScript-Interpreter auf dem Amiga?
6 Font Konzepte
1 Die Amiga Font Formate
2 Wo gibt es Amiga Fonts
3 Kommerzielle Font Hersteller
4 Nicht-Lateinische Zeichensaetze auf dem Amiga
5 Amiga Font Installation
6 Amiga Font Utilities
7 Das Erzeugen von Vektor-Fonts
8 Probleme und moegliche Loesungen
7 Wie bearbeite ich Nicht-Latin-Texte?
1 Japanische Editoren und Anzeigeprogramme
2 Chinesische Anzeigeprogramme
6 Online sein mit dem Amiga
7 Emulationen
1 Kann ich meinen Amiga unter Unix benutzen?
2 Ist es m÷glich, den Amiga als X11-Terminal zu benutzen?
3 Wie kann ich MS-Dos-Programme starten?
4 MsDos-formatierte Wechselplatten am Amiga verwenden
8 Verschiedenes
1 Gibt es eine Unix-Version von LhA?
2 Was sind Dateien, die mit ... enden?
3 Gibt es ein Programm wie Stacker, um die Hard-Disk zu packen?
4 Wo bekomme ich Fish-Disk xxx?
5 Wie fⁿllt man die Tintenkartuschen der HPDeskjet-Drucker nach?
9 Software-Quellen und andere Informationen?
1 Dateien und Datenbanken zur frei kopierbaren Software
2 Eine Sammlung von Testberichten
3 Empfangen von Dateien von einem FTP-Server
4 Empfangen von Dateien von einem Mail-Server
5 Empfangen von Dateien von einer Mailbox
6 Die Fish-PD-Serie
1 Die Amiga-Library-Disks
2 Die Fresh-Fish-Serie
7 Wie kann ich MS-Dos-Disketten lesen und schreiben?
8 Wie transportiere ich sehr gro▀e Dateien
9 Diskussionen ⁿber Mail
10 Andere FAQ's
Das Amiga-FAQ-Archiv
BeitrΣge zur Amiga-FAQ
Danksagungen
Index
4 Programmierung
****************
In diesem Kapitel finden vermutlich nur Programmierer Interessantes.
4.1 Was ist die beste Dokumentation fⁿr Programmierer?
======================================================
Die beste verfⁿgbare Dokumentation sind sicherlich die RKM's (ROM
Kernel Manuals, die schwarzen) von Commodore. Sie werden von
Addison-Wesley ver÷ffentlicht.
The Amiga ROM Kernel Manual: Libraries, ISBN 0-201-56774-1
The Amiga ROM Kernel Manual: Devices, ISBN 0-201-56775-X
The Amiga ROM Kernel Manual: Includes and Autodocs, ISBN
0-201-56773-3
The Amiga Hardware Manual, ISBN 0-201-56776-8
The Amiga User Interface Style Guide, ISBN 0-201-57757-7
Vor allem die Libraries sind ein Mu▀. Weniger nⁿtzlich sind die
Includes und Autodocs: Sie sind auf Diskette als Online-Hilfe sicher
nⁿtzlicher. Siehe Include-Dateien.
AmigaDOS wird in diesen Bⁿchern kaum behandelt. Die Autodocs geben
einige Informationen, aber um tiefer einzusteigen braucht man das
The AmigaDOS Manual, 3rd Edition, ISBN 0-553-35403-5
ebenfalls von Commodore, das von Bantam Books herausgegeben wird.
Eine gute Wahl ist auch
The Amiga Guru Book
von Ralph Babel. Das Buch beginnt mit einem ca. 250-seitigen
allgemeinen ▄berblick ⁿber verschiedenste Aspekte der Programmierung
des Amiga. Fⁿr AnfΣnger dⁿrften vor allem die Abschnitte ⁿber die
Amiga-Datentypen sowie die Amiga-Includes und die amiga.lib interessant
sein, aber auch Erfahrene finden hier mit Sicherheit noch Neues, was
zum Teil nicht einmal in den RKM's enthalten ist. Den gr÷▀ten Teil
des Buches nehmen aber 500 Seiten nur zu AmigaDOS ein. Dieser Teil ist
meines Erachtens der wichtigste, weil das AmigaDOS-Manual der
schlechteste Teil der offiziellen Dokumentation ist. Das Buch ist sehr
dicht geschrieben und deshalb weniger leicht lesbar als die RKM's, aber
ich empfehle es als Zusatz und vor allem anstelle des AmigaDOS-Manuals.
(Allerdings ist das Guru-Buch kein Ersatz fⁿr die Libraries & Devices,
die hier nicht behandelt werden.) Unglⁿcklicherweise hat das Buch
keine ISBN-Nummer und ist deshalb nur bei den folgenden Adressen
erhΣltlich:
Almathera Systems Limited
Southerton House
NBG USA, Inc. Boundary Business Court
482 Holly Avenue 92-94 Church Road
St. Paul, MN 55102 Mitcham, Surrey CR4 3TD
USA England
Voice: +1 (612) 290 9447 Voice: +44 181 687 0040
Fax: +1 (612) 290 9449 Fax: +44 181 687 0490
E-Mail: <almathera@cix.compulink.co.uk>
Stefan Ossowskis Schatztruhe
Hirsch & Wolf OHG Gesellschaft fⁿr Software mbH
Mittelstra▀e 33 Veronikastra▀e 33
D-56564 Neuwied D-45131 Essen
Germany Germany
Voice: +49 (2631) 8399-0 Voice: +49 (201) 788778
Fax: +49 (2631) 8399-31 Fax: +49 (201) 798447
E-Mail: <stefano@tchest.e.eunet.de>
Someware
27 rue Gabriel PΘri
59186 Anor
France
Voice: +33 27596000
Fax: +33 27595206
E-Mail: <didierj@swad.someware.com>
Fⁿr weitere Informationen empfehle ich auch die FAQ von Marc Atkins
ⁿber Bⁿcher zum Thema Amiga, die alle 4 Wochen in
`comp.sys.amiga.misc' erscheint.
4.2 Was ist CATS?
=================
Dies ist eine Abteilung von Commodore West Chester, die frⁿher
`Commodore Amiga Technical Support' hie▀ und spΣter in `Commodore
Application and Technical Support' umbenannt wurde. Die Mitglieder
arbeiten unabhΣngig von der Entwicklungsabteilung, aber eng mit ihr
zusammen, und versuchen, Entwicklern au▀erhalb von Commodore beim
Erstellen guter Amiga-Anwendungen zu helfen, sei das eine Hard- oder
Software. Dazu hat CATS eine Menge an Informationen und Tools
gesammelt, auf Floppy, CD oder Papier. Ein gro▀er Teil dieses
Materials ist auch der Allgemeinheit, d. h. fⁿr Nicht-Developer
zugΣnglich. Aber bitte CATS nicht mit einer Hotline verwechseln!
Amerikaner k÷nnen das Material von
CATS
Commodore Electronics Limited
950 Rittenhouse Road
Norristown, PA 19403
bekommen, der Distributor fⁿr ganz Europa ist die
Fa. Hirsch & Wolf
Mittelstr. 33
56564 Neuwied
Tel. 02631/83990
Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
4.3 Wo bekomme ich die Amiga-Include-Dateien?
=============================================
Der einzige legale Weg, die Include-Dateien und die AutoDocs zu
bekommen (und Sie sollten sie bekommen, sie sind *sehr* nⁿtzlich!),
ist, Developer zu werden (siehe siehe Developer) oder das sogenannte
`NDU' (Native developers update kit, auch als `NDUK', `NDK' bekannt oder
`ADU' fⁿr Amiga Developer Update) bei CATS zu kaufen. Siehe CATS. Es
kostet etwa 50DM, was sicher ein fairer Preis ist. Dabei handelt es
sich um ein 5-Disketten-Set, das neben den aktuellen Includes und
AutoDocs auch Tools fⁿr Programmierer, z.B. Enforcer, Mungwall, Sushi
und die debug.libg (zum Debuggen) sowie anderes, z.B. CatComp (siehe
Lokalisierung) oder Report (fⁿr Bug-Reports oder VorschlΣge an
Commodore) enthΣlt. Die aktuelle Version ist 3.1 und fⁿr
Programmierer beinahe obligatorisch.
Wem die Includes genⁿgen, der kann diese ⁿber ein Update seines
Compilers (nur kommerzielle Compiler) oder von den Fish-CDs bekommen.
Siehe Fish-CD.
4.4 Wie werde ich Developer?
============================
Um Developer zu werden, braucht man die `ADSP'-Antragsformulare
(Amiga developer support program). Um diese zu bekommen, sollte man
einen Brief an die lokale Commodore-Niederlassung schreiben und nach
diesen Papieren fragen, in denen das weitere erklΣrt wird. In
Deutschland ist die Adresse folgende:
Commodore
Lyoner Stra▀e 38
60528 Frankfurt
Es gibt drei verschiedene Arten von Developern:
*Registered*
Hier bekommt man vor allem Zugang zum CBMNET (eine Art
Commodore-internes Usenet), ⁿber das man direkt mit anderen
Entwicklern auch von Commodore selber ⁿber seine Probleme
diskutieren kann. Die Jahresgebⁿhr betrΣgt 150 DM, die einmalige
Aufnahmegebⁿhr 50 DM.
*Certified*
Dies ist die interessanteste Klasse: Man bekommt von der meisten
Systemsoftware die aktuellen Beta-Versionen (z. B. Kickstart und
Workbench) sowie die dazugeh÷rigen Includes und AutoDocs.
Certifieds bekommen aber nicht jede Beta und in der Regel auch
keine Hardware-Beta. Man bezahlt 400 DM pro Jahr dafⁿr und eine
einmalige Aufnahmegebⁿhr von 100 DM.
*Commercial*
Kommerzielle Entwickler bekommen im wesentlichen dieselben
Informationen wie die "Zertifizierten", allerdings kompletter,
sprich auch Beta-Hardware, und etwas frⁿher. Dies hat auch seinen
Preis: 700DM pro Jahr plus einmalige Aufnahmegebⁿhr von 100DM.
Die Preise und die angebotenen M÷glichkeiten k÷nnen von Land zu Land
verschieden sein, auch gibt es meines Wissens nicht in allen LΣndern
den "Registered". Ein guter Tip ist es, eine Gruppe zu bilden und damit
die Kosten zu reduzieren.
Alle Entwickler mⁿssen Non-disclosure agreements (`NDA')
unterzeichnen. Diese besagen, da▀ sie ⁿber die erhaltenen
Informationen au▀erhalb von speziell dazu freigegebenen Orten oder
KanΣlen nicht einmal zu anderen Entwicklern sprechen dⁿrfen, so lange
sie nicht die explizite Erlaubnis dazu von Commodore haben.
4.5 Was fⁿr Compiler (und Assembler) gibt es?
=============================================
Es gibt viele Programmiersprachen auf dem Amiga, kommerzielle
Compiler ebenso wie frei kopierbare. Ich m÷chte nur diejenigen
aufzΣhlen, die mir bekannt sind oder die ich aus einem anderem Grund
fⁿr erwΣhnenswert halte.
*Assembler*
Alle C-Compiler beinhalten einen Assembler. Frei kopierbar und
zuverlΣssig sind A68K und PhxAss. (Aminet, Directory `dev/asm'
oder Fish-Disks 521 bzw. 906)
Kommerzielle Assembler sind MaxonASM, OMA3.0 und DevPack3.14.
*Basic*
Derzeit sind folgende kommerzielle Basic-Compiler/Interpreter
verfⁿgbar: BlitzBasic2, Amos und MaxonBasic3.
*C*
*C++*
Frei kopierbare C-Compiler sind der `gcc' (der sein eigenes
Directory `dev/gcc' auf dem Aminet hat) und die Probeversion (mit
der man aber schon eine ganze Menge anfangen kann) von `Dice' (per
FTP von `ftp.uni-paderborn.de', Directory
`/news/comp.binaries.amiga/volume91/languages' oder auf Fish disk
491). Der gro▀e Vorteil von gcc ist, da▀ man ihn auf der ganzen
Welt und auf nahezu jedem Computer findet. Ein weiterer Vorteil
ist, da▀ er sogar einen C++-Compiler enthΣlt! Aber er ist
langsam und ben÷tigt 4MB RAM oder mehr. Siehe Der GNU C Compiler.
Siehe Mail-Listen.
Kommerzielle C-Compiler sind `Aztec-C', `Dice', `SAS-C' und
`MaxonC++'. `Aztec-C' wird jedoch leider nicht mehr
weiterentwickelt. Was die kommerziellen Compiler auszeichnet,
sind ihre hervorragenden Source-Level-Debugger, die den anderen
fehlen.
SAS hat leider angekⁿndigt, den Amiga-Compiler nicht weiter zu
unterstⁿtzen. Verkauft wird er aber noch, und da er gegenwΣrtig
noch voll aktuell ist und sogar einen Crosscompiler von C++ in C
enthΣlt (der vom Debugger unterstⁿtzt wird), ist er meines
Erachtens derzeit das beste Angebot, insbesondere zu dem Σu▀erst
gⁿnstigen Preis von 184.-DM fⁿr Studenten und Besitzer anderer
Compiler. In Deutschland erhΣlt man SAS/C bei
SAS Institute, Inc. SAS Institute GmbH
Book Sales Postfach 10 53 40
SAS Campus Drive 69043 Heidelberg
Cary, NC 27513 Deutschland
USA
Phone: (919)677-8000 Telefon: 06221/4160
EMail: sasdsb@vm.sas.com EMail: eurdoc2@vm.sas.com
Dice bietet wie SAS einen Sonderpreis fⁿr Schⁿler und Studenten
von ca. 130.-DM. Der Compiler ist stabil und vor allem sehr
schnell. Der gr÷▀te Nachteil von Dice ist (verglichen mit den
anderen kommerziellen Compilern) der Debugger, ein sogenannter
Source-Line-Debugger: Dies bedeutet, da▀ man den Quelltext sieht
und das Programm Schritt fⁿr Schritt abarbeiten kann, aber leider
nur Speicher und nicht etwa bestimmte Variablen anzeigen kann.
Informationen ⁿber Dice: info@oic.COM.
Comeau C++ ist ebenfalls ein Crosscompiler, was an und fⁿr sich
kein Problem wΣre. Aber Comeau C++ hat keinen integrierten
C-Compiler, man braucht also zusΣtzlich SAS-C, Aztec-C oder Dice.
Dafⁿr ist er kompatibel zu AT&T cfront 3.0, unterstⁿtzt
Exceptions und lΣuft wie `gcc' auf vielen verschiedenen Systemen.
In Deutschland wird auch Maxxon C++ angeboten, ⁿber das ich
nichts sagen kann. Beide Compiler sind kommerziell. Comeau's
Adresse ist:
Comeau computing
91-34, 120th Street
Richmond Hill, NY, 11418-3214
USA
EMail: Greg Comeau, comeau@bix.com
MaxonC++ ist sowohl ein C++ als auch ein C Compiler. Es gibt eine
Light-Version fⁿr ca. 190 DM und eine Developer-Version fⁿr ca.
450 DM. Die Developer-Version entspricht dem AT&T-Standard 3.0.
Maxon-Light enthΣlt einen Compiler und einen Editor. Developer
umfa▀t einen Source-Level-Debugger, eine Amiga-Klassenbibliothek
und Hot Help mit Dokumenten zu den Amiga-Libs. Da es ein
deutsches Produkt ist, sind Compiler und Dokumentation in Deutsch
gehalten. Der Compiler besitzt einige kleinere Fehler, trotzdem
kann man mit ihm gut arbeiten.
*Forth*
JForth soll eine exzellente Forth-Version sein. Unter anderem
enthΣlt es objektorientierte Erweiterungen, ein volles
Amiga-Interface und einen Anwendungsgenerator. Es ist erhΣltlich
von:
Delta Research
P.O. Box 151051
San Rafael, CA 94915-1051
Phone: (415) 453-4320
EMail: Phil Burk, phil@ntg.com
Mike Haas, haas@starnine.com
*Fortran*
(Seufz! Es gibt immer noch Leute, die es brauchen :-<) Frei
kopierbar sind BCF (Fish disk 470) und f2c, der Fortran in
C-Quelltext umwandelt. (Aminet, Directory `/dev/lang'). Ein
kommerzieller Compiler ist von ABSoft erhΣltlich. Allerdings sind
dies alles nur Fortran-77-Compiler, es gibt keine
Fortran-90-Compiler auf dem Amiga.
*Lisp*
Frei kopierbare Lisp-Interpreter sind XLisp (Fish-Disk 181) und
OakLisp (Fish-Disks 519 und 520) und CLISP
(`/pub/lisp/clisp/binaries/amiga' at
`ma2s2.mathematik.uni-karlsruhe.de'). Auch Compiler gibt es: Gambit
(Fish-Disks 764 und 765) sowie Scheme-to-C (Fish-Disks 556-558).
Von Interesse ist vielleicht eine Mail-Liste: Senden Sie dazu eine
Mail mit dem Wort `Subscribe' an `amigalisp@contessa.phone.net'.
*Prolog*
`/dev/lang/UNSWProlog.lha' und `dev/lang/sbp3_1e' auf dem Aminet
sowie `SBProlog' auf der Fish-Disk 141 und `SBProlog' auf der
Fish-Disk 145 sind frei kopierbare Prolog-Interpreter.
*Modula-2*
M2Amiga wird in Europa und Benchmark Modula-2 in den USA
angeboten. Beide sollen sehr gut sein und sowohl ⁿber gute
Source-Level-Debugger als auch eine umfangreiche Bibliothek
verfⁿgen. Besonders M2Amiga wird sehr gut unterstⁿtzt durch eine
deutsche Benutzergruppe (AMOK), die z.B. eine eigene PD-Serie
anbieten. Siehe Mail-Listen.
M2Amiga bekommt man bei
A+L AG
Daderiz 61
2540 Grenchen
Schweiz
Tel.: +41/65/52 03-11
Fax: -79
und Benchmark Modula-2 ist erhΣltlich von:
Armadillo Computing
5225 Marymount Drive
Austin, Texas 78723
USA
Phone/FAX: 512/926-0360.
EMail: Jim Olinger, jolinger@bix.com
*Oberon*
*Oberon-2*
Es gibt zwei Oberon-2-Compiler fⁿr den Amiga: AmigaOberon ist wie
M2Amiga von A+L und kommerziell. Der Compiler kommt mit einer
integrierten Entwicklungsumgebung (incl. freikonfigurierbarem
Editor) und umfangreicher Modulbibliothek. Library Linker zum
einfachen Erzeugen von AmigaOS Shared Libraries sowie Run-time
Source-Level-Debugger sind ebenfalls erhΣltlich.
Oberon-A ist ein Freeware-Compiler, allerdings erst in einer
Beta-Version, insbesondere sind die Modulbibliotheken
unvollstΣndig. (Quelle: Aminet, Directory `dev/obero'). Siehe
Mail-Listen.
Fⁿr beide Compiler gibt es Unmengen von Modulen und Bsp.-Sourcen
auf AMOK-Disks.
ZusΣtzlich zu den beiden Standalone-Compilern, die vor allem zum
Entwickeln von AmigaOS-Applikationen geeignet sind, existiert noch
eine Portierung des Oberon System V4, das ebenfalls einen Oberon-2
Compiler beinhaltet. Das Oberon System lΣuft auf dem Amiga als ein
AmigaOS-Task auf einem eigenen Screen. Hiermit kann man Software
entwickeln, die auch auf allen anderen Implementierungen des Oberon
System V4 (z.B. fⁿr Macintosh, Windows oder Sparc) nahezu ohne
jede ─nderung lauffΣhig ist.
*Pascal*
Es gibt einen PD-Compiler namens PCQ (Aminet, Directory `dev/lang'
oder Fish-Disk 511), der allerdings kein voller Pascal-Compiler
ist und dem sehr wesentliche Dinge fehlen. P2C konvertiert Pascal
in C und ist auf der Fish-Disk 341 zu finden. (Aminet:
`/dev/misc/p2c120.lha') Ferner gibt es zwei kommerzielle Compiler
namens HiSoft-Pascal (von der gleichnamigen Firma) und KickPascal
von Maxxon. HiSoft und P2c behaupten, kompatibel zu Turbo-Pascal
5.0 zu sein. HiSoft hat au▀erdem einen guten
Source-Level-Debugger.
4.6 Warum funktioniert keine Esc-Sequenz?
=========================================
Viele Drucker kommen mit einem Handbuch, das erklΣrt, welche
Esc-Sequenzen welche Funktion ausl÷sen. Aber wenn man diese Sequenzen
dann einmal ausprobiert, passieren oft merkwⁿrdige Sachen, nΣmlich
entweder gar nichts oder etwas ganz anderes, als geplant war. Und das
hat auch einen Grund, nΣmlich die Amiga-Druckertreiber. Diese Treiber
sind so gebaut, da▀ sie nur einen bestimmten Satz `ANSI-Esc-Sequenzen'
verstehen, nicht die (verschiedenen) druckereigenen, von den
verschiedenen Druckerherstellern definierten. Der Sinn dabei ist, da▀
jede Anwendung auf dem Amiga nur diesen einen Standardsatz an Sequenzen
verwendet und so nicht zu wissen braucht, welcher Drucker tatsΣchlich
angeschlo▀en ist. Der Druckertreiber ⁿbersetzt dann diese
Standardsequenzen in die druckereigenen. Eine Liste der verfⁿgbaren
ANSI-Esc-Sequenzen findet sich im aktuellen Workbench-Handbuch (oder in
Σlteren AmigaDOS-Handbⁿchern). Wenn Du nun eine Steuersequenz an den
Drucker schicken willst, die es nicht als ANSI-Sequenz gibt, so hast Du
zwei M÷glichkeiten, dies doch zu erreichen:
1. Umgeh den Druckertreiber (der erfolglos versuchen wⁿrde, die
Sequenz zu interpretieren oder zu ⁿbersetzen) und sende die
Ausgabe *nur* fⁿr die LΣnge dieser Sequenz an `PAR:' (bzw.
`SER:'). Dabei mu▀ man die DruckerausgabekanΣle umstΣndlich oft
umschalten, und man mu▀ wissen, wo der Drucker angeschlossen ist
(`PAR:' oder `SER:').
2. Benutze eine spezielle ANSI-Sequenz, genau fⁿr diesen Fall
gedacht:
`Esc[<n>"<x>'
wobei `<n>' die dezimal geschriebene Anzahl an Bytes in der Sequenz
`<x>' ist, die gerade die spezielle Drucker-Sequenz enthΣlt. Diese
ANSI-Sequenz sagt dem Druckertreiber, da▀ er die nΣchsten `<n>'
Bytes nicht interpretieren oder ⁿbersetzen soll.
Aber beide Methoden haben einen grossen Nachteil, wenn sie in
einem Anwendungsprogramm verwendet werden: Man verliert die
DruckerunabhΣngigkeit! Solange man sich an die ANSI-Sequenzen hΣlt,
kann man jeden Drucker der Welt ansteuern, solange es einen
Amiga-Druckertreiber fⁿr ihn gibt. Wenn man anfΣngt, druckereigene
Sequenzen zu verwenden, ist das Programm an diesen einen Druckertyp
gebunden und mit keinem anderen benutzbar (oder man mⁿ▀te einige
dutzend neue Druckertreiber fⁿr dieses Programm erstellen).
Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
4.7 Kann ich AmigaBasic auf dem A1200 verwenden?
================================================
AmigaBasic wurde (als einziges Amiga-Programm) von Microsoft
entwickelt und ist entsprechend fehlerhaft.
Man kann es auf dem A1200 trotzdem zum Laufen bringen, wenn man
folgendes beachtet:
1. NoFastMem starten (also FastMem ausschalten).
2. Im Audio Prefs den Ton abstellen.
3. M÷glichst SUBs vermeiden und stattdessen GOSUBs verwenden, dann
ist die KompatibilitΣt zu neuen Prozessoren h÷her.
4. Es gibt einen Patch, den man zu Beginn von AmigaBasic starten
sollte:
---------------------------------- CUT HERE -------------------------------
`" AmigaBASIC patch to let AmigaBASIC work on A1200 and other newer machines.
`" Start at the beginning of AmigaBASIC or invoke AmigaBASIC with this program
OPEN "AMIGABasic" AS 1 LEN=1
FIELD #1,1 AS d$
i&=&HF3*256+&H87 : PRINT i&
GET #1,i& : a$=HEX$(ASC(d$))
PRINT a$
IF a$="79" THEN
LSET d$=CHR$(&H78)
PUT #1,i&
END IF
CLOSE 1
---------------------------------- CUT HERE -------------------------------
Andreas Mixich, humpty@tomate.tng.oche.de
4.8 Wie lokalisiere ich mein Programm?
======================================
Nehmen wir an, wir wollen ein `HelloLocalWorld.c' schreiben. Das
letztendliche Programm sieht dann ungefΣhr so aus:
#include "HelloLocalWorld_Cat.h"
#include <clib/exec_protos.h>
struct Library *LocaleBase;
void main(int argc, char *argv[])
{
/* ╓ffne die locale.library. (Kein Abbruch, wenn sie nicht
da ist, weil dann einfach die eingebauten Strings verwendet
werden. Aus diesem Grund auch keine Verwendung des
AutoOpening, auch wenn es der Compiler beherrscht.)
*/
LocaleBase = OpenLibrary("locale.library", 38);
OpenHelloLocalWorldCatalogs(NULL, NULL);
printf(GetString(MSG_Hello));
CloseHelloLocalWorldCatalog();
if (LocaleBase) CloseLibrary(LocaleBase);
}
Die Funktion GetString prⁿft, ob die gewⁿnschten Kataloge
vorhanden sind und liefert einen Zeiger auf einen String, entweder den
eingebauten oder den Katalogstring. (In unserem Fall den deutschen
String.)
Der Hauptunterschied zum gewohnten HelloWorld.c ist also (abgesehen
von der minimalen Initialisierung und dem Gegenstⁿck am Programmende,
das bei den meisten modernen Programmiersprachen oder unter C mit Hilfe
des FlexCat-Paketes sogar auch noch entfΣllt), Strings durch einen
Funktionsaufruf zu ersetzen. Man braucht also eine Datei
`HelloLocalWorld_Cat.c', die die Funktionen OpenHelloLocalWorld,
GetString, CloseHelloLocalWorld_Cat.h und die eingebauten Strings
enthΣlt (dies k÷nnte ein Array sein, das unter anderem
array[MSG_Hello] = "Hello, local world.\n";
enthΣlt) und ein Includefile `HelloLocalWorld_Cat.h', das die ID's wie
MSG_Hello definiert. Es ist nicht n÷tig zu wissen, wie diese Dateien
intern arbeiten, insbesondere ben÷tigt man auch keine Kenntnis der
`locale.library'!
Dazu gibt es verschiedene Kataloggeneratoren (im Folgenden KG),
nΣmlich `CatComp' (nur fⁿr Developer), `KitCat' (nur deutsche
Dokumentation, was hierzulande kein Problem ist), `MakeCat' (das ich
nicht kenne) und `FlexCat' (das ich empfehle, einerseits, weil es sehr
flexibel im erzeugten Source ist und z.B. Lokalisierung unter 2.0 sowie
beliebige Programmiersprachen unterstⁿtzt, selbst Amiga-E, Cluster,
Pascal, ... und andererseits, weil es von mir ist ;-) ), die diese
Dateien sowie die Kataloge erzeugen. (Der obige Quelltext k÷nnte je
nach KG leicht unterschiedlich aussehen.) Siehe Aminet, directory
`dev/misc'.
Wie funktionieren diese KGs? ZunΣchst erzeugt man eine sogenannte
`Katalogbeschreibung' (`Catalog description'), die so aussehen k÷nnte:
; Mit einem Semikolon beginnende Zeilen sind Kommentare
# language english
; die Sprache der eingebauten Strings
# version 0
; die Katalogversion (0 = beliebig)
MSG_Hello (1/15/30)
Hello, local world
Jeder String wird durch zwei Zeilen wie die letzten beiden definiert:
MSG_Hello ist die String-ID, (1/15/30) gibt den Wert der ID sowie die
minimale und maximale LΣnge an. (Diese Argumente k÷nnen auch
weggelassen werden, in welchem Fall einfach die nΣchste freie ID
verwendet wird.)
Nun schreiben wir das Programm. Sobald es fertig ist, wird mit dem
KG eine sogenannte Katalogⁿbersetzung (eine fⁿr jede andere Sprache
als die eingebaute) erzeugt, die so aussehen k÷nnte:
; Mit einem Semikolon beginnende Zeilen sind Kommentare
## language deutsch
; the catalog language
## version $VER: Deutsch.catalog 1.0 (22.12.93)
; the catalog files version string
MSG_Hello
; Hello, local world
Beachten Sie die leere Zeile nach der String-ID! (Die Argumente von ##
language und ## version wΣren vielleicht leer.) Hier mⁿssten jetzt
die deutschen Strings eingesetzt werden. Mit dem KG wird daraus dann
der eigentliche `Katalog' erzeugt. (Beachten Sie auch, da▀ hier die
Angaben ⁿber String-ID und StringlΣnge fehlen: Sie werden aus der
Katalogbeschreibung ⁿbernommen.
Wenn das Programm verΣndert wird (neue Strings, andere LΣngen) und
die Katalogbeschreibung sich damit ebenfalls Σndert, dann kann der KG
analog benutzt werden, um auch die Katalogⁿbersetzung und damit den
Katalog auf den neuesten Stand zu bringen.
4.9 Wie erhΣlt man einen Zeiger auf das Fenster einer Konsole?
==============================================================
Die folgende Funktion liefert den Window-Zeiger eines CON-Fensters.
Sie kann unter allen Versionen des Amiga-OS ausgefⁿhrt werden.
struct Window *getConWindowPtr(BPTR fh)
{
struct Window *w;
struct FileHandle *cfh;
struct StandardPacket *sp;
struct InfoData *id;
struct MsgPort *mp;
w = NULL;
if ((cfh = BADDR(fh))->fh_Type != NULL) {
if (sp = AllocMem(sizeof (struct StandardPacket),
MEMF_PUBLIC | MEMF_CLEAR)) {
if (id = AllocMem(sizeof (struct InfoData),
MEMF_PUBLIC | MEMF_CLEAR)) {
if (mp = CreatePort(NULL, 0)) {
sp->sp_Msg.mn_Node.ln_Name = (char *) &sp->sp_Pkt;
sp->sp_Pkt.dp_Link = &sp->sp_Msg;
sp->sp_Pkt.dp_Port = mp;
sp->sp_Pkt.dp_Type = ACTION_DISK_INFO;
sp->sp_Pkt.dp_Arg1 = MKBADDR(id);
PutMsg(cfh->fh_Type, &sp->sp_Msg);
(void) WaitPort(mp);
(void) GetMsg(mp);
if (sp->sp_Pkt.dp_Res1)
w = (struct Window *) id->id_VolumeNode;
DeletePort(mp);
}
FreeMem(id, sizeof (struct InfoData));
}
FreeMem(sp, sizeof (struct StandardPacket));
}
}
return w;
}
Anmerkungen:
* Auf ein CON-Fenster direkt zuzugreifen kann Konflikte mit Aktionen
des CON-Handlers hervorrufen. Seien Sie vorsichtig!
* Um den Window-Zeiger einer CLI-Konsole zu erhalten, ⁿbergibt man
ein durch Open("*", MODE_OLDFILE) gewonnenes FileHandle an obige
Funktion.
* Das Ergebnis der obigen Funktion kann sehr wohl NULL sein, etwa im
Falle eines AUX-Handlers oder falls ein AUTO-CON-Handler sein
Fenster nicht ÷ffnen kann.
* Schickt man ein ACTION_DISK_INFO-Paket an einen AUTO-CON-Handler
(2.0+), so verliert dessen Fenster seine speziellen
AUTO-Eigenschaften (es kann also nicht mehr durch das BetΣtigen
des Close-Gadgets geschlossen werden), weil der in id_VolumeNode
gelieferte Window-Zeiger gⁿltig bleiben mu▀.
* Alles in allem: Verwenden Sie diese Funktion nicht. :-)
Weitere Informationen finden Sie auf den Seiten 273, 276, 435, 463,
485 und 629 im "Amiga Guru Book" (siehe Dokumentation).
Ralph Babel, rbabel@babylon.pfm-mainz.de
4.10 Was sind Pragmas?
======================
Pragmas sind spezielle Anweisungen an den C-Compiler. Zwei Probleme
entstehen bei der Verwendung von Pragmas:
1. Pragmas sind hochgradig compilerspezifisch. Nicht einmal die
Amiga-Compiler haben dieselben Pragmas, selbst wenn damit das
gleiche bewirkt wird.
2. Man kann sich nicht darauf verlassen, da▀ ein Compiler Pragmas
ignoriert, die er nicht versteht. Dies gilt selbst dann, wenn man
einen Ausdruck wie den folgenden verwendet:
#ifndef MY_COMPILER
#pragma DoAnything
#endif
Das letztere Problem lΣ▀t sich umgehen, indem man Pragmas wie folgt
in eigene Include-Files setzt. (Das gleiche gilt ⁿbrigens auch fⁿr
PrΣprozessor-Kommandos wie #asm (Aztec-C) oder #extern (C++).)
#ifndef MY_COMPILER
#include <mypragmas.h>
#endif
Aber was machen Pragmas auf dem Amiga? Meistens werden sie verwendet,
um dem Compiler mitzuteilen, wie gewisse Library-Funktionen aufgerufen
werden. (TatsΣchlich wird fast immer diese Verwendung gemeint, wenn
Amiga-Besitzer ⁿber Pragmas sprechen.) Gew÷hnliche C-Funktionen
erwarten ihre Argumente auf dem Stack, Library-Funktionen dagegen in
bestimmten Registern. Ferner erwarten sie den `Library-Base-Pointer' in
Register a6. Betrachten wir eine Pragma-Anweisung von Aztec-C:
#pragma amicall(SysBase,0xd2,FreeMem(a1,d0))
Dies weist den Compiler an, das erste Argument in Register a1 und das
zweite in d0 zu laden. Ferner wird der Inhalt der Variablen SysBase in
Register a6 geladen. Maxon-Pragmas sehen genauso aus, Dice- und
SAS-Pragmas sind allerdings etwas komplizierter:
#pragma libcall SysBase FreeMem d2 0902
Hier ist d2 (wie 0xd2 oben) der `Library-Vektor-Offset' (siehe
nΣchstes Beispiel). Die letzte Ziffer ist die Zahl der Argumente, die
davorstehende 0 ein Code fⁿr das Register mit dem Ergebnis und die
davor stehenden Ziffern sind Codes fⁿr die Register mit den Argumenten
in verkehrter Reihenfolge. (Die Codes bedeuten 0=d0, 1=d1, .., 8=a0,
9=a1, a=a2, ..)
Ein Kommando wie `FreeMem(fib,sizeof(*fib);' wⁿrde ein Compiler nun
in folgenden Code ⁿbersetzen:
move.l _fib,a1
move.l 260,d1 ; sizeof(struct FileInfoBlock)
move.l _SysBase,a6
jsr -0xd2(a6) ; 0xd2 = _LVOFreeMem
FreeMem in dieser Art aufzurufen ist kⁿrzer und schneller als
zunΣchst die Argumente auf den Stack zu legen und dann eine Funktion
_FreeMem aufzurufen, die letzten Endes doch nur dasselbe tun und die
Argumente vom Stack in dieselben Register laden wⁿrde.
Das Portierungsproblem der Pragmas umgeht man, indem man sie
folgenderma▀en in den eigenen Quelltext einbindet:
/* SAS/C, Dice und GNU-c (ab Version 2.6.1) machen es */
/* ganz einfach: */
#if defined(__SASC) || defined(_DCC) || defined(__GNUC__)
#include <proto/exec.h>
#else
/* Lade den Funktionsprototyp. Dieser ist nicht vom */
/* verwendeten Compiler abhΣngig. */
#include <clib/exec_protos.h>
/* Pragmas sind vom Compiler abhΣngig, aber wenigstens */
/* die Namen der Dateien mit Pragmas sind relativ */
/* einheitlich. */
#ifdef AZTEC_C
#include <pragmas/exec_lib.h>
#elif defined(__MAXON__)
#include <pragmas/exec_pragmas.h>
#endif
/* Deklariere SysBase-Variable */
extern struct ExecBase *SysBase;
#endif
Das obige Beispiel kann problemlos mit allen angegebenen Compilern
verwendet werden und produziert optimalen Code. (Die proto/*.h-Files
machen ⁿbrigens auch nichts anderes als clib/*_protos.h und
pragmas/*_pragmas.h mit #include einzulesen und dann die
SysBase-Variable zu deklarieren.)
Eine abschlie▀ende Frage bleibt allerdings: Wie bekommt man die
Pragmas? Die meisten Compiler haben bereits fertige Pragmas im
Lieferumfang. Allerdings hilft das nicht, wenn man z.B. eine neue
Library benutzen m÷chte oder nur die Pragmas einer veralteten Version
hat. In diesem Fall kann man die Pragmas selbst aus den sogenannten
`FD'-Files erzeugen. Dazu haben die meisten Compiler ein Utility
namens `fd2pragma'. (Das NDU hat z.B. ein Directory namens FD, in dem
die FD-Files aller Libraries und Devices des OS enthalten sind. siehe
Include-Dateien) Es gibt auch ein frei kopierbares fd2pragma, das
Pragmas fⁿr Aztec, Dice, SAS und Maxon sowie LVO-Files fⁿr den
Aztec-Assembler und eventuelle Tag-Versionen produziert. (Aminet,
`dev/misc/fd2pragma2_0.lha' oder auf den Fish-CDs)
Fⁿr Pragmas unter dem gcc siehe Inline-Dateien.
4.11 Mein Compiler/Linker vermi▀t Symbole.
==========================================
ZunΣchst sollte man sich versichern, da▀ die Funktion tatsΣchlich
fehlt: Z.B. Floating-Point-Funktionen befinden sich in einer speziellen
Link-Library, die erst mit der Option `-lm' eingebunden wird. Ferner
kann es eine fehlende Variable sein: Wenn man z.B. ohne es zu bemerken
eine Intuition-Funktion benutzt, dann wird der Linker ⁿber das Fehlen
eines Symbols `IntuitionBase' klagen. In diesem Fall mu▀ man also
lediglich das Folgende irgendwo im globalen Teil seines Quelltextes
einbauen:
struct Library *IntuitionBase;
(Und vergessen Sie nicht, die Library mit OpenLibrary() zu er÷ffnen und
mit CloseLibrary() zu schlie▀en!) :-)
Allerdings k÷nnte die Funktion natⁿrlich tatsΣchlich fehlen. Wenn
man zum Beispiel nur die Version 2.0 der amiga.lib hat, dann fehlen
etwa die Locale-Funktionen oder die Memory-Pool-Funktionen, obwohl sie
prinzipiell verwendbar sind. (1) Die einfachste (und beste) L÷sung
ist, das sogenannte NDU zu kaufen. Siehe Include-Dateien. Wer nicht
solange warten m÷chte, fⁿr den ist die Frage, welche Art von Funktion
in seiner Link-Library fehlt:
* Einfache Amiga-Library-Funktionen (z.B. `exec/AllocPooled' oder
`locale/OpenCatalogA') kann man mit Pragmas aufrufen und braucht
dann lediglich Informationen ⁿber die Aufrufkonventionen
(Library-Base, Library-Vektor-Offset und Argumentregister)
* Tag-Funktionen sind meistens einfach Zwischenfunktionen, die ihre
Argumente auf dem Stack erwarten und dann die eigentliche
Library-Funktion aufrufen. Wenn man z.B. die Funktion
`dos/AllocDosObject', die eine Konstante und einen Zeiger auf ein
Array als Argumente erwartet, nach der obigen Methode konstruiert
hat, dann hat man damit auch ihre Stack-Variante! Dazu erzeugt man
einfach die folgende Funktion:
#include <clib/dos_protos.h>
#include <pragmas/dos_pragmas.h> /* Evtl. anderer Name */
void *AllocDosObjectTags(ULONG objtype, Tag tag1, ...)
{ return(AllocDosObject(objtype, (struct TagItem *) &tag1);
}
Mit fd2pragma kann das auch automatisch geschehen. Siehe Pragmas.
* Einige Funktionen bleiben aber noch ⁿbrig: Amiga.lib enthΣlt
nΣmlich auch Funktionen, die fⁿr sich selbst interessant sind,
z.B. die BOOPSI-Funktionen (`DoMethod', `DoSuperMethod'), die
Memory-Pool-Funktionen (`LibAllocPooled', `LibCreatePool', die
Ersatz fⁿr entsprechende 3.0-Funktionen sind) oder `HookEntry',
das sehr hilfreich bei der Programmierung von Hooks ist. Diese
kann man nur durch entsprechende, disassemblierte und neu
assemblierte oder compilierter Versionen ersetzen. Im
AmigaFAQ-Archiv sind einige dieser Funktionen bereits enthalten.
---------- Footnotes ----------
(1) Dieses Problem betrifft vor allem Besitzer von Aztec-C, das
seither nicht weiter unterstⁿtzt wird und von Dice, der manchmal etwas
unvollstΣndig ist. Ich besitze beide ..
4.12 Wie erfahre ich, was fⁿr Funktionen es gibt?
=================================================
Wenn Sie sich ⁿber den Namen einer fⁿr einen bestimmten Zweck
geeigneten Funktion im Unklaren sind, dann gibt es folgende
M÷glichkeiten:
* In den Autodocs der verschiedenen Libraries findet man am Anfang
eine alphabetisch sortierte Tabelle aller Funktionen, die die
betreffende Library bietet. Im Hauptteil findet man dann eine
detaillierte Spezifikation aller Funktionen. Siehe Include-Dateien.
* Die `.FD'-Dateien bieten eine sehr kompakte ▄bersicht ⁿber die
Funktionen der diversen Libraries, sogar mit einer kurzen Angabe
der Funktionsargumente. Wenn man schon grob wei▀, wonach man
sucht (z.B. nur die grobe Angabe der Argumente ben÷tigt), dann
findet man hier alle gewⁿnschten Informationen. Siehe Pragmas.
Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
4.13 Der GNU C Compiler: Allgemeine Informationen und Installation
==================================================================
Dieser Abschnitt enthΣlt Informationen ⁿber den Amiga-Port des GNU
C Compilers generell und die Installation insbesondere.
4.13.1 Aktuelle Version
-----------------------
Die aktuelle gcc-Version ist 2.6.0 und an 2.6.1 wird gearbeitet.
Sie enthΣlt eine neue Version der ixemul.library (v40.3), aber man
sollte sich wegen Fehlern, die sich auf 68000-Systemen bemerkbar
machen, ixemul404.lha vom Aminet oder von meiner FTP-Site holen.
Au▀erdem gibt es eine neue library, libnix, die das Benⁿtzen der
ixemul.library verhindert. 2.6.1 wird Protos (wie bei SAS-C)
enthalten, um das Kompilieren von SASC-Code unter gcc leichter zu
machen. Ein neuer Assembler, gas-2.5, ist enthalten, ein Paket namens
q_anote erm÷glicht die Ausgabe von gemischtem C/Asm-Code zu
Debugging-Zwecken. In Arbeit ist die FΣhigkeit des Compilers, den
Stack wachsen zu lassen, damit man vor dem Starten von gcc nicht mehr
den Stack setzen mu▀.
4.13.2 Hardwareanforderungen
----------------------------
Jeder Amiga (vom A1000 bis zum A4000/40) ist prinzipiell in der
Lage, die GNU-Utilities fⁿr AmigaDOS zu benutzen. Allerdings braucht
man wenigstens 4MB RAM, um kleinere oder mittlere Projekte zu
ⁿbersetzen, fⁿr gr÷▀ere (z.B. fⁿr gcc selbst) entsprechend mehr.
Gigamem und VMM arbeiten mit gcc zusammen, es *k÷nnte* also evtl.
auch mit weniger gehen. Dazu braucht man aber eine MMU. Siehe 68EC0xx.
Eine volle Installation mitsamt C++ und Objective-C, inline-Dateien
und Commodore Includes (siehe Include-Dateien) ben÷tigt ca. 20 MB
Platz auf der Festplatte.
Kickstart 1.2/1.3 wird nicht mehr unterstⁿtzt. Wer KS 1.2/1.3 hat,
sollte sich eine bessere Kickstart-Version kaufen. Gcc arbeitet auch
unter Kickstart 1.2/1.3, die volle FunktionalitΣt ist aber erst ab
Kickstart 2.x+ vorhanden. Eine schnelle CPU (z.B. 68030@25MHz oder
besser) ist ebenfalls sinnvoll.
4.13.3 Wer hat es gemacht?
--------------------------
Gcc und damit zusammenhΣngende Software wurde von den folgenden
Personen auf den Amiga portiert (siehe Hilfe):
Gcc v2.2.2: Markus Wild
Gcc v2.3.3: Markus Wild
Gcc v2.4.5: Philippe Brand, Lars Hecking, Fred Fish
Gcc v2.5.0 und spΣter: Philippe Brand, Fred Fish, Leonard Norrgard
Ixemul.library: Markus Wild, Leonard Norrgard, R. Luebbert
Libnix: Matthias Fleischer, Gunther Nikl
Gerlib: Gerhard Mⁿller
4.13.4 Wo finde ich die gcc-Quelltexte?
---------------------------------------
Alle gcc-Quelltexte und alle BinΣrdateien findet man auf:
1. Aminet (wuarchive.wustl.edu und Mirror wie ftp.luth.se) in
/pub/aminet/dev/gcc (siehe FTP)
2. Ramses The Amiga Flying BBS:
+33-1-60037015 HST Dual v32 terbo 4800-21600
+33-1-60037713 SupraFax v32bis 4800-14400
+33-1-60037716 Tornado v22bis 1200-2400
in Topic `Development', Area `Gcc' (are 156).
Den originalen GNU-Quelltext bekommt man
1. von denselben FTP-Servern wie die Binaries
2. gnu.prep.ai.mit.edu (18.71.0.38) in `/pub/gnu'
3. Ramses The Amiga Flying BBS in Topic
`AmigaUnix/Unix/Linux/NetBSD', Area `Gnu Source Code'
Diese Archive sollten alles N÷tige enthalten, mit Ausnahme der
Quelltexte der ixemul.library. Diese erhΣlt man ebenfalls auf dem
Aminet, Directory `dev/gcc'. (Zur Zeit ist die Version 40 der
ixemul.library in Arbeit. Die Quelltexte werden am gleichen Ort sein.)
Durch Richard Stallman, Free Software Foundation, ist festgelegt:
"The GPL says that any distribution of binaries must contain either
the source code or a written offer to supply source code (see the GPL
for details of what is required)."
▄bersetzt: Die GPL (GNU General Public License) legt fest, da▀ jede
Distribution entweder den Quelltext oder das schriftliche (oder
geschriebene?) Angebot, diese zu liefern, enthalten mu▀. (NΣheres
siehe in der GPL.)
4.13.5 Inline-Dateien
---------------------
Die Inline-Dateien fⁿr den gcc kann man aus den originalen
FD-Dateien von Commodore wie folgt erzeugen (Siehe Include-Dateien,
siehe Pragmas):
CLI> Assign INCLUDE: GCC:os-include
CLI> Assign FD: INCLUDE:fd
CLI> Makedir INCLUDE:inline
CLI> cd USR:bin/geninline
CLI> gen31
Dies sollte alle Inline-Dateien in `GCC:os-include/inline' erzeugen.
Falls man die 2.0- bzw. 3.0-Includes besitzt, sollte man gen20 bzw.
gen30 benutzen. Inline-Dateien fⁿr OS3.1 (rev 40.13) sind in
<gcc-aktuell> enthalten. Siehe Aktuelle Version. (1)
Auch mit dem Programm fd2inline kann man Inline-Dateien erzeugen:
CLI> fd2inline <fd_file> <proto_file>
---------- Footnotes ----------
(1) Perl Skripte haben Schwierigkeiten, die Include-Dateien von
AmigaDOS korrekt zu behandeln. Hier wΣre etwas freiwillige Arbeit
n÷tig ...
4.13.6 Wie konvertiere ich die Amiga-Libraries fⁿr den gcc?
-----------------------------------------------------------
Ab gcc Version 2.6.0 werden dank den libnix-Autoren (Matthias
Fleischer und Gunther Nikl) AmigaDOS Linklibraries unterstⁿtzt.
Wenn man trotzdem eine gcc-Linklibrary generieren will, gibt es zwei
Methoden:
1. Mit hunk2gcc, dem AmigaDOS-Object-Konvertierer von Markus Wild.
Dazu braucht man zunΣchst eine aktuelle Kopie der amiga.lib (aus dem
NDU, siehe Include-Dateien). Nachdem man sich ein Directory fⁿr die
konvertierten Dateien erstellt hat, wechselt man mit cd in dieses
Directory und gibt das Folgende ein:
hunk2gcc amiga.lib [..further libs if you like..]
Dies erzeugt ein Objektfile wie a.out fⁿr jedes einzelne Modul, das
die Library enthΣlt. Diese Module mu▀ man anschlie▀end in einer
gcc-Library zusammenfassen:
ar qc libamiga.a obj.*
ranlib libamiga.a
Das Programm ranlib fⁿgt eine Symboltabelle in die Library ein.
(Dadurch wird der Zugriff auf die Library sehr viel schneller.)
2. Eine libamiga.a mit libnix zu generieren ist recht leicht, braucht
aber einige Zeit. Man dekomprimiere sources.lha aus dem libnix-Archiv
und starte ein 'make libamiga.a'.
*Beachte:* Solange man keine reinen AmigaDOS-Funktionen verwendet,
kann man auch eine Pseudo-Library erzeugen:
cat "int dummy;" >dummy.c
gcc -c dummy.c
ar crv libamiga.a dummy.o
mv libamiga.a gcc:lib
4.13.7 Wie installiere ich den gcc?
-----------------------------------
1. Falls dies die erste Installation von gcc ist:
Mache das Folgende:
cd ort_mit_sehr_viel_platz ; ─NDERN! Gib eine Schublade an
makedir gnu
lha x gcc260-base.lha ; Der erste Teil, du brauchst ihn
Jetzt mu▀t du `gnu/s/user-startup' an dein `S:User-Startup'
anhΣngen (Ersetze Devel:GNU durch deinen eigenen Gnu Pfad).
Weiter:
execute gnu/s/user-startup ; setzt wichtige Assigns
copy gnu/envarc/#? ENVARC:
*─ndere* die folgenden Zeilen! Wenn du einen 68000- oder
68010-Amiga hast, entferne das "-020" aus allen folgenden Zeilen!
lha x gcc260-c-020.lha ; Der C-compiler; du brauchst ihn
lha x gcc260-doc.lha ; Wenn du die Dokumentation zu gcc willst
lha x gcc260-c++-020.lha ; Wenn du C++ haben willst
lha x gcc260-objc-020.lha ; Wenn du Objective-C haben willst
lha x gcc260-utils.lha ; Wenn du zusΣtzliche Utilities haben willst
; (empfohlen zur KompatibilitΣt mit Unix)
lha x gcc260-utilsdoc.lha ; Wenn du Dokumentation zu allen Utilities willst
Mit dem Script `restorelinks' mu▀t du Links generieren:
sh /gnu/s/restorelinks ; ─NDERN! Fⁿge " copy" an diese Zeile an,
; wenn du MakeLink nicht benⁿtzen willst,
; sondern Files lieber kopieren willst
Schlie▀lich:
lha x gcc260-diffs.lha ; Wenn du gcc neu kompilieren willst
lha x gcc260-texi.lha ; Wenn du Postscript-Doku generieren willst
Auf zum nΣchsten Punkt und fr÷hliches Kompilieren!
2. Wenn du ein Upgrade deiner gcc-Umgebung von v2.5.x machen willst,
dearchiviere einfach gcc260-base.lha und gcc260-c-020.lha. Gehe
sicher, da▀ du deine frⁿhere ixemul.library l÷schst, wo sie
sich auch befindet. (▄blicherweise in `LIBS:')
*Beachte*: Eine neue Version der ixemul.library wird verwendet, gehe
bitte sicher, da▀ nirgends eine andere Kopie ist, die in Konflikt mit
der neuen Version geraten kann.
4.13.8 Kompilieren
------------------
Wie wΣr's mit einem netten `Hello world'?
#include <stdio.h>
main()
{
printf("Hello World!\n");
}
Das war recht einfach ;-) Jetzt mⁿssen wir es kompilieren. Es gibt
eine Menge Optionen in gcc, aber die einfachste M÷glichkeit zu
kompilieren ist:
CLI> gcc -o hello hello.c
Einfach? Hier sind mehr Optionen:
Ziel-Prozessoren von Motorola: Man kann reinen 68000 code, 68020,
68030, 68040 und/oder 68881 kompilieren. (Siehe Gcc-Dokumentation,
Kapitel `Invoking Gcc/SubModel Options/M680X0 Options for Motorola
specific compilation flags'.
CLI> gcc -m68020 -m68881 -o hello hello.c
Dies kompiliert Programme mit 68020 Code und direkten FPU-Befehlen
und bindet mit den beschleunigten Libraries aus `GCC:lib/lib020'.
Optimierung: Entweder du willst keine Optimierung oder du gibst `-O'
an, das den Code optimiert, oder `-O2' fⁿr bessere Optimierung (Siehe
die Dokumentation im Kapitel `Invoking Gcc/Optimize Options').
Inzwischen gibt es auch eine `-O3' Option, die noch weiter geht.
CLI> gcc -O2 -o hello hello.c
Ein schnelles "Hello World" ;-)
Codegenerierung: Vielleicht willst du residente Programme haben.
Die Option dazu hei▀t `-resident'.
CLI> gcc -resident -o hello hello.c
Natⁿrlich kannst du alle Optionen mischen, so etwa:
CLI> gcc -O2 -m68020 -m68881 -resident -o hello hello.c
Dies wird ein hoch optimiertes residentes Programm fⁿr 68020 und
68881 ergeben.
*Wichtig:* Wenn du nur AmigaOS-Funktionen verwendest oder aus
irgendwelchen philosophischen Grⁿnden keine ixemul.library verwenden
willst, dann kannst du diese loswerden durch:
CLI> gcc -noixemul -o foobar foobar.c
natⁿrlich nur, wenn du libnix hast (enthalten in gcc 2.6.0).
4.13.9 Wichtige Informationsquellen
-----------------------------------
Der aktuelle Betreuer des Amiga-Ports von gcc ist:
Philippe BRAND
Fidonet: Ramses The Amiga Flying BBS 2:320/104.21
Email: phb@colombo.telesys-innov.fr (ONLY for personnal email).
Ftp: colombo.telesys-innov.fr:/pub/amigados-gnu
or /pub/incoming/uploads for uploads.
Es gibt auch eine Mail-Liste in Finnland. Siehe Mail-Listen.
Philippe Brand wird im Normalfall Fragen an diese Liste weiterleiten.