Lyrik-Maschine
Der »Versifikator« in George Orwells Roman »1984« ist eine Maschine, die Gedichte und Lieder schreiben kann. Lyrik 3.0 macht auch aus dem C 64 einen »Versifikator«.

Mit Lyrik 3.0 haben Sie schnell einen Lyrikband zusammen. Was die Welt allerdings von Computer-Dichtung hält, ist fraglich. Wir in der Redaktion waren jedenfalls über die Ergebnisse erstaunt, denn Lyrik 3.0 reiht nicht nur sinnlos Wörter aneinander. Vielmehr werden semantisch und syntaktisch korrekte — Schreibfehler innerhalb des Programms ausgenommen — Sätze gebildet.
Allen Anthropozentrikern sei gesagt, daß die Gedichte, die von Lyrik 3.0 produziert werden, per definitionem keinen »Sinn« haben, was auch immer mit diesem Wort gemeint ist.
Aber vielleicht besteht der Reiz dieser Gedichte gerade darin, daß durch die oftmals absurden Kombinationen von Wörtern neue ungewöhnliche Metaphern gebildet werden:
Lassen Sie sich doch einfach mal ein Gedicht von Lyrik 3.0 ausdrucken, und lesen Sie es sich bei Kerzenschein oder flackernden Kaminfeuer in aller Ruhe durch:
»Goldene Ränke zerschmettern eine | ||
Hoffnung. | ||
Das Auge schreit. | ||
Da immer wieder pulsierende | ||
Welten verwehen, stirbt das | ||
Universum.« |
Durch einen intelligent programmierten Satzbaualgorithmus erzeugt dieser Lyrik-Generator semantisch korrekte Sätze. Der Wortschatz läßt sich leicht erweitern.
Die folgende Programmbeschreibung zeigt Ihnen, wie das Programm funktioniert und Sie Ihren eigenen Wortschatz anlegen können. Wie stellt das Programm nun ein Gedicht her?
Als erstes müssen ihm verschiedene Parameter übergeben werden:
Anzahl der Strophen (AZ), Anzahl der Verse innerhalb jeder Strophe (VA%(X)), und der Satzbau jedes einzelnen Verses (MN$(X)).
Sofern diese Daten nicht von Ihnen eingegeben werden, werden AZ und das Variablenfeld VA%(X) mit geeigneten Zufallszahlen aufgefüllt, während der Computer die Satzstrukturen MN$(X) aus dem »Satzbauten-Katalog« CO$(X) auswählt. Dieser wird bei der Initialisierung aus den Daten der DATA-Zeilen 1000-2000 gebildet. Diese ganzen Vorarbeiten werden im Auto-Modus in den Zeilen 814-818, im manuellen Modus in den Zeilen 108-242 ausgeführt.
Nun kommt der weitaus schwierigere Teil: Es müssen ganze deutsche Sätze gebildet werden, die den gewünschten Satzbau besitzen und gleichzeitig den Regeln der deutschen Sprache genügen.
Wie geht das nun vor sich?
Der C 64 holt sich den Satzbau des aktuellen Verses aus MN$(X) und legt ihn in W$ ab. Dann durchsucht er W$ nach einem ihm bekannten Mnemonik und gibt gegebenenfalls eine Fehlermeldung aus. Wird der Mnemonik erkannt, so springt das Programm in die entsprechenden Routinen zur Ausführung des Befehls. Die Routinen sind teilweise von sehr unterschiedlicher Komplexität. So wird bei der Routine UND einfach nur ein »und« an den bisherigen Vers angehängt. Bei der Routine SUBJEKT hingegen wird eine ganze Nominalphrase, bestehend aus Artikel, Adjektiv und Substantiv, generiert. Dies funktioniert so: Zuerst werden die Parameter des Mnemonik-Artikel, Adjektiv, Kasus und Numerus Mnemonik-Artikel, Adjektiv, Kasus und Numerus — in der Variablen EA,ED,EF,EP eingelesen (Zeile 322 ff).
Da der Kasus des Adjektivs und des Artikels vom Substantiv abhängt, muß dieses zuerst bestimmt werden. Dies geschieht, wie auch alle folgenden Wortauswahlen, per Zufallsgenerator (Zeile 328). Dann wird der passende Artikel entweder aus der Tabelle AR$(X) (bestimmte Artikel) geholt oder selbst gebildet (unbestimmter Artikel) und mit der korrekten Endung aus der Tabelle EN$(X) versorgt (Zeilen 330-340). Danach wird ein Adjektiv ausgewählt und mit der entsprechenden Endung versehen, die nicht nur vom Kasus, Genus und Numerus des Substantives, sondern auch vom Artikel abhängt. Die Endung wird aus den Tabellen D2(X)-D4(X) herausgesucht (Zeilen 350-366). Jetzt fehlt nur noch das Substantiv. Dieses wurde ja schon ganz am Anfang ausgewählt und muß nun die passende Endung bekommen. Da ich bis dato kein Linguistiker bin, hat mich dieser Teil fast in eine Paranoia getrieben. Ich habe es aber schließlich geschafft, aus der Endsilbe und den darin enthaltenen Vokalen, dem Kasus, Genus und dem Numerus die richtige Endung zu bestimmen, zumindest für 98 Prozent aller Worte (Bei Fremdwörtern kann sich das Programm eventuell auch mal irren). Die Parameterübergabe erfolgt in den Zeilen 370-378, die Endung wird in den Zeilen 930-966 bestimmt.
Sind schließlich gemäß dem Satzbau in W$ alle Glieder des Verses bestimmt, so wird der erzeugte Vers ausgegeben und das Programm fährt mit dem nächsten Vers fort.
Bei Ergänzen des Wortschatzes muß beachtet werden, daß sich im Programmkopf zu den einzelnen Wortarten je ein Zähler befindet (zum Beispiel Q3), der um 1 erhöht werden muß, sobald eine DATA-Zeile der zugehörigen Wortart hinzugefügt wird.
Wie sehen nun die einzelnen DATA-Zeilen aus?
Wichtig sind hier nur die Zeilen mit den Nomen, Adjektiven, den Verben und den Satzstrukturen, die im folgenden näher erklärt werden sollen.
Nomen (ab Zeile 2200):
DATA MANN,MAENNER,MAENNLICHE,1
Das erste Wort ist die Singular-, das zweite die Pluralform. Danach folgt ein Adjektiv. Dieses muß im Plural stehen. Das heißt, es muß mit einem »e« enden. Die Zahl zum Schluß gibt das Geschlecht des ersten Wortes an. »1« bedeutet männlich, »2« weiblich, »3« sächlich, »4« ein Name.
Verben (ab Zeile 6000):
DATA LAEUFT,LAUFEN,1
Das erste Wort muß eine 3. Person, Singular-Form sein. Das zweite einfach ein Infinitiv. Die Zahl zum Schluß gibt an, ob das Verb transitiv (wie beispielsweise »schlagen« oder »messen«) oder intransitiv (»schlafen« oder »zerbersten«) ist. Im ersten Fall muß die Zahl 0 sein, im zweiten 1. Eine 2 würde bedeuten, daß das Verb eigentlich beides ist.
Satzstrukturen (ab Zeile 1000):
DATA "SUB1001 VRB11", "EIN HUND SCHLAEFT"
Das erste Datum ist eine korrekte Satzstruktur, das zweite ein Satz, wie er möglicherweise von dieser Satzstruktur erzeugt worden sein könnte.
Nun liegt es an Ihnen den Wortschatz von Lyric 3.0 so zu übernehmen, wie ich ihn vorgegeben habe, oder ihn nach Ihren Wünschen zu ändern.
So ist es zum Beispiel möglich, die Stimmung, die ein von Lyric 3.0 erzeugtes Gedicht hervorrufen kann, gezielt zu beeinflussen. Verwenden Sie zum Beispiel nur Worte wie »Glas«, »kalt«, »Beton«, »metallisch«, »einsam«, so kann das entstandene Gedicht wahrscheinlich einwandfrei als Kritik an der Isolation von Bewohnern eines Hochhauses in einer Großstadt interpretiert werden. 0der Sie verwenden nur Worte wie »Nebel«, »See«, »Drache«, »Hobbit«, »Gandalf«, »Baumbart«. In diesem Fall werden die erzeugten Gedichte sicherlich einen vollkommen anderen Charakter bekommen.
Zwei Fragen müssen nun noch geklärt werden: Was hat es mit den Satzstrukturen auf sich und wie läßt sich das Programm erweitern? Die Satzstrukturen sind Strings, die dem C 64 genau mitteilen, wie die Form eines Verses aussehen soll.
Ein Beispiel:
SUB1101 UND SUB2102 VRBl2 TMP SUB2032
Die dreibuchstabigen Wörter sind Mnemoniks, die ein bestimmtes Wort oder eine Gruppe von Wörtern symbolisieren.
»SUB« erzeugt ein Substantiv. Die darauffolgenden Zahlen geben dem C 64 nähere Informationen zu dem Wort.
1. Zahl: | 0 — Wort ohne Artikel |
1 — mit unbestimmten Artikel | |
2 — mit bestimmten Artikel | |
2. Zahl: | 0 — Wort ohne Adjektiv |
1 — mit Adjektiv | |
3. Zahl: | 0 — Wort im Nominativ |
1 — Genitiv | |
2 — Dativ | |
3 — Akkusativ | |
4. Zahl: | 1 — Wort im Singular |
2 — Wort im Plural |
- UND gibt das Wort »und« aus.
- ODR gibt »oder« aus.
- TMP erzeugt eine temporale Bestimmung, wie »heute« oder »nun«.
- IST gibt »ist« aus.
- SND gibt »sind« aus.
- KON erzeugt eine Konjunktion, wie »weil« oder »eher als«.
- KOM gibt ein Komma aus.
- PRA erzeugt eine Präposition, wie »neben« oder »in«.
- DIE gibt »die« aus, um Sätze wie »Wirbel, die zerfließen« erzeugen zu können.
- VRB erzeugt ein Verb. Es wird durch zwei direkt folgende Zahlen spezifiziert.
1. Zahl: 0 — transitives Verb 1 — intransitives Verb 2. Zahl: 1 — Singularform 2 — Pluralform - IWO gibt so undefinierbare Worte wie »immer wieder« oder »niemals« aus.
- KSS erzeugt ein Subjekt wie »niemand« oder »alles«.
Die oben genannte Satzstruktur könnte zum Beispiel folgendes erzeugt haben: »Ein bunter Hund und die silbernen Ringe schlagen nun die Wände.« Lyric 3.0 ist vom Aufbau her teilweise recht kompliziert, daher hier ein paar Erläuterungen zu den verschiedenen Abschnitten des Programmes:
11 | - | 28 | Variablendefinition und Anlegen der Felder |
29 | - | 47 | Anfangsbild |
49 | - | 64 | Einlesen der Wörter und Endungen in Felder |
100 | Beginn der Session zwischen C 64 und Benutzer.
Folgende Daten müssen bestimmt werden:
| ||
242 | Ende der Session | ||
300 | - | 700 | Auswertung der Satzstrukturen |
700 | - | 770 | Ausgabe eines Verses auf Bildschirm und eventuell Drucker |
800 | - | 818 | Automodus ? Wenn ja, dann Erzeugung aller notwendigen Daten |
900 | - | 906 | Auswertung eines Tastendruckes (ja/nein) |
920 | - | 928 | Routine zur Eingabe maximal zweistelliger Zahlen |
930 | - | 966 | Routine zur Berechnung der Endung eines Substantives aus Kasus, Genus und Endsilbe |
970 | - | 978 | Soundroutine |
980 | - | 989 | Gong |
990 | - | 1000 | Musikroutine |
1000 | - | 1500 | Satzstrukturen |
2000 | - | 2200 | Endungen, Präpositionen, Konjunktionen etc. |
2200 | - | 6000 | Nomen und Adjektive |
ab 6000 Verben |
Das Programm benutzt viele Variablen. Die wichtigsten:
E$(X) | Feld, das die einzelnen Worte eines Verses enthält |
Z2 | Zeiger auf das nächste freie Element von E$(X) |
Z1 | Zeiger auf den nächsten noch nicht interpretierten Buchstaben der aktuellen Satzstruktur |
AZ | Anzahl der Strophen |
VA%(X) | Anzahl der Verse der einzelnen Strophen |
AR$ | j,n: Soll gedruckt werden? |
Q0-Q8 | Anzahl der Satzstrukturen, Nomen etc. |
MN$(X) | Dieses Feld enthält die Satzstrukturen für das ganze Gedicht |
AD$ | Endung, die zu dem Subjekt addiert werden muß. |
Ich schlage Ihnen einfach mal vor, daß Sie ein wenig mit Lyric 3.0 herumexperimentieren.
(Dirk Meier/hm)1 rem lyric 3.0 2 rem --------- 3 rem it's an experience ! 4 rem 5 rem written by 6 rem dirk meier 7 rem brendel 30 8 rem 4980 buende 12 9 rem tel. 05223/42823 10 rem 11 rem anzahl von: 12 q0=19:rem mnemonic-ketten 13 q1=8:rem praepositionen 14 q2=6:rem temporale bestimmungen 15 q3=25:rem konjunktionen 16 q4=138:rem nomen,adjektive 17 q5=90:rem verben 18 q6=10:rem irgendwelche worte 19 q7=8:rem endsilben fuer nomen 20 q8=6:rem irgendwelche subjekte 21 poke53281,14:poke53280,6:printchr$(147)chr$(14)chr$(8) 22 dimva%(20),mn$(150),pm$(20,1),d2$(11),d3$(15),d4$(15),d%(q4+q5-2) 24 dimen$(15),ar$(15),pr$(q1-1),ze$(q2-1),ko$(q3-1),no$(q4-1,3) 26 dimvb$(q5-1,2),e$(20),co$(q0-1),iw$(q6-1),ks$(q8-1) 28 s1=54272:s2=s1+7:s3=s2+7:fora=0to24:pokes1+a,0:next 29 fora=1to20:forb=1to0step-1:print"{home}";:poke646,b:pokes1+24,0:pokes1+24,15 30 print:print" Dirk Meier's Lyric 3.0":print" ======================":nextb,a 31 poke646,1:print:print" Ein Gedicht-Synthese Programm." 32 print:print" Entwickelt nach naechtelangen" 34 print" Schlachten mit der deutschen Grammatik." 36 print" Greetings to Storm,Borchert,Fried,Astel und Enzensberger..." 38 print:print" But never forget:":print" Keep it heavy and keep it hard..." 40 print:print" Aber jetzt: NIL{$a0}NISI{$a0}OPTIMUS !":print 44 printchr$(18)" Ich warte auf eine Reaktion von Ihnen " 46 geta$:ifa$=""then46 47 gosub970:printchr$(18)" Bitte etwas warten " 49 fora=1to35:reada$:next 50 fora=0toq0-1:readco$(a),a$:next:reada$,a$,a$ 52 fora=0to15:readen$(a):next:rem endungen 53 fora=0to11:readd2$(a):next:rem endungen2 54 fora=0to15:readd3$(a):next:rem endungen3 55 fora=0to15:readd4$(a):next:rem endungen4 56 fora=0to15:readar$(a):next:rem best.artikel 58 fora=0toq1-1:readpr$(a):next:rem praepositionen 59 forb=0toq2-1:readze$(b):nextb:rem temp. bestimmungen 60 fora=0toq3-1:readko$(a):next:rem konjunktionen 61 fora=0toq6-1:readiw$(a):next:rem irgendwelche worte 62 fora=0toq8-1:readks$(a):nexta:rem irg. subst. 63 fora=0toq4-1:forb=0to3:readno$(a,b):nextb,a:rem nomen,adjektive 64 fora=0toq5-1:forb=0to2:readvb$(a,b):nextb,a:rem verben 100 gosub970:printchr$(147)" Ausdrucken lassen wollen Sie Sich die" 102 print" Gedichte doch sicherlich...oder ?":gosub980 105 getdr$:ifdr$<>"j"anddr$<>"n"then105 107 a$=dr$:gosub900:goto800 108 print:print" Kommen wir zu dem Aufbau der Strophen." 109 print" Wie viele Strophen sollen es sein ?";:gosub980 110 gosub920:az=kk:ifaz=1then122 111 ifaz<1thenprint:goto110 112 print:print" Sollen alle Strophen die gleiche" 113 print" Anzahl von Versen haben ?";:gosub980 114 getf3$:iff3$="j"thenprint" ja":goto122 116 iff3$<>"n"then114 118 print" nein":print" Wieviel Verse sollen es jeweils sein ?":ford=0toaz-1 120 printd+1". Strophe ";:gosub920:va%(d)=kk:next:goto136 122 print:print"{$a0}Vieviele Verse sollen es sein ?";:gosub980:gosub920:f1=kk 124 fora=0toaz-1:va%(a)=f1:next 134 a$=ch$:gosub900:print 136 print" Wir kommen zum formalen Aufbau der":print" Strophen und Verse." 138 print" Wollen Sie eigene Satzstrukturen" 140 print" eingeben (1) oder bereits gespeicherte":print" verwenden (2)"; 141 gosub980 142 getf1$:iff1$<>"1"andf1$<>"2"then142 144 iff1$="2"thenprint" gespeicherte":goto200 146 print" selbst eingeben" 180 printchr$(147):print" 1. Strophe":fora=1tova%(0):printa". Vers"; 181 inputmn$(a-1):next:iff3$="n"thenprint:goto190 182 ifaz=1then196 183 print:print" Sollen alle restlichen Strophen den" 184 print" gleichen Aufbau besitzen ";:gosub980 185 getf1$:iff1$="j"thenprint" ja":goto196 186 iff1$<>"n"then185 190 print" nein":fora=1toaz-1:printa+1". Strophe":forb=1tova%(a):printb". Vers"; 192 input" ";mn$(a*va%(a)+b-1):nextb:print:nexta:goto300 196 fora=1toaz:forb=0tova%(0)-1:mn$(a*va%(a)+b)=mn$(b):nextb,a:goto300 200 print:print" Ihr C64 wird Ihnen nun alle in den" 202 print" DATA-Zeilen gespeicherten Satz-" 204 print" strukturen auflisten und fragen," 206 print" ob Sie sie bei 'Ihrem' Gedicht " 208 print" vielleicht brauchen koennen.":print" Eine erste Auswahl also." 210 print" Damit Sie sehen,was sie da so aus-" 212 print" waehlen,wird Ihnen zu jeder Struktur" 214 print" ein Satz geliefert,wie er vom Proramm" 216 print" unter Benutzung eben jener Struktur" 218 print" produziert werden koennte.":zz=0:restore:gosub980 219 fora=1to35:reada$:next 220 print:reada$,b$:ifa$="@@@"then230 221 printa$:printb$:printchr$(18)"j/n" 222 getc$:ifc$="n"then220 224 ifc$<>"j"then222 226 pm$(zz,0)=a$:pm$(zz,1)=b$:zz=zz+1:goto220 230 print:print" Waehlen Sie nun fuer jeden Vers die" 232 print" gewuenschte Satzstruktur aus.":gosub980 234 geta$:ifa$=""then234 236 printchr$(147):print:fora=0tozz-1:printchr$(a+65)". ";pm$(a,1):next 238 fora=0toaz-1:forb=0tova%(a)-1:printchr$(19)" " 239 printchr$(19)a+1". Strophe,"b+1". Vers " 240 geta$:ifa$=""then240 241 ifasc(a$)<65orasc(a$)>zz+64then240 242 mn$(a*va%(a)+b)=pm$(asc(a$)-65,0):nextb,a 300 rem +++++ mnemonics auswerten ++++ 301 poke53281,5:poke53280,0:poke646,1:printchr$(147); 302 fora=1to10:print:next:printtab(10); 303 fora=1to19:printmid$("l'art pour l'art...",a,1);:forb=1to10 304 pokes1+24,0:pokes1+24,15:nextb,a:fora=1to1000:next:ifdr$="j"thenopen1,4,0 305 printchr$(147):fora=0toaz-1:forb=0tova%(a)-1:w$=mn$(a*va%(a)+b):z1=1:z2=0 306 m$=mid$(w$,z1,3):ifm$=""then712 307 rem ---- und ---- 308 ifm$="und"thene$(z2)=m$:z1=z1+4:goto710 309 rem ---- oder ---- 310 ifm$="odr"thene$(z2)="oder":z1=z1+4:goto710 311 rem ---- praeposition ---- 312 ifm$="pra"thene$(z2)=pr$(rnd(1)*q1):z1=z1+4:goto710 313 rem ---- konjunktion ---- 314 ifm$="kon"thene$(z2)=ko$(rnd(1)*q3):z1=z1+4:goto710 315 rem ---- temp. bestimmung ---- 316 ifm$<>"tmp"then320 318 e$(z2)=ze$(rnd(1)*q2):z1=z1+4:goto710 319 rem ---- subjekt ---- 320 ifm$<>"sub"then410 322 ea=val(mid$(w$,z1+3,1)):ed=val(mid$(w$,z1+4,1)):ef=val(mid$(w$,z1+5,1)) 324 ep=val(mid$(w$,z1+6,1)) 326 ifep=2andea=1thenea=2 328 wa=int(rnd(1)*q4):ge=val(no$(wa,3))-1 329 ifge=-1thenea=0:ge=0:ed=0:f%=1:goto370 330 f%=0:ifea<2then340 331 ifep=1thene$(z2)=ar$(ef*3+ge) 332 ifep=2thene$(z2)=ar$(ef+12) 334 z2=z2+1:goto350 340 ifea=1thene$(z2)="ein"+en$(ef*3+ge):z2=z2+1 350 ifed=0then370 351 ifep=2then362 352 e$(z2)=no$(rnd(1)*q4,2):ifea=0thene$(z2)=e$(z2)+d3$(ef*3+ge) 354 ifea=1thene$(z2)=e$(z2)+d2$(ef*3+ge) 356 ifea=2thene$(z2)=e$(z2)+d4$(ef*3+ge) 360 z2=z2+1:goto370 362 e$(z2)=no$(rnd(1)*q4,2):ifea=0thene$(z2)=e$(z2)+d3$(ef+12) 364 ifea=2thene$(z2)=e$(z2)+d4$(ef+12) 366 z2=z2+1:rem **** substantiv ***** 370 e$(z2)=no$(wa,ep-1):l0$=right$(e$(z2),1):l1$=mid$(e$(z2),len(e$(z2))-1,1) 371 lz$=mid$(e$(z2),len(e$(z2))-2,1) 372 vo=0:ifl0$="a"orl0$="e"orl0$="i"orl0$="o"orl0$="u"thenvo=100 374 ifl1$="a"orl1$="e"orl1$="i"orl1$="o"orl1$="u"thenvo=vo+10 375 iflz$="a"orlz$="e"orlz$="i"orlz$="o"orlz$="u"thenvo=vo+1 376 l2$=l0$+l1$:l3$=right$(e$(z2),3) 378 gosub930:e$(z2)=e$(z2)+ad$:z1=z1+8:goto710 410 rem ---- verbum ---- 412 ifm$<>"vrb"then430 414 et=val(mid$(w$,z1+3,1)):ep=val(mid$(w$,z1+4,1)) 416 wa=rnd(1)*q5:if(val(vb$(wa,2))<>et)and(val(vb$(wa,2)))<>2then416 418 e$(z2)=vb$(wa,ep-1):z1=z1+6:goto710 430 rem ---- irgendwelche worte ----- 432 ifm$<>"iwo"then440 434 e$(z2)=iw$(rnd(1)*q6):z1=z1+4:goto710 440 rem ---- die --------- 442 ifm$="die"thene$(z2)="die":z1=z1+4:goto710 444 rem ---- , ---------- 446 ifm$="kom"thene$(z2)=",":z1=z1+4:goto710 448 rem ---- ist/sind ----- 450 ifm$="ist"thene$(z2)=m$:z1=z1+4:goto710 452 ifm$="snd"thene$(z2)="sind":z1=z1+4:goto710 454 rem ---- irgendein subjekt ---- 456 ifm$="kss"thene$(z2)=ks$(rnd(1)*q8):z1=z1+4:goto710 699 rem ----- ausgabe --------- 700 print"ERROR...UNKNOWN MNEMONIC:":print" ";m$:end 710 z2=z2+1:goto306 712 forx=0toz2-1:p$=p$+e$(x):ife$(x)<>","thenp$=p$+" " 714 nextx 722 printleft$(p$,len(p$)-1);"." 724 ifdr$="j"thenprint#1,left$(p$,len(p$)-1);"." 730 p$="":nextb:print:ifdr$="j"thenprint#1 740 forx=0toz2:e$(x)="":next 750 ifdr$="j"thenprint#1 760 gosub980:nexta:close1:gosub992:poke198,0:wait198,1:poke198,0 762 print:print:print" Noch'n Gedicht ?" 764 geta$:ifa$=""then764 766 ifa$="n"thenrun 768 ifa$="j"then300 770 goto764 800 rem ---- auto ----- 802 print:print" Sie koennen zwischen einem halb- [1]" 804 print" und einem vollautomatischen [2] Modus" 806 print" waehlen.Im ersteren muessen Sie" 808 print" Angaben zur Form des Gedichtes machen im zweiten nicht.";:gosub980 810 geta$:ifa$="1"thenprint" halb":goto108 812 ifa$<>"2"then810 813 print" voll" 814 az=int(rnd(ti)*10)+3:r=int(rnd(1)*8)+3:fora=0toaz-1:va%(a)=r:next 816 fora=0tor-1:b=int(rnd(1)*q0):forc=0toaz-1:mn$(c*r+a)=co$(b):nextc,a 818 goto300 900 rem ++ ja/nein ++ 902 ifa$="j"thenprint" ja" 904 ifa$="n"thenprint" nein" 906 return 920 rem ++ zahlen-eingabe ++ 922 kk=0:fora=1to0step-1 924 geta$:ifa$=chr$(13)thenkk=kk/10:goto928 925 ifasc(a$+chr$(0))<48orasc(a$+chr$(0))>57then924 926 printa$;:kk=val(a$)*10^a+kk 928 next:print:return 930 rem +++ endung substantiv +++ 932 ad$="":ifep=2then960 934 onge+1goto936,952,936 936 onef+1goto952,938,946,953 937 rem +++ sing.mas.gen +++ 938 ad$="es":ifl0$="e"and(voand110)=100andge=0thenad$="ns":goto945 939 ifl3$="net"orl2$="rr"thenad$="en":goto945 940 if(l0$="r"orl0$="n"orl0$="l")and((voand10)=10)thenad$="s":goto945 941 iff%=1thenad$="s":goto945 942 ifl0$="s"andvo11<>11thenad$="ses" 943 ifvo<=1thenad$="es" 944 ifad$="es"andl0$="e"thenad$="s" 945 return 946 rem +++ sing.mas.dat +++ 947 ad$="e":ifl0$="e"thenad$="" 948 ifl3$="net"orl2$="rr"thenad$="en":goto949 949 if((l0$="r"orl0$="n"orl0$="l")and(voand10=10))orvo<=1thenad$="" 950 if(voand110)=100andge=0thenad$="n" 951 iff%=1thenad$="" 952 return:rem +++ sing.mas.akk +++ 953 ifl3$="net"orl2$="rr"thenad$="en" 954 if(voand110)=100andge=0thenad$="n" 955 iff%=1thenad$="" 956 return 960 rem +++ plural +++ 962 ifef<>2then966 964 ifl0$<>"n"thenad$="n" 966 return 970 rem ---- title-sound ----- 972 pokes1+24,15:pokes1+5,15:pokes2+5,15:pokes3+5,15:pokes1+6,247 974 pokes2+6,247:pokes3+6,247:pokes1+4,17:pokes2+4,17:pokes3+4,17 976 forv=0to179step5 :pokes1+1,v:pokes2+1,v*5/4:pokes3+1,v*10/7 978 next:pokes1+4,32:pokes2+4,32:pokes3+4,32:return 980 rem ---- gong ---- 982 pokes1+24,15+16:pokes1+23,7:pokes1+1,10:pokes1+3,100:pokes1+5,15 984 pokes1+6,250:pokes2+1,6:pokes2+3,100:pokes2+5,15:pokes2+6,250 986 pokes3+1,20:pokes3+3,100:pokes3+5,15:pokes3+6,250:pokes1+4,17 988 pokes2+4,21:pokes3+4,17:fors=1to100:next:pokes1+4,16:pokes2+4,20 989 pokes3+4,16:return 990 rem ---- music ---- 992 pokes1,0:pokes2,0:pokes3,0:pokes1+1,0:pokes2+1,0:pokes3+1,0 993 pokes1+24,15+16:pokes1+23,0:pokes1+5,15:pokes1+6,250:pokes2+5,15 994 pokes2+6,250:pokes3+5,15:pokes3+6,250:pokes1+4,33:pokes2+4,33 995 pokes3+4,33:restore:fora=1to5:readh,x1,x2,y1,y2,z1,z2:pokes1+1,x1 996 pokes1,x2:pokes2+1,y1:pokes2,y2:pokes3+1,z1:pokes3,z2:forb=1toh:nextb,a 997 pokes1+4,32:pokes2+4,32:pokes3+4,32:return 998 data 1000,6,133,8,180,10,247,500,9,196,10,247,13,10 999 data 1000,17,103,14,162,10,247,1500,19,137,26,20,32,219 1000 data 2000,21,237,26,20,34,207 1001 rem +++++ satz-strukturen +++++ 1002 data "sub2001 vrb11","der stein erstarrt" 1003 data "sub2001 und sub2001 vrb12","der stein und das gewebe erstarren" 1004 data "pra sub1021 vrb12 sub2102","hinter dem Aar fliessen die steine" 1005 data "sub0102 vrb02 sub1031","Steine schlagen einen Mann" 1006 data "sub2011 sub0001 vrb11 iwo","des Mannes Hut liegt irgendwo" 1007 data "kon sub1101 vrb11 kom vrb12 sub2002" 1008 data "da der Hut ringt,essen die Eier" 1009 data "iwo vrb01 sub2001 sub2132","Natuerlich toetet Conan die Huete" 1010 data "sub2102 vrb12 kom kon sub1001 sub2131 vrb21" 1011 data "Der Hut eiert,weil die Frau das Wasser trinkt" 1012 data "sub0002 und sub0002 kom sub2001 vrb11" 1013 data "Hexen und Teufel,der Weg verwht" 1014 data "sub0002 kom die vrb12","Planeten,die vergehen" 1015 data "kon iwo sub2001 vrb11 kom vrb12 sub2002 und sub2002" 1016 data "Weil kein Wolf schwebt,schlafen die Huete und die Eier" 1017 data "sub2001 kom sub1101 kom vrb01 sub0032" 1018 data "der Hund,ein blaues Tier,toetet Pferde" 1019 data "tmp vrb11 sub2101","bald ertrinkt Conan" 1020 data "tmp ist sub2001 sub1101","nun ist der Hut ein blauer Fleck" 1021 data "sub0002 vrb12 pra sub2021","Herzen rieseln in dem Licht" 1022 data "sub2001 vrb11 kom kon sub2001 vrb11" 1023 data "die Freude funkelt,wenn der Becher duftet" 1050 data "sub2002 snd sub0102 kom kon sub2001 vrb11" 1051 data "die Baeren sind gruene Aepfel,weil der Hut eiert" 1052 data "sub0002 kom sub0002 kom sub0002 kom kss vrb11" 1053 data "Aepfel,Birnen,Wirbel,alles vergeht" 1054 data "kon sub2002 vrb12 kom ist sub2001 sub1101" 1055 data "weil der Hut singt,ist der Mann eine Bestie" 1500 data @@@,@@@ 2000 rem +++++ deklinationen +++++++ 2002 data @1,,e,,es,er,es,em,er,em,en,e, 2004 data e,er,en,e 2010 rem +++++ deklinationen +++++++ 2012 data r,,s,n,n,n,n,n,n,n,,s:rem ein 2014 rem +++++ deklinationen +++++++ 2016 data r,,s,n,r,n,m,r,m,n,,s,,r,n,:rem nil 2017 rem +++++ deklinationen +++++++ 2018 data ,,,n,n,n,n,n,n,n,,,n,n,n,n:rem der 2020 rem +++++ best. artikel +++++++ 2022 data der,die,das,des,der,des,dem,der,dem,den,die,das 2024 data die,der,den,die 2030 rem +++++ endsilben +++++++ 2040 rem +++++ praepositionen ++++++ 2042 data in,auf,neben,unter,ueber,gegenueber,an,aus 2060 rem +++++ tmp. bestimmungen +++ 2064 data jetzt,nun,heute,soeben,bald,gleich 2080 rem +++++ konjunktionen +++++++ 2082 data wenn,da,weil,da ja,weil nun einmal,obgleich,obwohl 2084 data auch wenn,wenn auch,waehrend,solange,solange bis 2086 data nachdem,seitdem,eher als,als,bevor,jedesmal wenn 2088 data wie sehr auch,wenn aber,wenn nur,wenn nur nicht 2090 data damit,damit nicht,sobald 2100 rem +++++ einfach worte ++++++++ 2102 data "immer wieder",andauernd,"ohne unterlass","nur noch" 2104 data niemals,seltsamerweise,manchmal,"wieder und wieder" 2105 data "zu keiner zeit","fuer immer und ewig" 2120 rem +++++ diverse substantive ++++ 2122 data nichts,alles,"rein gar nichts","kaum etwas",niemand,alle 2200 rem +++++ nomen,adjektive ++++++ 2201 data meer,meere,waessrige,3 2202 data wald,waelder,gruene,1 2203 data haus,haeuser,blaue,3 2204 data maedchen,maedchen,helle,3 2205 data junge,jungen,junge,1 2206 data frau,frauen,dunkle,2 2207 data turm,tuerme,durstige,1 2208 data mann,maenner,trockene,1 2209 data planet,planeten,runde,1 2210 data wueste,wuesten,kalte,2 2211 data kaelte,winde,warme,2 2212 data grab,graeber,eiskalte,3 2213 data glocke,glocken,goldene,2 2214 data feld,felder,alte,3 2215 data see,leute,feuchte,1 2216 data herr,herren,praechtige,1 2217 data weg,wege,gefaehrliche,1 2218 data tier,tiere,graue,3 2219 data welt,welten,schwarze,2 2220 data land,laender,leuchtende,3 2221 data kraehe,kraehen,tote,2 2222 data schlacht,schlachten,prasselnde,2 2223 data luft,luefte,silberne,2 2224 data macht,maechte,maechtige,2 2225 data ring,ringe,uralte,1 2226 data steintuer,pfade,weise,2 2227 data zauberer,zauberer,einsame,1 2228 data wolf,woelfe,heulende,1 2229 data feuer,feuer,brennende,3 2230 data wolke,wolken,weisse,2 2231 data wirbel,wirbel,reissende,1 2232 data welle,wellen,nasse,2 2233 data stern,sterne,strahlende,1 2234 data pferd,pferde,stolze,3 2235 data tor,tore,gewaltige,3 2236 data festung,festungen,starke,2 2237 data hoffnung,hoffnungen,muehsame,2 2238 data pflicht,pflichten,ernste,2 2239 data auge,augen,magische,3 2240 data zweifel,zweifel,uralte,1 2241 data sterben,schicksale,unendliche,3 2242 data gang,gaenge,unirdische,1 2243 data verzweifelung,stimmen,grausame,2 2244 data wirklichkeit,voelker,unwirkliche,2 2245 data denken,gedanken,denkbare,3 2246 data ork,orks,giftige,1 2247 data schlange,voegel,gefiederte,2 2248 data ende,lichter,duestere,3 2249 data blick,blicke,unwuerdige,1 2250 data fenster,fenster,fensterlose,3 2251 data tod,hoerner,lauernde,1 2252 data rauch,waende,dunstige,1 2253 data krieg,kriege,verfluchte,1 2254 data klirren,horden,metallene,3 2255 data wagnis,gaben,finstere,3 2256 data leben,gegner,toetliche,3 2257 data stein,steine,fluesternde,1 2258 data kette,ketten,schwere,2 2259 data fluss,fluesse,spitze,1 2260 data wille,schwerter,glaenzende,1 2261 data ross,roesser,schicksalshafte,3 2262 data gasthaus,reiter,unbekannte,3 2263 data tapferkeit,faehigkeiten,edle,2 2264 data crom,goetter,verlorene,0 2265 data falke,falken,stuerzende,1 2266 data conan,teufel,hetzende,0 2267 data schwert,katzen,schleichende,3 2268 data freude,freuden,stinkende,2 2269 data glitzern,bestien,blutige,3 2270 data drache,drachen,gigantische,1 2271 data blitz,blitze,grelle,1 2272 data schrecken,schrecken,blutruenstige,1 2273 data moor,suempfe,tropfende,3 2274 data mond,monde,suechtige,1 2275 data eber,mauern,wilde,1 2276 data rabe,raben,pechschwarze,1 2277 data einsamkeit,zweige,dumpfe,2 2278 data geheimnis,geheimnisse,vergessene,3 2279 data verlangen,wiesen,ekstatische,3 2280 data messer,messer,scharfe,3 2281 data mauer,mauern,steinerne,2 2282 data magie,zaubereien,erdfarbene,2 2283 data pest,ketten,staehlerne,2 2284 data waffe,waffen,verborgene,2 2285 data hund,hunde,reissende,1 2286 data monument,kunstlehrer,gerissene,3 2287 data malte,"lippe enterprises",berechtigte,0 2288 data matthias,monumente,irdene,0 2289 data stefan,eindruecke,gewaltige,0 2290 data dirk,visionen,farblose,0 2291 data bauer,bauern,weiche,1 2292 data uebermensch,giganten,knorrige,1 2293 data wahnsinn,centauren,stierkoepfige,1 2294 data richter,richter,pulsierende,1 2295 data sonne,sonnen,berstende,2 2296 data galaxis,galaxien,"strahlend schoene",2 2297 data weltenkreis,fragen,groesste,1 2298 data impuls,impulse,rotierende,1 2299 data pulsar,pulsare,grenzenlose,1 2300 data supernova,supernovae,unermessliche,2 2301 data vakuum,fragmente,erheiterte,3 2302 data kugelraumer,kugelraumer,waffenstarrende,1 2303 data zyklus,zyklen,barbarische,1 2304 data schmerz,schmerzen,ruhende,1 2305 data geschuetz,geschuetze,rauchende,3 2306 data wall,waelle,mentale,1 2307 data schwertmeister,herausforderer,riesige,1 2308 data revolte,revolten,gewaltlose,2 2309 data komet,kometen,gefrorene,1 2310 data meteor,meteore,"hell gluehende",1 2311 data gas,gase,betaeubende,3 2312 data raumschiff,raumschiffe,stellare,3 2313 data stern,sterne,drohende,1 2314 data masse,massen,starre,2 2315 data energie,energien,reine,2 2316 data zeit,zeiten,vergluehende,2 2317 data raum,raeume,erneuerte,1 2318 data raum-zeit,gefuehle,fliessende,2 2319 data traegheit,oberflaechen,zerschmolzene,2 2320 data kugel,kugeln,seltsame,2 2321 data monolith,monolithen,kristalline,1 2322 data quader,quader,interstellare,3 2323 data quasar,quasare,archaische,1 2324 data herrscher,herrscher,faszinierende,1 2325 data kosmos,daempfe,heisse,1 2326 data universum,kreise,silberne,3 2327 data jungfrau,jungfrauen,stilisierte,2 2328 data tropfen,tropfen,tropfende,1 2329 data matrix,matrizen,kubische,2 2330 data kalkuel,kalkuele,dogmatische,3 2331 data experiment,experimente,grauenhafte,3 2332 data haselnuss,haselnuesse,astrale,2 2333 data gesang,gesaenge,meditative,1 2334 data droge,drogen,psychedelische,2 2335 data angst,aengste,hysterische,2 2336 data sitar,geraeusche,morbide,1 2337 data erkenntnis,erkenntnisse,indische,3 2338 data sturm,stuerme,goettliche,1 6000 rem +++++ verben +++++++++++++++ 6001 data bestaunt,bestaunen,0 6002 data zerfliesst,zerfliessen,1 6003 data rieselt,rieseln,1 6004 data erstarrt,erstarren,1 6005 data zerbricht,zerbrechen,2 6006 data zerschmettert,zerschmettern,2 6007 data trinkt,trinken,3 6008 data schlaeft,schlafen,1 6009 data wandert,wandern,1 6010 data fliegt,fliegen,1 6011 data kaempft,kaempfen,1 6012 data bekaempft,bekaempfen,0 6013 data zerfaellt,zerfallen,1 6014 data zerfrisst,zerfressen,0 6015 data lacht,lachen,1 6016 data winkt,winken,1 6017 data flucht,fluchen,1 6018 data toetet,toeten,2 6019 data entflammt,entflammen,1 6020 data stolpert,stolpern,1 6021 data kreischt,kreischen,1 6022 data knurrt,knurren,1 6023 data verweht,verwehen,1 6024 data bewegt,bewegen,0 6025 data durchbohrt,durchbohren,0 6026 data schreit,schreien,1 6027 data erduldet,erdulden,0 6028 data fluechtet,fluechten,1 6029 data erschlaegt,erschlagen,0 6030 data vergeht,vergehen,1 6031 data kreist,kreisen,1 6032 data glueht,gluehen,1 6033 data schwebt,schweben,1 6034 data steigt,steigen,1 6035 data schwankt,schwanken,1 6036 data sinkt,sinken,1 6037 data beklagt,beklagen,0 6038 data stuerzt,stuerzen,1 6039 data verliert,verlieren,2 6040 data beerdigt,beerdigen,0 6041 data verwundert,verwundern,0 6042 data fordert,fordern,2 6043 data bezwingt,bezwingen,0 6044 data fuehrt,fuehren,2 6045 data zweifelt,zweifeln,1 6046 data begehrt,begehren,0 6047 data verwandelt,verwandeln,0 6048 data erschafft,erschaffen,0 6049 data teilt,teilen,0 6050 data vermodert,vermodern,1 6051 data versinkt,versinken,1 6052 data beschwoert,beschwoeren,0 6053 data funkelt,funkeln,1 6054 data duftet,duften,1 6055 data gefriert,gefrieren,1 6056 data erfriert,erfrieren,1 6057 data verlaesst,verlassen,0 6058 data zersplittert,zersplittern,1 6059 data zersticht,zerstechen,0 6060 data zerreisst,zerreissen,0 6061 data verbrennt,verbrennen,2 6062 data opfert,opfern,2 6063 data zerfetzt,zerfetzen,0 6064 data prahlt,prahlen,1 6065 data beendet,beenden,0 6066 data erlangt,erlangen,0 6067 data erblickt,erblicken,0 6068 data verfolgt,verfolgen,0 6069 data seufzt,seufzen,1 6070 data spuert,spueren,0 6071 data vermeidet,vermeiden,0 6072 data singt,singen,1 6073 data besingt,besingen,0 6074 data beweint,beweinen,0 6075 data vergisst,vergessen,3 6076 data beruehrt,beruehren,0 6077 data erklingt,erklingen,1 6078 data verglueht,vergluehen,1 6079 data lebt,leben,1 6080 data sucht,suchen,0 6081 data verkuendet,verkuenden,0 6082 data erwacht,erwachen,1 6083 data glaenzt,glaenzen,1 6084 data huetet,hueten,0 6085 data betrachtet,betrachten,0 6086 data laechelt,laecheln,1 6087 data rotiert,rotieren,1 6088 data durchwandert,durchwandern,0 6089 data schimmert,schimmern,1 6090 data antwortet,antworten,1