home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD2.iso / ASCII / TEXTE / SCENE / FAQ-LISTS / cfaq_8.txt < prev    next >
Encoding:
Text File  |  1995-01-03  |  23.1 KB  |  520 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:54: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:35]
  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:14:08     \ /   |/    |/    /   |/    /    __)__ /    |    \_/¹     
  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. 8-10
  96. @END_FILE_ID.DIZ
  97. /Teil 8/
  98.  
  99.  
  100.                                      Kapitel 7
  101.  
  102.                                    Programmieren
  103.  
  104.  
  105.           Mit dem  Thema "Programmieren" bewegen wir uns relativ weit weg
  106.           vom eigentlichen Thema dieser  FAQ,  der  Programmiersprache C.
  107.           Doch  was  nützt   das   schönste  Werkzeug,  wenn  es  an  den
  108.           Grundkenntnissen  darüber  mangelt,  wie  man  dieses  Werkzeug
  109.           einsetzt?
  110.  
  111.           Natürlich  können  und  wollen wir in dieser FAQ keinen in sich
  112.           geschlossenen  und vollständigen Überblick über das geben,  was
  113.           Programmieren  ausmacht.  Dazu ist das  Thema  zu  umfangreich,
  114.           umfaßt oder berührt es doch Gebiete wie Software-"Engineering",
  115.           Arbeitsmethodik, Psychologie, formale Ausbildung/Qualifikation,
  116.           Talent, Abstraktionsvermögen usw.
  117.  
  118.           Wir haben einfach ein paar Fragen aufgegriffen, die häufiger im
  119.           Raum standen und diese  aus  unserer  Sicht  beantwortet. Dabei
  120.           basieren  unsere  Antworten   auf   langjähriger  einschlägiger
  121.           Berufserfahrung. Die Antworten sind als Anregung gedacht, um in
  122.           die Materie einzutauchen.                                  (tw)
  123.  
  124.  
  125.           Q7.1  Was ist guter Programmierstil? Was ist lesbare
  126.                 Programmierung?
  127.  
  128.  
  129.           Betrachten wir als "Programmierstil" die äußere  Form  der Pro-
  130.           gramme,  gehen wir also davon aus,  daß  die  Programme  selber
  131.           korrekt  sind, der Stil also nur  ihre  Wirkung  auf  Menschen,
  132.           nicht  auf den Compiler betrifft, dann  ist  diese  Frage  sehr
  133.           leicht zu beantworten.
  134.  
  135.           Ein Programmierstil ist gut, wenn er lesbare Programme erzeugt:
  136.           Programme, die sowohl der  Autor  als  auch andere Leute leicht
  137.           verstehen, nachvollziehen, warten und modifizieren können.
  138.  
  139.           Womit wir bei der  Frage  wären,  was  lesbarer Programmierstil
  140.           ist. Unverzichtbar für lesbare Programme sind:
  141.  
  142.               -  Ausführliche Dokumentation.
  143.                  Jede  Funktion  braucht  einen  Kopfkommentar,   in  dem
  144.                  detailliert beschrieben  ist,  was  die  Funktion macht,
  145.                  welche Parameter sie  erwartet, wie sie auf verschiedene
  146.                  Parameter reagiert,  welche  Werte  sie  zurückgibt, auf
  147.                  welche globalen Daten  sie sich verläßt, welche globalen
  148.                  Daten sie  verändert,  von  welchen  Voraussetzungen sie
  149.                  ausgeht  usw.  Es  muß  möglich  sein,  die  Funktion zu
  150.                  benutzen, ohne ihren Code  selbst  lesen  zu  müssen. Im
  151.                  Idealfall muß  es möglich sein, den Code der Funktion zu
  152.           48                        Programmieren
  153.           ---------------------------------------------------------------
  154.  
  155.  
  156.                  löschen und sie anhand der Dokumentation neuzuschreiben,
  157.                  ohne  daß  sich  für  das Programm eine Beeinträchtigung
  158.                  ergibt.  Die  Dokumentation  der  ANSI-Standard-Library-
  159.                  Funktionen ist ein gutes  Beispiel  dafür,  wie  es sein
  160.                  sollte.
  161.  
  162.               -  Ausführliche und sinnvolle Kommentare.
  163.                  Ein Kommentar wie
  164.  
  165.                       a++;    /* a inkrementieren */
  166.  
  167.                  ist zwar ausführlich, aber nicht sinnvoll. Hingegen kann
  168.  
  169.                       /* Dateien schliessen */
  170.                       fclose(in_fp);
  171.                       fclose(out_fp);
  172.                       fclose(err_fp);
  173.  
  174.                  durchaus   sinnvoll   sein,   wenn  man  Kommentare  als
  175.                  Überschriften von Code-Abschnitten versteht. Es ist eine
  176.                  gute   Praxis,   alle   Parameter   und   Variablen   zu
  177.                  kommentieren.
  178.  
  179.               -  Ein durchgängiger Klammerungs- und Einrückstil.
  180.                  Es  gibt viele Stile, z.B. den  als  "One  True  Bracing
  181.                  Style" bekannt gewordenen, von K&R verwendeten Stil:
  182.  
  183.                       while(a > b) {
  184.                            fct(a);
  185.                            a++;
  186.                       }
  187.  
  188.                  oder die  Version  mit  den  Klammern  in  jeweils einer
  189.                  eigenen Zeile:
  190.  
  191.                       while(a > b)
  192.                       {
  193.                            fct(a);
  194.                            a++;
  195.                       }
  196.  
  197.                  wobei die Klammern wahlweise vollständig oder zur Hälfte
  198.                  mit eingerückt werden. Die Einrückung selber beträgt oft
  199.                  eine  Tabulatorweite (8 Zeichen; leicht zu tippen,  aber
  200.                  braucht viel Platz und breite Bildschirme) oder 2 oder 4
  201.                  Zeichen.  Welchen Stil  man  verwendet,  ist  eigentlich
  202.                  egal, wichtig ist nur, daß man ihn konsequent verwendet.
  203.                  Wenn  man  Programme  modifiziert,  sollte man dabei den
  204.                  Stil  beibehalten, in dem das Programm geschrieben  ist,
  205.                  auch wenn es nicht der persönliche Lieblingsstil ist.
  206.  
  207.               -  Sprechende Funktions- und Variablennamen.
  208.                  Eine Zeile wie
  209.  
  210.                       durchschnitt = summe / anzahl;
  211.  
  212.                  ist wesentlich besser lesbar als
  213.                                   Programmieren                        49
  214.           ---------------------------------------------------------------
  215.  
  216.  
  217.                       d = s / n;
  218.  
  219.                  und kann auch  verstanden  werden,  wenn  man  nicht den
  220.                  ganzen Rest des Programms  gelesen  hat.  Es  hilft auch
  221.                  nicht viel, wenn irgendwo weit oben im Programm
  222.  
  223.                       double d;       /* berechneter Durchschnittswert */
  224.  
  225.                  steht.  Der  Name  einer  Variablen oder Funktion sollte
  226.                  ihrer Bedeutung angemessen sein. Es ist verwirrend, wenn
  227.                  einfache   Zählvariablen    als    "laufvariable"   oder
  228.                  "zaehler", wichtige global sichtbare Funktionen aber als
  229.                  "f" oder "cl1" o.ä. bezeichnet werden.
  230.  
  231.               -  Klarer und strukturierter Programmaufbau.
  232.  
  233.                       for(; a > 0; a = f(a)) {
  234.                            ...
  235.                       }
  236.  
  237.                  und
  238.  
  239.                       while(1) {
  240.                            if (a<=0)
  241.                                 goto whileend;
  242.                            ...
  243.                            a = f(a);
  244.                       }
  245.                       whileend:
  246.  
  247.                  tun beide dasselbe, die zweite Version  wirkt  aber eher
  248.                  verwirrend (vor  allem  wenn  "..."  mehrere Bildschirm-
  249.                  seiten  lang  ist). Große Programmteile  sollte  man  in
  250.                  eigene Funktionen oder eigene Module verpacken.
  251.  
  252.               -  Information Hiding.
  253.                  Informationen  sollten immer nur so weit sichtbar  sein,
  254.                  wie sie benötigt werden. Das  bedeutet,  daß  man Hilfs-
  255.                  funktionen static definieren sollte (so daß  sie  nur in
  256.                  ihrem  Modul  sichtbar  sind),  Variablen  möglichst  im
  257.                  innersten Block definiert, in dem sie sichtbar sind, die
  258.                  Zugriffsalgorithmen  für  besondere  Datenstrukturen  in
  259.                  eigenen Modulen versteckt und  nur  über  Funktionen auf
  260.                  diese Datenstrukturen zugreift usw.
  261.  
  262.           Allerdings gibt es bezüglich Programmierstil  in  C  nur wenig,
  263.           was wirklich unumstritten ist. Obwohl viele C-Programmierer die
  264.           Möglichkeiten  von  C,  Ausdrücke  sehr  knapp  formulieren  zu
  265.           können, schätzen und benutzen, gibt es andere, die eine längere
  266.           und ausführlichere Schreibweise vorziehen. Ob
  267.  
  268.                *p++ = c;
  269.  
  270.           besser oder schlechter lesbar ist als
  271.  
  272.                *p = c;
  273.                p = p + 1;
  274.           50                        Programmieren
  275.           ---------------------------------------------------------------
  276.  
  277.  
  278.           oder ob
  279.  
  280.                if (a==0) {
  281.                     x = 0;
  282.                     y = 1;
  283.                }
  284.  
  285.           besserer Stil ist als
  286.  
  287.                if (a==0) x=0,y=1;
  288.  
  289.           oder ob
  290.  
  291.                for(;;) {
  292.                     c = getchar();
  293.                     if (c==EOF)
  294.                          break;
  295.                     putchar(c);
  296.                }
  297.  
  298.           leichter zu verstehen ist als
  299.  
  300.                while((c=getchar())!=EOF) putchar(c);
  301.  
  302.           (und ob ein break aus einer for-Schleife guter  Stil  ist) oder
  303.           ob man lieber
  304.  
  305.                if (tolower(c)>='a' && tolower(c)<='m')
  306.                     putchar(c+13);
  307.                else if (tolower(c)>='n' && tolower(c)<='z')
  308.                     putchar(c-13);
  309.                else
  310.                     putchar(c);
  311.  
  312.           oder
  313.  
  314.                putchar((x=tolower(c))>='a'&&x<='m' ? c+13
  315.                     : x>='n'&&x<='z' ? c-13 : c);
  316.  
  317.           schreiben sollte oder ob
  318.  
  319.                if (n==1)
  320.                     printf("%d file found\n",n);
  321.                else
  322.                     printf("%d files found\n",n);
  323.  
  324.           wirklich besser ist als
  325.  
  326.                     printf("%d file%s found\n", n, (n == 1) ? "" : "s");
  327.  
  328.           oder gar
  329.  
  330.                printf("%d file%s found\n", n, "s" + (n == 1));
  331.  
  332.           oder ob man die Klammern in
  333.                                   Programmieren                        51
  334.           ---------------------------------------------------------------
  335.  
  336.  
  337.                c = *(p++);
  338.                *(xptr->yptr->abc) = 0;
  339.                a = ((b==0) || (c==0));
  340.  
  341.           nicht lieber weglassen sollte oder ob man am  Ende  einer void-
  342.           Funktion das (überflüssige) "return;" hinschreiben soll oder ob
  343.           eine Funktion mehr  als  ein  return  haben  darf  oder  ob der
  344.           default-Zweig in einem switch()  woanders  als  am  Ende stehen
  345.           darf oder  ob man nach der sog. "Hungarian Notation" Datentypen
  346.           in Variablen- und Funktionsnamen codieren soll, läßt sich nicht
  347.           objektiv  entscheiden.  Jeder  C-Programmierer wird nach seiner
  348.           Gewohnheit und Einstellung das eine oder das  andere bevorzugen
  349.           - erfahrene und  routinierte C-Programmierer eher die kürzeren,
  350.           Neulinge  oder  eingeschworene  Pascal-Programmierer  eher  die
  351.           ausführlicheren Versionen.
  352.  
  353.           Diskussionen  über  solche  Punkte  haben ebensowenig Zweck wie
  354.           darüber, ob ein  S-Klasse-Mercedes  besser als ein Fiat 125, ob
  355.           Emacs besser als vi, ob Modula-2 besser als C oder C besser als
  356.           C++ ist.                                                   (wr)
  357.  
  358.           Es gibt unumstößliche Wahrheiten:  vi  ist  besser als Emacs, C
  359.           ist  besser  als  Modula-2,  C++  ist  besser  als  C  und  die
  360.           Hungarian-Notation taugt einfach nichts.                   (tw)
  361.  
  362.  
  363.           Q7.2  Wie werde ich ein guter C-Programmierer?
  364.  
  365.  
  366.           Dafür  zuerst  eine  Definition,  was ein guter C-Programmierer
  367.           ist:
  368.  
  369.              1.  Jemand, der  C  kennt:  die  Syntax,  die  Bedeutung der
  370.                  Schlüsselworte,   den   Aufbau   von   Ausdrücken    und
  371.                  Statements,  die   verschiedenen   Compiler-Phasen,  die
  372.                  Arbeitsweise  des  Preprozessors,  die Promotionsregeln,
  373.                  die Gültigkeits- und Sichtbarkeitsregeln, die Regeln der
  374.                  Pointerarithmetik,  was  definiert und  undefiniert  ist
  375.                  usw.
  376.  
  377.              2.  Jemand, der die Standard-Library kennt:  die Funktionen,
  378.                  ihre  Parameter,  ihre  Rückgabewerte, ihre Headerfiles.
  379.                  Wer  glaubt,  Stringoperationen  in  C seien mühsam oder
  380.                  kompliziert,   kennt   nicht   die   vielen    mächtigen
  381.                  Stringfunktionen der Standard-Library.
  382.  
  383.              3.  Jemand, der Ahnung  von  Informatik  hat:  wie  in jeder
  384.                  anderen   Programmiersprache   sind    Kenntnisse   über
  385.                  Algorithmen  und  Datenstrukturen  unverzichtbar. Obwohl
  386.                  man als C-Programmierer nicht unbedingt  den Unterschied
  387.                  zwischen Bubblesort und  Heapsort kennen muß, sollte man
  388.                  schon wissen, wie man  Datenstrukturen  aufbaut,  ob man
  389.                  Arrays, Listen  oder  Bäume  verwendet,  welche Vorteile
  390.                  Zustandsautomaten haben usw.
  391.  
  392.              4.  Jemand,   der  genug   Erfahrung   hat,   um   Programme
  393.                  strukturiert aufzubauen und  sinnvolle Funktionsschnitt-
  394.                  stellen zu entwerfen.
  395.           52                        Programmieren
  396.           ---------------------------------------------------------------
  397.  
  398.  
  399.              5.  Jemand, der weiß, wie man die vielen Möglichkeiten von C
  400.                  gebraucht,  ohne  sie zu mißbrauchen,  und  der  dadurch
  401.                  lesbare und klare Programme schreibt.
  402.  
  403.              6.  Jemand, der in der Lage ist, komplizierte  Dinge einfach
  404.                  zu implementieren.
  405.  
  406.           All dies zu erreichen ist  nicht einfach und braucht eine Menge
  407.           Zeit  und Erfahrung. Für einen Anfänger ist  es  sehr  zu  emp-
  408.           fehlen,  seine C-Programme einem erfahrenen Programmierer  vor-
  409.           zulegen und sich erklären zu  lassen, was man anders und besser
  410.           hätte machen können. Wer hat nicht am Anfang Dinge wie
  411.  
  412.                for(i=0;i<strlen(string);i++)
  413.  
  414.           oder
  415.  
  416.                if (i==0) fct0();
  417.                else if (i==1) fct1();
  418.                else if (i==2) fct2();
  419.                else if (i==3) fct3();
  420.                else if (i==4) fct4();
  421.                else if (i==5) fct5();
  422.                else if (i==6) fct6();
  423.                else if (i==7) fct7();
  424.                else if (i==8) fct8();
  425.                else if (i==9) fct9();
  426.                else if (i==10) fct10();
  427.  
  428.           oder
  429.  
  430.                char s[100];
  431.                while(fgets(s,100,filepointer)!=NULL)
  432.                     printf(s);
  433.  
  434.           gemacht?
  435.  
  436.           Dazu (oder genauer, dagegen) braucht man  gute  Literatur, z.B.
  437.           K&R,  die  Rationale  oder gleich den ANSI-C  Standard,  um  zu
  438.           lernen,  was  C  "wirklich" ist. Viele Bücher  mögen  zwar  als
  439.           Tutorials besser geeignet sein, aber enthalten oft Fehler, Aus-
  440.           lassungen oder Ungenauigkeiten, durch die man  sich  z.B. Dinge
  441.           wie
  442.  
  443.                void main(int argc,char **argv,char **envp)
  444.  
  445.           angewöhnt.
  446.  
  447.           Desweiteren sollte man  niemals aufhören, über den Programmier-
  448.           stil, den man im  Laufe  der  Zeit entwickelt, nachzudenken und
  449.           ihn ggfs. anzupassen  und  zu  verändern.  Die  Programme uner-
  450.           fahrener  Anfänger  sind  in  den  Augen  von  Profis  oft  er-
  451.           schreckend, und jeder  erfahrene C-Programmierer wird für seine
  452.           ersten Programme nur Kopfschütteln übrighaben.             (wr)
  453.                                   Programmieren                        53
  454.           ---------------------------------------------------------------
  455.  
  456. /Ende von Teil 8/
  457.  
  458. Keep hacking
  459. Wolfram
  460.  
  461.  
  462.  
  463.  
  464.   «------------------[ eLITE gUYS wILL gET iNVITED hERE ]------------------»
  465.         .         .        .            .    :   ·    .
  466.    ____/¦__   ___/¦____ __/¦___________/¦__  ¦   ¦___/¦__         !
  467.    _ ____  \__\____  _//  _____\_________  \ |   | ____  \__     _:/\__
  468.     /·  |____//·  |   \\_____ ·\|   |   |  \\|   |/·  |____/     \ Oo /
  469.    //   |    \    |    \   l   \\   |   |   ·\_  //   |    \     /_--_\
  470.    \__________\________/________/___j___j     /  \__________\     :\/
  471.    -------------------------------------l____/   :-----------     ¡
  472.                                              ·   ·
  473.                     .     :   ·    .           .         .        .
  474.     !        _ ____/¦__   ¦   ¦____¦\____ ____/¦__   ___/¦____ __/¦_____ __
  475.    _:/\__    _ _ ____  \__|   |______   \ _ ____  \__\_  |  _//  _____ __ _
  476.    \ Oo /       /·  |____/|   |/· __  __/  /·  |____//·  |   \\_____ ·\
  477.    /_--_\      //   |    \|   //   |    \_//   |    \    l    \   l   \\
  478.     :\/        \__________\   \____j     /\__________\________/________/
  479.     ¡          -----------·   :----l____/-------------------------------
  480.                           ·   ·
  481.      <*> pRODIGY gHQ <*> nEUTRON wHQ <*> iLLUSION eHQ <*> dYNAMIX gHQ <*>
  482.  
  483.               Upload Date: [01-03-95] «» Upload Time: [07:18:35]
  484.  
  485.   «-------------------[ aSK eLITE fOR SYS-PW & NUMBA ! ]-------------------»
  486.  
  487.                                                           [-AquaAdder v1.0-]
  488.  
  489.  
  490.  
  491.  
  492.  
  493.    
  494.                             -sLiME!^bP·LEADER^mTH!
  495.                          mOGUe!^aC! pRIMUS!/bP·lEADER
  496.                       wHIRLWIND/mTH! MR.VAIN/BNZ^sXi^aC!
  497.  
  498. -- --- ---- pHUKKIN' fAST aMIGA ^ wORLD'S lARGEST cHIPTUNE aREA ---- --- --
  499.       ____
  500.   ___|    |_____________  __________________   ____________________________
  501. _/  _|    |   ._________\/__________  \   _/___\______  \   _____/   _____/
  502. \   \.    |   l/    /   \/    |  _____/_  l     /  _____/\____  _/\____  \_
  503.  \___|    |________/____||-Mo!|________________/_______\ _______\ ________/
  504.      l____|              l____|                         \/       \/
  505.  
  506.     -- --- ---- aMI-eX fREE-lEECH ^ bIG aSCII bASE © bY aC! ---- --- --
  507.  
  508.    -- mYTH! gHQ - -÷- - bIRDHOUSE pROJECTS! eHQ - -÷- - aRT-cORE! eHQ --
  509.  
  510. _______________          _____      _____   _________       ___________________
  511. \.            /________ |.   /_____:o    | /.        \/|___/_       \         /
  512.  \___   _____/|.   /   \||  /|.    |:    |//   ______/·|.   / ______ \    ___/
  513.    /.   /_/·  ||  /     \:  \||    |·    |/   /   \ \/ ||  /_______ \/+    /
  514.   //  ____/   ||  \   \  \   \:   ¯¯¯    |   /    / /  ||  \ /·\  /  \  __/_
  515.  //   / //    |+   \   \      \  \___/   |   \___/ /   |·   \/  \/   /      /
  516. /·   /  \\         /    \     /    |:    |        /         /       /      /
  517. \___/    \________/_____|\___/:    |_____|_______/\________/_______/______/
  518.                              l_____|·MBB·
  519.  
  520.