home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD2.iso / ASCII / TEXTE / SCENE / FAQ-LISTS / cfaq_5.txt < prev    next >
Encoding:
Text File  |  1995-01-03  |  22.9 KB  |  530 lines

  1. _______________          _____      _____   _________       ___________________
  2. \.            /________ |.   /_____:o    | /.        \/|___/_       \         /
  3.  \___   _____/|.   /   \||  /|.    |:    |//   ______/·|.   / ______ \    ___/
  4.    /.   /_/·  ||  /     \:  \||    |·    |/   /   \ \/ ||  /_______ \/+    /
  5.   //  ____/   ||  \   \  \   \:   ¯¯¯    |   /    / /  ||  \ /·\  /  \  __/_
  6.  //   / //    |+   \   \      \  \___/   |   \___/ /   |·   \/  \/   /      /
  7. /·   /  \\         /    \     /    |:    |        /         /       /      /
  8. \___/    \________/_____|\___/:    |_____|_______/\________/_______/______/
  9.                              l_____|·MBB·
  10.  
  11.  
  12. _ ___                  \ _
  13.   ___|__________/\______\//\________________________________________________ _
  14.   \___   /  ___/  \_____\//\______________      /\   ______/  _______/  ___ _
  15.      | _/   \ _    \_   \/     |   ___)_/_  ___/_/_  ___)_\______   \______
  16.      | \     \/     /   ||     |   \      | \      | \          /    /    /
  17.  _ __|  \__________/____||     |____      |__      |__         _____/    ___ _
  18.      `----'              `-----'   `------' `------' `---------'  `------'
  19.                                                                          
  20.                               [hOMELESS÷bBS!]
  21.  
  22.     [bIRDHOUSE^pROJECTS eUROPEAN hQ][mYTH! gERMAN hQ][aRT-cORE! fUN hQ]
  23.  
  24.             [sYSdOODE: -sLIME!^bIRDHOUSE÷pROJECTS-lEADER^mYTH!]
  25.                [cOdOODES: mOGUe!/sCX^aC! pRIMUS!/bP!-lEADER]
  26.                      [MR.VAiN/bNZ^aC! wHIRLWIND/mYTH!]
  27.  
  28.             [uPLOADER:GeNeRaTioN      ][oF:[+] PRODIGY '95 [+]]
  29.                [uPLOAD tIME:13:53:20][uPLOAD dATE:03-Jan-95]
  30.  
  31. _ ___                  \ _
  32.   ___|__________/\______\//\________________________________________________ _
  33.   \___   /  ___/  \_____\//\______________      /\   ______/  _______/  ___ _
  34.      | _/   \ _    \_   \/     |   ___)_/_  ___/_/_  ___)_\______   \______
  35.      | \     \/     /   ||     |   \      | \      | \          /    /    /
  36.  _ __|  \__________/____||     |____      |__      |__         _____/    ___ _
  37.      `----'              `-----'   `------' `------' `---------'  `------'
  38.  
  39.  
  40.  
  41.  
  42.   «------------------[ eLITE gUYS wILL gET iNVITED hERE ]------------------»
  43.         .         .        .            .    :   ·    .
  44.    ____/¦__   ___/¦____ __/¦___________/¦__  ¦   ¦___/¦__         !
  45.    _ ____  \__\____  _//  _____\_________  \ |   | ____  \__     _:/\__
  46.     /·  |____//·  |   \\_____ ·\|   |   |  \\|   |/·  |____/     \ Oo /
  47.    //   |    \    |    \   l   \\   |   |   ·\_  //   |    \     /_--_\
  48.    \__________\________/________/___j___j     /  \__________\     :\/
  49.    -------------------------------------l____/   :-----------     ¡
  50.                                              ·   ·
  51.                     .     :   ·    .           .         .        .
  52.     !        _ ____/¦__   ¦   ¦____¦\____ ____/¦__   ___/¦____ __/¦_____ __
  53.    _:/\__    _ _ ____  \__|   |______   \ _ ____  \__\_  |  _//  _____ __ _
  54.    \ Oo /       /·  |____/|   |/· __  __/  /·  |____//·  |   \\_____ ·\
  55.    /_--_\      //   |    \|   //   |    \_//   |    \    l    \   l   \\
  56.     :\/        \__________\   \____j     /\__________\________/________/
  57.     ¡          -----------·   :----l____/-------------------------------
  58.                           ·   ·
  59.      <*> pRODIGY gHQ <*> nEUTRON wHQ <*> iLLUSION eHQ <*> dYNAMIX gHQ <*>
  60.  
  61.               Upload Date: [01-03-95] «» Upload Time: [07:18:21]
  62.  
  63.   «-------------------[ aSK eLITE fOR SYS-PW & NUMBA ! ]-------------------»
  64.  
  65.                     .__ _                                            r      
  66.                     :   __tHIS fILE wAS D/L fROM                     I      
  67.                  _ _02-Jan-95_________________________:              N      
  68.                    _|   \/                            |              G      
  69.                    \/       T¾R¾S¾I LEADER H¾Q     \\ ²  tRISTAR & rED      
  70.                     ­                               \ ­          sECTOR     
  71.     ö   .           |_/\________/\__.___   _/\_______ |              W      
  72.      /\             |\    ._    \   ­   \  \     ____)²             iNC.    
  73.    . \/\------------|/    |/____/        \ /     __)__!---------------.     
  74.      |\/            /     ²   /     |     \           \   4nODEZ      |     
  75.      |              \_____|   \_____²_____/___________/               !_    
  76.      |ö             |                                 |              /_/\   
  77.      |  _/\__.___   !/\_._/\________/\________/\______!  _/\______   \_\/   
  78.      |  \    ­   \  \___!\    ._    \   ._    \    ____) \    .   \   |     
  79.      00:13:23     \ /   |/    |/    /   |/    /    __)__ /    |    \_/¹     
  80.        /     |     \    |     /    /    /    /          \     |     \       
  81.        \_____²_____/____²_________/_________/___________/_____²_____/ö2Fö   
  82.                     ²                                 ²                     
  83.                    _!/\__                             |__                   
  84.                    \ Oo /   +49  p¾R¾I¾V¾A¾T¾E¾!   ___| /                   
  85.    eLITE gUYS      /_--_\                          \  //                    
  86.     wILL gET        ²\/      tHE hOLY mASTER iS     \/|                     
  87.   iNVITED hERE      !              mClOUD             ²                     
  88.                     ²  aND hIS hELPING hAND iS mARIO  :                     
  89.                     :                                                       
  90.                     ¾   aSK fOR nUMBER aND sYSPW/nUP
  91.  
  92.  
  93. @BEGIN_FILE_ID.DIZFREQUENTLY ASKED QUESTIONS ABOUT `C`
  94. -German Edition-
  95. 5-10
  96. @END_FILE_ID.DIZ
  97. /Teil 5/
  98.  
  99.           Q3.2  Was ist ein Prototyp?
  100.  
  101.  
  102.           Prototypen   wurden  mit  ANSI C  eingeführt,  sie  sind   eine
  103.           spezielle  Form der Deklaration von Funktionen (allerdings  ist
  104.           nicht jede Deklaration einer Funktion ein Prototyp).
  105.  
  106.           Im Unterschied zur alten Form  der  Deklaration  einer Funktion
  107.           enthält   die   neue   Form   (die  Prototypen-Form)  auch  die
  108.           Argumenttypen:
  109.  
  110.                int func1();                  /* K&R Deklaration  */
  111.  
  112.                int func2(int i, char *s);    /* ANSI Prototyp    */
  113.  
  114.           Nur die  Deklaration von func2() nennt man einen Prototypen für
  115.           func2(), die Deklaration von func1()  ist  genau  das,  was sie
  116.           schon immer war: eine Deklaration.
  117.  
  118.           Auch wenn ANSI C die alte  Form  der  Deklaration  noch zuläßt,
  119.           sollte  man  immer Prototypen verwenden.  Dies  ermöglicht  dem
  120.           Compiler,  Aufruf-Fehler  zu  erkennen,  und erleichtert  evtl.
  121.           Optimierungen. In einem Fall muß  man  sogar  die Prototyp-Form
  122.                      Deklarationen, Definitionen, Prototypen           25
  123.           ---------------------------------------------------------------
  124.  
  125.  
  126.           verwenden: Bei Prototypen gibt es  mit  '...'  die Möglichkeit,
  127.           Funktionen mit variabler Argumentliste explizit zu deklarieren.
  128.           Eine solche Deklaration  ist  in ANSI C nicht optional, sie muß
  129.           mit '...' erfolgen (siehe dazu Q3.4 und Q4.1). In K&R C gibt es
  130.           dafür keinen Sprachkonstrukt. Allerdings  lassen  sich  auch in
  131.           K&R C  Funktionen  mit variabler  Argumentliste  programmieren,
  132.           siehe ebenfalls Q4.1.
  133.  
  134.           Schreibt man  eine Header-Datei,  die  sowohl  mit  einem  K&R-
  135.           also auch mit einem  ANSI-Compiler  verwendet  werden  soll, so
  136.           kann  man  sich  mit  Hilfe  des Preprozessors aus  der  Affäre
  137.           ziehen. Eine Möglichkeit ist:
  138.  
  139.                #ifdef __STDC__     /* ANSI Prototypen       */
  140.                void f1(int i);
  141.                int  f2(double d);
  142.                #else               /* K&R Deklarationen     */
  143.                void f1();
  144.                int  f2();
  145.                #endif
  146.  
  147.           Da  man  bei obiger Form  alle  Funktionsdeklarationen  doppelt
  148.           schreibt, findet man häufig auch:
  149.  
  150.  
  151.                #ifdef __STDC__     /* ANSI Prototyp    */
  152.                #  define P(x)   x
  153.                #else               /* K&R Deklaration  */
  154.                #  define P(x)   ()
  155.                #endif
  156.  
  157.                void f1 P( (int i) );
  158.                int  f2 P( (double d) );
  159.  
  160.                ...
  161.  
  162.                #undef P
  163.  
  164.           Das  abschließende  #undef P  ist  nicht  unbedingt  nötig,  es
  165.           vermeidet eventuelle Konflikte nur teilweise.              (tw)
  166.  
  167.  
  168.           Q3.3  Wie lese ich komplexe Deklarationen?
  169.  
  170.  
  171.           Um  Deklarationen   zu   lesen,   muß   man   die   sogenannten
  172.           "Deklaratoren"  kennen.  Deklaratoren  sind  eigentlich  nichts
  173.           besonderes, sie sind die Gegenstücke  zu  den  Operatoren. Dazu
  174.           ein Beispiel:
  175.  
  176.           Bei der Deklaration
  177.  
  178.                int  array[];
  179.           26           Deklarationen, Definitionen, Prototypen
  180.           ---------------------------------------------------------------
  181.  
  182.  
  183.           ist [] ein Deklarator (genauer: der Array-Deklarator). Wird nun
  184.           auf ein so deklariertes Array zugegriffen, dann  geschieht dies
  185.           z.B. in der Form
  186.  
  187.                j = array[0];
  188.  
  189.           Hier ist [] jetzt der Array-Subscription Operator.
  190.  
  191.           Warum dieses Beispiel? Um Deklarationen zu lesen,  benötigt man
  192.           die Bindung und den Vorang der Deklaratoren. Dummerweise findet
  193.           man  jedoch  in praktisch keinem  Lehrbuch  eine  entsprechende
  194.           Liste. Zum Glück geht es auch ohne, da Deklaratoren die gleiche
  195.           Bindung  und  den   gleichen  Vorrang  wie  die  entsprechenden
  196.           Operatoren  besitzen.  Man  kann  also  die  in  jedem halbwegs
  197.           brauchbaren  Lehrbuch enthaltene  Tabelle  mit  den  Operatoren
  198.           verwenden.
  199.  
  200.           Kennt man diese, dann kann man  (komplexe)  C-Deklarationen von
  201.           innen nach außen lesen. Angefangen wird  beim  Objektnamen (dem
  202.           Namen der Funktion oder Variable).  Von  da  arbeitet  man sich
  203.           - unter Berücksichtigung  des  Vorrangs  und  der  Bindung  der
  204.           Deklaratoren - nach außen vor.
  205.  
  206.           Die  gesamte  Bedeutung  der  Deklaration wird dabei stückweise
  207.           zusammengesetzt. Dazu benötigt man folgende "Textbausteine":
  208.  
  209.           name      "'name' ist"
  210.  
  211.           *         "Pointer auf"
  212.  
  213.           (...)     "Funktion mit den Parametern ... und dem Rückgabetyp"
  214.  
  215.           [...]     "Array von ..."
  216.  
  217.           Datentyp  "Datentyp"
  218.  
  219.           Das Ergebnis muß man üblicherweise noch etwa  "weichspülen", um
  220.           ein erträgliches Deutsch zu erhalten.
  221.  
  222.           Beispiele:
  223.  
  224.           Die Bedeutung von
  225.  
  226.                  char **var[];
  227.                /* ^   ^^ ^ ^ */
  228.                /* 5   43 1 2 */
  229.  
  230.           erhält man in folgenden fünf (bzw. sechs) Schritten:
  231.  
  232.              1.  Objektname:
  233.  
  234.                       'var' ist
  235.  
  236.              2.  '[]' hat Vorrang vor '*':
  237.  
  238.                       'var' ist Array von
  239.                      Deklarationen, Definitionen, Prototypen           27
  240.           ---------------------------------------------------------------
  241.  
  242.  
  243.              3.  Innerer '*':
  244.  
  245.                       'var' ist Array von Pointer auf
  246.  
  247.              4.  Zweiter '*':
  248.  
  249.                       'var' ist Array von Pointer auf Pointer auf
  250.  
  251.              5.  Datentyp 'char':
  252.  
  253.                       'var' ist Array von Pointer auf Pointer auf char
  254.  
  255.              6.  "Weichspülen":
  256.  
  257.                       'var' ist ein Array von  Pointern  auf  Pointer auf
  258.                       char.
  259.  
  260.           Für folgende Deklaration
  261.  
  262.                   char *(*a)[];
  263.                /*  ^   ^ ^^  ^ */
  264.                /*  5   4 21  3 */
  265.  
  266.           erhält man so:
  267.  
  268.              1.  Objektname:
  269.  
  270.                       'a' ist
  271.  
  272.              2.  Aufgrund der Klammerung hat der innerer '*'  Vorrang vor
  273.                  '[]':
  274.  
  275.                       'a' ist Pointer auf
  276.  
  277.              3.  '[]' hat Vorrang vor dem zweiten '*:
  278.  
  279.                       'a' ist Pointer auf Array von
  280.  
  281.              4.  Der äußere '*':
  282.  
  283.                       'a' ist Pointer auf Array von Pointer auf
  284.  
  285.              5.  Datentyp 'char':
  286.  
  287.                       'a' ist Pointer auf Array von Pointer auf char
  288.  
  289.              6.  Schöneres Deutsch:
  290.  
  291.                       'a' ist  ein Pointer auf ein Array von Pointern auf
  292.                       char.
  293.  
  294.           Wenn man sich das  Schema  partu  nicht  merken will oder kann,
  295.           dann  ist  das  auch nicht so schlimm: Es gibt Programme dafür.
  296.           Beispielsweise findet sich  in  [K&R II 88] ein Programm namens
  297.           "dcl". Es ist zwar ein furchtbarer C-Hack, aber  dafür  nur ca.
  298.           100 Zeilen "lang".                                         (tw)
  299.           28           Deklarationen, Definitionen, Prototypen
  300.           ---------------------------------------------------------------
  301.  
  302.  
  303.           Q3.4  Warum soll man Funktionen mit variabler Argumentenliste
  304.                 (wie z.B. printf()) nicht ohne Prototypen aufrufen?
  305.  
  306.  
  307.           Der Aufruf einer Funktion  mit  variabler  Argumentenliste ohne
  308.           vorliegenden  Prototypen führt zu undefiniertem Verhalten.  Der
  309.           Grund dafür ist, daß  es  Compilern  erlaubt  ist, verschiedene
  310.           Aufrufkonventionen für Funktionen zu verwenden, z.B.:
  311.  
  312.               -  Parameterübergabe in Registern für Funktionen mit fester
  313.                  Argumentenliste (schnell, aber nicht für  beliebig viele
  314.                  Parameter geeignet) und
  315.  
  316.               -  auf  dem Stack für Funktionen mit variabler  Argumenten-
  317.                  liste   (langsam,  geht   aber   mit   beliebig   vielen
  318.                  Parametern).
  319.  
  320.           Meist  wird   obige   Unterteilung   - und   keine  Mischform -
  321.           verwendet,  da  z.B.  va_arg()  exterm kompliziert (bei einigen
  322.           Prozessoren sogar unmöglich) wäre, wenn die Parameter  teils in
  323.           Registern, teils auf dem Stack liegen würden.
  324.  
  325.           Das macht es aber notwendig, daß der Compiler beim Aufruf einer
  326.           Funktion immer wissen muß, auf welche Weise diese die Parameter
  327.           verlangt. In K&R C,  wo  über die Parameter nichts bekannt war,
  328.           mußte er stets  vom  schlimmsten Fall ausgehen und konnte daher
  329.           keine optimierte Registerübergaben durchführen. In  ANSI C gibt
  330.           es  Prototypen,  und  wenn  ein  Prototyp  vorliegt,  weiß  der
  331.           Compiler,  ob die Funktion feste oder variable  Argumentenliste
  332.           hat, und kann so die richtige Aufrufkonvention verwenden.
  333.  
  334.           Und wenn kein  Prototyp  vorliegt? Dann geht der Compiler davon
  335.           aus, daß  die Argumentenliste unbekannt, aber fest ist, d.h. es
  336.           wird   die   Aufrufkonvention   für   feste    Argumentenlisten
  337.           verwendent, was aber  schiefgehen  kann,  falls  diese  mit der
  338.           Aufrufkonvention  für  variable  Argumentenlisten  inkompatibel
  339.           ist.
  340.  
  341.           Deswegen   die  Festlegung:  der  Aufruf  einer  Funktion   mit
  342.           variabler Argumentenliste ohne vorliegenden Prototypen führt zu
  343.           undefiniertem Verhalten.
  344.  
  345.           Das ist nicht bloße  Theorie,  z.B.  funktioniert mit PureC auf
  346.           dem Atari (der o.a.  zwei  Aufrufkonventionen  unterstützt) ein
  347.           printf() ohne den Prototypen aus stdio.h nicht.
  348.  
  349.           Auch    Compiler,   die   immer   eine   Mischform   bei    der
  350.           Parameterübergabe verwenden, können böse ins Straucheln kommen.
  351.           Ein  älterer  C-Compiler eines  bekannten  Unix-Betriebssystems
  352.           hatte eine interessante  Eigenschaft: Die ersten drei Parameter
  353.           (wenn sie je 32 Bit groß  waren) wurden immer in Registern, der
  354.           Rest auf dem Stack übergeben. Damit im Extremfall (Funktion mit
  355.           falscher  Parameterliste  gerufen)  wenigstens  die  Stackgröße
  356.           stimmte, wurden zusätzlich  drei "Dummy-Argumente" a 32 Bit auf
  357.           den  Stack  gelegt.  Für va_arg() gabe es  eine  Ausnahme:  die
  358.           Register-Werte wurden, damit alle Parameter einheitlich gelesen
  359.           werden konnten, in die "Dummy-Argumente" auf dem Stack kopiert.
  360.           Das  Ergebnis war ein einziges Chaos: Wenn  man  auch  nur  den
  361.                      Deklarationen, Definitionen, Prototypen           29
  362.           ---------------------------------------------------------------
  363.  
  364.  
  365.           kleinsten  Fehler  machte, erhielt eine  gerufene  Funktion  zu
  366.           Anfang mal drei leere Argumente, mal fehlten drei...       (wr)
  367.  
  368.  
  369.           Q3.5  Wie sieht ein korrekt getyptes C-Programm aus?
  370.  
  371.  
  372.           Es gibt  C-Programmierer, vor allem solche, die sich vorher mit
  373.           Sprachen wie Pascal  (die  über  ein  sehr  strenges Typkonzept
  374.           verfügen) beschäftigt haben, die  Wert  darauf  legen,  ihre C-
  375.           Programme "korrekt getypt" zu formulieren, z.B. so:
  376.  
  377.                int i;
  378.                long l;
  379.                char *p = (char*)NULL;
  380.  
  381.                i = (int)'A';
  382.                l = (long)i + 12L;
  383.  
  384.                printf("%c\n",(char)i);
  385.  
  386.           Dieser Stil zeichnet sich durch exzessive Verwendung  von Casts
  387.           aus, die dafür sorgen sollen,  daß alle Ausdrücke stets nur die
  388.           erwarteten Datentypen verwenden.
  389.  
  390.           Allerdings hat dieser Stil mehr  Nach-  als  Vorteile. "Korrekt
  391.           getypt" im Sinne von C ist nämlich auch:
  392.  
  393.                int i;
  394.                long l;
  395.                char *p = NULL;
  396.  
  397.                i = 'A';
  398.                l = i + 12;
  399.  
  400.                printf("%c\n",i);
  401.  
  402.           Die notwendigen Umwandlungen (z.B. die von i+12 in long) werden
  403.           vom Compiler automatisch durchgeführt. Durch das Verzichten auf
  404.           Casts werden  die Programme lesbarer, und der Compiler kann bei
  405.           möglichen Problemen eine Warnung ausgeben.
  406.  
  407.                long l = 0xabcdefL;
  408.                int i = (int)l;
  409.  
  410.           Angenommen, ein int ist 16 und ein long 32 Bits groß, dann kann
  411.           die Zuweisung an i nicht  ohne  Verluste  vonstatten  gehen (da
  412.           0xabcdef  nicht in 16 Bits paßt). Der  Cast  in  der  Zuweisung
  413.           jedoch führt eine explizite  Typumwandlung  durch,  so  daß der
  414.           Compiler die verlorene Genauigkeit nicht feststellt (oder davon
  415.           ausgeht, daß der Programmierer sie  beabsichtigt  oder  in kauf
  416.           nimmt). Ohne den Cast könnte  der Compiler eine Warnung (in der
  417.           Art "loss of significance") ausgeben.
  418.  
  419.           Das  gleiche  gilt  für fast jeden Kontext, in dem Objekte ver-
  420.           schiedener  Datentypen  zusammen verwendet werden.  Die  von  C
  421.           durchgeführten impliziten Datentypumwandlungen arbeiten in  den
  422.           meisten Fällen wie gewünscht, so daß  zusätzliche  Casts keinen
  423.           30           Deklarationen, Definitionen, Prototypen
  424.           ---------------------------------------------------------------
  425.  
  426.  
  427.           Gewinn bringen, sondern höchstens Warnungen unterdrücken und so
  428.           Fehlerquellen darstellen.  Außerdem  sollte  man  beachten, daß
  429.           (siehe  erstes  Beispiel)  weder  'A'  ein char ist noch %c  in
  430.           printf() ein char erwartet.
  431.  
  432.           Explizite Typumwandlungen sind notwendig, wenn man
  433.  
  434.               -  die  standardmäßigen  Umwandlungsregeln  umgehen  möchte
  435.                  oder muß. Z.B. wird in
  436.  
  437.                       int a, b;
  438.                       long l = a * b;
  439.  
  440.                  zuerst a*b als int  berechnet  und  das Ergebnis in long
  441.                  umgewandelt.  Bei  der  Multiplikation kann ein Überlauf
  442.                  auftreten, der das Ergebnis verfälscht und der mit
  443.  
  444.                       int a, b;
  445.                       long l = (long)a * (long)b;
  446.  
  447.                  vermieden werden könnte,
  448.  
  449.               -  Werte  an  Funktionen   mit   variabler  Argumentenliste
  450.                  übergibt, da hierbei kein Zuweisungskontext  besteht und
  451.                  daher keine automatische Typumwandlung stattfinden kann.
  452.                  Die Casts in
  453.  
  454.                       long l = 'A';
  455.                       printf("%c %ld %p\n",(int)l,(long)sizeof(l),(void*)&l);
  456.  
  457.                  sind also notwendig.
  458.  
  459.           Zusammenfassend kann gesagt werden, daß  man  auf  Casts soweit
  460.           wie möglich  verzichten sollte. C hat ein Typkonzept, wenn auch
  461.           ein liberales. Es hat keinen Zweck, die Regeln von Programmier-
  462.           sprachen mit strengeren Typkonzepten auf C übertragen zu wollen
  463.           und deswegen auf die Vorteile des liberalen Typkonzepts zu ver-
  464.           zichten.                                                   (wr)
  465.  
  466. /Ende von Teil 5/
  467.  
  468. Keep hacking
  469. Wolfram
  470.  
  471.  
  472.  
  473.  
  474.   «------------------[ eLITE gUYS wILL gET iNVITED hERE ]------------------»
  475.         .         .        .            .    :   ·    .
  476.    ____/¦__   ___/¦____ __/¦___________/¦__  ¦   ¦___/¦__         !
  477.    _ ____  \__\____  _//  _____\_________  \ |   | ____  \__     _:/\__
  478.     /·  |____//·  |   \\_____ ·\|   |   |  \\|   |/·  |____/     \ Oo /
  479.    //   |    \    |    \   l   \\   |   |   ·\_  //   |    \     /_--_\
  480.    \__________\________/________/___j___j     /  \__________\     :\/
  481.    -------------------------------------l____/   :-----------     ¡
  482.                                              ·   ·
  483.                     .     :   ·    .           .         .        .
  484.     !        _ ____/¦__   ¦   ¦____¦\____ ____/¦__   ___/¦____ __/¦_____ __
  485.    _:/\__    _ _ ____  \__|   |______   \ _ ____  \__\_  |  _//  _____ __ _
  486.    \ Oo /       /·  |____/|   |/· __  __/  /·  |____//·  |   \\_____ ·\
  487.    /_--_\      //   |    \|   //   |    \_//   |    \    l    \   l   \\
  488.     :\/        \__________\   \____j     /\__________\________/________/
  489.     ¡          -----------·   :----l____/-------------------------------
  490.                           ·   ·
  491.      <*> pRODIGY gHQ <*> nEUTRON wHQ <*> iLLUSION eHQ <*> dYNAMIX gHQ <*>
  492.  
  493.               Upload Date: [01-03-95] «» Upload Time: [07:18:21]
  494.  
  495.   «-------------------[ aSK eLITE fOR SYS-PW & NUMBA ! ]-------------------»
  496.  
  497.                                                           [-AquaAdder v1.0-]
  498.  
  499.  
  500.  
  501.  
  502.  
  503.    
  504.                             -sLiME!^bP·LEADER^mTH!
  505.                          mOGUe!^aC! pRIMUS!/bP·lEADER
  506.                       wHIRLWIND/mTH! MR.VAIN/BNZ^sXi^aC!
  507.  
  508. -- --- ---- pHUKKIN' fAST aMIGA ^ wORLD'S lARGEST cHIPTUNE aREA ---- --- --
  509.       ____
  510.   ___|    |_____________  __________________   ____________________________
  511. _/  _|    |   ._________\/__________  \   _/___\______  \   _____/   _____/
  512. \   \.    |   l/    /   \/    |  _____/_  l     /  _____/\____  _/\____  \_
  513.  \___|    |________/____||-Mo!|________________/_______\ _______\ ________/
  514.      l____|              l____|                         \/       \/
  515.  
  516.     -- --- ---- aMI-eX fREE-lEECH ^ bIG aSCII bASE © bY aC! ---- --- --
  517.  
  518.    -- mYTH! gHQ - -÷- - bIRDHOUSE pROJECTS! eHQ - -÷- - aRT-cORE! eHQ --
  519.  
  520. _______________          _____      _____   _________       ___________________
  521. \.            /________ |.   /_____:o    | /.        \/|___/_       \         /
  522.  \___   _____/|.   /   \||  /|.    |:    |//   ______/·|.   / ______ \    ___/
  523.    /.   /_/·  ||  /     \:  \||    |·    |/   /   \ \/ ||  /_______ \/+    /
  524.   //  ____/   ||  \   \  \   \:   ¯¯¯    |   /    / /  ||  \ /·\  /  \  __/_
  525.  //   / //    |+   \   \      \  \___/   |   \___/ /   |·   \/  \/   /      /
  526. /·   /  \\         /    \     /    |:    |        /         /       /      /
  527. \___/    \________/_____|\___/:    |_____|_______/\________/_______/______/
  528.                              l_____|·MBB·
  529.  
  530.