home *** CD-ROM | disk | FTP | other *** search
/ ftp.pasteur.org/FAQ/ / ftp-pasteur-org-FAQ.zip / FAQ / de-amiga-faq / part2 < prev    next >
Text File  |  1996-04-12  |  55KB  |  1,244 lines

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