C 64
Kreuzworträtsel-Wettbewerb

Kreuzworträtsel selber machen – 1000 Mark für den Gewinner

Kreuzworträtsel sind bei jung und alt beliebt. Das beweisen die vielen Rätselzeitschriften. Aber ein Kreuzworträtselprogramm zu schreiben ist etwas ganz anderes, als ein Rätsel zu lösen. Diese Aufgabe ist eine Herausforderung für gute Programmierer. Das beste Ergebnis des Kreuzworträtsel-Wettbewerbs stellen wir Ihnen vor.

Es läßt kaum Wünsche offen. Der Bildschirmaufbau ist genauso gut gelöst wie die Druckerausgabe. Auch den Bedienungskomfort kann man sich kaum besser vorstellen.

Ein Kreuzworträtselprogramm zu schreiben ist eine knifflige Aufgabe. Nicht nur die für den Betrachter eines Rätsels selbstverständlichen Regeln, wie das Kreuzen von Worten senkrecht zueinander und die dichte Vernetzung von Wörtern, auch die Geschwindigkeit und der Komfort des Programmes spielen eine große Rolle. Damit blieb in diesem Falle nur der Einsatz von Maschinensprache übrig. Das Kreuzworträtselprogramm besteht also aus zwei Teilen. Einem Rahmenprogramm in Basic, sowie einer Maschinenroutine, die im Bereich ab $C000/49152 geladen wird und die die Schwerarbeit leistet (zirka 30 Wortvergleiche/Sekunde).

Um das Rätselprogramm nicht unnötig mit der Eingabe des Wortschatzes zu belasten, werden die Wörter vorher mit einem Editor eingegeben und bis zu 255 in einem File auf Diskette abgelegt. Das eigentliche Rätselprogramm liest diese Files dann ein und verwendet sie im Rätselfeld (Bild 1). Trotzdem ist die Eingabe von Hand möglich. Denn der große Wortschatz eines Menschen kann niemals auf Diskette gespeichert werden.

Bild 1. Das Ergebnis eines Programmlaufs. Während das Programm läuft, werden die vom Computer eingesetzten Wörter direkt in das Rätsel am Bildschirm sichtbar eingetragen. Das geht so schnell, daß Sie mit dem Auge kaum nachkommen können. Erst im Ausdruck werden alle Begriffe durch Zahlen ersetzt. Die Lösung dieses Rätsels finden Sie übrigens auch in diesem Heft an anderer Stelle.

Die Programme

Bevor also die Erzeugung eines Kreuzworträtsels starten kann, muß ein Wortschatz mit dem Lexikon-Editor eingegeben werden (Bild 2). Dieses Programm hat vier Aufgaben:

  1. Directory lesen. Dabei werden nur die bereits auf Diskette vorhandenen Wortschatzdateien angezeigt.
  2. Wortdatei anlegen. Mit diesem Programmteil können Sie bis zu 255 Wörter und die zugehörigen Fragestellungen eingeben und diese dann auf Diskette als Wortdatei ablegen. Eine spezielle Eingaberoutine (Zeile 1000 — 1099) sorgt dafür, daß nur erlaubte Zeichen eingegeben werden. Es ist zum Beispiel unsinnig, ein Kreuzwort einzugeben, das aus mehreren Teilen besteht, wie etwa »Level II Basic«, oder eine Mischung aus Zahlen und Buchstaben, wie »C 64«.

So können Sie sich also im Laufe der Zeit eine ganze Bibliothek von Wortschätzen aufbauen, die beliebig während der Rätselerzeugung einzusetzen sind.

Eine Besonderheit ist die Verkettung von Dateien. Sie können Nachfolgedateien benennen, die im Rätselprogramm automatisch nachgeladen werden, sobald der Vorgängerwortschatz erschöpft ist. Beispiel: Sie wollen ein Rätsel zum Thema »Computer« basteln. Geben Sie jetzt mit Hilfe des Lexikon-Editors den ersten Teil des geplanten Wortschatzes ein und benennen ihn mit »Computer.1«. Der Folgewortschatz soll »Computer.2« sein. Nachdem Sie den 1. Teil abgespeichert haben, geben Sie den 2. Teil ein und benennen den Nachfolger mit »Computer.3« und so weiter. Wollen Sie diese Kette beenden, wird einfach ein »q« (Quit) für den Nachfolger angegeben. Das Rätselprogramm bricht dann später an dieser Stelle mit dem automatischen Nachladen ab.

Bei dieser Methode hängt die Qualität des Rätsels entscheidend von der Staffelung der Dateien ab, das heißt im ersten File sollten lange Wörter stehen und mit jedem Folgefile die durchschnittliche Wortlänge abnehmen. Die Erstellung des Rätsels gerät dadurch wesentlich flüssiger, denn mit zunehmender Dichte des Wortfeldes müssen die Wörter natürlich immer kürzer werden, damit sie noch einzubauen sind.

  1. Wortdatei ändern. Mit Sicherheit tauchen irgendwann falsch eingegebene Kreuzwörter auf, so daß eine Datei verbessert werden muß. Unter diesem Programmpunkt kann daher die entsprechende Wortdatei geladen und editiert werden.
  2. Abbrechen. Mit Verlassen des Editors kann das Rätselprogramm geladen und gestartet werden, so daß ein fließender Übergang von der Worteingabe zur Rätselerstellung möglich ist.

Nun zum Kreuzworträtselprogramm. Wie schon gesagt, besteht dieses Programm aus zwei Teilen, einer Maschinenroutine und dem Basic-Rahmenprogramm. Dieses Rahmenprogramm (Bild 3) will ich zuerst beschreiben.

Nach dem Start des Programmes beginnt zunächst eine Initialisierungsphase (Zeilen 27—39). In einem Unterprogramm (ab Zeile 970) werden die Maschinenroutine für das Kreuzworträtsel und Treibersoftware für den Drucker am User-Port geladen. Wenn Sie einen Drucker am IEC-Bus betreiben, ist dieser Programmteil (Zeile 976 + 979) natürlich nicht nötig und zu entfernen.

Im folgenden Unterprogramm zur Dimensionierung der Variablen und Definition einiger Konstanten (Zeile 915—969) erfolgt der erste Sprung in die Maschinenroutine (Zeile 937), um sie zu initialisieren.

Nach dem Bildaufbau (Unterprogramm ab Zeile 600), ist auf dem Monitor ein Kreuzwortfeld von 20x20 Zeichen zu sehen. Das Programm fragt jetzt nach dem Startwort, das als erstes Wort im Feld eingetragen werden muß, um der Maschinenroutine einen Kristallisationspunkt zu bieten (Zeile 34—35). Geben Sie ein möglichst langes Wort ein, das Sie zum Beispiel unbedingt im Rätsel verarbeiten möchten. Bei dieser Eingabe findet, wie schon beim Editor, ein Zeichencheck statt, der es unmöglich machen soll, unerlaubte Zeichen im Rätselfeld unterzubringen. Danach müssen Sie sich zwischen einer waagerechten oder senkrechten Eintragung entscheiden, und ein Cursor taucht im Wortfeld auf. Fahren Sie wie gewohnt mit den Cursortasten die gewünschte Wortposition an und drücken die RETURN-Taste. Da es das erste Wort ist und genügend Platz im Wortfeld herrscht, wird Ihr Wort ohne Protest sofort eingetragen. Jetzt noch schnell die zugehörige Fragestellung eingetippt, und das erste Wort ist korrekt eingetragen.

Sie können dieses Spiel beliebig fortsetzen und theoretisch das ganze Rätsel auf diese Weise per Hand erstellen. Alle Eingaben von Hand sind frei von dem Zwang, ein Wort mit einem anderen kreuzen zu müssen. Sie können Ihre Wörter also beliebig positionieren, sollte ein Wort allerdings nicht passen, wird es zurückgewiesen und der Handeingabe-Modus abgebrochen.

Regulär verlassen Sie die Handeingabe, indem Sie anstelle eines neuen Wortes ein »q« eintippen. Später können Sie die automatische Rätselerzeugung jederzeit unterbrechen und mit F7 wieder in den Handmodus zurückkehren.

Im Wortfeld stehen nun ein oder mehrere Wörter, die als Startpunkte für andere Wörter dienen. Senkrechte Eintragungen sind weiß und waagerechte gelb gefärbt.

Bleibt nur die Angabe, welcher auf Diskette gespeicherte Wortschatz als erstes geladen werden soll (Zeile 37). Dabei können Sie sich mit »$« auch das Inhaltsverzeichnis der Diskette ansehen, für den Fall, daß Ihnen der Name eines Wortschatzes entfallen ist.

Nach erfolgreichem Laden des ersten Wortschatzes beginnt nun die automatische Rätselerzeugung (Hauptschleife Zeile 40—99). Zunächst überraschend schnell füllt sich das Wortfeld mit zufällig plazierten und gekreuzten Wörtern. Dieser Vorgang wird von der Maschinenroutine gesteuert. Auf die genaue Arbeitsweise dieses Programmteiles gehe ich noch gesondert ein. Links oben auf dem Bildschirm erscheint die Anzahl der Wörter, die bereits eingetragen sind (maximal 255 sind möglich) und daneben die momentane prozentuale Größe des noch zur Verfügung stehenden Wortschatzes im Speicher.

Bei jeder Eintragung wird die Liste der Kreuzwörter gekürzt und das benutzte Wort aus der Liste gestrichen. Dies geschieht durch Vertauschen der Stringvektoren des zu streichenden Wortes und des letzten Wortes im Array (Zeile 300—399). Diese Methode wurde gewählt, um die Bildung von neuen Strings im Speicher zu vermeiden und der schrecklich langsamen Garbage-Collection aus dem Wege zu gehen.

Während der Rätselerzeugung können Sie sich in Ruhe überlegen, ob Sie ein automatisches Nachladen von Wortschätzen gestatten wollen oder nicht. In der rechten Bildhälfte ist inzwischen die Belegung der Funktionstasten zu sehen, und mit der F6-Taste schalten Sie die Autolader-Option ein oder aus. Erscheint »Aus« im F6-Tastenfeld, ist das Nachladen gesperrt.

Die Maschinenroutine sucht derweil ständig nach passenden Stellen im Wortfeld. Dieser Vorgang kann im Prinzip endlos sein, da irgendwann natürlich kein geeignetes Wort mehr zu finden ist. Aus diesem Grund hat das Programm eine »Geduld-Schwelle«, eine Anzahl von Suchversuchen, innerhalb derer ein passendes Wort gefunden werden muß. Ist die Versuchszahl ohne Erfolg abgelaufen, geht das Programm davon aus, daß der Wortschatz nicht mehr ausreicht. Diese »Geduld-Schwelle« können Sie in Zeile 964 selbst bestimmen.

Bevor allerdings in der obersten Bildzeile die Meldung »Wortschatz ungenügend« erscheint (Zeile 64/Unterprogramm 110—158), hebt das Programm noch die »Blausperre« auf (Zeile 66). Dieses Flag hat dem Maschinenprogramm bisher mitgeteilt, daß nur dann eine Eintragung erlaubt ist, wenn dabei auch ein blaues, unbesetztes Feld abgedeckt wird. Eine Maßnahme, um das Rätsel möglichst dicht zu packen. Ab sofort ist also auch das Einpassen eines Wortes nur auf besetzten Feldern möglich. Läßt sich auch jetzt kein Wort mehr finden, erscheint endgültig der Hinweis auf mangelnde Wortauswahl. Wenn Sie das »Autoladen« zugelassen haben, wird nun der Folgewortschatz, falls vorhanden, gelesen und das Spiel beginnt von Neuem. Selbstverständlich ist auch das Laden von Wortdateien vor Ablauf der »Geduld-Schwelle« machbar. Dazu dient die Fl-Taste. Aber Vorsicht, auf die Gefahr, daß Sie einen bereits verbrauchten Wortschatz nochmal laden, müssen Sie schon selbst achten.

Es dauert gar nicht so lange, dann ist das Wortfeld so dicht gepackt, daß der Maschinenroutine keine Eintragung mehr gelingt. Jetzt sind Sie gefordert, und mit der F7-Taste wählen Sie die Handeingabe an. Genau wie bei der Eintragung der ersten Startwörter können Sie Ihre »Lückenfüller« positionieren und die Fragestellung dazu eingeben.

Zufrieden mit Ihrer Arbeit (hoffentlich!) bleibt nur noch der Ausdruck des Rätsels. Mit F4 wird er gestartet. Das Unterprogramm für die Druckausgabe nimmt im Programm den weitaus größten Platz ein (Zeile 740—914). Ich verwende einen Epson RX-80-Drucker, der mit Hilfe einer speziellen Treibersoftware (Epson Software-Interface) auch CBM-Sonderzeichen drucken kann. Dazu muß eine unübliche Geräteadresse (6) angegeben werden (Zeile 761 und 900). Sollten Sie also einen CBM-grafikfähigen Drucker am IEC-Bus betreiben, tauschen Sie diese Adresse gegen die gewohnte »4« (im Listing schon geändert).

Auch die Druckerinitialisierung ist von Drucker zu Drucker verschieden (Zeilen 754—758). Achten Sie darauf, daß Ihr Drucker hier folgende Einstellung erhält:

Für den Ausdruck der Fragestellung wird der RX80 im Engschriftmodus versetzt, um Platz zu sparen (Zeile 824—827). Auf diesen Effekt können Sie natürlich verzichten, müssen dann aber die Zeilenlänge (cz, in Zeile 948) ändern, da der Ausdruck vom Programm mit Randausgleich versehen wird (Zeile 847—889).

Bild 4. Dieses Programm erzeugt ein Maschinenprogramm und speichert es unter dem Namen »SUCH.OBJ« auf Diskette. Der Teil ab Zeile 100 ist nicht notwendig. Mit diesem Teil können Sie mit RUN 100 die DATAS überprüfen. Er erzeugte den Ausdruck, wie unten zu sehen ist.

Nun wie versprochen zum Maschinenprogramm, kurz genannt »Such« (Bild 4 und 5). Diese Routine liegt im Bereich $C000/49152, wo sie gut gegen überschreiben durch Basic geschützt ist. Der Einsprung erfolgt über den USR-Vektor (definiert in Zeile 931 bis 932), das heißt es findet eine Parameterübergabe zwischen Basic und Maschinenroutine statt. Basic übergibt in »dl« die Anzahl der Versuche, die die Routine durchlaufen sollen (Zeile 44). Mit der Rückkehr aus der Routine wird der Variablen »u« ein Wert zwischen 1 und 4 zugewiesen. Aus dem Wert von »u« kann also auf die Ursache für den Abbruch der Routine geschlossen werden:

Das Rahmenprogramm kann jetzt entsprechend reagieren und zum Beispiel im Falle u = 3 das benutzte Wort aus der Wortliste streichen. Im Falle einer Eintragung (von Hand oder automatisch) wird das Wort nicht nur in den Bildspeicher eingesetzt, sondern es werden auch einige weitere Informationen abgelegt:

  1. Eintragung im »Wortbeginn/ende«-Speicher (50176 bis 50575); hier wird vermerkt, ob ein Rätselfeld den Start- oder Endpunkt eines Kreuzwortes repräsentiert. Der Speicher ist, wie die folgenden auch, in 20 Zeilen mit je 20 Positionen (Speicherstellen) aufgeteilt. Das linke Halbbyte (4 Bit) einer Speicherstelle trägt die Informationen über senkrechte, das rechte Halbbyte über waagerechte Start/Endpositionen. Das 1. Bit im Halbbyte wird für Endpunkte gesetzt, das 3. Bit für Startpunkte. Diese Informationen werden später bei der Ausgabe des Rätsels auf dem Drucker benötigt, um an den richtigen Stellen die Nummer der zugehörigen Fragestellung eintragen zu können.
  2. Eintragungen im »Senkrecht«-Speicher (50576 bis 50975); in dieser Speichermatrix werden die Ordnungsnummern der Fragestellungen für senkrechte Rätselwörter abgelegt. Bei der Druckausgabe wird diese Matrix abgefragt (Zeile 773 bis 777), um die Nummer der Fragestellung im entsprechenden Startfeld einzusetzen.
  3. Eintragung im »Waagerecht«-Speicher (50976 bis 51375), wie unter b) Zeile 796 bis 800).

Um die Speicherinhalte vor dem Start des Rätselprogramms zu löschen, springt man die Routine mit »sys 50016« an (Zeile 937).

Nun zur Arbeitsweise der Routine während der automatischen Rätselerzeugung. Zunächst muß das Maschinenprogramm erst einmal wissen, ob es wegen einer Handeintragung angesprungen wurde oder zur automatischen Wortsuche. Dazu liest die Routine die Speicherstelle 26 aus. Ist das Ergebnis Null, wird in den Automodus verzweigt. Andernfalls wird in 26 die Länge des von Hand eingetragenen Wortes übergeben (siehe Zeile 662 bis 663). Die Routine braucht dann nur den Paß des Wortes zu überprüfen und bei korrekter Eintragung ins Basic zurückzukehren. Paßt das Wort allerdings nicht, verfällt die Routine in den Automodus. Das Maschinenprogramm durchläuft im Automodus eine Schleife, die zunächst durch Auslesen des Rauschgenerators im Soundchip ein Wort aus dem Wortschatz per Zufall bestimmt. Dann erfolgt auf die gleiche Weise die Auswahl eines Startpunktes im Bildspeicher. Ist dieser Punkt nicht geeignet für eine Eintragung, wird Zeile für Zeile des Wortfeldes nach einer Alternative gesucht. Im Falle eines Treffers startet der Wortvergleich. Das gewählte Wort wird mit dem Inhalt des Bildspeichers auf Übereinstimmung geprüft. Paßt es nicht, kommt das nächste Wort aus dem Wortschatz-Array an die Reihe. Bei Erfolg kehrt »Such« ins Basic zurück, wenn nicht, beginnt die Schleife von Neuem.

Damit der Zugriff auf das Array klappt, muß es nur als erstes im Basic-Programm definiert worden sein (Zeile 925). »Primitiv« werden Sie vielleicht anmerken. Richtig, aber Computer sind nun mal (sehr) schnelle Idioten.

(Gert Büttgenbach/gk)
Lösung des Kreuzworträtsels
In diesem Listing wurden die meisten Steuerzeichen umgesetzt in Buchstabenkombinationen, die in eckigen Klammern stehen. Es bedeuten:
clr = Shift Clear/Home-Taste rvon = Revers on
home = Home-Taste rvof = Revers off
cyan = Control und 4 crsr = Cursor rechts
whit = Control und 2 crsl = Cursor links (crsl*28 = 28 mal Cursor links)
red = Control und 3 crsd = Cursor unten
In Zeile 51 bis 56 (Listing 3) bedeuten die Grafikzeichen (von oben nach unten) f7,f4,f1,f6,f8,f2.
Ein reverses »Z« bedeutet die Farbe Hellblau = Commodore-Taste und 7.
Hinweise zum Eintippen
10 print"{clr}";:t=ti+180
11 print"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}
12 print"{SHIFT--} lexikon-editor  hh,30.5.84 {SHIFT--}
18 print"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}
19 ifti<tthen19
20 :
22 :
24 rem" hauptprogramm
26 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
28 :
30 gosub900:rem" vorbereitungen
32 :
34 gosub600:rem" menue
36 :
38 m=0
40 iff$="{f1}"then    gosub3006:goto34
42 iff$="{f3}"then    gosub0300:goto34
44 iff$="{f5}"thenclr:gosub0500:goto34
46 iff$="{f7}"thenprint"{clr}"
47 :
48 print " Sicher           (j/n) ?"
50 wait203,64:poke198,0:wait203,63
52 getf$:iff$<>"j"then34
53 :
54 printchr$(9);
60 print"{down} Raetsel-Programm (j/n) ?"
62 wait203,64:poke198,0:wait203,63
63 :
64 getf$:iff$="n"then90
66 iff$<>"j"then62
68 print"{clr}load"+chr$(34);
70 print"raetsel";chr$(34);",8"
72 print"{down}{down}{down}":print"run"
74 poke198,3:poke631,19
76 poke632,13:poke633,13
77 goto97
88 :
90 poke792,71:rem" restore und
92 poke788,49:rem" stop reparieren
94 :
97 end
98 :
99 :
300 rem" datei aendern
302 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
304 :
306 gosub700:rem" Datei einlesen
307 :
308 ef=0:print"{clr}"
309 print" Mit {rvon}RETURN{rvof} auswaehlen"
310 print" Mit {rvon}LEERTASTE{rvof}  weiter"
311 print" Mit {rvon}q{rvof}       abbrechen"
312 gosub2000:rem" Datei auflisten
313 :
314 print"{down}   {rvon}Fertig ?{rvof} (j/n)"
316 wait203,64:poke198,0:wait203,63
318 getf$:iff$="n"then308
320 iff$<>"j"then316
322 :
323 ifef=0then397
324 gosub800:rem" Datei aufzeichnen
395 :
397 return
398 :
399 :
500 rem" datei eingeben
502 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
503 :
504 print"{clr}";:gosub900
505 :
506 t$="{rvon}Wortschatz-Name:"
507 l=14:m=1:f$="":gosub1000
508 af$="{SHIFT-+}"+chr$(20)+f$
510 :
519 print
520 t$="{rvon}Folge-Wortschatz (q=keinen):"
521 l=14:m=1:f$="":gosub1000
522 nf$="{SHIFT-+}"+chr$(20)+f$
524 :
525 print"{clr}":nr=0:ef=0
527 :
528 rem" woerter eingeben
529 gosub650
530 :
532 iff$="q"thennr=nr-1:goto539
534 ifnr<254thennr=nr+1
536 ifpeek(210)=7thenprint"{clr}"
537 goto529
538 :
539 ifef=0then597
540 rem" datei auf diskette ablegen
541 fg=nr:gosub800
592 :
597 return
598 :
599 :
600 rem" menue
602 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
604 :
606 print"{clr}";:f$=""
608 print"{down} {rvon}F1{rvof}  Directory
610 print"{down} {rvon}F3{rvof}  Datei aendern
612 print"{down} {rvon}F5{rvof}  Datei anlegen
614 print"{down} {rvon}F7{rvof}  Abbrechen
616 :
618 wait203,63:getf$
620 iff$<chr$(133)orf$>chr$(136)then618
621 print"{clr}"
622 :
647 return
648 :
649 :
650 rem" kreuzwoerter eingeben
651 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
652 :
653 n$=str$(nr):n$=right$(n$,len(n$)-1)
654 t$="{rvon}"+n$+". Kreuzwort{rvof} (q=ende)"
655 l=20:m=0:f$=kw$(nr):gosub1000
656 iff$="q"then697
657 iflen(f$)<2thenprint"{up}{up}{up}";:goto655
658 kw$(nr)=f$:print
659 :
664 t$="{rvon}Fragestellung{rvof}"
666 l=35:m=1:f$=fw$(nr):gosub1000
681 fw$(nr)=f$:print
682 :
683 ef=1
686 :
697 return
698 :
699 :
700 rem" datei einlesen
702 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
703 :
705 print"{clr}"
706 t$="{rvon}Wortschatz{rvof} ($=directory)"
708 l=14:m=1:f$="":gosub1000
709 iff$="$"thenm=1:gosub3000
710 iff$=""then705
712 :
713 af$="{SHIFT-+}"+chr$(20)+f$
714 open1,8,2,"0:"+af$+",s,r"
716 :
718 input#1,fg:rem" feldgroesse
719 :
720 rem" woerter/fragen einlesen
721 forn=0tofg
722 :input#1,kw$(n),fw$(n)
724 next
726 :
728 input#1,nf$:rem" folge-wortschatz
730 :
732 close1
796 :
797 return
798 :
799 :
800 rem" datei aufzeichnen
802 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
803 :
805 print"{clr}"
807 :
812 open15,8,15,"i":close15
813 :
814 open1,8,2,"@0:"+af$+",s,w"
816 :
818 print#1,fg :rem" feldgroesse
819 :
820 forn=0tofg
822 :print#1,kw$(n):print#1,fw$(n)
824 next
826 :
828 print#1,nf$:rem" naechster file
830 :
832 close1
896 :
897 return
898 :
899 :
900 rem" vorbereitungen
902 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
904 :
906 poke53280,6:rem" rahmen blau
908 poke53281,14:rem" grund hellblau
909 printchr$(14);chr$(8);chr$(144)
910 :
912 poke792,193:rem" restore und
913 poke788,52:rem" stop verriegeln
914 :
915 dimkw$(254):rem" kreuzwoerter
916 dimfw$(254):rem" fragen dazu
986 :
987 return
988 :
989 :
990 :
1000 rem" inputform routine
1001 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
1002 :
1003 x$=chr$(13):y$=chr$(20)
1004 z$=chr$(34):poke198,0
1005 :
1006 print" ";t$:print"{down}{down}{up} ? ";f$;" ";
1007 x=1:iff$<>""thenx=len(f$)+1
1008 :
1009 f$="":forn=xtol+1
1010 :print"{left}";f$;"{CBM-@}";
1011 :wait198,1:getf$:poke198,0
1012 :iff$=x$then1025
1013 :iff$=y$andn>1thenn=n-1:goto1010
1014 :ifn>lthen1011
1015 :ifm=0then1021
1016 :iff$=","orf$=z$then1011
1017 :iff$>=" "andf$<="9"then1022
1018 :iff$>="A"andf$<="Z"then1022
1021 :iff$<"a"orf$>"z"then1011
1022 next
1023 :
1025 printchr$(20);:poke211,1
1026 poke631,13:poke198,1:inputf$
1030 iff$=x$thenprint"{up}{rght}{rght}{rght}{rght}";:goto1009
1036 :
1097 return
1098 :
1099 :
2000 rem" datei auflisten
2002 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
2004 :
2010 fornr=0tofg
2012 :print"{down} ->{rvon}";kw$(nr);"{rvof}"
2014 :print"   ";fw$(nr)
2016 :forw=0to60:next
2017 :wait198,1:getf$:print"{up}{up}   {down}{down}"
2018 :iff$="q"then2029
2019 :iff$<>chr$(13)then2024
2021 :print"{clr}":gosub650
2022 :print"{clr}":wait203,64
2024 :ifpeek(210)=7thenprint"{clr}"
2026 next
2028 :
2029 t$="{rvon}Folge-Wortschatz"
2030 print"   ";t$;":":print" ->";nf$
2032 wait203,64:poke198,0:wait203,63
2034 :
2036 getf$:iff$<>chr$(13)then2097
2037 f$=right$(nf$,len(nf$)-2)
2038 t$=t$+" (q=keinen):"
2039 print"{clr}":gosub1000:ef=1
2040 nf$="{SHIFT-+}"+chr$(20)+f$
2096 :
2097 return
2098 :
2099 :
3000 rem" directory listen
3002 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
3003 :
3004 print"{clr}"
3005 print" Mit {rvon}RETURN{rvof} auswaehlen"
3006 print" Mit {rvon}LEERTASTE{rvof}  weiter"
3007 print
3008 :
3009 open15,8,15,"io":open2,8,2,"#"
3010 :
3012 t=18:s=1:f$=""
3014 :
3016 forw=0to99
3018 :
3020 :print#15,"b-r";2;0;t;s
3022 :print#15,"b-p";2;0
3024 :
3026 :get#2,x$:t=asc(x$+chr$(0))
3028 :get#2,x$:s=asc(x$+chr$(0))
3030 :
3032 :forx=0to7
3034 : print#15,"b-p";2;x*32+5
3036 : get#2,x$
3038 : ifx$<>"{SHIFT-+}"thennextx:goto3060
3040 : get#2,x$
3042 : fory=1to14
3044 :  get#2,x$:f$=f$+x$
3046 :  ifx$=chr$(160)theny=15
3048 : nexty
3050 : print" -> {rvon}";f$;"{rvof}"
3051 : ifm=0then3056
3053 : wait203,64:wait203,63:getx$
3054 : ifx$=chr$(13)then3064
3055 : print"{up}    "
3056 : f$=""
3057 :nextx
3058 :
3060 :ift=0thenw=99
3061 nextw
3062 :
3064 close2:close15
3065 ifm=0thenwait203,63
3066 :
3068 return
3070 :
3071 :
3072 :
9000 rem"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}
9002 rem"{SHIFT--} ende     lexikon-editor    {SHIFT--}
9004 rem"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}
Bild 2. Editor. Mit diesem Programm können Sie Ihre eigenen Wortschatzdateien aufbauen. Sie werden auf Diskette gespeichert.
15 print"{clr}";
16 print"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}
17 print"{SHIFT--}kreuzwortraetsel version 1.a{SHIFT--}
18 print"{SHIFT--}                            {SHIFT--}
19 print"{SHIFT--}(c) buettgenbach        1984{SHIFT--}
20 print"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}
22 :
23 :
24 rem" ******** hauptprogramm ********
25 rem" *******************************
26 :
27 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} vorbereitungen {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
28 clr
29 gosub970 :rem" routinen laden
30 gosub915 :rem" vorbereitungen
32 gosub600 :rem" bild aufbauen
33 :
34 t$="Startwort" :rem" 1.wort
35 nr=1:gosub654  :rem" eintragen
36 :
37 gosub700 :rem" wortschatz einlesen
38 poke53280,0:poke53281,0
39 :
40 rem" ******** hauptschleife ********
42 :
44 poke142,bs:poke26,0:u=usr(dl)
46 :
47 on u goto 50,64,70,80
48 :
49 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} taste war gedrueckt {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
50 getf$
51 iff$="{f7}"thengosub650:goto59
52 iff$="{f4}"thengosub740:goto59
53 iff$="{f1}"thengosub700:goto60
54 iff$="{f6}"thengosub450:goto60
55 iff$="{f8}"thengosub092:goto59
56 iff$="{f2}"thengosub087:goto59
57 iffg>0then44
58 goto50
59 print"{home}";ll$;ll$
60 poke53280,0:poke53281,0:gosub337
61 iffg>0then44
62 goto50
63 :
64 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} suche war vergeblich {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
65 ifbs=0thengosub110
66 bs=0:goto44
69 :
70 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*} ein wort wurde gefunden {SHIFT-*}{SHIFT-*}{SHIFT-*}
71 w=peek(25)
72 fs$(nr)=str$((peek(140)=0))+fw$(w)
73 gosub300:nr=nr+1:iffg>0then44
75 :
76 print"{home}";ll$;"{home}";tab(17);
77 print"{cyn}{rvon}Wortschatz erschoepft !"
78 gosub337:goto50
79 :
80 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*} max. ordn.zahl erreicht {SHIFT-*}{SHIFT-*}{SHIFT-*}
81 print"{home}";ll$;"{home}{cyn}{rvon}Raetsel fertig:{rvof}";
82 print"  Ausdrucken mit {rvon}RETURN{rvof}"
83 wait203,64:wait203,63
84 print"{home}";ll$;ll$:gosub740
85 goto95
86 :
87 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} raetsel loeschen {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
88 f$="Raetsel loeschen":gosub4000
89 iff$<>"j"thenreturn
90 run30
91 :
92 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} programm abbrechen {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
93 f$="Abbrechen":gosub4000
94 iff$<>"j"thenreturn
95 gosub500:rem" programm-ende
96 :
97 end
98 :
99 :
100 rem" ******* unterprogramme *******
102 rem" ******************************
104 :
106 :
110 rem" autom. nachladen
112 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
114 :
115 print"{home}{cyn}";ll$;"{home}";tab(18);
116 print"{rvon}Wortschatz ungenuegend"
117 gosub337
118 ifright$(nf$,1)="q"then154
120 :
122 dl=int(dm/3)
124 :
125 ifav=0thenav=1:goto154
126 ifls=0then154
127 :
128 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*} folge-wortschatz laden {SHIFT-*}{SHIFT-*}{SHIFT-*}
130 poke53280,2:poke53281,2
132 print"{home}";ll$;"{home}{cyn}Wortschatz ";
133 print"{rvon}";nf$;"{rvof} wird geladen"
136 f$=nf$:gosub713
137 poke53280,0:poke53281,0
138 :
154 return
156 :
158 :
300 rem" wortliste kuerzen
302 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
304 :
307 sa=peek(47)+peek(48)*256+7
308 :
315 gosub350 :rem" woerter kuerzen
316 :
320 sa=sa+772
322 gosub350 :rem" fragen kuerzen
324 :
334 fg=fg-1:poke2,fg:rem" feld kuerzen
336 :
337 print"{home}{wht}";nr;int(fg/og*100);"{left} %  "
338 :
341 return
342 :
344 :
349 rem" wortvektoren vertauschen
350 x=sa+fg*3:y=sa+w*3
354 pokey,peek(x)
356 pokey+1,peek(x+1)
358 pokey+2,peek(x+2)
360 :
397 return
398 :
399 :
450 rem" autoladen ein/aus
452 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
454 :
456 ifls=0thenls=1:goto461
458 ifls=1thenls=0
460 :
461 poke214,13:poke211,30:sys58732
462 :
463 print"{red}";
464 ifls=1thenprint"{rvon}Ein{rvof}";
466 ifls=0thenprint"Aus";
472 :
497 return
498 :
499 :
500 rem" programm-ende
502 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
504 :
505 print"{clr}{lblu}";chr$(9);
506 poke53280,14:rem" rahmen hellblau
508 poke53281,06:rem" grund blau
510 :
512 poke792,71:rem" restore und
514 poke788,49:rem" stop moeglich
594 :
596 return
598 :
599 :
600 rem" bild aufbauen
602 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
604 :
606 poke53265,11 :rem" bild aus
607 :
608 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} kreuzwortfeld {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
609 print"{clr}{down}{down}{down}";chr$(14);chr$(8);
610 print" {cyn}{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S} "
612 forn=1to20
614 print" {cyn}{SHIFT--}{rvon}{lblu}                    {rvof}{cyn}{SHIFT--}"
616 next
618 print" {cyn}{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X} ";
619 :
620 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} tastenbelegung {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
621 b$="{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}"
622 print"{home}{down}{down}{down}{red}";
623 a$="Woerter   einlesen"
624 f=1:gosub639
625 a$="Raetsel   drucken "
626 f=4:gosub639
627 a$="Autolader Aus     "
628 f=6:gosub639
629 a$="von Hand  eingeben"
630 f=7:gosub639
631 printb$;"{down}{rvon}f 2{rvof}{down}{left}{left}Loeschen"
632 printb$;"{down}{rvon}f 8{rvof}{down}{left}{left}Abbrechen";
633 :
634 poke53265,27:rem" bild an
635 :
636 return
637 :
639 printb$;"{rvon}f";f;"{rvof}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}
640 rem    printb$;"{SHIFT--}         {SHIFT--}
641 printb$;"{SHIFT--}";left$(a$,9);"{SHIFT--}
642 printb$;"{SHIFT--}";right$(a$,9);"{SHIFT--}"
643 printb$;"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}
645 :
646 return
648 :
649 :
650 rem" kreuzwort v. hand eingeben
651 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
652 :
653 t$="Kreuzwort (Abbr=q)"
654 poke53280,2:poke53281,2
655 print"{home}";ll$;ll$
656 l=20:m=0:gosub1000:m$=f$
657 ifm$="q"andnr>1then685
658 l=len(m$):ifl<2then656
659 :
660 t$=m$:gosub2000 :rem" pos. eingeben
661 :
662 poke26,len(m$):m$=m$:rem" wort
663 wait203,64:u=usr(0) :rem" eintragen
664 ifu<>3then685
665 :
666 t$="Fragestellung" :rem" frage
667 l=36:m=1:gosub1000 :rem" eingeben
669 :
680 x$=str$(peek(140)=0)  :rem" frage
681 fs$(nr)=x$+f$:nr=nr+1 :rem" merken
682 av=0:dl=dm
683 goto650
684 :
685 return
698 :
699 :
700 rem" kreuzwoerter einlesen
701 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
702 :
703 poke53280,2:poke53281,2
704 print"{home}";ll$;ll$;
705 t$="Wortschatz (Abbr=q)"
706 l=14:m=1:gosub1000
707 iff$="q"thenprint"{home}";ll$:goto733
708 iff$="$"then710
709 f$="{SHIFT-+}"+chr$(20)+f$:goto712
710 gosub3000:iff$=""then704
711 :
712 print"{home}";ll$;ll$
713 open15,8,15
714 open1,8,2,"0:"+f$+",s,r"
715 input#15,en,en$
716 ifen<>0then728
717 :
718 input#1,fg :rem" feldgroesse gleich
719 poke2,fg   :rem" anzahl woerter
720 forn=0tofg :rem"lese woerter/fragen
721 :input#1,kw$(n),fw$(n)
722 next
723 :
724 input#1,nf$:rem" naechster file
725 input#15,en,en$
726 av=0:dl=dm:bs=1:og=fg
727 :
728 print"{home}";left$(ll$,40-len(en$));
729 print"{rvon}";en$
730 :
731 close1:close15
732 :
733 return
734 :
735 :
740 rem" raetsel drucken
741 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
742 :
743 poke53280,2:poke53281,2
744 print"{home}";ll$;ll$
745 print"{home}{cyn}{rvon}Raetsel wird ausgedruckt{rvof}"
746 :
747 gosub761:rem" wortfeld ausdrucken
748 gosub824:rem" fragen ausdrucken
749 gosub900:rem" loesung ausdrucken
750 :
751 return
752 :
753 :
754 rem" {SHIFT-*}{SHIFT-*} init epson rx-80 drucker {SHIFT-*}{SHIFT-*}
755 open1,4:print#1,chr$(27);"@";
756 print#1,chr$(27);"3";chr$(24);
757 rem print#1,chr$(27);"l";chr$(lr);
758 print#1: close1:return
759 :
760 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} wortfeld ausdrucken {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
761 gosub755:open1,4,10:cmd1 :print:print"{rvon}{CBM-A}";
762 forn=0to19:print"{SHIFT-*}{SHIFT-*}{SHIFT-*}";:next
763 print"{CBM-S}{rvof}"
764 :
765 forze=0to19
766 :d=ze*20:ad=s1+d:as=s2+d:aw=s3+d
767 :ab=s4+ze*40
768 :
772 :print" ";
773 :forsp=0to19
774 : c=peek(as+sp)
775 : ifc=0thenprint"   ";:goto777
776 : printmid$(str$(c)+"   ",2,3);
777 :nextsp
779 :gosub820
780 :forn=1to3
781 : print"{rvon}{SHIFT--}{rvof}";
782 : forsp=0to19
783 :  a=166:b=a:c=a
784 :  ifpeek(ab+sp)=160then790
785 :  b=32:c=b:ifsp=19then787
786 :  if(peek(ad+sp)and1)thenc=167
787 :  a=165:ifsp=0thena=32
788 :  if(n=1)andpeek(as+sp)thena=32
789 :  if(n=3)andpeek(aw+sp)thena=32
790 :  printchr$(a);chr$(b);chr$(c);
791 : nextsp
792 : print"{rvon}{SHIFT--}{rvof}";:ifn<3thenprint
793 :nextn
794 :
795 :gosub820:print" ";
796 :forsp=0to19
797 : c=peek(aw+sp)
798 : ifc=0thenprint"   ";:goto800
799 : printmid$(str$(c)+"   ",2,3);
800 :next
801 :
802 :ifze=19then810
803 :gosub820:print" ";
804 :forsp=0to19
805 : p=ad+sp:c=(peek(p)and16)
806 : ifcthenprint"{CBM-P}{CBM-P}{CBM-P}";:goto808
807 : print"{CBM-@}{CBM-@}{CBM-@}";
808 :nextsp
809 :
810 print:nextze
811 :
812 print"{rvon}{CBM-Z}";
813 :forn=0to19:print"{SHIFT-*}{SHIFT-*}{SHIFT-*}";:next
814 print"{CBM-X}{rvof}";:print#1:close1
815 :
816 return
817 :
818 :
820 printchr$(141);:return
821 rem  printchr$(141);left$(ll$,lr);:return :rem fuer rx80
822 :
823 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} fragen ausdrucken {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
824 printchr$(14):open1,4
825 print#1,chr$(27);"0";
826 print#1,chr$(27);chr$(15);
827 print#1,chr$(27);"l";chr$(lr*1.7);
828 :
829 cmd1:printchr$(14);"Senkrecht:"
830 sw=0:gosub838:print
831 :
832 printchr$(14);"Waagerecht:"
833 sw=-1:gosub838:print#1:close1
834 :
835 return
836 :
837 :
838 mz=0:zl=0:f=0:na=1
839 forn=1tonr-1
840 :ifval(fs$(n))=swthengosub847
841 nextn
842 m=0:mr=0:bz=0:gosub881:print
843 :
844 return
845 :
846 :
847 nl=len(str$(n))+2
848 l=zl+nl+len(fs$(n))
849 ifl<czthenzl=l:goto861
850 :
851 pa=1
852 forp=3tolen(fs$(n))-2
853 :ifmid$(fs$(n),p,1)<>" "then855
854 :l=zl+nl+p-2:ifl<czthenpa=p
855 nextp
856 :
857 ifpa=1thenmz=mz-1:l=zl
858 ifpa>1thenl=zl+nl+pa-2
859 gosub866:mz=0
860 :
861 mz=mz+1
862 :
863 return
864 :
865 :
866 bz=int((cz-l)/mz):mr=cz-(l+bz*mz)
867 m=-(mr>0):gosub881
868 :
869 na=n+1:l=len(fs$(n)):ifpa>1then873
870 w=n:print";":gosub892:zl=nl+l+3
871 printmid$(fs$(n),3,l);:goto878
872 :
873 print"; ";left$(ll$,bz);
874 w=n:gosub892:zl=l-pa+2
875 printmid$(fs$(n),3,pa-2)
876 printright$(fs$(n),l-pa);
877 :
878 return
879 :
880 :
881 forp=naton-1
882 :ifval(fs$(p))<>swthen887
883 :iffthenprint"; ";left$(ll$,bz+m);
884 :iffthenmr=mr+(mr>0):m=-(mr>0)
885 :f=1:w=p:gosub892
886 :printright$(fs$(p),len(fs$(p))-2);
887 nextp
888 :
889 return
890 :
891 :
892 nl=len(str$(w))-1:print"(";
893 printright$(str$(w),nl);") ";
894 return
895 :
899 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*} loesung ausdrucken {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
900 gosub755:printchr$(14):open1,4,10:cmd1
901 :
902 print:print:print:print"Loesung:"
903 print"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}"
904 forn=s4tos4+760step40
905 :print"{SHIFT--}";:forp=nton+19
906 :printchr$(peek(p));
907 :nextp:print"{SHIFT--}"
908 nextn
909 print"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}"
910 print#1:close1
911 :
912 return
913 :
914 :
915 rem" vorbereitungen
916 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
917 :
919 poke53280,2:rem" rahmen grau
920 poke53281,2:rem" hintergrund grau
921 :
922 rem   poke792,193:rem" restore und
923 rem poke788,52 :rem" stop verriegeln
924 :
925 dimkw$(254):rem" kreuzwoerter
926 dimfw$(254):rem" fragen dazu
927 dimfs$(255):rem" fragestellung
928 fg=1:og=fg :rem" feldgroesse
929 poke2,fg   :rem" uebergeben
930 :
931 poke785,0   :rem" usr-vektor
932 poke786,192 :rem" setzen
933 :
934 ls=0:rem" Autolader Aus
935 bs=1:rem" Blausperre Ein
936 :
937 sys50016:rem" matrix loeschen
938 :
940 rem sys 51859 :rem" init. drucktreiber
942 :
944 rem" konstanten:
945 :
946 lr=10  :rem" linker rand druckausg.
948 cz=int(130-lr*1.7) :rem" zeillaenge
949 :
950 forn=1to40   :rem" leerstring fuer
952 :ll$=ll$+" " :rem" formatierte
954 next         :rem" ausgabe
955 :
956 s1=50176 :rem" adressen der
958 s2=50576 :rem" wortfeld-
960 s3=50976 :rem" speicher
962 s4=1186
963 :
964 dm=10000:rem" max. anz. laeufe
965 :
966 return
967 :
969 :
970 rem" routinen laden
971 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
972 :
975 forn=0to3:s1=s1+peek(49152+n):next
976 forn=0to3:s2=s2+peek(51857+n):next
977 :
978 ifs1<>483thenload"such.obj",8,1
979 rem ifs2<>494thenload"druck.obj",8,1
980 :
987 return
997 :
998 :
999 :
1000 rem" inputform routine
1001 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
1002 :
1003 x$=chr$(13):y$=chr$(20)
1004 z$=chr$(34)
1005 :
1006 print"{home}{cyn}{rvon}";t$;"?{rvof}  ";:poke198,0
1007 :
1008 f$=""
1009 forn=1tol+1
1010 :print"{left}";f$;"{CBM-@}";
1011 :wait198,1:getf$:poke198,0
1012 :iff$=x$then1024
1013 :iff$=y$andn>1thenn=n-1:goto1010
1014 :ifn>lthen1011
1015 :ifm=0then1021
1016 :iff$=","orf$=z$then1011
1017 :iff$>=" "andf$<="9"then1022
1018 :iff$>="A"andf$<="Z"then1022
1021 :iff$<"a"orf$>"z"then1011
1022 next
1023 :
1024 print"{left} {left}{home}{rvon}";t$;
1026 poke631,13:poke198,1:inputf$
1029 iff$=x$then1005
1030 :
1097 return
1098 :
1099 :
2000 rem" wort positionieren
2001 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
2002 :
2004 print"{home}{down}{lblu}{rvon} (S) enkrecht   oder";
2005 print"   (W) aagerecht  ? "
2006 wait203,63:getf$
2007 iff$<>"s"andf$<>"w"then2006
2008 :
2009 print"{home}{down}{rvof}";ll$;
2010 print"{home}{down}{rvon}Bitte Position anfahren!"
2011 print"{home}{down}{down}{down}{rght}{rght}{rght}{rvof}";
2012 :
2013 fa=1186:p=fa:f=peek(fa)
2014 x=0:y=0:s=(f$="s"):poke140,abs(s)
2015 mx=20+l*(s=0)+(s=-1)
2016 my=20+l*(s=-1)+(s=0)
2017 :
2018 forn=0to9999
2019 pokep,f:p=fa+x+y*40
2020 f=peek(p):pokep,94:wait198,1
2021 getf$:iff$=chr$(13)then2028
2022 iff$="{down}"theny=y-1*(y<my):next
2023 iff$="{rght}"thenx=x-1*(x<mx):next
2024 iff$="{up}"theny=y+1*(y>0):next
2025 iff$="{left}"thenx=x+1*(x>0):next
2026 next
2027 :
2028 pokep,f
2029 print"{home}";ll$;ll$;
2030 :
2031 poke211,x :rem" cursor-position
2032 poke214,y :rem" setzen
2033 :
2097 return
2098 :
2099 :
3000 rem" directory listen
3001 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
3003 :
3004 print"{home}";ll$;"{home}{cyn}";
3005 print"Mit {rvon}RETURN{rvof} auswaehlen "
3006 print"{up}Mit {rvon}LEERTASTE{rvof}  weiter "
3007 :
3008 open15,8,15,"io":open2,8,2,"#"
3010 :
3012 t=18:s=1:f$=""
3014 :
3016 forw=0to99
3018 :
3020 :print#15,"b-r";2;0;t;s
3022 :print#15,"b-p";2;0
3024 :
3026 :get#2,x$:t=asc(x$+chr$(0))
3028 :get#2,x$:s=asc(x$+chr$(0))
3030 :
3032 :forx=0to7
3034 : print#15,"b-p";2;x*32+5:get#2,f$
3038 : iff$<>"{SHIFT-+}"thennextx:goto3060
3042 : fory=1to15
3044 :  get#2,x$:f$=f$+x$
3046 :  ifx$=chr$(160)theny=15
3048 : nexty
3050 : print"{home}";tab(24);"{rvon}";
3052 : printright$(f$,len(f$)-2);"{rvof}"
3053 : wait203,64:wait203,63:getx$
3054 : ifx$=chr$(13)then3064
3055 : print"{home}";tab(24);left$(ll$,14)
3056 : f$=""
3057 :nextx
3058 :
3060 :ift=0thenw=99
3061 nextw
3062 :
3064 close2:close15
3065 print"{home}";ll$;ll$
3066 :
3068 return
3070 :
3071 :
4000 rem" sicherheitsabfrage
4001 rem" {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}
4002 :
4003 poke53280,2:poke53281,2
4004 print"{home}";ll$
4006 print"{home}{cyn}{rvon}";f$;":{rvof} Sicher (J/N) ?"
4008 wait203,64:wait203,63:getf$
4010 iff$<>"j"thenprint"{home}";ll$
4012 :
4014 return
4016 :
4018 :
4020 :
9000 rem"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S}
9002 rem"{SHIFT--}  ende   raetselgenerator   {SHIFT--}
9004 rem"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}
Bild 3. Das Listing zum Kreuzworträtsel
10 rem" basic-lader fuer kreuzwort-suchroutine
11 rem" wichtig: vor dem 1.lauf abspeichern !
12 :
13 ad=12*4096 :rem" = $c000
14 :
15 for n=0 to 906: read by: poke ad+n,by: su=su+by: next
16 if su<>105962 then print" checksum - error" :stop
17 :
20 rem" such-routine abspeichern
22 :
24 poke 43,  0 :rem" vektor auf beginn
26 poke 44,192 :rem" der routine
28 :
30 poke 45,138 :rem" vektor auf ende
32 poke 46,195 :rem" der routine
34 :
36 save"such.obj",8
38 :
40 sys 64738
42 :
44 :
45 data120,32,139,192,240,9,32,188,192,32,240,192,76,21,192,32,15,193,32
46 data100,193,176,19,169,0,133,139,141,0,220,173,1,220,201,255,240,234
47 data160,1,76,135,192,165,140,240,6,32,21,194,76,55,192,32,95,194,176
48 data45,230,25,165,2,197,25,144,17,162,1,32,56,193,32,71,193,165,98,197
49 data26,144,234,76,42,192,165,20,208,11,165,21,208,5,160,2,76,135,192
50 data198,21,198,20,76,23,192,165,139,208,12,165,141,240,228,165,142,240
51 data4,165,143,240,220,238,248,7,32,146,194,160,3,173,248,7,201,255,208
52 data2,160,4,88,76,162,179,32,247,183,165,47,166,48,133,78,134,79,160
53 data0,132,139,169,7,24,101,78,144,2,230,79,133,78,169,162,162,4,133,80
54 data134,81,162,216,133,82,134,83,165,26,201,0,240,2,133,139,96,165,211
55 data133,28,165,214,133,29,24,105,4,133,214,32,108,229,165,209,133,87
56 data165,210,133,88,230,87,230,87,32,36,234,165,243,133,91,165,244,133
57 data92,230,91,230,91,165,51,166,52,133,101,134,102,96,164,28,177,91,41
58 data15,201,14,240,17,170,165,140,208,7,138,201,1,208,9,240,5,138,201
59 data7,208,2,56,96,24,96,169,0,133,140,165,2,32,88,193,133,25,165,78,133
60 data99,165,79,133,100,166,25,240,3,32,56,193,32,71,193,169,255,32,88
61 data193,201,128,144,2,133,140,96,169,3,24,101,99,144,2,230,100,133,99
62 data202,208,242,96,160,0,177,99,133,26,200,177,99,133,101,200,177,99
63 data133,102,96,133,97,173,27,212,197,97,240,2,176,247,96,162,19,134,31
64 data134,32,232,138,56,229,26,166,140,240,6,133,32,169,7,208,4,133,31
65 data169,1,133,33,165,31,32,88,193,133,28,165,32,32,88,193,133,29,165
66 data82,166,83,133,91,134,92,164,29,240,14,169,40,24,101,91,144,2,230
67 data92,133,91,136,208,242,164,28,177,91,41,15,201,14,240,26,197,33,240
68 data22,198,28,16,238,165,31,133,28,165,29,197,32,240,6,230,29,160,1,208
69 data208,24,96,165,80,166,81,133,87,134,88,164,29,240,14,169,40,24,101
70 data87,144,2,230,88,133,87,136,208,242,169,20,166,140,240,6,56,229,29
71 data76,244,193,56,229,28,133,98,56,96,169,0,133,141,133,143,133,27,165
72 data87,166,88,133,89,134,90,165,91,166,92,133,93,134,94,165,28,133,30
73 data96,32,248,193,164,30,177,89,201,160,240,8,164,27,209,101,208,53,164
74 data30,177,93,41,15,201,14,208,4,133,143,240,6,201,7,208,35,133,141,230
75 data27,165,27,197,26,240,27,169,40,24,101,89,144,2,230,90,133,89,169
76 data40,24,101,93,144,2,230,94,133,93,24,144,189,24,96,56,96,32,248,193
77 data164,30,177,89,201,160,240,8,164,27,209,101,208,32,164,30,177,93,41
78 data15,201,14,208,4,133,143,240,6,201,1,208,14,133,141,230,30,230,27
79 data165,27,197,26,208,212,56,96,24,96,32,248,193,164,27,177,101,164,30
80 data145,89,169,5,133,33,177,93,41,15,201,14,208,12,169,7,133,33,165,140
81 data240,4,169,1,133,33,165,33,145,93,230,27,165,27,197,26,240,34,165
82 data140,240,25,169,40,24,101,89,144,2,230,90,133,89,169,40,24,101,93
83 data144,2,230,94,133,93,76,149,194,230,30,76,149,194,169,0,162,196,133
84 data87,134,88,164,29,240,14,169,20,24,101,87,144,2,230,88,133,87,136
85 data208,242,133,89,165,88,133,90,164,28,177,89,166,140,240,4,9,64,208
86 data2,9,4,145,89,224,0,240,15,24,165,89,105,144,133,89,165,90,105,1,133
87 data90,208,13,24,165,89,105,32,133,89,165,90,105,3,133,90,173,248,7,145
88 data89,224,0,240,23,166,26,24,202,240,13,169,20,101,87,144,3,230,88,24
89 data133,87,144,240,169,16,208,8,152,24,101,26,168,136,169,1,17,87,145
90 data87,96,169,0,162,196,133,89,134,90,160,0,140,248,7,152,145,89,230
91 data89,208,250,230,90,165,90,201,201,208,241,169,255,141,14,212,141,15
92 data212,169,129,141,18,212,96,0
Bild 4. Dieses Programm erzeugt ein Maschinenprogramm und speichert es unter dem Namen »SUCH.OBJ« auf Diskette.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →