home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD2.iso / ASCII / TEXTE / SCENE / AMIGA / Amiga-FAQG2.TXT < prev    next >
Encoding:
Text File  |  1994-03-26  |  50.9 KB  |  1,194 lines

  1. @BEGIN_FILE_ID.DIZ
  2. Amiga Frequently Asked Questions (FAQ)
  3. from 03.01.1995  - GERMAN - [2/3]
  4. @END_FILE_ID.DIZ
  5. Posted-By: auto-faq 2.4
  6. Archive-name: de-amiga-faq/part2
  7. Last-modified: Dienstag, den 3. Januar 1995
  8. Posting-Frequency: biweekly
  9. Posting-Frequency: Alle zwei Wochen (biweekly)
  10.  
  11.  
  12.         Häufig gestellte Fragen (FAQ) zum Amiga [2/3]
  13.           ----------------------------------------------
  14.  
  15. Dies ist der zweite Teil der Amiga-FAQ. (FAQ = Frequently asked questions)
  16. Die Liste ist in Ascii-Format, damit sie von jedem gelesen werden kann.
  17. Sie ist auch in AmigaGuide-, Dvi- und html-Format (für WWW-Server) erhältlich
  18. als Teil des Amiga-FAQ-Archivs. (Datei docs/misc/AmigaFAQg.lha auf dem Aminet)
  19.  
  20. Bitte beachten Sie das Folgende:
  21.  
  22.   - Änderungen der letzten zwei Wochen sind markiert.
  23.     !    diese Zeile bzw. dieser Abschnitt wurden geändert
  24.     +    diese Zeile ist neu
  25.     <    vor dieser Zeile wurde etwas gelöscht
  26.  
  27.   - Ein Index ist am Ende dieses Teils. Wenn auch dies nicht
  28.     weiterhilft: Bitte schicken Sie mir eine E-Mail. Vielleicht kann
  29.     ich eine Antwort in die FAQ aufnehmen.
  30.  
  31.   - Vorschläge, Beiträge, Kritik und Bierflaschen sind sehr
  32.     willkommen. :-)
  33.  
  34.         Ignaz Kellerer
  35.         Georg-Habel-Str. 11
  36.       81241 München (Germany)
  37.         Tel. (+49) 089 / 885147
  38.  
  39.         Internet: kellerer@informatik.tu-muenchen.de
  40.  
  41. ==========================(Schnipp-Schnapp)===================================
  42.  
  43.  
  44.   Disclaimer
  45.  
  46.   1 Hardware
  47.     1 Was sind 68EC020, 68EC030 und 68LC040?
  48.     2 Was ist ein mathematischer Coprozessor (FPU) ?
  49.     3 Kann ich eine 3.5'-Festplatte im A1200 verwenden?
  50.  
  51.   2 Das Betriebssystem
  52.     1 Kann ich eine andere als die eingebaute Kickstart benutzen?
  53.     2 Was entspricht unter AmigaDOS dem . (Aktuelles Directory)?
  54.     3 Der Queue-Handler PIPE:
  55.       1 Verwendung von PIPE: in einer AmigaShell
  56.       2 Das Pipe-Kommando
  57.       3 Das Pipe-Kommando in der AmigaShell
  58.       4 Die _mchar-Variable
  59.       5 Bekannte Probleme
  60.  
  61.   3 Grafik
  62.     1 Was heißt Chunky- und Planar-Display?
  63.     2 Was ist Doublebuffering?
  64.     3 Was für Monitore arbeiten am Amiga 1200 oder 4000?
  65.  
  66.   4 Programmierung
  67.     1 Was ist die beste Dokumentation für Programmierer?
  68.     2 Was ist CATS?
  69.     3 Wo bekomme ich die Amiga-Include-Dateien?
  70.     4 Wie werde ich Developer?
  71.     5 Was für Compiler (und Assembler) gibt es?
  72.     6 Warum funktioniert keine Esc-Sequenz?
  73.     7 Kann ich AmigaBasic auf dem A1200 verwenden?
  74.     8 Wie lokalisiere ich mein Programm?
  75.     9 Wie erhält man einen Zeiger auf das Fenster einer Konsole?
  76.     10 Was sind Pragmas?
  77.     11 Mein Compiler/Linker vermißt Symbole.
  78.     12 Wie erfahre ich, was für Funktionen es gibt?
  79.     13 Der GNU C Compiler: Allgemeine Informationen und Installation
  80.       1 Aktuelle Version
  81.       2 Hardwareanforderungen
  82.       3 Wer hat es gemacht?
  83.       4 Wo finde ich die gcc-Quelltexte?
  84.       5 Inline-Dateien
  85.       6 Wie konvertiere ich die Amiga-Libraries für den gcc?
  86.       7 Wie installiere ich den gcc?
  87.       8 Kompilieren
  88.       9 Wichtige Informationsquellen
  89.  
  90.   5 Anwendungen
  91.     1 Text-Editoren
  92.     2 Was für Textverarbeitungsprogramme gibt es?
  93.     3 Desktop Publishing
  94.     4 Was ist TeX und wo bekomme ich es?
  95.     5 Gibt es PostScript-Interpreter auf dem Amiga?
  96.     6 Font Konzepte
  97.       1 Die Amiga Font Formate
  98.       2 Wo gibt es Amiga Fonts
  99.       3 Kommerzielle Font Hersteller
  100.       4 Nicht-Lateinische Zeichensaetze auf dem Amiga
  101.       5 Amiga Font Installation
  102.       6 Amiga Font Utilities
  103.       7 Das Erzeugen von Vektor-Fonts
  104.       8 Probleme und moegliche Loesungen
  105.     7 Wie bearbeite ich Nicht-Latin-Texte?
  106.       1 Japanische Editoren und Anzeigeprogramme
  107.       2 Chinesische Anzeigeprogramme
  108.  
  109.   6 Emulationen
  110.     1 Kann ich meinen Amiga unter Unix benutzen?
  111.     2 Ist es möglich, den Amiga als X11-Terminal zu benutzen?
  112.     3 Wie kann ich MS-Dos-Programme starten?
  113.     4 MsDos-formatierte Wechselplatten am Amiga verwenden
  114.  
  115.   7 Verschiedenes
  116.     1 Gibt es eine Unix-Version von LhA?
  117.     2 Was sind Dateien, die mit ... enden?
  118.     3 Gibt es ein Programm wie Stacker, um die Hard-Disk zu packen?
  119.     4 Wo bekomme ich Fish-Disk xxx?
  120.     5 Wie füllt man die Tintenkartuschen der HPDeskjet-Drucker nach?
  121.     6 Was ist MUI und wo bekomme ich es?
  122.  
  123.   8 Software-Quellen und andere Informationen?
  124.     1 Dateien und Datenbanken zur frei kopierbaren Software
  125.     2 Eine Sammlung von Testberichten
  126.     3 Empfangen von Dateien von einem FTP-Server
  127. !   4 Empfangen von Dateien von einem Mail-Server
  128.     5 Empfangen von Dateien von einer Mailbox
  129.     6 Die Fish-PD-Serie
  130.       1 Die Amiga-Library-Disks
  131.       2 Die Fresh-Fish-Serie
  132.     7 Wie kann ich MS-Dos-Disketten lesen und schreiben?
  133.     8 Wie transportiere ich sehr große Dateien
  134.     9 Diskussionen über Mail
  135.     10 Andere FAQ's
  136.  
  137.   Das Amiga-FAQ-Archiv
  138.  
  139.   Beiträge zur Amiga-FAQ
  140.  
  141.   Danksagungen
  142.  
  143.   Index
  144.  
  145.  
  146.  
  147.   4 Programmierung
  148.   ****************
  149.   
  150.      In diesem Kapitel finden vermutlich nur Programmierer Interessantes.
  151.   
  152.   4.1 Was ist die beste Dokumentation für Programmierer?
  153.   ======================================================
  154.   
  155.      Die beste verfügbare Dokumentation sind sicherlich die RKM's (ROM
  156.   Kernel Manuals, die schwarzen) von Commodore. Sie werden von
  157.   Addison-Wesley veröffentlicht.
  158.        The Amiga ROM Kernel Manual:  Libraries, ISBN 0-201-56774-1
  159.        The Amiga ROM Kernel Manual:  Devices, ISBN 0-201-56775-X
  160.        The Amiga ROM Kernel Manual:  Includes and Autodocs, ISBN
  161.                                                             0-201-56773-3
  162.        The Amiga Hardware Manual, ISBN 0-201-56776-8
  163.        The Amiga User Interface Style Guide, ISBN 0-201-57757-7
  164.   
  165.   Vor allem die Libraries sind ein Muß. Weniger nützlich sind die
  166.   Includes und Autodocs: Sie sind auf Diskette als Online-Hilfe sicher
  167.   nützlicher.  Siehe Include-Dateien.
  168.   
  169.      AmigaDOS wird in diesen Büchern kaum behandelt. Die Autodocs geben
  170.   einige Informationen, aber um tiefer einzusteigen braucht man das
  171.        The AmigaDOS Manual, 3rd Edition, ISBN 0-553-35403-5
  172.   
  173.   ebenfalls von Commodore, das von Bantam Books herausgegeben wird.
  174.   
  175.      Eine gute Wahl ist auch
  176.        The Amiga Guru Book
  177.   
  178.   von Ralph Babel. Das Buch beginnt mit einem ca. 250-seitigen
  179.   allgemeinen Überblick über verschiedenste Aspekte der Programmierung
  180.   des Amiga. Für Anfänger dürften vor allem die Abschnitte über die
  181.   Amiga-Datentypen sowie die Amiga-Includes und die amiga.lib interessant
  182.   sein, aber auch Erfahrene finden hier mit Sicherheit noch Neues, was
  183.   zum Teil nicht einmal in den RKM's enthalten ist. Den größten Teil
  184.   des Buches nehmen aber 500 Seiten nur zu AmigaDOS ein. Dieser Teil ist
  185.   meines Erachtens der wichtigste, weil das AmigaDOS-Manual der
  186.   schlechteste Teil der offiziellen Dokumentation ist. Das Buch ist sehr
  187.   dicht geschrieben und deshalb weniger leicht lesbar als die RKM's, aber
  188.   ich empfehle es als Zusatz und vor allem anstelle des AmigaDOS-Manuals.
  189.   (Allerdings ist das Guru-Buch kein Ersatz für die Libraries & Devices,
  190.   die hier nicht behandelt werden.) Unglücklicherweise hat das Buch
  191.   keine ISBN-Nummer und ist deshalb nur bei den folgenden Adressen
  192.   erhältlich:
  193.   
  194.                                    Almathera Systems Limited
  195.                                    Southerton House
  196.        NBG USA, Inc.               Boundary Business Court
  197.        482 Holly Avenue            92-94 Church Road
  198.        St. Paul, MN 55102          Mitcham, Surrey CR4 3TD
  199.        USA                         England
  200.        Voice: +1 (612) 290 9447    Voice: +44 181 687 0040
  201.        Fax:   +1 (612) 290 9449    Fax:   +44 181 687 0490
  202.                                    E-Mail: <almathera@cix.compulink.co.uk>
  203.        
  204.                                    Stefan Ossowskis Schatztruhe
  205.        Hirsch & Wolf OHG           Gesellschaft für Software mbH
  206.        Mittelstraße 33             Veronikastraße 33
  207.        D-56564 Neuwied             D-45131 Essen
  208.        Germany                     Germany
  209.        Voice: +49 (2631) 8399-0    Voice: +49 (201) 788778
  210.        Fax:   +49 (2631) 8399-31   Fax:   +49 (201) 798447
  211.                                    E-Mail: <stefano@tchest.e.eunet.de>
  212.        
  213.        Someware
  214.        27 rue Gabriel P‚ri
  215.        59186 Anor
  216.        France
  217.        Voice: +33 27596000
  218.        Fax:   +33 27595206
  219.        E-Mail: <didierj@swad.someware.com>
  220.   
  221.      Für weitere Informationen empfehle ich auch die FAQ von Marc Atkins
  222.   über Bücher zum Thema Amiga, die alle 4 Wochen in
  223.   `comp.sys.amiga.misc' erscheint.
  224.   
  225.   4.2 Was ist CATS?
  226.   =================
  227.   
  228.      Dies ist eine Abteilung von Commodore West Chester, die früher
  229.   `Commodore Amiga Technical Support' hieß und später in `Commodore
  230.   Application and Technical Support' umbenannt wurde. Die Mitglieder
  231.   arbeiten unabhängig von der Entwicklungsabteilung, aber eng mit ihr
  232.   zusammen, und versuchen, Entwicklern außerhalb von Commodore beim
  233.   Erstellen guter Amiga-Anwendungen zu helfen, sei das eine Hard- oder
  234.   Software. Dazu hat CATS eine Menge an Informationen und Tools
  235.   gesammelt, auf Floppy, CD oder Papier. Ein großer Teil dieses
  236.   Materials ist auch der Allgemeinheit, d. h. für Nicht-Developer
  237.   zugänglich. Aber bitte CATS nicht mit einer Hotline verwechseln!
  238.   
  239.      Amerikaner können das Material von
  240.            CATS
  241.            Commodore Electronics Limited
  242.            950 Rittenhouse Road
  243.            Norristown, PA 19403
  244.   
  245.   bekommen, der Distributor für ganz Europa ist die
  246.            Fa. Hirsch & Wolf
  247.            Mittelstr. 33
  248.            56564 Neuwied
  249.            Tel. 02631/83990
  250.   
  251.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
  252.   
  253.   4.3 Wo bekomme ich die Amiga-Include-Dateien?
  254.   =============================================
  255.   
  256.      Der einzige legale Weg, die Include-Dateien und die AutoDocs zu
  257.   bekommen (und Sie sollten sie bekommen, sie sind *sehr* nützlich!),
  258.   ist, Developer zu werden (siehe siehe Developer) oder das sogenannte
  259.   `NDU' (Native developers update kit, auch als `NDUK', `NDK' bekannt oder
  260.   `ADU' für Amiga Developer Update) bei CATS zu kaufen. Siehe CATS. Es
  261.   kostet etwa 50DM, was sicher ein fairer Preis ist. Dabei handelt es
  262.   sich um ein 5-Disketten-Set, das neben den aktuellen Includes und
  263.   AutoDocs auch Tools für Programmierer, z.B. Enforcer, Mungwall, Sushi
  264.   und die debug.libg (zum Debuggen) sowie anderes, z.B. CatComp (siehe
  265.   Lokalisierung) oder Report (für Bug-Reports oder Vorschläge an
  266.   Commodore) enthält. Die aktuelle Version ist 3.1 und für
  267.   Programmierer beinahe obligatorisch.
  268.   
  269.      Wem die Includes genügen, der kann diese über ein Update seines
  270.   Compilers (nur kommerzielle Compiler) oder von den Fish-CDs bekommen.
  271.   Siehe Fish-CD.
  272.   
  273.   4.4 Wie werde ich Developer?
  274.   ============================
  275.   
  276.      Um Developer zu werden, braucht man die `ADSP'-Antragsformulare
  277.   (Amiga developer support program). Um diese zu bekommen, sollte man
  278.   einen Brief an die lokale Commodore-Niederlassung schreiben und nach
  279.   diesen Papieren fragen, in denen das weitere erklärt wird. In
  280.   Deutschland ist die Adresse folgende:
  281.            Commodore
  282.            Lyoner Straße 38
  283.            60528 Frankfurt
  284.      Es gibt drei verschiedene Arten von Developern:
  285.   *Registered*
  286.        Hier bekommt man vor allem Zugang zum CBMNET (eine Art
  287.        Commodore-internes Usenet), über das man direkt mit anderen
  288.        Entwicklern auch von Commodore selber über seine Probleme
  289.        diskutieren kann. Die Jahresgebühr beträgt 150 DM, die einmalige
  290.        Aufnahmegebühr 50 DM.
  291.   
  292.   *Certified*
  293.        Dies ist die interessanteste Klasse: Man bekommt von der meisten
  294.        Systemsoftware die aktuellen Beta-Versionen (z. B. Kickstart und
  295.        Workbench) sowie die dazugehörigen Includes und AutoDocs.
  296.        Certifieds bekommen aber nicht jede Beta und in der Regel auch
  297.        keine Hardware-Beta. Man bezahlt 400 DM pro Jahr dafür und eine
  298.        einmalige Aufnahmegebühr von 100 DM.
  299.   
  300.   *Commercial*
  301.        Kommerzielle Entwickler bekommen im wesentlichen dieselben
  302.        Informationen wie die "Zertifizierten", allerdings kompletter,
  303.        sprich auch Beta-Hardware, und etwas früher. Dies hat auch seinen
  304.        Preis: 700DM pro Jahr plus einmalige Aufnahmegebühr von 100DM.
  305.   
  306.   Die Preise und die angebotenen Möglichkeiten können von Land zu Land
  307.   verschieden sein, auch gibt es meines Wissens nicht in allen Ländern
  308.   den "Registered". Ein guter Tip ist es, eine Gruppe zu bilden und damit
  309.   die Kosten zu reduzieren.
  310.   
  311.      Alle Entwickler müssen Non-disclosure agreements (`NDA')
  312.   unterzeichnen.  Diese besagen, daß sie über die erhaltenen
  313.   Informationen außerhalb von speziell dazu freigegebenen Orten oder
  314.   Kanälen nicht einmal zu anderen Entwicklern sprechen dürfen, so lange
  315.   sie nicht die explizite Erlaubnis dazu von Commodore haben.
  316.   
  317.   4.5 Was für Compiler (und Assembler) gibt es?
  318.   =============================================
  319.   
  320.      Es gibt viele Programmiersprachen auf dem Amiga, kommerzielle
  321.   Compiler ebenso wie frei kopierbare. Ich möchte nur diejenigen
  322.   aufzählen, die mir bekannt sind oder die ich aus einem anderem Grund
  323.   für erwähnenswert halte.
  324.   
  325.   *Assembler*
  326.        Alle C-Compiler beinhalten einen Assembler. Frei kopierbar und
  327.        zuverlässig sind A68K und PhxAss. (Aminet, Directory `dev/asm'
  328.        oder Fish-Disks 521 bzw. 906)
  329.   
  330.   *C*
  331.   *C++*
  332.        Frei kopierbare C-Compiler sind der `gcc' (der sein eigenes
  333.        Directory `dev/gcc' auf dem Aminet hat) und die Probeversion (mit
  334.        der man aber schon eine ganze Menge anfangen kann) von `Dice' (per
  335.        FTP von `ftp.uni-paderborn.de', Directory
  336.        `/news/comp.binaries.amiga/volume91/languages' oder auf Fish disk
  337.        491).  Der große Vorteil von gcc ist, daß man ihn auf der ganzen
  338.        Welt und auf nahezu jedem Computer findet. Ein weiterer Vorteil
  339.        ist, daß er sogar einen C++-Compiler enthält! Aber er ist
  340.        langsam und benötigt 4MB RAM oder mehr. Siehe Der GNU C Compiler.
  341.        Siehe Mail-Listen.
  342.   
  343.        Kommerzielle C-Compiler sind `Aztec-C', `Dice' und `SAS-C'.
  344.        `Aztec-C' wird jedoch leider nicht mehr weiterentwickelt.  Was die
  345.        kommerziellen Compiler auszeichnet, sind ihre hervorragenden
  346.        Source-Level-Debugger, die den anderen fehlen.
  347.   
  348.        SAS hat leider angekündigt, den Amiga-Compiler nicht weiter zu
  349.        unterstützen. Verkauft wird er aber noch, und da er gegenwärtig
  350.        noch voll aktuell ist und sogar einen Crosscompiler von C++ in C
  351.        enthält (der vom Debugger unterstützt wird), ist er meines
  352.        Erachtens derzeit das beste Angebot, insbesondere zu dem äußerst
  353.        günstigen Preis von 184.-DM für Studenten und Besitzer anderer
  354.        Compiler. In Deutschland erhält man SAS/C bei
  355.                 SAS Institute GmbH
  356.                 Postfach 10 53 40
  357.                 69043 Heidelberg
  358.                 Deutschland
  359.             
  360.                 Telefon: 06221/4160
  361.                 EMail: eurdoc2@vm.sas.com
  362.   
  363.        Dice bietet wie SAS einen Sonderpreis für Schüler und Studenten
  364.        von ca. 130.-DM. Der Compiler ist stabil und vor allem sehr
  365.        schnell.  Der größte Nachteil von Dice ist (verglichen mit den
  366.        anderen kommerziellen Compilern) der Debugger, ein sogenannter
  367.        Source-Line-Debugger: Dies bedeutet, daß man den Quelltext sieht
  368.        und das Programm Schritt für Schritt abarbeiten kann, aber leider
  369.        nur Speicher und nicht etwa bestimmte Variablen anzeigen kann.
  370.        Informationen über Dice: info@oic.COM.
  371.   
  372.        Comeau C++ ist ebenfalls ein Crosscompiler, was an und für sich
  373.        kein Problem wäre. Aber Comeau C++ hat keinen integrierten
  374.        C-Compiler, man braucht also zusätzlich SAS-C, Aztec-C oder Dice.
  375.        Dafür ist er kompatibel zu AT&T cfront 3.0, unterstützt
  376.        Exceptions und läuft wie `gcc' auf vielen verschiedenen Systemen.
  377.        In Deutschland wird auch Maxxon C++ angeboten, über das ich
  378.        nichts sagen kann. Beide Compiler sind kommerziell. Comeau's
  379.        Adresse ist:
  380.                 Comeau computing
  381.                 91-34, 120th Street
  382.                 Richmond Hill, NY, 11418-3214
  383.                 USA
  384.             
  385.                 EMail: Greg Comeau, comeau@bix.com
  386.   
  387.   *Forth*
  388.        JForth soll eine exzellente Forth-Version sein. Unter anderem
  389.        enthält es objektorientierte Erweiterungen, ein volles
  390.        Amiga-Interface und einen Anwendungsgenerator. Es ist erhältlich
  391.        von:
  392.                 Delta Research
  393.                 P.O. Box 151051
  394.                 San Rafael, CA   94915-1051
  395.             
  396.                 Phone: (415) 453-4320
  397.                 EMail: Phil Burk, phil@ntg.com
  398.                        Mike Haas, haas@starnine.com
  399.   
  400.   *Fortran*
  401.        (Seufz! Es gibt immer noch Leute, die es brauchen :-<) Frei
  402.        kopierbar sind BCF (Fish disk 470) und f2c, der Fortran in
  403.        C-Quelltext umwandelt.  (Aminet, Directory `/dev/lang'). Ein
  404.        kommerzieller Compiler ist von ABSoft erhältlich. Allerdings sind
  405.        dies alles nur Fortran-77-Compiler, es gibt keine
  406.        Fortran-90-Compiler auf dem Amiga.
  407.   
  408.   *Lisp*
  409.        Frei kopierbare Lisp-Interpreter sind XLisp (Fish-Disk 181) und
  410.        OakLisp (Fish-Disks 519 und 520) und CLISP
  411.        (`/pub/lisp/clisp/binaries/amiga' at
  412.        `ma2s2.mathematik.uni-karlsruhe.de'). Auch Compiler gibt es: Gambit
  413.        (Fish-Disks 764 und 765) sowie Scheme-to-C (Fish-Disks 556-558).
  414.        Von Interesse ist vielleicht eine Mail-Liste: Senden Sie dazu eine
  415.        Mail mit dem Wort `Subscribe' an `amigalisp@contessa.phone.net'.
  416.   
  417.   *Prolog*
  418.        `/dev/lang/UNSWProlog.lha' und `dev/lang/sbp3_1e' auf dem Aminet
  419.        sowie `SBProlog' auf der Fish-Disk 141 und `SBProlog' auf der
  420.        Fish-Disk 145 sind frei kopierbare Prolog-Interpreter.
  421.   
  422.   *Modula-2*
  423.        M2Amiga wird in Europa und Benchmark Modula-2 in den USA
  424.        angeboten. Beide sollen sehr gut sein und sowohl über gute
  425.        Source-Level-Debugger als auch eine umfangreiche Bibliothek
  426.        verfügen. Besonders M2Amiga wird sehr gut unterstützt durch eine
  427.        deutsche Benutzergruppe (AMOK), die z.B. eine eigene PD-Serie
  428.        anbieten. Siehe Mail-Listen.
  429.   
  430.        M2Amiga bekommt man bei
  431.                 A+L AG
  432.                 Daderiz 61
  433.                 2540 Grenchen
  434.                 Schweiz
  435.             
  436.                 Tel.: +41/65/52 03-11
  437.                 Fax:              -79
  438.   
  439.        und Benchmark Modula-2 ist erhältlich von:
  440.                 Armadillo Computing
  441.                 5225 Marymount Drive
  442.                 Austin, Texas 78723
  443.                 USA
  444.             
  445.                 Phone/FAX: 512/926-0360.
  446.                 EMail: Jim Olinger, jolinger@bix.com
  447.   
  448.   *Oberon*
  449.   *Oberon-2*
  450.        Es gibt zwei Oberon-2-Compiler für den Amiga: AmigaOberon ist wie
  451.        M2Amiga von A+L und kommerziell. Der Compiler kommt mit einer
  452.        integrierten Entwicklungsumgebung (incl. freikonfigurierbarem
  453.        Editor) und umfangreicher Modulbibliothek. Library Linker zum
  454.        einfachen Erzeugen von AmigaOS Shared Libraries sowie Run-time
  455.        Source-Level-Debugger sind ebenfalls erhältlich.
  456.   
  457.        Oberon-A ist ein Freeware-Compiler, allerdings erst in einer
  458.        Beta-Version, insbesondere sind die Modulbibliotheken
  459.        unvollständig. (Quelle: Aminet, Directory `dev/obero'). Siehe
  460.        Mail-Listen.
  461.   
  462.        Für beide Compiler gibt es Unmengen von Modulen und Bsp.-Sourcen
  463.        auf AMOK-Disks.
  464.   
  465.        Zusätzlich zu den beiden Standalone-Compilern, die vor allem zum
  466.        Entwickeln von AmigaOS-Applikationen geeignet sind, existiert noch
  467.        eine Portierung des Oberon System V4, das ebenfalls einen Oberon-2
  468.        Compiler beinhaltet. Das Oberon System läuft auf dem Amiga als ein
  469.        AmigaOS-Task auf einem eigenen Screen. Hiermit kann man Software
  470.        entwickeln, die auch auf allen anderen Implementierungen des Oberon
  471.        System V4 (z.B. für Macintosh, Windows oder Sparc) nahezu ohne
  472.        jede Änderung lauffähig ist.
  473.   
  474.   *Pascal*
  475.        Es gibt einen PD-Compiler namens PCQ (Aminet, Directory `dev/lang'
  476.        oder Fish-Disk 511), der allerdings kein voller Pascal-Compiler
  477.        ist und dem sehr wesentliche Dinge fehlen. P2C konvertiert Pascal
  478.        in C und ist auf der Fish-Disk 341 zu finden. (Aminet:
  479.        `/dev/misc/p2c120.lha') Ferner gibt es zwei kommerzielle Compiler
  480.        namens HiSoft-Pascal (von der gleichnamigen Firma) und KickPascal
  481.        von Maxxon. HiSoft und P2c behaupten, kompatibel zu Turbo-Pascal
  482.        5.0 zu sein. HiSoft hat außerdem einen guten
  483.        Source-Level-Debugger.
  484.   
  485.   4.6 Warum funktioniert keine Esc-Sequenz?
  486.   =========================================
  487.   
  488.      Viele Drucker kommen mit einem Handbuch, das erklärt, welche
  489.   Esc-Sequenzen welche Funktion auslösen. Aber wenn man diese Sequenzen
  490.   dann einmal ausprobiert, passieren oft merkwürdige Sachen, nämlich
  491.   entweder gar nichts oder etwas ganz anderes, als geplant war. Und das
  492.   hat auch einen Grund, nämlich die Amiga-Druckertreiber. Diese Treiber
  493.   sind so gebaut, daß sie nur einen bestimmten Satz `ANSI-Esc-Sequenzen'
  494.   verstehen, nicht die (verschiedenen) druckereigenen, von den
  495.   verschiedenen Druckerherstellern definierten. Der Sinn dabei ist, daß
  496.   jede Anwendung auf dem Amiga nur diesen einen Standardsatz an Sequenzen
  497.   verwendet und so nicht zu wissen braucht, welcher Drucker tatsächlich
  498.   angeschloßen ist. Der Druckertreiber übersetzt dann diese
  499.   Standardsequenzen in die druckereigenen. Eine Liste der verfügbaren
  500.   ANSI-Esc-Sequenzen findet sich im aktuellen Workbench-Handbuch (oder in
  501.   älteren AmigaDOS-Handbüchern). Wenn Du nun eine Steuersequenz an den
  502.   Drucker schicken willst, die es nicht als ANSI-Sequenz gibt, so hast Du
  503.   zwei Möglichkeiten, dies doch zu erreichen:
  504.     1. Umgeh den Druckertreiber (der erfolglos versuchen würde, die
  505.        Sequenz zu interpretieren oder zu übersetzen) und sende die
  506.        Ausgabe *nur* für die Länge dieser Sequenz an `PAR:' (bzw.
  507.        `SER:'). Dabei muß man die Druckerausgabekanäle umständlich oft
  508.        umschalten, und man muß wissen, wo der Drucker angeschlossen ist
  509.        (`PAR:' oder `SER:').
  510.   
  511.     2. Benutze eine spezielle ANSI-Sequenz, genau für diesen Fall
  512.        gedacht:
  513.                 `Esc[<n>"<x>'
  514.        wobei `<n>' die dezimal geschriebene Anzahl an Bytes in der Sequenz
  515.        `<x>' ist, die gerade die spezielle Drucker-Sequenz enthält. Diese
  516.        ANSI-Sequenz sagt dem Druckertreiber, daß er die nächsten `<n>'
  517.        Bytes nicht interpretieren oder übersetzen soll.
  518.           Aber beide Methoden haben einen grossen Nachteil, wenn sie in
  519.   einem Anwendungsprogramm verwendet werden: Man verliert die
  520.   Druckerunabhängigkeit! Solange man sich an die ANSI-Sequenzen hält,
  521.   kann man jeden Drucker der Welt ansteuern, solange es einen
  522.   Amiga-Druckertreiber für ihn gibt.  Wenn man anfängt, druckereigene
  523.   Sequenzen zu verwenden, ist das Programm an diesen einen Druckertyp
  524.   gebunden und mit keinem anderen benutzbar (oder man müßte einige
  525.   dutzend neue Druckertreiber für dieses Programm erstellen).
  526.   
  527.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
  528.   
  529.   4.7 Kann ich AmigaBasic auf dem A1200 verwenden?
  530.   ================================================
  531.   
  532.      Letztens ging eine Kontroverse über AmigaBasic durch die Netze: Ich
  533.   sagte, auf dem A1200 läuft es einigermaßen problemlos, jemand anders
  534.   berichtete, daß es bei jedem kleinsten Fehler sofort komplett
  535.   abstürzt, was ich nicht nachvollziehen konnte.
  536.   
  537.      Jetzt kann ich es: Es liegt am Sound-Prefs-Editor. Wenn man in ihm
  538.   die Sound-Ausgabe ganz abschaltet, kann man mit AmigaBasic arbeiten.
  539.   Wenn hier ein Sound (z. B. Piepsen) angewählt ist, kollidiert das mit
  540.   dem Sound, den AmigaBasic offensichtlich zu Fuß und nicht ganz korrekt
  541.   selber erzeugen will, bumm.
  542.   
  543.      Abhilfe also:
  544.     1. Im Sound-Editor den Ton abstellen.
  545.   
  546.     2. Auf einem A4000 (oder einem A1200 mit Fast-RAM-Erweiterung (1))
  547.        muß man zusätzlich NoFastMem aktivieren.
  548.   
  549.     3. Möglichst SUBs vermeiden und stattdessen herkömmliche GOSUBs
  550.        benutzen, dann ist die Kompatibilität zu neueren Prozessoren
  551.        höher.
  552.   
  553.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.co
  554.   
  555.      ---------- Footnotes ----------
  556.   
  557.      (1)  Nur bei einem zusätzlichen Prozessor
  558.   
  559.   4.8 Wie lokalisiere ich mein Programm?
  560.   ======================================
  561.   
  562.      Nehmen wir an, wir wollen ein `HelloLocalWorld.c' schreiben. Das
  563.   letztendliche Programm sieht dann ungefähr so aus:
  564.   
  565.            #include "HelloLocalWorld_Cat.h"
  566.            #include <clib/exec_protos.h>
  567.        
  568.            struct Library *LocaleBase;
  569.        
  570.            void main(int argc, char *argv[])
  571.        
  572.            {
  573.                /* Öffne die locale.library. (Kein Abbruch, wenn sie nicht
  574.                   da ist, weil dann einfach die eingebauten Strings verwendet
  575.                   werden. Aus diesem Grund auch keine Verwendung des
  576.                   AutoOpening, auch wenn es der Compiler beherrscht.)
  577.                */
  578.                LocaleBase = OpenLibrary("locale.library", 38);
  579.                OpenHelloLocalWorldCatalogs(NULL, NULL);
  580.        
  581.                printf(GetString(MSG_Hello));
  582.        
  583.                CloseHelloLocalWorldCatalog();
  584.                if (LocaleBase) CloseLibrary(LocaleBase);
  585.            }
  586.   
  587.      Die Funktion GetString prüft, ob die gewünschten Kataloge
  588.   vorhanden sind und liefert einen Zeiger auf einen String, entweder den
  589.   eingebauten oder den Katalogstring. (In unserem Fall den deutschen
  590.   String.)
  591.   
  592.      Der Hauptunterschied zum gewohnten HelloWorld.c ist also (abgesehen
  593.   von der minimalen Initialisierung und dem Gegenstück am Programmende,
  594.   das bei den meisten modernen Programmiersprachen oder unter C mit Hilfe
  595.   des FlexCat-Paketes sogar auch noch entfällt), Strings durch einen
  596.   Funktionsaufruf zu ersetzen. Man braucht also eine Datei
  597.   `HelloLocalWorld_Cat.c', die die Funktionen OpenHelloLocalWorld,
  598.   GetString, CloseHelloLocalWorld_Cat.h und die eingebauten Strings
  599.   enthält (dies könnte ein Array sein, das unter anderem
  600.                array[MSG_Hello] = "Hello, local world.\n";
  601.   
  602.   enthält) und ein Includefile `HelloLocalWorld_Cat.h', das die ID's wie
  603.   MSG_Hello definiert. Es ist nicht nötig zu wissen, wie diese Dateien
  604.   intern arbeiten, insbesondere benötigt man auch keine Kenntnis der
  605.   `locale.library'!
  606.   
  607.      Dazu gibt es verschiedene Kataloggeneratoren (im Folgenden KG),
  608.   nämlich `CatComp' (nur für Developer), `KitCat' (nur deutsche
  609.   Dokumentation, was hierzulande kein Problem ist), `MakeCat' (das ich
  610.   nicht kenne) und `FlexCat' (das ich empfehle, einerseits, weil es sehr
  611.   flexibel im erzeugten Source ist und z.B. Lokalisierung unter 2.0 sowie
  612.   beliebige Programmiersprachen unterstützt, selbst Amiga-E, Cluster,
  613.   Pascal, ... und andererseits, weil es von mir ist ;-) ), die diese
  614.   Dateien sowie die Kataloge erzeugen. (Der obige Quelltext könnte je
  615.   nach KG leicht unterschiedlich aussehen.) Siehe Aminet, directory
  616.   `dev/misc'.
  617.   
  618.      Wie funktionieren diese KGs? Zunächst erzeugt man eine sogenannte
  619.   `Katalogbeschreibung' (`Catalog description'), die so aussehen könnte:
  620.            ; Mit einem Semikolon beginnende Zeilen sind Kommentare
  621.            # language english
  622.            ; die Sprache der eingebauten Strings
  623.            # version 0
  624.            ; die Katalogversion (0 = beliebig)
  625.            MSG_Hello (1/15/30)
  626.            Hello, local world
  627.   
  628.   Jeder String wird durch zwei Zeilen wie die letzten beiden definiert:
  629.   MSG_Hello ist die String-ID, (1/15/30) gibt den Wert der ID sowie die
  630.   minimale und maximale Länge an. (Diese Argumente können auch
  631.   weggelassen werden, in welchem Fall einfach die nächste freie ID
  632.   verwendet wird.)
  633.   
  634.      Nun schreiben wir das Programm. Sobald es fertig ist, wird mit dem
  635.   KG eine sogenannte Katalogübersetzung (eine für jede andere Sprache
  636.   als die eingebaute) erzeugt, die so aussehen könnte:
  637.            ; Mit einem Semikolon beginnende Zeilen sind Kommentare
  638.            ## language deutsch
  639.            ; the catalog language
  640.            ## version $VER: Deutsch.catalog 1.0 (22.12.93)
  641.            ; the catalog files version string
  642.            MSG_Hello
  643.        
  644.            ; Hello, local world
  645.   
  646.   Beachten Sie die leere Zeile nach der String-ID! (Die Argumente von ##
  647.   language und ## version wären vielleicht leer.) Hier müssten jetzt
  648.   die deutschen Strings eingesetzt werden. Mit dem KG wird daraus dann
  649.   der eigentliche `Katalog' erzeugt. (Beachten Sie auch, daß hier die
  650.   Angaben über String-ID und Stringlänge fehlen: Sie werden aus der
  651.   Katalogbeschreibung übernommen.
  652.   
  653.      Wenn das Programm verändert wird (neue Strings, andere Längen) und
  654.   die Katalogbeschreibung sich damit ebenfalls ändert, dann kann der KG
  655.   analog benutzt werden, um auch die Katalogübersetzung und damit den
  656.   Katalog auf den neuesten Stand zu bringen.
  657.   
  658.   4.9 Wie erhält man einen Zeiger auf das Fenster einer Konsole?
  659.   ==============================================================
  660.   
  661.      Die folgende Funktion liefert den Window-Zeiger eines CON-Fensters.
  662.   Sie kann unter allen Versionen des Amiga-OS ausgeführt werden.
  663.   
  664.          struct Window *getConWindowPtr(BPTR fh)
  665.          {
  666.            struct Window *w;
  667.            struct FileHandle *cfh;
  668.            struct StandardPacket *sp;
  669.            struct InfoData *id;
  670.            struct MsgPort *mp;
  671.        
  672.            w = NULL;
  673.        
  674.            if ((cfh = BADDR(fh))->fh_Type != NULL) {
  675.              if (sp = AllocMem(sizeof (struct StandardPacket),
  676.                               MEMF_PUBLIC | MEMF_CLEAR)) {
  677.                if (id = AllocMem(sizeof (struct InfoData),
  678.                                 MEMF_PUBLIC | MEMF_CLEAR)) {
  679.                  if (mp = CreatePort(NULL, 0)) {
  680.                    sp->sp_Msg.mn_Node.ln_Name = (char *) &sp->sp_Pkt;
  681.                    sp->sp_Pkt.dp_Link         = &sp->sp_Msg;
  682.                    sp->sp_Pkt.dp_Port         = mp;
  683.                    sp->sp_Pkt.dp_Type         = ACTION_DISK_INFO;
  684.                    sp->sp_Pkt.dp_Arg1         = MKBADDR(id);
  685.        
  686.                    PutMsg(cfh->fh_Type, &sp->sp_Msg);
  687.                    (void) WaitPort(mp);
  688.                    (void) GetMsg(mp);
  689.        
  690.                    if (sp->sp_Pkt.dp_Res1)
  691.                      w = (struct Window *) id->id_VolumeNode;
  692.        
  693.                    DeletePort(mp);
  694.                  }
  695.                  FreeMem(id, sizeof (struct InfoData));
  696.                }
  697.                FreeMem(sp, sizeof (struct StandardPacket));
  698.              }
  699.            }
  700.        
  701.            return w;
  702.          }
  703.   
  704.      Anmerkungen:
  705.      * Auf ein CON-Fenster direkt zuzugreifen kann Konflikte mit Aktionen
  706.        des CON-Handlers hervorrufen. Seien Sie vorsichtig!
  707.   
  708.      * Um den Window-Zeiger einer CLI-Konsole zu erhalten, übergibt man
  709.        ein durch Open("*", MODE_OLDFILE) gewonnenes FileHandle an obige
  710.        Funktion.
  711.   
  712.      * Das Ergebnis der obigen Funktion kann sehr wohl NULL sein, etwa im
  713.        Falle eines AUX-Handlers oder falls ein AUTO-CON-Handler sein
  714.        Fenster nicht öffnen kann.
  715.   
  716.      * Schickt man ein ACTION_DISK_INFO-Paket an einen AUTO-CON-Handler
  717.        (2.0+), so verliert dessen Fenster seine speziellen
  718.        AUTO-Eigenschaften (es kann also nicht mehr durch das Betätigen
  719.        des Close-Gadgets geschlossen werden), weil der in id_VolumeNode
  720.        gelieferte Window-Zeiger gültig bleiben muß.
  721.   
  722.      * Alles in allem: Verwenden Sie diese Funktion nicht. :-)
  723.   
  724.      Weitere Informationen finden Sie auf den Seiten 273, 276, 435, 463,
  725.   485 und 629 im "Amiga Guru Book" (siehe Dokumentation).
  726.   
  727.      Ralph Babel, rbabel@babylon.pfm-mainz.de
  728.   
  729.   4.10 Was sind Pragmas?
  730.   ======================
  731.   
  732.      Pragmas sind spezielle Anweisungen an den C-Compiler.  Zwei Probleme
  733.   entstehen bei der Verwendung von Pragmas:
  734.     1. Pragmas sind hochgradig compilerspezifisch. Nicht einmal die
  735.        Amiga-Compiler haben dieselben Pragmas, selbst wenn damit das
  736.        gleiche bewirkt wird.
  737.   
  738.     2. Man kann sich nicht darauf verlassen, daß ein Compiler Pragmas
  739.        ignoriert, die er nicht versteht. Dies gilt selbst dann, wenn man
  740.        einen Ausdruck wie den folgenden verwendet:
  741.                 #ifndef MY_COMPILER
  742.                 #pragma DoAnything
  743.                 #endif
  744.   
  745.   Das letztere Problem läßt sich umgehen, indem man Pragmas wie folgt
  746.   in eigene Include-Files setzt. (Das gleiche gilt übrigens auch für
  747.   Präprozessor-Kommandos wie #asm (Aztec-C) oder #extern (C++).)
  748.            #ifndef MY_COMPILER
  749.            #include <mypragmas.h>
  750.            #endif
  751.   
  752.      Aber was machen Pragmas auf dem Amiga? Meistens werden sie verwendet,
  753.   um dem Compiler mitzuteilen, wie gewisse Library-Funktionen aufgerufen
  754.   werden. (Tatsächlich wird fast immer diese Verwendung gemeint, wenn
  755.   Amiga-Besitzer über Pragmas sprechen.) Gewöhnliche C-Funktionen
  756.   erwarten ihre Argumente auf dem Stack, Library-Funktionen dagegen in
  757.   bestimmten Registern. Ferner erwarten sie den `Library-Base-Pointer' in
  758.   Register a6.  Betrachten wir eine Pragma-Anweisung von Aztec-C:
  759.            #pragma amicall(SysBase,0xd2,FreeMem(a1,d0))
  760.   
  761.   Dies weist den Compiler an, das erste Argument in Register a1 und das
  762.   zweite in d0 zu laden. Ferner wird der Inhalt der Variablen SysBase in
  763.   Register a6 geladen. Maxon-Pragmas sehen genauso aus, Dice- und
  764.   SAS-Pragmas sind allerdings etwas komplizierter:
  765.            #pragma libcall SysBase FreeMem d2 0902
  766.   
  767.   Hier ist d2 (wie 0xd2 oben) der `Library-Vektor-Offset' (siehe
  768.   nächstes Beispiel). Die letzte Ziffer ist die Zahl der Argumente, die
  769.   davorstehende 0 ein Code für das Register mit dem Ergebnis und die
  770.   davor stehenden Ziffern sind Codes für die Register mit den Argumenten
  771.   in verkehrter Reihenfolge. (Die Codes bedeuten 0=d0, 1=d1, .., 8=a0,
  772.   9=a1, a=a2, ..)
  773.   
  774.      Ein Kommando wie `FreeMem(fib,sizeof(*fib);' würde ein Compiler nun
  775.   in folgenden Code übersetzen:
  776.            move.l  _fib,a1
  777.            move.l  260,d1        ; sizeof(struct FileInfoBlock)
  778.            move.l  _SysBase,a6
  779.            jsr     -0xd2(a6)       ; 0xd2 = _LVOFreeMem
  780.   
  781.   FreeMem in dieser Art aufzurufen ist kürzer und schneller als
  782.   zunächst die Argumente auf den Stack zu legen und dann eine Funktion
  783.   _FreeMem aufzurufen, die letzten Endes doch nur dasselbe tun und die
  784.   Argumente vom Stack in dieselben Register laden würde.
  785.   
  786.      Das Portierungsproblem der Pragmas umgeht man, indem man sie
  787.   folgendermaßen in den eigenen Quelltext einbindet:
  788.            /*  SAS/C, Dice und GNU-c (ab Version 2.6.1) machen es    */
  789.            /*  ganz einfach:                        */
  790.            #if defined(__SASC)  ||  defined(_DCC)  ||  defined(__GNUC__)
  791.              #include <proto/exec.h>
  792.            #else
  793.        
  794.              /*  Lade den Funktionsprototyp. Dieser ist nicht vom    */
  795.              /*  verwendeten Compiler abhängig.            */
  796.              #include <clib/exec_protos.h>
  797.        
  798.              /*  Pragmas sind vom Compiler abhängig, aber wenigstens    */
  799.              /*  die Namen der Dateien mit Pragmas sind relativ    */
  800.              /*  einheitlich.                        */
  801.              #ifdef AZTEC_C
  802.                #include <pragmas/exec_lib.h>
  803.              #elif defined(__MAXON__)
  804.                #include <pragmas/exec_pragmas.h>
  805.              #endif
  806.        
  807.              /*  Deklariere SysBase-Variable                */
  808.              extern struct ExecBase *SysBase;
  809.            #endif
  810.   
  811.   Das obige Beispiel kann problemlos mit allen angegebenen Compilern
  812.   verwendet werden und produziert optimalen Code. (Die proto/*.h-Files
  813.   machen übrigens auch nichts anderes als clib/*_protos.h und
  814.   pragmas/*_pragmas.h mit #include einzulesen und dann die
  815.   SysBase-Variable zu deklarieren.)
  816.   
  817.      Eine abschließende Frage bleibt allerdings: Wie bekommt man die
  818.   Pragmas?  Die meisten Compiler haben bereits fertige Pragmas im
  819.   Lieferumfang.  Allerdings hilft das nicht, wenn man z.B. eine neue
  820.   Library benutzen möchte oder nur die Pragmas einer veralteten Version
  821.   hat. In diesem Fall kann man die Pragmas selbst aus den sogenannten
  822.   `FD'-Files erzeugen.  Dazu haben die meisten Compiler ein Utility
  823.   namens `fd2pragma'.  (Das NDU hat z.B. ein Directory namens FD, in dem
  824.   die FD-Files aller Libraries und Devices des OS enthalten sind. siehe
  825.   Include-Dateien) Es gibt auch ein frei kopierbares fd2pragma, das
  826.   Pragmas für Aztec, Dice, SAS und Maxon sowie LVO-Files für den
  827.   Aztec-Assembler und eventuelle Tag-Versionen produziert. (Aminet,
  828.   `dev/misc/fd2pragma2_0.lha' oder auf den Fish-CDs)
  829.   
  830.      Für Pragmas unter dem gcc siehe Inline-Dateien.
  831.   
  832.   4.11 Mein Compiler/Linker vermißt Symbole.
  833.   ==========================================
  834.   
  835.      Zunächst sollte man sich versichern, daß die Funktion tatsächlich
  836.   fehlt: Z.B. Floating-Point-Funktionen befinden sich in einer speziellen
  837.   Link-Library, die erst mit der Option `-lm' eingebunden wird.  Ferner
  838.   kann es eine fehlende Variable sein: Wenn man z.B. ohne es zu bemerken
  839.   eine Intuition-Funktion benutzt, dann wird der Linker über das Fehlen
  840.   eines Symbols `IntuitionBase' klagen. In diesem Fall muß man also
  841.   lediglich das Folgende irgendwo im globalen Teil seines Quelltextes
  842.   einbauen:
  843.            struct Library *IntuitionBase;
  844.   
  845.   (Und vergessen Sie nicht, die Library mit OpenLibrary() zu eröffnen und
  846.   mit CloseLibrary() zu schließen!) :-)
  847.   
  848.      Allerdings könnte die Funktion natürlich tatsächlich fehlen. Wenn
  849.   man zum Beispiel nur die Version 2.0 der amiga.lib hat, dann fehlen
  850.   etwa die Locale-Funktionen oder die Memory-Pool-Funktionen, obwohl sie
  851.   prinzipiell verwendbar sind. (1) Die einfachste (und beste) Lösung
  852.   ist, das sogenannte NDU zu kaufen.  Siehe Include-Dateien. Wer nicht
  853.   solange warten möchte, für den ist die Frage, welche Art von Funktion
  854.   in seiner Link-Library fehlt:
  855.      * Einfache Amiga-Library-Funktionen (z.B. `exec/AllocPooled' oder
  856.        `locale/OpenCatalogA') kann man mit Pragmas aufrufen und braucht
  857.        dann lediglich Informationen über die Aufrufkonventionen
  858.        (Library-Base, Library-Vektor-Offset und Argumentregister)
  859.   
  860.      * Tag-Funktionen sind meistens einfach Zwischenfunktionen, die ihre
  861.        Argumente auf dem Stack erwarten und dann die eigentliche
  862.        Library-Funktion aufrufen. Wenn man z.B. die Funktion
  863.        `dos/AllocDosObject', die eine Konstante und einen Zeiger auf ein
  864.        Array als Argumente erwartet, nach der obigen Methode konstruiert
  865.        hat, dann hat man damit auch ihre Stack-Variante! Dazu erzeugt man
  866.        einfach die folgende Funktion:
  867.                 #include <clib/dos_protos.h>
  868.                 #include <pragmas/dos_pragmas.h>    /*  Evtl. anderer Name    */
  869.             
  870.                 void *AllocDosObjectTags(ULONG objtype, Tag tag1, ...)
  871.                 { return(AllocDosObject(objtype, (struct TagItem *) &tag1);
  872.                 }
  873.   
  874.        Mit fd2pragma kann das auch automatisch geschehen. Siehe Pragmas.
  875.   
  876.      * Einige Funktionen bleiben aber noch übrig: Amiga.lib enthält
  877.        nämlich auch Funktionen, die für sich selbst interessant sind,
  878.        z.B. die BOOPSI-Funktionen (`DoMethod', `DoSuperMethod'), die
  879.        Memory-Pool-Funktionen (`LibAllocPooled', `LibCreatePool', die
  880.        Ersatz für entsprechende 3.0-Funktionen sind) oder `HookEntry',
  881.        das sehr hilfreich bei der Programmierung von Hooks ist. Diese
  882.        kann man nur durch entsprechende, disassemblierte und neu
  883.        assemblierte oder compilierter Versionen ersetzen. Im
  884.        AmigaFAQ-Archiv sind einige dieser Funktionen bereits enthalten.
  885.   
  886.      ---------- Footnotes ----------
  887.   
  888.      (1)  Dieses Problem  betrifft vor allem Besitzer von Aztec-C, das
  889.   seither nicht weiter unterstützt wird und von Dice, der manchmal etwas
  890.   unvollständig ist. Ich besitze beide ..
  891.   
  892.   4.12 Wie erfahre ich, was für Funktionen es gibt?
  893.   =================================================
  894.   
  895.      Wenn Sie sich über den Namen einer für einen bestimmten Zweck
  896.   geeigneten Funktion im Unklaren sind, dann gibt es folgende
  897.   Möglichkeiten:
  898.      * In den Autodocs der verschiedenen Libraries findet man am Anfang
  899.        eine alphabetisch sortierte Tabelle aller Funktionen, die die
  900.        betreffende Library bietet. Im Hauptteil findet man dann eine
  901.        detaillierte Spezifikation aller Funktionen. Siehe Include-Dateien.
  902.   
  903.      * Die `.FD'-Dateien bieten eine sehr kompakte Übersicht über die
  904.        Funktionen der diversen Libraries, sogar mit einer kurzen Angabe
  905.        der Funktionsargumente. Wenn man schon grob weiß, wonach man
  906.        sucht (z.B. nur die grobe Angabe der Argumente benötigt), dann
  907.        findet man hier alle gewünschten Informationen. Siehe Pragmas.
  908.   
  909.      Dr. Peter Kittel, peterk@cbmger.de.so.commodore.com
  910.   
  911.   4.13 Der GNU C Compiler: Allgemeine Informationen und Installation
  912.   ==================================================================
  913.   
  914.      Dieser Abschnitt enthält Informationen über den Amiga-Port des GNU
  915.   C Compilers generell und die Installation insbesondere.
  916.   
  917.   4.13.1 Aktuelle Version
  918.   -----------------------
  919.   
  920.      Die aktuelle gcc-Version ist 2.6.0 und an 2.6.1 wird gearbeitet.
  921.   Sie enthält eine neue Version der ixemul.library (v40.3), aber man
  922.   sollte sich wegen Fehlern, die sich auf 68000-Systemen bemerkbar
  923.   machen, ixemul404.lha vom Aminet oder von meiner FTP-Site holen.
  924.   Außerdem gibt es eine neue library, libnix, die das Benützen der
  925.   ixemul.library verhindert.  2.6.1 wird Protos (wie bei SAS-C)
  926.   enthalten, um das Kompilieren von SASC-Code unter gcc leichter zu
  927.   machen.  Ein neuer Assembler, gas-2.5, ist enthalten, ein Paket namens
  928.   q_anote ermöglicht die Ausgabe von gemischtem C/Asm-Code zu
  929.   Debugging-Zwecken.  In Arbeit ist die Fähigkeit des Compilers, den
  930.   Stack wachsen zu lassen, damit man vor dem Starten von gcc nicht mehr
  931.   den Stack setzen muß.
  932.   
  933.   4.13.2 Hardwareanforderungen
  934.   ----------------------------
  935.   
  936.      Jeder Amiga (vom A1000 bis zum A4000/40) ist prinzipiell in der
  937.   Lage, die GNU-Utilities für AmigaDOS zu benutzen. Allerdings braucht
  938.   man wenigstens 4MB RAM, um kleinere oder mittlere Projekte zu
  939.   übersetzen, für größere (z.B. für gcc selbst) entsprechend mehr.
  940.   Gigamem und VMM arbeiten mit gcc zusammen, es *könnte* also evtl.
  941.   auch mit weniger gehen. Dazu braucht man aber eine MMU.  Siehe 68EC0xx.
  942.   
  943.      Eine volle Installation mitsamt C++ und Objective-C, inline-Dateien
  944.   und Commodore Includes (siehe Include-Dateien) benötigt ca. 20 MB
  945.   Platz auf der Festplatte.
  946.   
  947.      Kickstart 1.2/1.3 wird nicht mehr unterstützt. Wer KS 1.2/1.3 hat,
  948.   sollte sich eine bessere Kickstart-Version kaufen.  Gcc arbeitet auch
  949.   unter Kickstart 1.2/1.3, die volle Funktionalität ist aber erst ab
  950.   Kickstart 2.x+ vorhanden. Eine schnelle CPU (z.B. 68030@25MHz oder
  951.   besser) ist ebenfalls sinnvoll.
  952.   
  953.   4.13.3 Wer hat es gemacht?
  954.   --------------------------
  955.   
  956.      Gcc und damit zusammenhängende Software wurde von den folgenden
  957.   Personen auf den Amiga portiert (siehe Hilfe):
  958.            Gcc v2.2.2:   Markus Wild
  959.            Gcc v2.3.3:   Markus Wild
  960.            Gcc v2.4.5:   Philippe Brand, Lars Hecking, Fred Fish
  961.            Gcc v2.5.0 und später: Philippe Brand, Fred Fish, Leonard Norrgard
  962.        
  963.            Ixemul.library:    Markus Wild, Leonard Norrgard, R. Luebbert
  964.            Libnix:           Matthias Fleischer, Gunther Nikl
  965.                Gerlib:            Gerhard Müller
  966.   
  967.   4.13.4 Wo finde ich die gcc-Quelltexte?
  968.   ---------------------------------------
  969.   
  970.      Alle gcc-Quelltexte und alle Binärdateien findet man auf:
  971.   
  972.     1. Aminet (wuarchive.wustl.edu und Mirror wie ftp.luth.se) in
  973.        /pub/aminet/dev/gcc (siehe FTP)
  974.   
  975.     2. Ramses The Amiga Flying BBS:
  976.                 +33-1-60037015  HST Dual v32 terbo 4800-21600
  977.                     +33-1-60037713  SupraFax v32bis    4800-14400
  978.                     +33-1-60037716  Tornado v22bis     1200-2400
  979.        in Topic `Development', Area `Gcc' (are 156).
  980.   
  981.      Den originalen GNU-Quelltext bekommt man
  982.   
  983.     1. von denselben FTP-Servern wie die Binaries
  984.   
  985.     2. gnu.prep.ai.mit.edu (18.71.0.38) in `/pub/gnu'
  986.   
  987.     3. Ramses The Amiga Flying BBS in Topic
  988.        `AmigaUnix/Unix/Linux/NetBSD', Area `Gnu Source Code'
  989.   
  990.      Diese Archive sollten alles Nötige enthalten, mit Ausnahme der
  991.   Quelltexte der ixemul.library. Diese erhält man ebenfalls auf dem
  992.   Aminet, Directory `dev/gcc'. (Zur Zeit ist die Version 40 der
  993.   ixemul.library in Arbeit. Die Quelltexte werden am gleichen Ort sein.)
  994.   
  995.      Durch Richard Stallman, Free Software Foundation, ist festgelegt:
  996.   
  997.      "The GPL says that any distribution of binaries must contain either
  998.   the source code or a written offer to supply source code (see the GPL
  999.   for details of what is required)."
  1000.   
  1001.      Übersetzt: Die GPL (GNU General Public License) legt fest, daß jede
  1002.   Distribution entweder den Quelltext oder das schriftliche (oder
  1003.   geschriebene?) Angebot, diese zu liefern, enthalten muß. (Näheres
  1004.   siehe in der GPL.)
  1005.   
  1006.   4.13.5 Inline-Dateien
  1007.   ---------------------
  1008.   
  1009.      Die Inline-Dateien für den gcc kann man aus den originalen
  1010.   FD-Dateien von Commodore wie folgt erzeugen (Siehe Include-Dateien,
  1011.   siehe Pragmas):
  1012.   
  1013.        CLI> Assign INCLUDE: GCC:os-include
  1014.        CLI> Assign FD: INCLUDE:fd
  1015.        CLI> Makedir INCLUDE:inline
  1016.        CLI> cd USR:bin/geninline
  1017.        CLI> gen31
  1018.   
  1019.      Dies sollte alle Inline-Dateien in `GCC:os-include/inline' erzeugen.
  1020.   Falls man die 2.0- bzw. 3.0-Includes besitzt, sollte man gen20 bzw.
  1021.   gen30 benutzen. Inline-Dateien für OS3.1 (rev 40.13) sind in
  1022.   <gcc-aktuell> enthalten. Siehe Aktuelle Version.  (1)
  1023.   
  1024.      Auch mit dem Programm fd2inline kann man Inline-Dateien erzeugen:
  1025.   
  1026.        CLI> fd2inline <fd_file> <proto_file>
  1027.   
  1028.      ---------- Footnotes ----------
  1029.   
  1030.      (1)  Perl Skripte haben Schwierigkeiten, die Include-Dateien von
  1031.   AmigaDOS korrekt zu behandeln. Hier wäre etwas freiwillige Arbeit
  1032.   nötig ...
  1033.   
  1034.   4.13.6 Wie konvertiere ich die Amiga-Libraries für den gcc?
  1035.   -----------------------------------------------------------
  1036.   
  1037.      Ab gcc Version 2.6.0 werden dank den libnix-Autoren (Matthias
  1038.   Fleischer und Gunther Nikl) AmigaDOS Linklibraries unterstützt.
  1039.   
  1040.      Wenn man trotzdem eine gcc-Linklibrary generieren will, gibt es zwei
  1041.   Methoden:
  1042.   
  1043.      1. Mit hunk2gcc, dem AmigaDOS-Object-Konvertierer von Markus Wild.
  1044.   Dazu braucht man zunächst eine aktuelle Kopie der amiga.lib (aus dem
  1045.   NDU, siehe Include-Dateien). Nachdem man sich ein Directory für die
  1046.   konvertierten Dateien erstellt hat, wechselt man mit cd in dieses
  1047.   Directory und gibt das Folgende ein:
  1048.            hunk2gcc amiga.lib [..further libs if you like..]
  1049.   
  1050.   Dies erzeugt ein Objektfile wie a.out für jedes einzelne Modul, das
  1051.   die Library enthält. Diese Module muß man anschließend in einer
  1052.   gcc-Library zusammenfassen:
  1053.            ar qc libamiga.a obj.*
  1054.            ranlib libamiga.a
  1055.   
  1056.   Das Programm ranlib fügt eine Symboltabelle in die Library ein.
  1057.   (Dadurch wird der Zugriff auf die Library sehr viel schneller.)
  1058.   
  1059.      2. Eine libamiga.a mit libnix zu generieren ist recht leicht, braucht
  1060.   aber einige Zeit. Man dekomprimiere sources.lha aus dem libnix-Archiv
  1061.   und starte ein 'make libamiga.a'.
  1062.   
  1063.      *Beachte:* Solange man keine reinen AmigaDOS-Funktionen verwendet,
  1064.   kann man auch eine Pseudo-Library erzeugen:
  1065.          cat "int dummy;" >dummy.c
  1066.          gcc -c dummy.c
  1067.          ar crv libamiga.a dummy.o
  1068.          mv libamiga.a gcc:lib
  1069.   
  1070.   4.13.7 Wie installiere ich den gcc?
  1071.   -----------------------------------
  1072.   
  1073.     1. Falls dies die erste Installation von gcc ist:
  1074.   
  1075.        Mache das Folgende:
  1076.   
  1077.             cd ort_mit_sehr_viel_platz      ; ÄNDERN! Gib eine Schublade an
  1078.             makedir gnu
  1079.             lha x gcc260-base.lha           ; Der erste Teil, du brauchst ihn
  1080.   
  1081.        Jetzt mußt du `gnu/s/user-startup' an dein `S:User-Startup'
  1082.        anhängen (Ersetze Devel:GNU durch deinen eigenen Gnu Pfad).
  1083.   
  1084.        Weiter:
  1085.   
  1086.             execute gnu/s/user-startup     ; setzt wichtige Assigns
  1087.             copy gnu/envarc/#? ENVARC:
  1088.   
  1089.        *Ändere* die folgenden Zeilen!  Wenn du einen 68000- oder
  1090.        68010-Amiga hast, entferne das "-020" aus allen folgenden Zeilen!
  1091.   
  1092.             lha x gcc260-c-020.lha      ; Der C-compiler; du brauchst ihn
  1093.             lha x gcc260-doc.lha        ; Wenn du die Dokumentation zu gcc willst
  1094.             lha x gcc260-c++-020.lha    ; Wenn du C++ haben willst
  1095.             lha x gcc260-objc-020.lha   ; Wenn du Objective-C haben willst
  1096.             lha x gcc260-utils.lha      ; Wenn du zusätzliche Utilities haben willst
  1097.                                         ; (empfohlen zur Kompatibilität mit Unix)
  1098.             lha x gcc260-utilsdoc.lha   ; Wenn du Dokumentation zu allen Utilities willst
  1099.   
  1100.        Mit dem Script `restorelinks' mußt du Links generieren:
  1101.   
  1102.             sh /gnu/s/restorelinks      ; ÄNDERN! Füge " copy" an diese Zeile an,
  1103.                                         ; wenn du MakeLink nicht benützen willst,
  1104.                                         ; sondern Files lieber kopieren willst
  1105.   
  1106.        Schließlich:
  1107.   
  1108.             lha x gcc260-diffs.lha      ; Wenn du gcc neu kompilieren willst
  1109.             lha x gcc260-texi.lha       ; Wenn du Postscript-Doku generieren willst
  1110.   
  1111.        Auf zum nächsten Punkt und fröhliches Kompilieren!
  1112.   
  1113.     2. Wenn du ein Upgrade deiner gcc-Umgebung von v2.5.x machen willst,
  1114.        dearchiviere einfach gcc260-base.lha und gcc260-c-020.lha. Gehe
  1115.        sicher, daß du deine frühere ixemul.library löschst, wo sie
  1116.        sich auch befindet.  (Üblicherweise in `LIBS:')
  1117.   
  1118.   
  1119.      *Beachte*: Eine neue Version der ixemul.library wird verwendet, gehe
  1120.   bitte sicher, daß nirgends eine andere Kopie ist, die in Konflikt mit
  1121.   der neuen Version geraten kann.
  1122.   
  1123.   4.13.8 Kompilieren
  1124.   ------------------
  1125.   
  1126.      Wie wär's mit einem netten `Hello world'?
  1127.   
  1128.        #include <stdio.h>
  1129.        
  1130.        main()
  1131.        {
  1132.          printf("Hello World!\n");
  1133.        }
  1134.   
  1135.      Das war recht einfach ;-) Jetzt müssen wir es kompilieren.  Es gibt
  1136.   eine Menge Optionen in gcc, aber die einfachste Möglichkeit zu
  1137.   kompilieren ist:
  1138.   
  1139.        CLI> gcc -o hello hello.c
  1140.   
  1141.      Einfach?  Hier sind mehr Optionen:
  1142.   
  1143.      Ziel-Prozessoren von Motorola: Man kann reinen 68000 code, 68020,
  1144.   68030, 68040 und/oder 68881 kompilieren.  (Siehe Gcc-Dokumentation,
  1145.   Kapitel `Invoking Gcc/SubModel Options/M680X0 Options for Motorola
  1146.   specific compilation flags'.
  1147.   
  1148.        CLI> gcc -m68020 -m68881 -o hello hello.c
  1149.   
  1150.      Dies kompiliert Programme mit 68020 Code und direkten FPU-Befehlen
  1151.   und bindet mit den beschleunigten Libraries aus `GCC:lib/lib020'.
  1152.   
  1153.      Optimierung: Entweder du willst keine Optimierung oder du gibst `-O'
  1154.   an, das den Code optimiert, oder `-O2' für bessere Optimierung (Siehe
  1155.   die Dokumentation im Kapitel `Invoking Gcc/Optimize Options').
  1156.   Inzwischen gibt es auch eine `-O3' Option, die noch weiter geht.
  1157.   
  1158.        CLI> gcc -O2 -o hello hello.c
  1159.   
  1160.      Ein schnelles "Hello World" ;-)
  1161.   
  1162.      Codegenerierung: Vielleicht willst du residente Programme haben.
  1163.   Die Option dazu heißt `-resident'.
  1164.   
  1165.        CLI> gcc -resident -o hello hello.c
  1166.   
  1167.      Natürlich kannst du alle Optionen mischen, so etwa:
  1168.   
  1169.        CLI> gcc -O2 -m68020 -m68881 -resident -o hello hello.c
  1170.   
  1171.      Dies wird ein hoch optimiertes residentes Programm für 68020 und
  1172.   68881 ergeben.
  1173.   
  1174.      *Wichtig:* Wenn du nur AmigaOS-Funktionen verwendest oder aus
  1175.   irgendwelchen philosophischen Gründen keine ixemul.library verwenden
  1176.   willst, dann kannst du diese loswerden durch:
  1177.   
  1178.        CLI> gcc -noixemul -o foobar foobar.c
  1179.   
  1180.      natürlich nur, wenn du libnix hast (enthalten in gcc 2.6.0).
  1181.   
  1182.   4.13.9 Wichtige Informationsquellen
  1183.   -----------------------------------
  1184.   
  1185.      Der aktuelle Betreuer des Amiga-Ports von gcc ist:
  1186.            Philippe BRAND
  1187.            Fidonet: Ramses The Amiga Flying BBS 2:320/104.21
  1188.            Email:   phb@colombo.telesys-innov.fr (ONLY for personnal email).
  1189.            Ftp:     colombo.telesys-innov.fr:/pub/amigados-gnu
  1190.                     or /pub/incoming/uploads for uploads.
  1191.   
  1192.      Es gibt auch eine Mail-Liste in Finnland. Siehe Mail-Listen.
  1193.   Philippe Brand wird im Normalfall Fragen an diese Liste weiterleiten.
  1194.