diff options
| author | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 | 
|---|---|---|
| committer | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 | 
| commit | 04e68443040c7abad84d66477e98f93bed701760 (patch) | |
| tree | 2b6202afae659e773bf6916157d23e83edfa44e3 /app/gs.hamster/1.1 | |
| download | eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2 eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip  | |
Initial import
Diffstat (limited to 'app/gs.hamster/1.1')
14 files changed, 2598 insertions, 0 deletions
diff --git a/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Inhaltsverzeichnis b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Inhaltsverzeichnis new file mode 100644 index 0000000..5726636 --- /dev/null +++ b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Inhaltsverzeichnis @@ -0,0 +1,45 @@ +#limit (11.5)##pagelength (16.5)# +#start (1.8,1.0)#  +Inhaltsverzeichnis  +  +  +  +1      Was kann gs-Herbert und Robbi                 3  +  +2      Allgemeines zum Hamster-/Robotermodell        6  +2.1    Entstehung                                    6  +2.2    Kurzbeschreibung des Hamster-/Roboter-  +       Modells                                       7  +2.2.1  Befehle und Tests                             7  +2.2.2  Landschafts-/Arbeitsfeldgestaltung            9  +2.3    Einsatzbereich                               11  +2.4    Hinweise für den Einsatz in der Ausbildung   12  +2.5    Aufgabenmaterial                             14  +2.6    Erfahrungen mit dem Hamster-/Roboter-Modell  14  +  +3      Installation von gs-Herbert und Robbi        17  +3.1    Voraussetzungen                              17  +3.2    Lieferumfang                                 17  +3.3    Installation                                 18  +3.4    Direktstart des Medells                      20  +  +4      Beschreibung der Menufunktionen              22  +4.1    Kurzhinweise zur Bedienung des Menus         23  +4.2    Menufunktionen zum Oberbegriff 'Info'        27  +4.3    Menufunktionen zum Oberbegriff 'Landschaft'  29  +       Menufunktionen zum Oberbegriff 'Arbeitsfeld' 29  +4.4    Menufunktionen zum Oberbegriff  'Programm'   35  +4.5    Menufunktionen zum Oberbegriff  'Lauf'       41  +4.6    Menufunktionen zum Oberbegriff  'Archiv'     46  +  +5      Detailbeschreibung der Basisbefehle          61  +  +6      Zusätzliche Kommandos                        66  +  + + + + + + + diff --git a/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 1 b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 1 new file mode 100644 index 0000000..73c95f9 --- /dev/null +++ b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 1 @@ -0,0 +1,93 @@ +#limit (11.0)##pagelength (16.5)##block#  +#start (2.0,0.0)#  +#page (3)#  +#headodd#  +#center#gs-Herbert und Robbi#right#%  +  +#end#  +#headeven#  +%#center#gs-Herbert und Robbi  +  +#end#  +#center#1  +  +#center#Was  +#center#kann  +#center#gs-Herbert und Robbi  +  +  +   Mit #on("b")#gs-Herbert und Robbi#off("b")# liegt das von Lothar Oppor +entwickelte und von Wolfgang Weber weiterentwickelte +Hamster-Modell nun eingebettet in die komfortable, +menuorientierte Benutzerschnittstelle #on("b")#gs-DIALOG#off("b")# vor. Das +Programm stellt eine wesentliche Erweiterung des 'alten' +Hamster - Modells dar. Neben einer zweiten Modellvarian +te (Roboter) wurden eine Reihe nützlicher Funktionen in +das Modell integriert. Sämtlich Funktionen werden über +ein übersichtliches Menu angeboten, was gerade dem An +fänger die Arbeit mit dem Computer erleichtert.  +  +   #on("b")#gs-Herbert und Robbi#off("b")# kann zur Einführung in das al +gorithmische Problemlösen eingesetzt werden und soll +dazu dienen, Programmierung #on("u")#einfach#off("u")# und #on("u")#spielerisch#off("u")# zu +erlernen - ohne Ablenkung durch Betriebssystem oder gar +Hardware-Eigenheiten.  +  +   Das Modell ist so einfach und überschaubar, daß ein +Anfänger schon nach einer halben Stunde in der Lage ist, +sich selbst kleine Aufgaben zu stellen und diese zu lösen. +Die Modellumgebung ist so komfortabel, daß der Anfänger +nach einer kurzen Einweisung selbständig mit dem Compu +termodell umgehen kann.  +  +-  Durch die Menuführung sind nur noch wenige Be +   triebssystemkommandos zur Bedienung des Systems +   notwendig.  +  +-  Der Benutzer kann jederzeit Informationen anfordern +   über:  +     -  den zur Verfügung stehenden Befehlsumfang,  +     -  die Möglichkeiten, den Lauf des Hamsters/Robo +        ters zu beeinflussen,  +     -  die Möglichkeiten hinsichtlich der Landschafts +        gestaltung/Arbeitsfeldgestaltung  +     -  die Bedienung des Menusystems  +     -  die Wirkung der einzelnen Menufunktionen  +     -  die Möglichkeiten/Bedienung des Editors  +  +-  Neben der Steuerung des Hamsters/Roboters durch +   Programme kann der Hamster/Roboter auch interaktiv +   gesteuert werden; dabei wird ein Protokoll der ausge +   führten Aktionen in Form eines ablauffähigen ELAN- +   Programms angelegt. Dieses Protokoll (Programm) kann +   jederzeit eingesehen werden. Natürlich kann anschlie +   ßend der Hamster/Roboter die gleichen Aktionen, die +   zuvor von Hand ausgeführt wurden, auch nach diesem +   Programm ausführen.  +  +-  Durch den (optional) erweiterbaren Befehlssatz kann +   #on("b")#gs-Herbert und Robbi#off("b")# den Erfordernissen und der Lei +   stungsfähigkeit der Lernenden leicht angepaßt wer +   den.  +  +-  Auch das Editieren und Drucken von Programmen sowie +   Landschaften/Arbeitsfeldern erfolgt vom Menu aus.  +  +-  Die Archivoperationen, die gerade Anfängern zunächst +   große Probleme bereiten, können sämtlichst komforta +   bel vom Menu aus gehandhabt werden. Dabei werden +   Anfragen an den Benutzer gestellt, die zumeist nur +   mit 'ja' oder 'nein' zu beantworten sind; oder der Be +   nutzer hat in einer Auswahlliste die gewünschten Da +   teinamen anzukreuzen.  +  +-  Die Archivoperationen stehen dem Benutzer auch unab +   hängig vom Hamster-/Robotermodell unter #on("b")#gs-DIALOG#off("b")# +   zur Verfügung, so daß beim Verlassen der Modellum +   gebung "kein Bruch zu befürchten ist".  +  +-  Die Fehlermeldungen sind detailliert und leicht ver +   ständlich, so daß auch Anfänger die Fehlerquelle(n) +   zumeist ohne zusätzliche Hilfen lokalisieren und be +   seitigen können.  + diff --git a/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 2 b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 2 new file mode 100644 index 0000000..52526d6 --- /dev/null +++ b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 2 @@ -0,0 +1,389 @@ +#limit (11.0)##pagelength (16.5)##block#  +#start (2.0,0.0)#  +#page (6)#  +#headodd#  +#center#gs-Herbert und Robbi#right#%  +  +#end#  +#headeven#  +%#center#gs-Herbert und Robbi  +  +#end#  +#center#2  +  +#center#Allgemeines  +#center#zum  +#center#Hamster-/Robotermodell  +  +  +2.1  Entstehung  +  +   Das Hamster - Modell wurde in der Gesellschaft für +Mathematik und Datenverarbeitung (GMD), einer Großfor +schungseinrichtung des Bundes und des Landes Nord +rhein-Westfalen, von Lothar Oppor in Anlehnung an das +Modell 'Karel the Robot' von Richard E. Pattis (Stanford +University, USA) entwickelt und zunächst innerhalb der +GMD und schon bald im Schulbereich eingesetzt.  +   Wolfgang Weber, Lehrer an der Gesamtschule Leopolds +höhe bei Bielefeld, entwickelte in Zusammenhang mit sei +ner Arbeit am Landesinstitut für Schule und Weiterbil +dung in Soest dieses Modell seit 1984 weiter. Sein Ziel war +es, das Modell um solche Komponenten zu erweitern, daß es +auch für Schüler der Sekundarstufe I im Anfangsunter +richt eingesetzt werden kann. Besondere Bedeutung kam +dabei der Entwicklung einer komfortablen, einfach zu be +dienenden Benutzerschnittstelle zu, die es dem Anfänger +ermöglicht, sich von Beginn an mit der eigentlichen Pro +blemstellung auseinanderzusetzen, ohne von Betriebssy +stem oder gar Hardware-Eigenheiten abgelenkt zu werden.  +   Mit dem vorliegenden Programm #on("b")#gs-Herbert und Robbi#off("b")#, +das in die komfortable, menuorientierte  Benutzer +schnittstelle #on("b")#gs-DIALOG#off("b")# eingebettet ist, dürfte diese Ar +beit vorerst zu einem Abschluß gebracht sein. Mit diesem +Programm liegt nun eine Modellumgebung vor, die den +gestellten Anforderungen gerecht wird.  +  +  +2.2  Kurzbeschreibung des Hamster-/Roboter-Modells  +  +   Das Hamster- und das Roboter - Modell sind analog +aufgebaut und in Art und Umfang der Befehle identisch. +Im ersten Modell kann 'Herbert der Hamster', im zweiten +Modell 'Robbi der Roboter' auf dem Bildschirm durch vier +sogenannte Basisbefehle gesteuert werden - 'Herbert' in +einer 'Landschaft', 'Robbi' auf einem 'Arbeitsfeld' - beides +Ebenen, die aus 23 x 40 Kacheln bestehen.  +   Auf dieser Ebene können sich noch Hindernisse und +'Körner' (für Herbert) oder 'Werkstücke' (für Robbi) befin +den. Die Hindernisse stellen auf dem Bildschirm Barrieren +dar, die umgangen werden müssen. Die Körner bzw. Werk +stücke können von Herbert in seinen 'Backentaschen' bzw. +von Robbi in seinem 'Behälter' aufgenommen oder daraus +(wieder) abgelegt werden.  +  +  +2.2.1  Befehle und Tests  +  +   Für die Steuerung von Herbert bzw.Robbi stehen vier +Basisbefehle zur Verfügung (die in beiden Modellvarian +ten gleich sind):  +  +#on("u")#vor#off("u")#  +  Gehe eine Kachel (einen Schritt) in Laufrichtung vor.  +  +#on("u")#links um#off("u")#  +  Drehe Dich, wo Du stehst, um 90 Grad nach links.  +  +#on("u")#nimm#off("u")#  +  Nimm da, wo Du stehst, ein Korn/Werkstück auf.  +  +#on("u")#gib#off("u")#  +  Lege da, wo Du stehst, aus den Backentaschen/dem Be +  hälter ein Korn/Werkstück ab.  +  +   Da nur dort ein Korn/Werkstück aufgenommen werden +kann, wo auch eines vorhanden ist oder nur vorgegangen +werden kann, wenn die nächste Kachel noch zur Land +schaft/zum Arbeitsfeld gehört und nicht blockiert ist, +sind die Befehle 'nimm', 'gib' und 'vor' nicht uneinge +schränkt ausführbar. Aus diesem Grunde sind noch die +folgenden #on("u")#Basistests#off("u")# definiert:  +  +#on("u")#vorn frei#off("u")#  +  testet, ob die vor ihm liegende Kachel frei ist.  +  +#on("u")#korn da / werkstueck da#off("u")#  +  testet, ob auf der Kachel, auf der er steht, mindestens +  ein Korn/Werkstück liegt.  +  +#on("u")#backen leer /behaelter leer#off("u")#  +  testet, ob kein Korn/Werkstück in den Backentaschen/im +  Behälter ist.  +  +   Darüberhinaus können Sie bei der Installation des +Systems noch festlegen, ob die folgenden #on("u")#Zusatztests#off("u")# zur +Verfügung stehen sollen oder nicht:  +  +#on("u")#links frei#off("u")#  +  testet, ob die Kachel links neben ihm frei ist.  +  +#on("u")#rechts frei#off("u")#  +  testet, ob die Kachel rechts neben ihm frei ist.  +  +#on("u")#hinten frei#off("u")#  +  testet, ob die Kachel hinter ihm frei ist.  +  +#on("u")#korn vorn / werkstueck vorn#off("u")#  +  testet, ob auf der Kachel vor ihm mindestens ein Korn/ +  Werkstück liegt.  +  +#on("u")#korn links / werkstueck links#off("u")#  +  testet, ob auf der Kachel links neben ihm mindestens +  ein Korn/ Werkstück liegt.  +  +#on("u")#korn rechts / werkstueck rechts#off("u")#  +  testet, ob auf der Kachel rechts neben ihm mindestens +  ein Korn/Werkstück liegt  +  +#on("u")#korn hinten / werkstueck hinten#off("u")#  +  testet, ob auf der Kachel hinter ihm mindestens ein +  Korn/Werkstück liegt.  +  +   Es gibt #on("u")#keinen#off("u")# Testbefehl, mit dem überprüft werden +kann, ob der Rand der Ebene erreicht ist.  +  +  +2.2.2  Landschaftsgestaltung/Arbeitsfeldgestaltung  +  +   Der Benutzer kann selber Landschaften/Arbeitsfelder +erstellen, auf denen Herbert bzw. Robbi bewegt werden +kann. Es können aber auch fertige Ebenen verändert wer +den.  +   Eine Landschaft/ein Arbeitsfeld ist eine Ebene aus +23 x 40 Kacheln. Eine Kachel kann auf dem Bildschirm so +aussehen:  +  +    Leere Kachel  :    Blank und Punkt       (" .")  +    Kornkachel    :    Blank und kleines o   (" o")  +    Hindernis     :    zwei Nummernzeichen   ("\#\#")  +  +   In dieser Landschaft steht auf einer der Kacheln Her +bert bzw. Robbi:  +  +    "A"   mit Blickrichtung nach oben  +    ">"   mit Blickrichtung nach rechts  +    "V"   mit Blickrichtung nach unten  +    "<"   mit Blickrichtung nach links  +  +  +#on("u")#Beispiel:#off("u")# Ausschnitt aus einer Landschaft:  +  +#on("b")#  +             . . . . . . . . . . . . . . . . . . . .  +             . . o o o o o o o o o o . . . . . . . .  +             . . o . . . . . . . . o . . . . . . . .  +             . . o . . . . . . . . o . . . . . . . .  +             . o o .\#\#\#\#\#\#\#\#\#\#\#\# . o . . . . . . . .  +             . o . .\#\# .V. . .\#\# . o o o o o o o . .  +             . o . .\#\# . o . .\#\# . . . . . . . o . .  +             . o o o o o o . .\#\# . . . o o o o o . .  +             . . . .\#\# . . . .\#\# . . . o . . . . . .  +             . . . .\#\# . . . .\#\# . . . o o o o . . .  +             . . . .\#\#\#\#\#\#\#\#\#\#\#\# . . . . . . o o . .  +             . . . . . . . . . . . . . . . . . . . .  +  +Während der Landschaftsgestaltung wirken folgende +Tasten:  +  +<h>          halt, beende die Landschafts-/Arbeitsfeld +             gestaltung  +<\#>          setze ein Hindernis und gehe ein Feld +             weiter  +<LEERTASTE>  leere das Feld und gehe ein Feld weiter  +<g>          lege hier ein Korn/Werkstück ab  +<n>          nimm ein Korn/Werkstück auf (falls hier +             welche liegen)  +<z>          zeige, wie viele Körner/Werkstücke hier +             liegen  +<k>          ersetze diese Landschaft/diese Arbeitsfeld +             durch die Kopie einer bereits vorhandenen +             anderen Landschaft/eines bereits vorhan +             denen anderen Arbeitsfeldes  +  +-  Durch Drücken der Fragezeichentaste (<?>) während der +   Landschafts-/Arbeitsfeldgestaltung, können Sie sich +   diese Hinweise auch auf dem Bildschirm einblenden +   lassen.  +  +-  Mit den Pfeiltasten kann Herbert/Robbi bewegt und +   seine Richtung verändert werden.  +  +-  Die Landschaftsgestaltung wird durch Tippen der +   Taste <h> abgeschlossen. Die Position und die Blick +   richtung, die Herbert bzw. Robbi zu diesem Zeitpunkt +   innehat, wird als Startposition vermerkt.  +  +-  Auf dem Bildschirm wird dann noch die Zahl der Kör +   ner/Werkstücke erfragt, die Herbert bzw.Robbi zu Be +   ginn des Laufes in seinen Backentaschen/in seinem +   Behälter haben soll. Hier muß eine Zahl zwischen 0 und +   32767 eingegeben werden.  +  +  +2.3  Einsatzbereich  +  +   Das Hamster-/Roboter-Modell soll dazu dienen, die +Grundelemente des algorithmischen Problemlösens (Folge, +Auswahl, Wiederholung etc.) #on("u")#einfach#off("u")# und #on("u")#spielerisch#off("u")# zu +erlernen und sie in der Programmiersprache ELAN zu co +dieren. In der Bildschirmdarstellung erinnert das Ham +ster-/Roboter-Modell zunächst an ein einfaches Tele +spiel, eine Anwendung des Computers, die sicher bekannt +ist. Darüberhinaus lassen sich leicht Bezüge zur Steue +rung von Industrierobotern herstellen.  +   Durch die komfortable Benutzerschnittstelle wird dem +Anwender in der Anfangsphase eine Auseinandersetzung +mit dem Betriebssystem "erspart". Die Arbeit mit dem Mo +dell setzt #on("u")#keine Vorerfahrungen und Kenntnisse#off("u")# voraus. +Das Modell ist schon nach weniger als einer halben Stun +de für den Anfänger überschaubar. Er kann dann schon +Aufgaben lösen, sich selbst Aufgaben stellen bzw. die +gegebene Aufgabenstellung erweitern.  +   Das Modell zielt auf die Aktivierung des Lernenden +und die Mitarbeit in allen Punkten: Aufgabenstellung, +Lösungsgestaltung, Lösungstest und -verifizierung. Der +Lernfortschritt kann in stärkerem Maße als im "herkömm +lichen Programmierunterricht" von den Lernenden selbst +bestimmt werden. Der spielerische Anfang, die Veran +schaulichung der Programmausführung auf dem Bild +schirm, die Möglichkeit Fehler direkt und eigenständig +zu erkennen, fördern die Motivation, die Kreativität und +die Fehler- und Frustrationstoleranz.  +  +  +2.4  Hinweise für den Einsatz in der Ausbildung  +  +   Das Hamster-/Roboter-Modell ist angelegt für "Pro +grammieren" mit Bleistift und (kariertem) Papier. Für die +Überlegungen, die anzustellen sind, ist der Computer +selbst in der Anfangsphase #on("u")#nicht notwendig#off("u")#. Man kann +Kachel-Landschaften / Kachel-Arbeitsfelder aufzeich +nen und vorgegebene oder sich selbst gestellte Aufgaben +lösen. Die erstellten Programme werden ausgeführt, indem +man z.B. eine kleine Büroklammer als Hamster/Roboter auf +dem Papier oder der Folie dem Programm entsprechend ver +schiebt. Heftzwecken oder Pfennigstücke können als Kör +ner/ Werkstücke und Streichholzstücke als Hindernisse +dienen.  +   #on("b")#gs-Herbert und Robbi#off("b")# verfügt auch über die Möglich +keit, den Hamster/Roboter interaktiv zu steuern. Auch +hierüber ist ein Einstieg in den Umgang mit dem Modell +möglich. Bei der interaktiven Steuerung kann der Ham +ster/Roboter von Hand durch Tastendruck auf dem Bild +schirm bewegt werden. Dabei können nur die vier Basisbe +fehle ('vor', 'links um', 'nimm' und 'gib') verwendet werden. +Während der Steuerung von Hand wird ein "Protokoll" der +ausgeführten Befehle angelegt - und zwar gleich in Form +eines ablauffähigen ELAN-Programms. Dadurch hat der +Benutzer einerseits die Möglichkeit, die Anweisungen, die +durch Tastendruck gegeben wurden, zu kontrollieren, +andererseits kann anschließend die Folge der eingegebe +nen Anweisungen auch als Programm vom Computer ausge +führt werden ('Teach in').  +  +   Nach diesem "ersten Kennenlernen des Modells" sollte +man dann aber bei Problemstellungen, die ein systemati +sches Vorgehen erfordern, die Arbeit mit dem Computer +unterbrechen und die Algorithmen jeweils auf dem Papier +entwerfen. Auf die Ausführung der erstellten Anwei +sungsfolgen von Hand auf Papier/Folie sollte man #on("u")#auf +keinen Fall gänzlich verzichten#off("u")# - auch, um den Lernen +den zu verdeutlichen, daß die Befehlsfolgen sowohl vom +"Prozessor Mensch" als auch vom "Prozessor Computer" +ausgeführt werden können; der Computer also nur ein +Hilfswerkzeug ist.  +   Erst wenn das Bilden eigener benannter Anweisungen +(Refinements/Prozeduren) den Lernenden hinreichend ver +traut ist, ist es sinnvoll, umfangreichere Problemstel +lungen anzugehen. Da dann auch die Programmausführung +von Hand mühsam wird und ihren Reiz verliert, sollte man +(wieder) zum Computermodell übergehen, um mit dessen Hil +fe die Programme auszuführen und zu überprüfen.  +   Nachdem die Lernenden die Basisbefehle sicher beherr +schen und eigene benannte Anweisungen unter Verwendung +der Basisbefehle konstruieren können, können dann nach +und nach die vorgegebenen Tests und damit auch die ande +ren Elemente der Algorithmenentwicklung (Auswahl, Wie +derholung etc.) in den Unterricht eingebracht werden.  +   Als notwendig hat es sich erwiesen, von Anfang an auf +eine saubere Strukturierung und Modularisierung der +Algorithmen zu achten. Gerade Lernende mit "Program +miererfahrung" neigen dazu, möglichst "kurze" Program +me schreiben zu wollen. Besonderen Wert sollten Sie auf +eine treffende Namensgebung der einzelnen Module legen, +selbst wenn die Lernenden das oft als "lästige Schreibar +beit" empfinden. Aufgaben können ein Einzel-, Partner- +und Gruppenarbeit bearbeitet werden. Dabei hat sich die +Arbeit in kleinen Gruppen als besonders effektiv erwie +sen. Die Lernenden sind untereinander zumeist sehr kri +tisch und fordern sich gegenseitig auf, "lesbare" Pro +gramme zu schreiben. Ein Austausch der Programme unter +den Gruppen kann diesen Anspruch noch zusätzlich för +dern.  +  +  +2.5  Aufgabenmaterial  +  +   Zum Hamster-Roboter-Modell sind inzwischen eine Rei +he von Aufgaben / Aufgabensystemen enstanden. An dieser +Stelle soll auf zwei Veröffentlichungen hingewiesen +werden, in denen Sie solche Aufgaben / Aufgabensysteme +finden können:  +  +Weber, Wolfgang et al., Das Hamster-/Roboter-Modell,  +   in:  Landesinstitut für Schule und Weiterbildung +        (Hrsg.), Materialien zur Lehrerfortbildung in +        Nordrhein-Westfalen, Heft 1, Neue Technologien +        - Informations- und Kommunikationstechnologi +        sche Inhalte im Wahlpflichtunterricht der Klas +        sen 9/10, Soest, 1986  +  +Ambros, Wolfgang, Der Hamster, Programmieren lernen in +        einer Modellwelt, J.B. Metzlersche Verlagsbuch +        handlung, Stuttgart, 1987  +  +  +2.6  Erfahrungen mit dem Hamster-/Roboter-Modell  +  +   Seit 1982 wird das Hamster - Modell in der GMD zur +Programmierausbildung eingesetzt. Die Ergebnisse sind +hervorragend: Die Teilnehmer bewältigen in derselben +Zeit erheblich mehr Inhalte als früher ohne Modell. Moti +vation, Selbständigkeit und Initiative prägen sich er +heblich früher und merklich stärker aus. Außerdem sind +die am Modell erworbenen Kenntnisse tiefer und sicherer.  +   Seit 1983 wird das Hamster - Modell auch in mehreren +Schulen mit sehr gutem Erfolg eingesetzt. Der Erfolg ist +am größten im Blockunterricht (3 - 5 Tage z.B. in Projekt +wochen, Schullandheimaufenthalten etc.). Aber auch im +stundenweisen Unterricht wird das Hamster-/Roboter- +Modell mit gutem Erfolg eingesetzt.  +   Beide Zugänge, der Einstieg über das Arbeiten mit +Bleistift und Papier und der Einstieg über die interakti +ve Steuerung des Hamsters/Roboters, haben sich als prak +tikabel erwiesen. Der Zugang über die interaktive Steue +rung bietet den Vorteil, die zumeist sehr hohe Motivation +der Lernenden, "endlich mit dem Computer arbeiten zu +können", auszunutzen. Sie lernen dabei das Computermo +dell auf einfache Weise kennen und haben einen ersten +Umgang mit Bildschirm und Tastatur. Kleine, einfache +Problemstellungen können von ihnen durch die interak +tive Steuerung schnell und sicher bearbeitet werden. +"Nebenbei" lernen sie, neben der Wirkung der Basisbefeh +le, durch das mitgeführte Protokoll auch die Codierung +in der Programmiersprache kennen. Allerdings verliert +die interaktive Steuerung relativ schnell ihren Reiz, +wenn die Lernenden erkennen, daß nur sehr einfache Pro +blemstellungen damit bearbeitet werden können. Dann +sollte aber zur Arbeit mit Papier und Bleistift überge +gangen werden.  +   Die Entscheidung, ganz auf das Arbeiten mit Papier +und Bleistift zu verzichten, hat sich als sehr nachteilig +erwiesen. Die Lernenden "hacken" die Programme in die +Maschine und handeln eher nach dem "Prinzip von Versuch +und Irrtum" als nach sorgfältigen Überlegungen. Bei +komplexeren Problemstellungen scheitern diese Teilneh +mer zumeist.  +   Erfahrungsgemäß nimmt nach einiger Zeit der Wunsch +stark zu, eigene Ausgaben auf dem Bildschirm zu erzeugen +und andere Problembereiche zu bearbeiten (zum "richtigen +Programmieren" überzugehen). Sie sollten diesen Schritt +dann auch nicht zu lange hinauszögern und das Modell +auf keinen Fall überstrapazieren. Da das Modell selbst +und auch der Umgang damit sehr einfach ist, besteht auch +später die Möglichkeit, zum Modell zurückzukehren, um +hieran weitere Elemente der Algorithmenentwicklung in +einfacher und anschaulicher Form einzuführen.  +  + diff --git a/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 3 b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 3 new file mode 100644 index 0000000..c34b752 --- /dev/null +++ b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 3 @@ -0,0 +1,199 @@ +#limit (11.0)##pagelength (16.5)##block#  +#start (2.0,0.0)#  +#page (17)#  +#headodd#  +#center#gs-Herbert und Robbi#right#%  +  +#end#  +#headeven#  +%#center#gs-Herbert und Robbi  +  +#end#  +#center#3  +  +#center#Installation  +#center#von  +#center#gs-Herbert und Robbi  +  +  +   Bevor Sie #on("b")#gs-Herbert und Robbi#off("b")# auf Ihrem Computer +benutzen können, müssen Sie das Programm zunächst in +stallieren. Wenn #on("b")#gs-Herbert und Robbi#off("b")# auf Ihrem System +schon zur Verfügung steht, können Sie dieses Kapitel +ruhig überspringen.  +  +  +3.1  Voraussetzungen  +  +   Um #on("b")#gs-Herbert und Robbi#off("b")# auf Ihrem Computer betreiben +zu können, muß das EUMEL-Betriebssystem installiert +sein. #on("b")#gs-Herbert und Robbi#off("b")# setzt die Multi-User-Version +voraus und ist lauffähig ab Version 1.7.5. #on("b")#gs-Herbert und +Robbi#off("b")# setzt weiterhin voraus, daß auf Ihrem Computer +bereits das Programm #on("b")#gs-DIALOG#off("b")# installiert ist.  +  +  +3.2  Lieferumfang  +  +   #on("b")#gs-Herbert und Robbi#off("b")# wird auf einer Diskette gelie +fert, die alle notwendigen Programme enthält (die Instal +lation von #on("b")#gs-DIALOG#off("b")# wird dabei vorausgesetzt!). Um den +Inhalt der Diskette feststellen zu können, starten Sie +Ihr System und bringen es dazu, daß 'gib kommando:' er +scheint. Dann legen Sie die Diskette ein und geben das +Kommando:  +  +archive("gs-Herbert und Robbi");list(archive);  +release(archive) <RETURN>  +  +   Anschließend erscheint eine Übersicht der auf dem +Archiv vorhandenen Programme. Folgende Programme soll +ten sich in der Übersicht befinden:  +  +         "gs-Herbert und Robbi 1"  +         "gs-Herbert und Robbi 2"  +         "gs-Herbert und Robbi 3"  +         "gs-MENUKARTE:Herbert und Robbi"  +         "gs-Herbert und Robbi/gen"  +  +   Eventuell können noch weitere Namen auf der Diskette +vorhanden sein. Wenn Sie den Inhalt der Diskette kon +trolliert haben und diese Programme auf der Diskette +vorhanden sind, können Sie #on("b")#gs-Herbert und Robbi#off("b")# instal +lieren.  +   Sollten Sie statt der Übersicht eine Fehlermeldung +erhalten, überprüfen Sie bitte, ob die Diskette das rich +tige Format besitzt oder ob Ihr Diskettenlaufwerk Pro +bleme macht. Sollten dagegen Programme fehlen, so rekla +mieren Sie die Diskette.  +  +  +3.3  Installation  +  +   #on("b")#gs-Herbert und Robbi#off("b")# muß in einer Task installiert +werden, in der bereits das Programm #on("b")#gs-DIALOG#off("b")# zur Ver +fügung steht. Alle Söhne und Enkel der neuen Task kön +nen anschließend das Hamster-/ Roboter-Modell aufrufen. +Richten Sie also eine Task als Sohn der Task ein, in der +auf Ihrem Computer bereits #on("b")#gs-DIALOG#off("b")# installiert ist. Wir +nehmen hier an, daß #on("b")#gs-DIALOG#off("b")# in der Task 'MENU' instal +liert ist und die neue Task den Namen 'HAMSTER' erhalten +soll. (Sie können für die Task auch einen beliebigen an +deren Namen wählen):  +  +#on("b")#  +          <SV>           (Supervisor - Taste)  +  +#off("b")#  +  -->     gib supervisor kommando:  +#on("b")#  +          begin ("HAMSTER","MENU") <RETURN>  +#off("b")#  +  +  -->     gib kommando:  +  +   (Arbeiten mehrere Personen mit dem Computer, dann ist +es sinnvoll, diese Task vor unbefugtem Zugriff durch ein +Passwort zu schützen. Wie das gemacht wird, können Sie in +Ihrem EUMEL-Benutzerhandbuch erfahren.)  +  +   Legen Sie dann die Archivdiskette ein, auf der sich +#on("b")#gs-Herbert und Robbi#off("b")# befindet, und geben Sie das folgen +de Kommando:  +  +#on("b")#  +   archive("gs-Herbert und Robbi") <RETURN>  +  +   fetch("gs-Herbert und Robbi/gen",archive) <RETURN>  +  +   run <RETURN>  +#off("b")#  +  +   Sie haben damit das Generatorprogramm gestartet. +Zunächst werden Sie gefragt, ob Sie den erweiterten Be +fehlssatz (mit Zusatztests) für den Hamster und Roboter +zur Verfügung gestellt haben möchten. Beantworten Sie +diese Frage je nach Wunsch mit 'ja' oder 'nein' durch Tip +pen der Taste <j> bzw. <n>.  +   Daraufhin wird die Installation automatisch durchge +führt. Lassen Sie während des gesamten Vorgangs die Ar +chivdiskette eingelegt. Die Generierung ist beendet, wenn +der EUMEL-Eingangsbildschirm erscheint. Die Task, in der +die Generierung stattfindet, wird automatisch zur Mana +gertask, das heißt, daß Söhne von ihr eingerichtet werden +können.  +   Richten Sie sich gleich eine Sohntask (z.B mit dem Na +men 'hamster1') ein, dann können Sie das System sofort +ausprobieren. Gehen Sie dazu folgendermaßen vor:  +  +#on("b")#  +          <SV>           (Supervisor - Taste)  +  +#off("b")#  +  -->     gib supervisor kommando:  +#on("b")#  +          begin ("hamster1","HAMSTER") <RETURN>  +#off("b")#  +  +  -->     gib kommando:  +  +  +Mit dem Kommando  +  +#center##on("b")#hamster <RETURN>  bzw.  roboter <RETURN>#off("b")#  +  +rufen Sie nun das  +  +#center#Hamster-Modell  bzw. Roboter-Modell  +  +auf.  +  +  +3.4  Direktstart des Modells  +     (Steht erst ab gs-DIALOG Version 1.1 zur Verfügung)  +  +   In Kapitel 3.3 haben wir Ihnen gezeigt, wie sie eine +Sohntask einrichten und hier durch das Kommando 'ham +ster' bzw. 'roboter' das System aufrufen können. Wenn Sie +immer nur mit einer Modellvariante arbeiten oder vor dem +Benutzer die 'gib kommando:'-Ebene verbergen wollen, +können Sie das System auch so einrichten, daß sich sofort +nach Einrichten des Arbeitsbereichs das Menusystem mel +det. Für den Anfänger kann das die Arbeit durchaus er +leichtern.  +  Gehen Sie dazu in die Task, unterhalb der die Sohntasks +eingerichtet werden sollen:  +  +#on("b")#  +          <SV>           (Supervisor - Taste)  +  +#off("b")#  +  -->     gib supervisor kommando:  +#on("b")#  +          continue ("HAMSTER") <RETURN>  +#off("b")#  +  +  -->     gib kommando:  +#on("b")#  +          direktstart ("hamster", TRUE) <RETURN>  +#off("b")#  +  +   Durch das Kommando haben Sie festgelegt, daß sich +alle Sohntasks direkt mit dem Hamstermenu melden. Möch +ten Sie lieber mit dem Roboter-Modell arbeiten, ist nur +'hamster' durch 'roboter' zu ersetzen.  +   Durch den zweiten Parameter 'TRUE' legen Sie fest, daß +in den Sohntasks nach Verlassen des Menus die jeweilige +Task automatisch gelöscht wird. Statt 'TRUE' können Sie +hier auch den Wert 'FALSE' eintragen. Dann wird nach Ver +lassen des Menus angefragt, ob die Task gelöscht werden +soll. Wird die Frage bejaht, wird gelöscht - sonst wird die +Task abgekoppelt (break) und kann durch 'continue' wieder +angekoppelt werden.  +   Anmerkung: In der Task, in der Sie das Kommando +'direktbefehl' gegeben haben, sollte nicht das Kommando +'monitor' gegeben werden, da Sie durch dieses Kommando +auch diese Task zu einer Task machen, die sich direkt mit +dem Menu meldet und ggf. bei Verlassen des Menus automa +tisch gelöscht wird!  + diff --git a/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 4 b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 4 new file mode 100644 index 0000000..4f2d79a --- /dev/null +++ b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 4 @@ -0,0 +1,1312 @@ +#limit (11.0)##pagelength (16.5)##block#  +#start (2.0,0.0)#  +#page (22)#  +#headodd#  +#center#gs-Herbert und Robbi#right#%  +  +#end#  +#headeven#  +%#center#gs-Herbert und Robbi  +  +#end#  +#center#4  +  +#center#Beschreibung  +#center#der  +#center#Menufunktionen  +  +  +   Nach Aufruf meldet sich #on("b")#gs-Herbert und Robbi mit +#on("u")#einem#off("u")# der folgenden Menus:  +  +  +#on("b")#  +HAMSTER:  Info  Landschaft  Programm  Lauf  Archiv  ++---------------------------+--------------------------------------------  +|  l Landschaftsgestaltung  |  +|  b Befehlsvorrat          |  +|  s Steuerung des Laufs    |  ++---------------------------+  +  +  +  +  +  +  +  +  +  +  +  +  +-------------------------------------------------------------------------  +Info:<ESC><?>/<?>  Wahl:<Pfeile>  Ausführen:<RETURN>  Verlassen:<ESC><q>  +#off("b")#  +  +#on("u")#oder#off("u")#  +  +#on("b")#  +ROBOTER:  Info  Arbeitsfeld  Programm  Lauf  Archiv  ++----------------------------+--------------------------------------------  +|  a  Arbeitsfeldgestaltung  |  +|  b Befehlsvorrat           |  +|  s Steuerung des Laufs     |  ++----------------------------+  +  +  +  +  +  +  +  +  +  +  +  +  +--------------------------------------------------------------------------  +Info:<ESC><?>/<?>  Wahl:<Pfeile>  Ausführen:<RETURN>  Verlassen:<ESC><q>  +#off("b")#  +  +   Beide Varianten sind, wie schon gesagt, analog auf +gebaut. Aus diesem Grunde werden wir uns in den folgen +den Ausführungen auf die Beschreibung der Hamster - +Variante beschränken.  +  +  +4.1  Kurzhinweise zur Bedienung des Menus  +  +   Die Bedienung des Menus ist sehr einfach. Eine aus +führliche Beschreibung dazu finden Sie in den Unterla +gen zum Programmsystem #on("b")#gs-DIALOG#off("b")#. An dieser Stelle sol +len nur die wesentlichen Bedienungsvorgänge beschrieben +werden.  +  +-  Mit der Tastenfolge <ESC><?> können Sie sich Informa +   tionen zur Bedienung des Menusystems in das Menu +   einblenden lassen  +  +-  Mit den Pfeiltasten <rechts> und <links> können Sie +   zwischen den "Oberbegriffen" in der Kopfzeile wählen. +   Der aktuelle Oberbegriff ist jeweils invers darge +   stellt. Das ausgeklappte 'Pull-Down-Menu' bezieht sich +   auf diesen invers dargestellten Oberbegriff.  +  +-  Mit den Pfeiltasten <hoch> und <runter> können Sie +   zwischen den Menufunktionen wählen, die Ihnen im +   aktuellen Pull-Down-Menu zur Auswahl angeboten +   werden. Die aktuell angewählte Menufunktion wird +   jeweils invers dargestellt. Die Trennlinien, die in +   einigen Pull-Down-Menus sichtbar sind, dienen nur +   der optischen Untergliederung; sie können nicht an +   gewählt werden und werden deshalb automatisch über +   sprungen. Die einzelnen Menupunkte sind "zyklisch +   miteinander verknüpft", das heißt, man gelangt vom +   untersten Menupunkt wieder zum obersten und umge +   kehrt. Menupunkte, vor denen ein Minuszeichen steht +   ('-'), sind (zur Zeit) nicht aktivierbar; auch sie können +   nicht angewählt werden und werden einfach über +   sprungen.  +  +-  Durch Tippen der Fragezeichentaste (<?>) können Sie +   sich jeweils zur aktuellen Menufunktion (invers im +   Pull-Down-Menu) Informationen in das Menu einblen +   den lassen.  +  +-  Um eine Menufunktion ausführen zu lassen, bewegen +   Sie sich mit den Pfeiltasten auf die gewünschte Menu +   funktion im aktuellen Pull-Down-Menu und tippen +   dann die <RETURN>-Taste. Steht vor dem gewünschten +   Menupunkt ein einzelner Buchstabe oder eine Ziffer, +   so kann durch Tippen der entsprechenden Taste diese +   Menufunktion dadurch direkt aufgerufen werden. So +   bald eine Menufunktion aufgerufen worden ist, er +   scheint davor ein Stern ('*'). Daraus können Sie ent +   nehmen, daß das System bereits den Auftrag ausführt.  +  +-  An verschiedenen Stellen werden Fragen an Sie ge +   richtet, die Sie mit 'ja' oder 'nein' beantworten müssen. +   Tippen Sie dazu entsprechend der Entscheidung die +   Taste <j> (für 'ja') bzw. <n> (für 'nein').  +  +-  Werden Ihnen vom Menu aus Dateinamen zur Auswahl +   angeboten, so können Sie den auf dem Bildschirm +   sichtbaren Pfeil vor den gewünschten Namen positio +   nieren. Mit den Tasten <x> oder <RETURN> können Sie +   den Namen ankreuzen. Ist die Auswahl mehrerer Datein +   amen möglich, so können Sie den Vorgang wiederholen. +   Mit den Tasten <o> oder <RUBOUT> können Sie auch ein +   Kreuz vor einem Namen wieder löschen. Daneben gibt es +   noch einige Tastenfunktionen, die für die Bedienung +   recht hilfreich sein können. Tippen Sie während der +   Auswahl die Fragezeichentaste (<?>), so werden Ihnen +   alle Bedienungsmöglichkeiten auf dem Bildschirm an +   gezeigt. Eine Auswahl, in der mehrere Dateien ange +   kreuzt werden dürfen, wird durch die Tastenfolge +   <ESC><q> verlassen. Anschließend wird die eingestellte +   Operation mit den angekreuzten Dateien ausgeführt. +   Sind Sie versehentlich in eine solche Auswahl ge +   langt, so können Sie den Vorgang durch die Tasten +   kombination <ESC><h> abbrechen.  +  +-  An einigen Stellen werden Sie aufgefordert, eine Ein +   gabe zu machen (z.B. einen Dateinamen einzugeben). Wird +   Ihnen hier ein Vorschlag gemacht, den Sie akzeptieren, +   so brauchen Sie zur Bestätigung nur die <RETURN>- +   Taste zu tippen. Gefällt Ihnen der Vorschlag nicht +   oder wird Ihnen kein Vorschlag gemacht, so machen Sie +   bitte die gewünschte Eingabe. Zum Schreiben stehen +   Ihnen alle aus dem Editor bekannten Funktionen zur +   Verfügung. Mit der Taste <RUBOUT> können Sie Buch +   staben löschen, mit <RUBIN> einfügen. Die Eingabe wird +   durch Tippen der <RETURN>-Taste abgeschlossen. Ist +   der von Ihnen gewünschte Name schon in Ihrer Task +   vorhanden und steht in der Fußzeile der Hinweis 'Zei +   gen: <ESC><z>', dann können Sie sich auch alle vorhan +   denen Namen zur Auswahl anbieten lassen und durch +   Ankreuzen den beabsichtigten Namen auswählen.  +  +-  Ihnen können auch mehrere Alternativen angeboten +   werden, zwischen denen Sie wählen müssen. In der un +   tersten Zeile eines solchen Kastens, in denen Ihnen die +   Alternativen auf dem Bildschirm eingeblendet werden, +   sind die Möglichkeiten aufgeführt, die darüber be +   schrieben sind. Mit den Pfeiltasten können sie die +   Markierung auf die gewünschte Alternative positio +   nieren und dann durch die <RETURN>-Taste zur Aus +   führung bringen. (Manchmal ist das auch durch Tippen +   der den Alternativen vorangestellten Buchstaben oder +   Ziffern möglich).  +  +-  Durch die Tastenfolge <ESC><q> kann das Menu insge +   samt verlassen werden. Damit das nicht versehentlich +   geschieht, wird jeweils die Frage gestellt, ob Sie das +   Menu tatsächlich verlassen wollen. Diese Frage beant +   worten Sie bitte je nach Wunsch mit 'ja' oder 'nein' +   durch Tippen der Tasten <j> bzw. <n>.  +  +#page#  +4.2  Menufunktionen zum Oberbegriff 'Info'  +  +   Das auf dem Bildschirm sichtbare Pull-Down-Menu ist +oben abgebildet.  +  +#on("u")##on("b")#l Landschaftsgestaltung (a Arbeitsfeldgestaltung)#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich alle Tasten, +     die bei der Landschafts-/Arbeitsfeldgestaltung +     wirksam sind, anzeigen lassen.  +        In der Anzeige wird die jeweilige Tastenfunktion +     erläutert. Während der Landschafts-/Arbeitsfeld +     gestaltung können Sie sich diese Informationen +     durch Tippen der Fragezeichentaste (<?>) ebenfalls +     einblenden lassen.  +  +#on("u")##on("b")#b Befehlsvorrat#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich die Befehle, +     die Ihnen vom jeweiligen Modell zur Verfügung ge +     stellt werden, auf dem Bildschirm anzeigen lassen.  +        Anhand dieser Informationen können Sie auch +     feststellen, ob in dem System, das Ihnen zur Verfü +     gung steht, der "eingeschränkte" oder "erweiterte" +     Befehlssatz hinsichtlich der Tests realisiert ist.  +  +#on("u")##on("b")#s Steuerung des Laufs#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich die Möglich +     keiten anzeigen lassen, wie Sie auf einen Hamster- +     /Roboterlauf durch Tastendruck Einfluß nehmen +     können:  +  +     <ESC>    :  beende den Lauf (Programmabbruch +                 durch Tastendruck)  +     <?>      :  zeige diese Information (während des +                 Programmablaufs!)  +  +     0        :  Einzelschritt (dazu beliebige Taste +                 drücken)  +     1        :  geringste Geschwindigkeit  +     9        :  höchste  Geschwindigkeit  +     2 ... 8  :  dazwischenliegende Geschwindigkeiten  +  +     <+>      :  laufe schneller  +     <->      :  laufe langsamer  +  +     Zu Beginn eines Laufes ist die Geschwindigkeit '5' +     eingestellt.  +#page#  +4.3  Menufunktionen zum Oberbegriff 'Landschaft'(Ar +     beitsfeld)  +  +#on("b")#  +HAMSTER:  Info  Landschaft  Programm  Lauf  Archiv  +----------+--------------------+------------------------------------------  +          |  n Neu erstellen   |  +          |  a Ansehen/Ändern  |  +          |  ----------------  |  +          |  v Verzeichnis     |  +          |  ----------------  |  +          |  l Löschen         |  +          |  d Drucken         |  +          |  ----------------  |  +          |  k Kopieren        |  +          |  u Umbenennen      |  +          +--------------------+  +  +  +  +  +  +--------------------------------------------------------------------------  +Info:<ESC><?>/<?>  Wahl:<Pfeile>  Ausführen:<RETURN>  Verlassen:<ESC><q>  +#off("b")#  +  +#on("u")##on("b")#n Neu erstellen#off("b")##off("u")#  +        Mit dieser Funktion können Sie eine neue Land +     schaft/ein neues Arbeitsfeld unter einem neuen +     Namen anlegen und gestalten.  +        Sie werden zunächst nach einem Namen für die +     #on("u")#neue#off("u")# Landschaft/das #on("u")#neue#off("u")# Arbeitsfeld gefragt. Ge +     ben Sie einen beliebigen Namen (#on("u")#ohne Anführungs +     zeichen (!)#off("u")# und #on("u")#ohne das Präfix 'Flaeche:' (!)#off("u")#) ein und +     schließen Sie die Eingabe durch <RETURN> ab. Dar +     aufhin wird Ihnen auf dem Bildschirm eine leere +     Landschaft/ein leeres Arbeitsfeld angeboten.  +        Sollte schon eine Landschaft/ein Arbeitsfeld +     mit diesem Namen in der Task vorhanden sein, so +     werden Sie darauf aufmerksam gemacht. Sie können +     sich während der Landschaftsgestaltung auch je +     derzeit eine Aufstellung der wirksamen Tasten mit +     Beschreibung der Funktionen auf den Bildschirm +     ausgeben lassen. Drücken Sie dazu die Fragezeichen +     taste (<?>).  +  +     Fehlerfälle:  +     -  Eine Landschaft/ein Arbeitsfeld mit dem vorge +        schlagenen Namen existiert schon.  +  +#on("u")##on("b")#a Ansehen/Ändern#off("b")##off("u")#  +        Mit dieser Funktion können Sie schon in Ihrer +     Task existierende Landschaften/Arbeitsfelder zur +     Ansicht oder zur Überarbeitung anfordern.  +        Sie werden zunächst gefragt, ob Sie #on("u")#die zuletzt +     bearbeitete Landschaft#off("u")#/#on("u")#das zuletzt bearbeitete Ar +     beitsfeld#off("u")# ansehen bzw. verändern möchten (sofern +     Sie schon vorher mit dem Modell in der Task gear +     beitet haben).  +        Bejahen Sie diese Frage, dann wird Ihnen diese +     Landschaft/dieses Arbeitsfeld zur Bearbeitung +     angeboten. Verneinen Sie die Frage dagegen, so ge +     langen Sie in die 'Auswahl' (d.h es werden Ihnen alle +     Landschaften/Arbeitsfelder in der Task zur Auswahl +     angeboten). Nachdem Sie einen der Namen angekreuzt +     haben, wird Ihnen die ausgewählte Landschaft/das +     ausgewählte Arbeitsfeld zur Bearbeitung auf dem +     Bildschirm angeboten. Ihnen stehen die Tastenfunk +     tionen wie bei der Neuerstellung zur Verfügung.  +  +     Fehlerfälle:  +     - In der Task existiert noch keine Landschaft/kein +       Arbeitsfeld.  +  +#on("u")##on("b")#v Verzeichnis#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich einen Über +     blick über die in Ihrer Task vorhandenen Land +     schaften/Arbeitsfelder verschaffen.  +        Nach Aufruf dieser Funktion wird eine Liste der +     Landschaften/Arbeitsfelder auf dem Bildschirm +     ausgegeben, die sich in Ihrer Task befinden. Da die +     Liste selbst eine Datei ist, kann Sie mit der Tasten +     kombination <ESC><q> verlassen werden - hierauf +     wird auch in der Kopfzeile der Datei hingewiesen. +     Falls nicht alle Namen auf den Bildschirm passen, +     können Sie das Fenster mit <HOP><runter> und +     <HOP><hoch> verschieben.  +  +#on("u")##on("b")#l Löschen#off("b")##off("u")#  +        Mit dieser Funktion können Sie Landschaften/ +     Arbeitsfelder, die Sie nicht mehr benötigen, die +     unnötig Platz belegen, löschen. Aber Vorsicht! Die +     Landschaften/Arbeitsfelder verschwinden durch +     diese Funktion unwiederbringlich!  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Landschaften/Arbeitsfelder, die sich in Ihrer Task +     befinden, zur Auswahl angeboten. Hier können Sie +     die gewünschten Namen ankreuzen. Die Auswahl wird +     dann durch die Tastenfolge <ESC><q> verlassen.  +        Für jede einzelne Landschaft/jedes einzelne Ar +     beitsfeld wird noch einmal zur Sicherheit gefragt, +     ob sie/es auch tatsächlich gelöscht werden soll. Zur +     Bestätigung tippen Sie bitte die Taste <j> ('ja') - zur +     Verhinderung <n> ('nein').  +  +     Fehlerfälle:  +     -  In der Task exsitiert noch keine Landschaft/ +        kein Arbeitsfeld.  +  +#on("u")##on("b")#d Drucken#off("b")##off("u")#  +        Mit dieser Funktion können Sie Landschaften/ +     Arbeitsfelder über einen angeschlossenen Drucker +     ausgeben lassen.  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Landschaften/Arbeitsfelder, die sich in Ihrer Task +     befinden, zur Auswahl angeboten. Hier können Sie +     die gewünschten Namen ankreuzen. Die Auswahl wird +     dann durch die Tastenfolge <ESC><q> verlassen.  +        Die angekreuzten Landschaften/Arbeitsfelder +     werden anschließend zum Drucker geschickt. Der +     Vorgang wird auf dem Bildschirm protokolliert.  +  +     Fehlerfälle:  +     -  In der Task existiert noch keine Landschaft/ +        kein Arbeitsfeld.  +     -  Der Drucker ist nicht funktionsbereit.  +     -  Der Drucker wird nicht über die Task 'PRINTER' +        betrieben.  +     -  Auf Ihrem System werden die Druckkosten abge +        rechnet. Sie müssen sich mit einer Codenummer +        identifizieren.  + +#on("u")##on("b")#k Kopieren#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich eine Kopie +     einer/eines bereits in der Task vorhandenen Land +     schaft/Arbeitsfeldes anlegen. Das ist z.B. dann +     sinnvoll, wenn Sie sich einen bestimmten 'Stand' +     aufbewahren wollen oder wenn Sie eine Land +     schaft/ein Arbeitsfeld gestalten wollen, das einem +     bereits vorhandenen ähnelt.  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Landschaften/Arbeitsfelder, die sich in Ihrer Task +     befinden, zur Auswahl angeboten. Nach Ankreuzen +     eines Namens wird die Auswahl automatisch verlas +     sen.  +        Anschließend wird der angekreuzte Name ange +     zeigt und der Name für die Kopie erfragt. Es muß ein +     Name eingetragen werden, der in dieser Task noch +     nicht für eine Landschaft/ein Arbeitsfeld verge +     ben wurde - ansonsten erfolgt ein Hinweis darauf +     und es wird nicht kopiert!  +        Da man aber oft für die Kopie einen ähnlichen +     Namen wie für das Original wählt, wird der 'alte' +     Name vorgeschlagen. Aus genannten Gründen muß er +     aber verändert werden. Sie können diesen Namen mit +     den üblichen Editierfunktionen verändern oder mit +     <HOP><RUBOUT> löschen und ganz neu eingeben. Sie +     sparen aber eine Menge Tipparbeit, wenn Sie einen +     langen Namen nur an einer Stelle ändern wollen.  +  +     Fehlerfälle:  +     -  Eine Landschaft/ein Arbeitsfeld mit dem ge +        wünschten Namen existiert bereits in der Task.  +  +#on("u")##on("b")#u Umbenennen#off("b")##off("u")#  +        Mit dieser Funktion können Sie einer bereits +     vorhandenen Landschaft/einem bereits vorhandenen +     Arbeitsfeld einen neuen Namen geben.  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Landschaften/Arbeitsfelder, die sich in Ihrer Task +     befinden, zur Auswahl angeboten. Nach Ankreuzen +     eines Namens wird die Auswahl automatisch verlas +     sen.  +        Anschließend wird dieser Name angezeigt und der +     zukünftige Name für die Landschaft/das Arbeitsfeld +     erfragt. Es muß ein Name eingetragen werden, der in +     dieser Task noch nicht für eine Landschaft/ein Ar +     beitsfeld vergeben wurde - ansonsten erfolgt ein +     Hinweis darauf und die Landschaft/das Arbeitsfeld +     wird nicht umbenannt!  +        Da man aber oft den 'neuen' Namen in Anlehnung +     an den 'alten' Namen wählt, wird der 'alte' Name vor +     geschlagen. Aus genannten Gründen muß er aber +     verändert werden. Sie können diesen Namen mit den +     üblichen Editierfunktionen verändern oder mit +     <HOP><RUBOUT> löschen und ganz neu eingeben. Sie +     sparen aber eine Menge Tipparbeit, wenn Sie einen +     langen Namen nur an einer Stelle ändern wollen.  +  +     Fehlerfälle:  +     -  Eine Datei mit dem gewünschten Namen existiert +        bereits in der Task.  +#page#  +4.4  Menufunktionen zum Oberbegriff 'Programm'  +  +#on("b")#  +HAMSTER:  Info  Landschaft  Programm  Lauf  Archiv  +---------------------+--------------------+-------------------------------  +                     |  n Neu erstellen   |  +                     |  a Ansehen/Ändern  |  +                     |  ----------------  |  +                     |  v Verzeichnis     |  +                     |  ----------------  |  +                     |  l Löschen         |  +                     |  d Drucken         |  +                     |  ----------------  |  +                     |  k Kopieren        |  +                     |  u Umbenennen      |  +                     +--------------------+  +  +  +  +  +  +--------------------------------------------------------------------------  +Info:<ESC><?>/<?>  Wahl:<Pfeile>  Ausführen:<RETURN>  Verlassen:<ESC><q>  +#off("b")#  +  +#on("u")##on("b")#n Neu erstellen#off("b")##off("u")#  +        Mit dieser Funktion können Sie eine neue Pro +     grammdatei anlegen und beschreiben.  +        Sie werden zunächst nach einem Namen für die +     #on("u")#neue#off("u")# Programmdatei gefragt. Geben Sie einen belie +     bigen Namen (#on("u")#ohne Anführungszeichen (!)#off("u")#) ein und +     schließen Sie die Eingabe durch <RETURN> ab. Dar +     aufhin wird Ihnen auf dem Bildschirm eine neue Da +     tei zum Beschreiben angeboten.  +        Sollte schon eine Programmdatei mit diesem Na +     men in der Task vorhanden sein, so werden Sie dar +     auf aufmerksam gemacht.  +        Sie können sich während des Schreibens die +     wichtigsten Tastenfunktionen des Editers einblen +     den lassen. Tippen Sie dazu die Tastenfolge <ESC><?>. +     Es erscheint dann das folgende Angebot aus dem Sie +     auswählen können:  +  + #on("b")#  +            +--------------------------------------------------+  +            |                Der EUMEL - Editor                |  +            |                                                  |  +            |    b ... Beschreibung des Editors                |  +            |    w ... Wichtige Tasten                         |  +            |    p ... Positionieren der Schreibmarke          |  +            |    k ... Korrigieren im Text (Einfügen/Löschen)  |  +            |    m ... Markierte Textpassagen bearbeiten       |  +            |    l ... Lernen im Editor                        |  +            |    a ... Anweisungen im Editor (Kommandodialog)  |  +            |                                                  |  +            |    z ... Zurück in den Schreibmodus              |  +            |                                                  |  +            |        b   w   p   k   m   l   a   z             |  +            +--------------------------------------------------+  +#off("b")#  +  +     Fehlerfälle:  +     -  Eine Datei mit dem vorgeschlagenen Namen exi +        stiert schon.  +  +#on("u")##on("b")#a Ansehen/Ändern#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich Dateien, die +     schon in Ihrer Task existieren, ansehen oder auch +     verändern.  +        Sie werden zunächst gefragt, ob Sie #on("u")#die zuletzt +     bearbeitete Programmdatei#off("u")# ansehen bzw. verändern +     möchten (sofern Sie schon vorher mit dem Modell in +     der Task gearbeitet haben).  +        Bejahen Sie diese Frage, dann wird Ihnen diese +     Programmdatei zur Bearbeitung angeboten. Vernei +     nen Sie die Frage dagegen, so gelangen Sie in die +     'Auswahl' (d.h es werden Ihnen alle Programmdateien +     in der Task zur Auswahl angeboten). Nachdem Sie +     einen der Namen angekreuzt haben, wird Ihnen die +     ausgewählte Programmdatei zur Bearbeitung auf dem +     Bildschirm angeboten.  +  +     Fehlerfälle:  +     - In der Task existiert noch keine Programmdatei.  +  +#on("u")##on("b")#v Verzeichnis#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich einen Über +     blick über die in Ihrer Task vorhandenen Programm +     dateien verschaffen.  +        Nach Aufruf dieser Funktion wird eine Liste der +     Programmdateien auf dem Bildschirm ausgegeben, die +     sich in Ihrer Task befinden. Da die Liste selbst eine +     Datei ist, kann Sie mit der Tastenkombination +     <ESC><q> verlassen werden - hierauf wird auch in +     der Kopfzeile der Datei hingewiesen. Falls nicht +     alle Namen auf den Bildschirm passen, können Sie +     das Fenster mit <HOP><runter> und <HOP><hoch> ver +     schieben.  +  +#on("u")##on("b")#l Löschen#off("b")##off("u")#  +        Mit dieser Funktion können Sie Programmdateien, +     die Sie nicht mehr benötigen, die unnötig Platz be +     legen, löschen. Aber Vorsicht! Die Programmdateien +     verschwinden durch diese Funktion unwieder +     bringlich!  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Programmdateien, die sich in Ihrer Task befinden, +     zur Auswahl angeboten. Hier können Sie die ge +     wünschten Namen ankreuzen. Die Auswahl wird dann +     durch die Tastenfolge <ESC><q> verlassen.  +        Für jede einzelne Programmdatei wird noch ein +     mal zur Sicherheit gefragt, ob sie auch tatsächlich +     gelöscht werden soll. Zur Bestätigung tippen Sie +     bitte die Taste <j> ('ja') - zur Verhinderung <n> +     ('nein').  +  +     Fehlerfälle:  +     -  In der Task exsitiert noch keine Programmdatei  +  +#on("u")##on("b")#d Drucken#off("b")##off("u")#  +        Mit dieser Funktion können Sie Programmdateien +     über einen angeschlossenen Drucker ausgeben las +     sen.  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Programmdateien, die sich in Ihrer Task befinden, +     zur Auswahl angeboten. Hier können Sie die ge +     wünschten Namen ankreuzen. Die Auswahl wird dann +     durch die Tastenfolge <ESC><q> verlassen.  +        Die angekreuzten Programmdateien werden an +     schließend zum Drucker geschickt. Der Vorgang wird +     auf dem Bildschirm protokolliert.  +  +     Fehlerfälle:  +     -  In der Task existiert noch keine Programmdatei.  +     -  Der Drucker ist nicht funktionsbereit.  +     -  Der Drucker wird nicht über die Task 'PRINTER' +        betrieben.  +     -  Auf Ihrem System werden die Druckkosten abge +        rechnet. Sie müssen sich mit einer Codenummer +        identifizieren.  +  +#on("u")##on("b")#k Kopieren#off("b")##off("u")#  +        Mit dieser Funktion können Sie sich eine Kopie +     einer bereits in der Task vorhandenen Programmda +     tei anlegen. Das ist z.B. dann sinnvoll, wenn Sie sich +     einen bestimmten 'Stand' aufbewahren wollen oder +     wenn Sie ein Programm schreiben wollen, das einem +     bereits vorhandenen ähnelt.  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Programmdateien, die sich in Ihrer Task befinden, +     zur Auswahl angeboten. Nach Ankreuzen eines Na +     mens wird die Auswahl automatisch verlassen.  +        Anschließend wird der angekreuzte Name ange +     zeigt und der Name für die Kopie erfragt. Es muß ein +     Name eingetragen werden, der in dieser Task noch +     nicht für eine Programmdatei vergeben wurde; an +     sonsten erfolgt ein Hinweis darauf und es wird +     nicht kopiert!  +        Da man aber oft für die Kopie einen ähnlichen +     Namen wie für das Original wählt, wird der 'alte' +     Name vorgeschlagen. Aus genannten Gründen muß er +     aber verändert werden. Sie können diesen Namen mit +     den üblichen Editierfunktionen verändern oder mit +     <HOP><RUBOUT> löschen und ganz neu eingeben. Sie +     sparen aber eine Menge Tipparbeit, wenn Sie einen +     langen Namen nur an einer Stelle ändern wollen.  +  +     Fehlerfälle:  +     -  Eine Programmdatei mit dem gewünschten Namen +        existiert bereits in der Task.  +  +#on("u")##on("b")#u Umbenennen#off("b")##off("u")#  +        Mit dieser Funktion können Sie einer bereits +     vorhandenen Programmdatei einen neuen Namen ge +     ben.  +        Nach Aufruf dieser Funktion werden Ihnen alle +     Programmdateien, die sich in Ihrer Task befinden, +     zur Auswahl angeboten. Nach Ankreuzen eines Na +     mens wird die Auswahl automatisch verlassen.  +        Anschließend wird dieser Name angezeigt und der +     zukünftige Name für die Programmdatei erfragt. Es +     muß ein Name eingetragen werden, der in dieser Task +     noch nicht für eine Programmdatei vergeben wurde - +     ansonsten erfolgt ein Hinweis darauf und die Pro +     grammdatei wird nicht umbenannt!  +        Da man aber oft den 'neuen' Namen in Anlehnung +     an den 'alten' Namen wählt, wird der 'alte' Name vor +     geschlagen. Aus genannten Gründen muß er aber +     verändert werden. Sie können diesen Namen mit den +     üblichen Editierfunktionen verändern oder mit +     <HOP><RUBOUT> löschen und ganz neu eingeben. Sie +     sparen aber eine Menge Tipparbeit, wenn Sie einen +     langen Namen nur an einer Stelle ändern wollen.  +  +     Fehlerfälle:  +     -  Eine Programmdatei mit dem gewünschten Namen +        existiert bereits in der Task.  +#page#  +4.5  Menufunktionen zum Oberbegriff 'Lauf'  +  +#on("b")#  +HAMSTER:  Info  Landschaft  Programm  Lauf  Archiv  +---------------------------+------------------------+---------------------  +                           |  l Lauf nach Programm  |  +                           |  h Handsteuerung       |  +                           +------------------------+  +  +  +  +  +  +  +  +  +  +  +--------------------------------------------------------------------------  +Info:<ESC><?>/<?>  Wahl:<Pfeile>  Ausführen:<RETURN>  Verlassen:<ESC><q>  +#off("b")#  +  +#on("u")##on("b")#l Lauf nach Programm#off("b")##off("u")#  +        Mit dieser Menufunktion können Sie den Ham +     ster/Roboter nach einem Programm in einer Land +     schaft/einem Arbeitsfeld laufen lassen. Sowohl das +     Programm als auch die Landschaft/das Arbeitsfeld +     müssen bereits existieren.  +        Sie werden zunächst gefragt, ob der Hamster/ +     Roboter #on("u")#das zuletzt bearbeitete Programm#off("u")# ausführen +     soll. Bejahen Sie die Frage, so wird dieses Programm +     ausgeführt; verneinen Sie die Frage dagegen, so +     gelangen Sie in die 'Auswahl'. Nach Ankreuzen des +     gewünschten Programmnamens wird das ausgewählte +     Programm ausgeführt.  +        Nach der Abfrage bezüglich des Programmnamens +     erfolgt dann eine weitere Abfrage nach dem Namen +     der Landschaft/ des Arbeitsfeldes, in der/dem der +     Hamster/Roboter nach dem zuvor ausgewählten Pro +     gramm laufen soll. Auch hier werden Sie zunächst +     gefragt, ob Sie #on("u")#die zuletzt benutzte Landschaft/das +     zuletzt benutzte Arbeitsfeld#off("u")# verwenden möchten.  +        Bejahen Sie die Frage, so wird das Programm in +     dieser Landschaft/in diesem Arbeitsfeld ausge +     führt; verneinen Sie dagegen die Frage, so werden +     Ihnen alle in der Task vorhandenen Landschaften/ +     Arbeitsfelder zur Auswahl angeboten. Durch An +     kreuzen eines Landschafts-/Arbeitsfeldnamens wird +     die betreffende Landschaft/das betreffende Ar +     beitsfeld ausgewählt und das Programm in dieser +     Landschaft/in diesem Arbeitsfeld ausgeführt.  +        Daneben haben Sie auch die Möglichkeit, im Pro +     gramm selbst als erste Anweisung den Befehl 'lands +     chaft ("Name");' oder 'arbeitsfeld ("Name");' anzuge +     ben. Für 'Name' muß dann natürlich der gewünschte +     Landschafts-/Arbeitsfeldname eingetragen sein. Ist +     eine solche Anweisung #on("u")#am Programmanfang#off("u")# vorhan +     den, so wird an Sie #on("u")#keine#off("u")# Abfrage bezüglich des +     Landschafts-/Arbeitsfeldnamens gestellt; das Pro +     gramm wird in der #on("u")#angegebenen#off("u")# Landschaft/im #on("u")#ange +     gebenen#off("u")# Arbeitsfeld ausgeführt.  +        Sind im Programm noch Fehler enthalten, so wer +     den das Programm und die Fehlermeldungen gleich +     zeitig auf dem Bildschirm dargestellt (Paralleledi +     tor) und zur Korrektur angeboten. Für die Pro +     grammkorrektur stehen ebenfalls alle Editorfunk +     tionen zur Verfügung.  +        Während des Hamster-/Roboterlaufs können Sie +     durch Tastendruck Einfluß nehmen (Geschwindigkeit +     verändern, Programm abbrechen etc). Sehen Sie dazu +     auch die Menufunktion 's Steuerung des Laufs' unter +     dem Oberbegriff 'Info'. Standardmäßig beginnt ein +     solcher Lauf immer mit einer mittleren Geschwin +     digkeit.  +        Ist der Hamster-/Roboterlauf ohne Fehler been +     det worden, werden Sie gefragt, ob Sie die Land +     schaft/das Arbeitsfeld in dem zuletzt angezeigten +     Zustand aufbewahren wollen. Bejahen Sie diese Fra +     ge, so wird die Landschaft/das Arbeitsfeld in eine +     Datei geschrieben. Die neue Landschaft/das neue +     Arbeitsfeld erhält den Namen der alten Land +     schaft/des alten Arbeitsfeldes und das Zusatzkenn +     zeichen '.x'.  +        Sollte Ihnen beim Programmieren ein Fehler un +     terlaufen sein (z.B. eine Endlosschleife, so kann mit +     der Taste <ESC> der Hamster-/Roboterlauf abgebro +     chen werden ("Notbremse").  +  +#on("u")##on("b")#h Handsteuerung#off("b")##off("u")#  +        Mit dieser Funktion können Sie den Hamster/ +     Roboter in einer/einem vorbereiteten Landschaft/ +     Arbeitsfeld durch Tasten steuern. Alle gültigen +     Tastenbefehle werden in einem Protokoll festgehal +     ten. Da das entstehende Protokoll ein ELAN- +     Programm ist, kann der Hamster/Roboter anschlie +     ßend die gleichen Aktionen anhand des Programms +     wiederholt ausführen ('Teach In').  +        Sie werden zunächst gefragt, ob die Land +     schaft/das Arbeitsfeld, in dem der Hamster/Roboter +     gesteuert werden soll, schon existiert. Beantworten +     Sie die Frage mit 'nein', so werden Sie aufgefordert, +     zunächst die Landschaft/das Arbeitsfeld zu gestal +     ten. Bejahen Sie die Frage, werden Ihnen alle in Ih +     rer Task vorhandenen Landschaften/Arbeitsfelder +     zur Auswahl angeboten. Sie brauchen nur die ge +     wünschte Landschaft/das gewünschte Arbeitsfeld +     anzukreuzen. Die/das angekreuzte Landschaft/Ar +     beitsfeld erscheint dann in folgender Darstellung +     auf dem Bildschirm:  +  +#on("b")#  +#on("u")#Beispiel#off("u")#:  +  +  <v>or    <l>inks um    <n>imm  <g>ib    <p>rotokoll    <e>nde  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . V . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . o\#\# o . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . .\#\# . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . o\#\# . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . .\#\# o . . . o . . . . . . . . . . . . . . .  +. . . . . . . . . . . . o\#\#\#\#\#\#\#\#\#\#\#\# o . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . o . o .\#\# . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . o\#\# . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . .\#\# . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . o\#\#o. . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  +Gib Hamster-Befehl:                     letzter Befehl:  +  +#off("b")#  +        Durch Tastendruck können Sie nun den Hamster/ +     Roboter steuern (<v> - vor, <l> - links um, <n> - +     nimm, <g> - gib). Sofern die Aktion ausführbar ist, +     wird sie auf dem Bildschirm auch ausgeführt. Wird +     dagegen eine Aktion verlangt, die nicht ausgeführt +     werden kann (z.B. <v>, wenn der Hamster/Roboter +     direkt vor einem Hindernis steht), so erscheint eine +     entsprechende Fehlermeldung in der untersten Zeile +     des Bildschirms. Nach einer kurzen Pause können +     dann weitere Eingaben gemacht werden. Eine Fehlbe +     dienung führt also #on("u")#nicht#off("u")# zu einem Programmabbruch! +     In der untersten Bildschirmzeile wird auch jeweils +     der letzte Befehl zur Kontrolle angezeigt.  +        Alle korrekten Eingaben werden protokolliert. +     Durch Drücken der Taste <p> (- protokoll) können Sie +     sich jederzeit das während der Ausführung angeleg +     te Protokoll zeigen lassen. Es entsteht nämlich +     automatisch im Hintergrund ein ablauffähiges +     ELAN-Programm. Im Anschluß an eine solche Hand +     steuerung können Sie den Hamster/Roboter dann in +     der gleichen Landschaft/im gleichen Arbeitsfeld +     nach diesem Protokoll (Dateiname: PROTOKOLL) vom +     Programm aus gesteuert laufen lassen.  +#page#  +4.6  Menufunktionen zum Oberbegriff 'Archiv'  +  +#on("b")#  +HAMSTER:  Info  Landschaft  Programm  Lauf  Archiv  +---------------------------------+-------------------------+--------------  +                                 |  r Reservieren          |  +                                 |  - Neue Diskette        |  +                                 |  ---------------------  |  +                                 |  - Schreiben            |  +                                 |  - Checken              |  +                                 |  - Kombination          |  +                                 |  - Holen/Lesen          |  +                                 |  - Löschen              |  +                                 |  ---------------------  |  +                                 |  - Verzeichnis          |  +                                 |  - Drucken              |  +                                 |  ---------------------  |  +                                 |  i Initialisieren       |  +                                 |  z Zieltask einstellen  |  +  +---------------------+        +-------------------------+  +  | Dateiaustausch mit: |  +  |  Archiv             |  +  | Archivname:         |  +  |  ---                |  +  +---------------------+  +--------------------------------------------------------------------------  +Info:<ESC><?>/<?>  Wahl:<Pfeile>  Ausführen:<RETURN>  Verlassen:<ESC><q>  +#off("b")#  +  +   In diesem Kapitel werden alle die Menufunktionen be +schrieben, die Ihnen unter dem Oberbegriff 'Archiv' im +Menu angeboten werden. Mit den Funktionen in diesem +Menu können Sie aber nicht nur Dateien auf dem Archiv +behandeln, sondern auch in anderen Tasks im Multi- +User-System oder über das EUMEL-Netz sogar auf anderen +Rechnern!  +   Wenn Sie dieses Pull-Down-Menu gerade aufgeschlagen +haben, sind nicht alle Funktionen aktivierbar! Um weitere +Funktionen zu aktivieren, muß erst einer der aktivierba +ren Menupunkte gewählt werden.  +   Bei der Archivbehandlung werden Ihnen jeweils alle in +der Task vorhandenen Dateien zur Auswahl angeboten. Das +System unterscheidet nicht von sich aus - wie unter den +Oberbegriffen 'Landschaft'/'Arbeitsfeld' und 'Programm' - +zwischen Landschaften/Arbeitsfeldern und Programmda +teien. In den hier gezeigten Listen können Sie aber Land +schaften/Arbeitsfelder daran erkennen, daß ihnen das +Präfix 'Flaeche:' vorangestellt ist.  +  +#on("u")##on("b")#r Reservieren#off("b")##off("u")# (des Archivlaufwerks)  +        Im EUMEL-Multi-User-System haben normalerwei +     se mehrere Personen das Zugriffsrecht auf das Ar +     chivlaufwerk. Allerdings muß der Zugriff so gere +     gelt werden, daß sich die Beteiligten dabei nicht +     gegenseitig "in die Quere kommen". Ein Zugriff auf +     das Archivlaufwerk erfordert zunächst eine Anmel +     dung. Ist diese Anmeldung erfolgt, kann von den an +     deren Beteiligten so lange nicht mehr auf das Lauf +     werk zugegriffen werden - bis es wieder freigege +     ben worden ist.  +        Diese Anmeldung des Archivlaufwerkes erfolgt +     über die Menufunktion 'r Reservieren'. Greift be +     reits eine andere Task auf das Laufwerk zu, so er +     halten Sie darüber einen Hinweis auf dem Bild +     schirm. Ansonsten wird an Sie die Frage gestellt, ob +     die Diskette eingelegt und das Laufwerk geschlos +     sen ist.  +        Erst zu diesem Zeitpunkt ist sichergestellt, daß +     Sie den alleinigen Zugriff auf das Laufwerk haben. +     Deshalb sollten Sie, wenn Sie mit mehreren Personen +     am Computer arbeiten, erst zum Zeitpunkt der Frage +     stellung die Diskette ins Laufwerk einlegen.  +        Nachdem Sie die Diskette eingelegt und die Frage +     bejaht haben, ermittelt das System selbständig den +     Namen der eingelegten Diskette, zeigt den Namen auf +     dem Bildschirm (im kleinen Kasten links unten) an +     und aktiviert die anderen Menupunkte des Pull- +     Down-Menus.  +        Beim Verlassen des Pull-Down-Menus, wenn eine +     andere Zieltask eingestellt wird oder wenn das Menu +     gänzlich verlassen wird, wird die Reservierung au +     tomatisch aufgehoben!  +  +     Fehlerfälle:  +     -  Das Laufwerk ist von einer anderen Task belegt.  +     -  Die Diskette ist falsch eingelegt oder das Lauf +        werk ist nicht richtig geschlossen.  +     -  Die Diskette ist nicht formatiert bzw. initiali +        siert.  +     -  Die Diskette kann nicht gelesen werden (keine +        EUMEL-Diskette, Diskette hat ein falsches For +        mat, Diskette ist verschmutzt...).  +  +#on("u")##on("b")#n Neue Diskette#off("b")##off("u")# (anmelden)  +        Der Dateiaustausch mit einer Diskette ist nur +     dann möglich, wenn der im System eingestellte Dis +     kettenname (auf dem Bildschirm im kleinen Kasten +     unten links sichtbar) mit dem tatsächlichen Namen +     der Diskette übereinstimmt. Nach einem Disketten +     wechsel ist das aber in der Regel nicht mehr der +     Fall. Greift man dann auf die neu eingelegte Dis +     kette zu, so erscheint die Fehlermeldung: 'Falscher +     Archivname! Bitte neue Diskette anmelden!'.  +        Das Anmelden einer neuen Diskette - ohne einen +     neuen Reserviervorgang - wird durch diese Menu +     funktion ermöglicht. Nach Aktivieren dieses Menu +     punktes wird der Name der eingelegten Diskette er +     mittelt, im System eingestellt und auf dem Bild +     schirm angezeigt.  +        Im Gegensatz zur Menufunktion 'r Reservieren' +     greift das System ohne Anfrage an den Benutzer auf +     das Archivlaufwerk zu (die Reservierung bleibt ja +     bestehen). Ist das Archivlaufwerk reserviert, so ist +     die Neuanmeldung einer Diskette über diese Menu +     funktion weniger zeitaufwendig.  +  +     Fehlerfälle:  +     -  wie unter 'r Reservieren'.  +  +#on("u")##on("b")#s Schreiben#off("b")##off("u")# (Kopieren)  +        Alle Dateien der eigenen Task werden zur Aus +     wahl angeboten. Wenn Sie die Auswahl durch die +     Tastenfolge <ESC><q> verlassen, überprüft das Sy +     stem zunächst, ob die Dateien in der eingestellten +     Zieltask schon vorhanden sind. Ist das der Fall, +     wird erfragt, ob die dort vorhandenen Dateien über +     schrieben, d.h. gelöscht werden dürfen (s.u.). An +     schließend werden alle angekreuzten Dateien in der +     Reihenfolge, in der Sie sie angekreuzt haben, in die +     eingestellte Zieltask kopiert. Der Vorgang wird auf +     dem Bildschirm protokolliert. Die Originaldateien +     in der eigenen Task bleiben dabei erhalten.  +        Wenn in der Zieltask schon eine Datei existiert, +     die den gleichen Namen hat wie eine Datei, die Sie +     dorthin kopieren möchten, so wird angefragt, ob die +     vorher schon existierende Datei überschrieben (ge +     löscht!) werden soll. Bejahen Sie diese Frage, so wird +     die bereits in der Zieltask existierende Datei (un +     wiederbringlich) gelöscht und die gewünschte Datei +     dorthin transportiert. Ein Überschreiben aus Ver +     sehen ist nicht möglich, wenn Sie die an Sie gestell +     te Frage sorgfältig beantworten.  +        Verneinen Sie die Frage, so wird die Datei auch +     nicht hinübertransportiert! Sie können die Datei +     aber umbenennen (Menufunktion 'u Umbenennen' un +     ter den Oberbegriffen 'Landschaft'/Arbeitsfeld' bzw. +     'Programm') und anschließend mit anderem Namen +     hinüberschreiben.  +        Beachten Sie, daß beim Überschreiben einer Datei +     auf einer Archivdiskette der Speicherplatz der al +     ten (überschriebenen) Version im allgemeinen nicht +     wiederverwendet werden kann. In einem solchen Fall +     könnte die Diskette voll geschrieben werden, obwohl +     eigentlich genügend Platz vorhanden wäre. Zur Op +     timierung wird deshalb zuerst überprüft, ob die +     angekreuzten Dateien schon in der Zieltask vorhan +     den sind und löscht diese, wenn Sie Ihr Einver +     ständnis geben. Erst anschließend werden die Datei +     en insgesamt kopiert.  +        Normalerweise ist als Zieltask das Archivlauf +     werk der eigenen Station eingestellt. Mit der Menu +     funktion 'z Zieltask einstellen' kann diese Einstel +     lung aber verändert werden.  +  +     Fehlerfälle:  +     -  Die Diskette ist falsch eingelegt oder beschä +        digt.  +     -  Die Diskette kann nicht beschrieben werden +        (Schreibfehler).  +     -  Die Diskette ist voll.  +     -  Sehen Sie auch unter  'r Reservieren'  +                              'z Zieltask einstellen'.  +  +#on("u")##on("b")#c Checken#off("b")##off("u")#  +        Diese Menufunktion kann nur ausgeführt werden, +     wenn der Dateiaustausch mit einem Archiv(manager) +     erfolgt - ansonsten ist diese Menufunktion auch +     nicht aktivierbar. Die Menufunktion dient dazu, auf +     Diskette geschriebene Dateien auf Lesefehler hin zu +     prüfen. Es empfiehlt sich, diese Prüfroutine auf +     neu auf die Diskette geschriebene Dateien anzuwen +     den. Sehen Sie dazu auch 'k Kombination'.  +        Alle Dateien der eingestellten Zieltask (Archiv) +     werden zur Auswahl angeboten. Wenn Sie die Auswahl +     durch die Tastenfolge <ESC><q> verlassen, werden +     alle angekreuzten Dateien in der Reihenfolge, in +     der Sie sie angekreuzt haben, "gecheckt", d.h. auf +     Lesefehler hin überprüft. Der Vorgang wird auf dem +     Bildschirm protokolliert.  +  +     Fehlerfälle:  +     -  Lesefehler auf dem Archiv.  +     -  Sehen Sie auch unter  'r Reservieren'.  +  +#on("u")##on("b")#k Kombination#off("b")##off("u")#  +        Diese Menufunktion ist eine Kombination aus den +     beiden Menufunktionen 's Schreiben' und 'c Checken' +     (Sehen Sie weitere Informationen auch dort!).  +        Alle Dateien der eigenen Task werden zur Aus +     wahl angeboten. Wenn Sie die Auswahl durch die Ta +     stenfolge <ESC><q> verlassen, werden alle ange +     kreuzten Dateien in der Reihenfolge, in der Sie sie +     angekreuzt haben, in die eingestellte Zieltask ko +     piert (gegebenenfalls müssen bereits vorhandene +     Dateien gleichen Namens in der Zieltask gelöscht +     werden). Anschließend werden alle Dateien, die gera +     de geschrieben wurden, gecheckt, d.h. auf Lesefehler +     hin untersucht. Beide Vorgänge werden auf dem +     Bildschirm protokolliert.  +        Da die 'Check' - Operation nur bei Archivmana +     gern zulässig ist, ist diese Menufunktionen eben +     falls nur bei Archivmanagern aktivierbar. Zur Er +     läuterung sehen Sie bitte auch unter 'z Zieltask +     einstellen'.  +  +#on("u")##on("b")#h Holen/Lesen#off("b")##off("u")#  +        Die Menufunktion dient dazu, Dateien, die bereits +     auf einer Archivdiskette oder in einer anderen Task +     existieren, in die eigene Task zu kopieren.  +        Alle Dateien der eingestellten Zieltask werden +     zur Auswahl angeboten. Anschließend werden Kopien +     der angekreuzten Dateien in der Reihenfolge des +     Ankreuzens in die eigene Task geholt. Das Original +     in der Zieltask bleibt dabei unverändert! Der Vor +     gang wird auf dem Bildschirm protokolliert.  +        Sind in der eigenen Task schon Dateien mit glei +     chem Namen vorhanden, so wird gefragt, ob die 'al +     ten' Dateien überschrieben (gelöscht) werden dürfen. +     Nur wenn Sie zustimmen, werden die in Ihrer Task +     existierenden Dateien (unwiederbringlich!) gelöscht +     und Kopien der gleichnamigen Dateien aus der Ziel +     task angefertigt.  +        Stimmen Sie dem Löschvorgang nicht zu, dann +     bleiben die bisherigen Dateien in Ihrer Task erhal +     ten - die Dateien aus der Zieltask werden dann aber +     auch nicht in Ihre Task kopiert! Um dennoch die Ko +     pien zu erhalten, können Sie die namensgleichen +     Dateien in Ihrer Task umbenennen und dann erst die +     Dateien aus der anderen Task anfordern.  +        Normalerweise werden die Dateien vom Archiv der +     eigenen Station geholt. Mit dem Menupunkt 'z Ziel +     task einstellen' kann diese Einstellung verändert +     werden.  +  +     Fehlerfälle:  +     -  Lesefehler auf dem Archiv.  +     -  Sehen Sie auch unter  'r Reservieren'  +                              's Schreiben'  +                              'z Zieltask einstellen'.  +  +#on("u")##on("b")#l Löschen#off("b")##off("u")#  +        Die Menufunktion dient dazu, Dateien in der +     Zieltask (unwiederbringlich!) zu löschen. Dazu wer +     den alle Dateien der eingestellten Zieltask zur Aus +     wahl angeboten. Anschließend werden die angekreuz +     ten Dateien in der Reihenfolge ihres Ankreuzens +     gelöscht. Zur Sicherheit muß noch einmal für jede +     einzelne Datei bestätigt werden, daß sie auch tat +     sächlich gelöscht werden soll.  +        Beachten Sie, daß beim Löschen einer Datei auf +     einer Archivdiskette der Speicherplatz im allgemei +     nen nicht wieder verwendet werden kann. In einem +     solchen Fall könnte die Diskette voll geschrieben +     werden, obwohl eigentlich genügend Platz vorhan +     den wäre. Diese Probleme treten bei anderen Tasks, +     die keine Archivmanager sind, nicht auf, da deren +     Speicherplatz intelligenter verwaltet wird.  +        Normalerweise ist als Zieltask das Archiv der +     eigenen Station eingestellt. Mit dem Menupunkt 'z +     Zieltask einstellen' kann diese Einstellung verän +     dert werden.  +  +     Fehlerfälle:  +     -  Sehen Sie auch unter  'r Reservieren'  +                              's Schreiben'  +                              'z Zieltask einstellen'.  +  +#on("u")##on("b")#v Verzeichnis#off("b")##off("u")#  +        Mit dieser Menufunktion können Sie sich einen +     Überblick über die in der Zieltask (z.B. auf dem Ar +     chiv) vorhandenen Dateien verschaffen.  +        Nach Aufruf der Funktion wird eine Liste der +     Dateien auf dem Bildschirm ausgegeben, die sich in +     der Zieltask (z.B. auf dem Archiv) befinden. Ist die +     Zieltask ein Archiv(manager), so wird auch ange +     zeigt, wieviel Platz auf der Diskette belegt ist. Da +     die Liste selbst eine Datei ist, kann sie mit der Ta +     stenkombination <ESC><q> verlassen werden. Falls +     nicht alle Dateinamen auf den Bildschirm passen, +     können Sie das Fenster mit <HOP><hoch> und +     <HOP><runter> verschieben.  +  +     Fehlerfälle:  +     -  Sehen Sie unter  'z Zieltask einstellen'.  +  +#on("u")##on("b")#d Drucken#off("b")##off("u")#  +        Das Verzeichnis der Dateien in der Zieltask, das +     man mit der Menufunktion 'v Verzeichnis' auf dem +     Bildschirm angezeigt bekommt, kann mit dieser Me +     nufunktion ausgedruckt werden.  +        Zur Sicherheit wird angefragt, ob wirklich ein +     solches Dateiverzeichnis der Zieltask gedruckt wer +     den soll. Bejaht man die Frage, so wird ein Dateiver +     zeichnis erstellt und zum Drucker geschickt.  +  +     Fehlerfälle:  +     -  Der Drucker ist nicht funktionsbereit.  +     -  Der Drucker wird nicht über die Task 'PRINTER' +        betrieben.  +     -  Auf Ihrem System werden die Druckkosten abge +        rechnet. Sie müssen sich mit einer Codenummer +        identifizieren.  +  +#on("u")##on("b")#i Initialisieren#off("b")##off("u")#  +        Diese Menufunktion gestattet es, frische Disket +     ten zu formatieren, zu initialisieren bzw. be +     schriebene Disketten vollständig zu löschen und +     ggf. dabei umzubenennen. Bei Aufruf dieser Menu +     funktion wird - sofern noch nicht geschehen - das +     Archivlaufwerk automatisch reserviert.  +        Wenn Sie eine fabrikneue Diskette aus der Ver +     packung nehmen, müssen Sie diese zunächst #on("u")#forma +     tieren#off("u")#. Dabei wird die Diskette auf ein festgelegtes +     physikalisches Format eingestellt. Ohne daß diese +     Operation vorausgegangen ist, kann eine Diskette +     weder beschrieben noch gelesen werden.  +        Prinzipiell braucht eine Diskette nur ein einzi +     ges Mal formatiert zu werden. Sie können Sie jedoch +     jederzeit wieder formatieren - z.B. wenn Sie Disket +     ten haben, von denen Sie nicht genau wissen, für +     welche Zwecke sie zuvor verwendet wurden.  +        Wenn Sie diese Menufunktion aktivieren, werden +     Sie so zunächst gefragt, ob Sie die Diskette auch +     formatieren wollen. Bejahen Sie die Frage, so werden +     Ihnen mehrere Formate zur Auswahl angeboten:  +  +#on ("b")#  +                     +------------------------------------+  +                     |     Formatieren einer Diskette     |  +                     |                                    |  +                     |  Dies sind die möglichen Formate:  |  +                     |                                    |  +                     |     1 ..... 40 Spur   -  360 KB    |  +                     |     2 ..... 80 Spur   -  720 KB    |  +                     |     3 ..... 5 1/4"    -  1,2 MB    |  +                     |     4 ..... 3 1/2"    -  1,4 MB    |  +                     |     s ..... Standard  -  Format    |  +                     |                                    |  +                     |         1   2   3   4   s          |  +                     +------------------------------------+  +#off("b")#  +  +        Erkundigen Sie sich bei Ihrem Händler, welches +     Format Sie bei Ihrem Rechner und den von Ihnen +     verwendeten Disketten einstellen müssen. Manche +     Rechner unterstützen diese Operation innerhalb des +     EUMEL-Systems auch gar nicht, das Formatieren muß +     dann irgendwie anders außerhalb des EUMEL-Systems +     geschehen.  +        Wenn Sie die Formatierung abgeschlossen oder +     auch übersprungen haben, beginnt die eigentliche +     Initialisierung der Diskette. Dabei wird als erstes +     der Archivname auf die Diskette geschrieben. Alle +     alten Daten, die sich ggf. auf der Diskette befinden, +     werden bei diesem Vorgang unwiederbringlich (!) +     gelöscht.  +        Zur Sicherheit überprüft das System in jedem +     Falle, ob es sich um eine EUMEL - Diskette handelt, +     und erfragt Ihr Einverständnis, ob die Diskette +     wirklich initialisiert werden soll. Geben Sie hierzu +     Ihr Einverständnis, dann wird noch der (neue) Ar +     chivname erfragt. Hatte die Diskette schon einen +     Namen, dann wird dieser zum Überschreiben angebo +     ten. Wollen Sie den alten Archivnamen beibehalten, +     so brauchen Sie nur die <RETURN>-Taste zu tippen, +     ansonsten können Sie den Namen auch zuvor verän +     dern oder einen ganz neuen Namen hinschreiben. +     Anhand des ausgegebenen Namens können Sie auch +     überprüfen, ob Sie die richtige Diskette eingelegt +     haben.  +        Das Initialisieren funktioniert natürlich nur, +     wenn Sie als Zieltask einen Archivmanager einge +     stellt haben - ansonsten ist diese Menufunktion +     gesperrt (nicht aktivierbar!).  +  +     Fehlerfälle:  +     -  Formatieren ist nicht auf dem System möglich.  +     -  Sehen Sie auch unter  'r Reservieren'  +                              'z Zieltask einstellen'.  +  +#on("u")##on("b")#z Zieltask einstellen#off("b")##off("u")#  +       Mit dieser Menufunktion können Sie festlegen, +    mit welcher Zieltask Sie kommunizieren, d.h. z.B. Da +    teien austauschen möchten. Normalerweise ist hier +    das Archiv am eigenen Rechner eingestellt. Das wird +    auch nach Aufklappen des Pull-Down-Menus im Ka +    sten links unten angezeigt.  +       Diese Menufunktion kann im Unterricht z.B. dazu +    genutzt werden, um fertiggestellte Hausaufgaben in +    eine bestimmte Task zu schicken (Vatertask) oder um +    von dort z.B. vorgefertigte Landschaften oder/und +    Programme abzuholen.  +       Sie können aber auch eine andere Task einstellen +    (z.B. die Vatertask oder die Task 'PUBLIC'), um mit die +    sen Dateien auszutauschen oder um sich auch nur ei +    nen Überblick über die dort vorhandenen Dateien zu +    verschaffen. Wenn Sie mit Ihrem Rechner in ein +    EUMEL-Netz integriert sind, können Sie auch auf +    Tasks anderer Rechner zugreifen oder auch Disketten +    von Laufwerken anderer Rechner einlesen (z.B. wenn +    Sie Disketten anderer Formate haben, die von Ihrem +    Rechner nicht gelesen werden können).  +        Dabei werden zwei Anforderungen an die Zieltask +    gestellt: Sie muß existieren und bereit für den Da +    teiaustausch sein, d.h es muß eine Managertask sein, +    auf die Sie Zugriff haben. Versuchen Sie auf andere +    Tasks zuzugreifen, so erhalten Sie entsprechende +    (Fehler-)Meldungen.  +       Zu beachten ist noch, daß es im EUMEL-System ver +    schiedene Arten von Managertasks gibt - Archivma +    nager und normale Dateimanager. Der Unterschied +    besteht darin, daß ein Archivmanager vom Benutzer +    vor dem Zugriff reserviert werden muß - anschlie +    ßend hat nur dieser Benutzer (bis zur Aufgabe der +    Reservierung) ein Zugriffsrecht auf den Manager. +    Normale Dateimanager können dagegen von mehreren +    Benutzern in beliebiger Reihenfolge angesprochen +    werden.  +       Ein Archivmanager kann auch auf bestimmte Dis +    kettenformate spezialisert sein (z.B. auf das Lesen +    von DOS-Disketten). Manche Rechner haben auch meh +    rere Archivmanager für verschiedene Laufwerke etc. +    Durch Einstellen unterschiedlicher Archivmanager +    können Sie dann auf verschiedenen Laufwerken ar +    chivieren.  +       Nach Aktivieren dieses Menupunktes werden Ihnen +    die folgenden Alternativen angeboten:  +  +#on ("b")#  +                  +-------------------------------------------+  +                  |       Dateiaustausch gewünscht mit:       |  +                  |                                           |  +                  |      a ... Archiv    (Eigene Station)     |  +                  |                                           |  +                  |      v ... Vatertask                      |  +                  |                                           |  +                  |      p ... 'PUBLIC'  (Eigene Station)     |  +                  |                                           |  +                  |      s ... Sonstige Task                  |  +                  |                                           |  +                  |                                           |  +                  |   Archiv   Vatertask   PUBLIC   Sonstige  |  +                  +-------------------------------------------+  +  +        Da der Dateiaustausch mit dem Standardarchiv +     der eigenen Station (Task: 'ARCHIVE'), mit der Vater +     task und der Task 'PUBLIC' recht häufig in Anspruch +     genommen wird, sind diese drei Optionen unter den +     Alternativen direkt angegeben. Entscheiden Sie sich +     für eine dieser drei Tasks, so nimmt das System alle +     notwendigen Einstellungen vor. Möchten Sie dage +     gen in Kontakt mit einer anderen Task treten, so +     wählen Sie die Alternative 's ... Sonstige Task'.  +     In diesem Falle haben Sie noch 3 Angaben zu machen:  +  +     -  Zunächst werden Sie nach dem Namen der Zieltask +        gefragt. Geben Sie den Namen der Zieltask - ohne +        Anführungsstriche (!) - ein und schließen Sie die +        Eingabe mit der <RETURN>-Taste ab. (Den ausge +        gebenen Namen der z.Z. eingestellten Task können +        Sie dabei verändern bzw. überschreiben.)  +  +     -  Dann wird die Nummer der Station im EUMEL-Netz +        erfragt, auf der sich die Zieltask befindet. Die +        Nummer Ihrer Station wird als Vorschlag ausge +        geben. Wollen Sie mit einer Task auf Ihrem Rech +        ner kommunizieren, so brauchen Sie diesen Vor +        schlag nur durch Drücken der <RETURN>-Taste +        bestätigen - ansonsten tragen Sie zuvor die ent +        sprechende Stationsnummer ein. Ist Ihr Rechner +        nicht in ein EUMEL-Netz integriert, so wird die +        Stationsnummer 0 (Null) ausgegeben. Bitte bestä +        tigen Sie diese Stationsnummer durch Tippen der +        <RETURN>-Taste.  +  +     -  Zum Abschluß müssen Sie noch angeben, ob die +        eingestellte Zieltask ein Archivmanager ist oder +        nicht.  +  +        Das System versucht dann den Kontakt herzu +     stellen. Je nachdem, welche Einstellung Sie vorge +     nommen haben, sind bestimmte Funktionen innerhalb +     des Menus nicht aktivierbar. Das System läßt nur +     die Funktionen zu, die aufgrund Ihrer Einstellun +     gen zulässig sind.  +        Im Kasten links unten auf dem Bildschirm wird +     jeweils angezeigt, welche Zieltask eingestellt ist. +     Erscheint in diesem Kasten auch ein Hinweis auf den +     Archivnamen, so haben Sie einen Archivmanager ein +     gestellt. Ist dagegen vor dem Namen der Zieltask +     noch eine Zahl und ein Schrägstrich angegeben, so +     haben Sie eine Zieltask auf einem anderen Rechner +     eingestellt.  +        Bedenken Sie, daß Operationen mit Tasks auf an +     deren Stationen länger andauern können - werden +     Sie nicht ungeduldig!  +        Sie können die Einstellung der Zieltask jeder +     zeit wieder verändern!  +  +     Fehlerfälle:  +     -  Die eingestellte Zieltask existiert nicht.  +     -  Die eingestellte Zieltask existiert zwar, ist aber +        nicht empfangsbereit, d.h. ein Zugriff von Ihrer +        Task aus ist nicht möglich!  +     -  Das Netz ist nicht funktionsbereit (Collector- +        Task fehlt).  +     -  Die Kommunikation war nicht erfolgreich.  +     -  Die gewünschte Operation kann mit der einge +        stellten Zieltask nicht ausgeführt werden (Ziel +        task ist z.B. gar kein Archivmanager - Sie aber +        versuchen, das Laufwerk zu reservieren).  + diff --git a/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 5 b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 5 new file mode 100644 index 0000000..bb4a67b --- /dev/null +++ b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 5 @@ -0,0 +1,167 @@ +#limit (11.0)##pagelength (16.5)##block#  +#start (2.0,0.0)#  +#page (61)#  +#headodd#  +#center#gs-Herbert und Robbi#right#%  +  +#end#  +#headeven#  +%#center#gs-Herbert und Robbi  +  +#end#  +#center#5  +  +#center#Detailbeschreibung  +#center#der  +#center#Basisbefehle  +  +  +#on("u")#'vor' bewirkt:#off("u")#  +  -  ein Eingabezeichen wird von der Tastatur gelesen +     und ausgewertet.  +  -  es wird je nach Verzögerungsfaktor (eine vorgege +     bene Wartezeit, die auch während des Programmlaufs +     verändert werden kann) gewartet.  +  -  falls die Kachel vor dem Hamster/Roboter noch frei +     ist und zur Landschaft/zum Arbeitsfeld gehört, +     geht der Hamster/ Roboter um eine Kachel in der +     augenblicklichen Richtung vorwärts.  +  -  falls vor dem Hamster/Roboter ein Hindernis liegt, +     oder wenn er im Begriff ist, aus der Landschaft/aus +     dem Arbeitsfeld herauszulaufen, wird das Programm +     mit entsprechender Fehlermeldung abgebrochen.  +  +#on("u")#'links um' bewirkt:#off("u")#  +  -  wie bei 'vor': Annahme eines Tastendruckes und +     Warten.  +  -  eine Drehung des Hamsters/Roboters um 90 Grad ge +     gen den Uhrzeigersinn.  +  +#on("u")#'nimm' bewirkt:#off("u")#  +  -  wie bei 'vor': Annahme eines Tastendruckes und +     Warten.  +  -  falls auf der Kachel, auf der der Hamster/Roboter +     steht, kein Korn/Werkstück liegt, wird das Programm +     mit entsprechender Fehlermeldung abgebrochen.  +  -  falls dort genau ein Korn/ein Werkstück liegt, wird +     dieses auf dem Bildschirm entfernt. Es wird zu denen +     in den Backentaschen/im Behälter addiert. Auf dem +     Bildschirm erscheint an der Stelle (" .").  +  -  falls mehrere Körner/Werkstücke dort liegen, wird +     eines zu denen in den Backentaschen/im Behälter +     addiert und von denen auf der Kachel subtrahiert. +     Auf dem Bildschirm erscheint weiterhin an der Stel +     le (" o").  +  +#on("u")#'gib' bewirkt:#off("u")#  +  -  wie bei 'vor': Annahme eines Tastendruckes und +     Warten.  +  -  falls die Backentaschen/der Behälter leer sind/ist, +     wird das Programm mit entsprechender Fehlermel +     dung abgebrochen.  +  -  falls auf der Kachel schon ein Korn/Werkstück oder +     mehrere Körner/Werkstücke liegen, wird zu ihnen +     eines addiert und von denen in den Backentaschen/ +     im Behälter subtrahiert. Der Bildschirm ändert sich +     nicht.  +  -  falls noch kein Korn/Werkstück auf dieser Kachel +     liegt, wird auf dem Bildschirm ein (" o") ausgegeben +     und von den Körnern/Werkstücken in den Backenta +     schen/im Behälter ein Korn/Werkstück subtrahiert.  +  +#on("u")#'vorn frei'#off("u")#  +  -  liefert den Wahrheitswert TRUE, wenn vor dem Ham +     ster/ Roboter keine Hinderniskachel liegt, #on("u")#also +     auch dann, wenn der Hamster/Roboter im Begriff ist, +     über die Landschafts-/Arbeitsfeldgrenze (den +     Bildschirmrand) hinauszulaufen!#off("u")# Wenn vor dem Ham +     ster/Roboter eine Hinderniskachel liegt, wird der +     Wahrheitswert FALSE geliefert.  +  +#on("u")#'links frei'#off("u")#  +  -  liefert den Wahrheitswert TRUE, wenn in Laufrich +     tung links vom Hamster/ Roboter keine Hindernis +     kachel liegt, #on("u")#also auch dann, wenn links vom Ham +     ster/Roboter die Landschafts-/Arbeitsfeldgrenze +     (der Bildschirmrand) ist!#off("u")# Wenn links vom Hamster/ +     Roboter eine Hinderniskachel liegt, wird der Wahr +     heitswert FALSE geliefert.  +  +#on("u")#'rechts frei'#off("u")#  +  -  liefert den Wahrheitswert TRUE, wenn in Laufrich +     tung rechts vom Hamster/Roboter keine Hindernis +     kachel liegt, #on("u")#also auch dann, wenn rechts vom Ham +     ster/Roboter die Landschafts-/Arbeitsfeldgrenze +     (der Bildschirmrand) ist!#off("u")# Wenn rechts vom Hamster/ +     Roboter eine Hinderniskachel liegt, wird der Wahr +     heitswert FALSE geliefert.  +  +#on("u")#'hinten frei'#off("u")#  +  -  liefert den Wahrheitswert TRUE, wenn in Laufrich +     tung hinter dem Hamster/Roboter keine Hindernis +     kachel liegt, #on("u")#also auch dann, wenn hinter dem Ham +     ster/Roboter die Landschafts-/Arbeitsfeldgrenze +     (der Bildschirmrand) ist!#off("u")# Wenn hinter dem Hamster/ +     Roboter eine Hinderniskachel liegt, wird der Wahr +     heitswert FALSE geliefert.  +  +#on("u")#'korn da' und 'werkstueck da'#off("u")#  +  -  liefern den Wahrheitswert TRUE, wenn auf der +     Kachel, auf der der Hamster/Roboter steht, minde +     stens ein Korn/Werkstück liegt. Ansonsten wird der +     Wahrheitswert FALSE geliefert.  +  +#on("u")#'korn vorn' und 'werkstueck vorn'#off("u")#  +  -  liefern den Wahrheitswert TRUE, wenn auf der +     Kachel, die in Laufrichtung vor dem Hamster/Robo +     ter liegt, mindestens ein Korn/Werkstück liegt. An +     sonsten wird der Wahrheitswert FALSE geliefert.  +  -  Zur "Untersuchung" wird die vor ihm liegende +     Kachel - sofern dort kein Hindernis ist - von ihm +     betreten. Wenn er im Begriff ist, aus der Land +     schaft/dem Arbeitsfeld herauszulaufen, wird das +     Programm mit entsprechender Fehlermeldung abge +     brochen.  +  +#on("u")#'korn links' und 'werkstueck links'#off("u")#  +  -  liefern den Wahrheitswert TRUE, wenn auf der +     Kachel, die in Laufrichtung links vom Hamster/ +     Roboter liegt, mindestens ein Korn/Werkstück liegt. +     Ansonsten wird der Wahrheitswert FALSE geliefert.  +  -  Zur "Untersuchung" wird die links neben ihm lie +     gende Kachel - sofern dort kein Hindernis ist - von +     ihm betreten. Wenn er im Begriff ist, aus der Land +     schaft/dem Arbeitsfeld herauszulaufen, wird das +     Programm mit entsprechender Fehlermeldung abge +     brochen.  +  +#on("u")#'korn rechts' und 'werkstueck rechts'#off("u")#  +  -  liefern den Wahrheitswert TRUE, wenn auf der +     Kachel, die in Laufrichtung rechts vom Hamster/ +     Roboter liegt, mindestens ein Korn/Werkstück liegt. +     Ansonsten wird der Wahrheitswert FALSE geliefert.  +  -  Zur "Untersuchung" wird die rechts neben ihm lie +     gende Kachel - sofern dort kein Hindernis ist - von +     ihm betreten. Wenn er im Begriff ist, aus der Land +     schaft/dem Arbeitsfeld herauszulaufen, wird das +     Programm mit entsprechender Fehlermeldung abge +     brochen.  +  +#on("u")#'korn hinten' und 'werkstueck hinten'#off("u")#  +  -  liefern den Wahrheitswert TRUE, wenn auf der +     Kachel, die in Laufrichtung hinter dem Hamster/ +     Roboter liegt, mindestens ein Korn/Werkstück liegt. +     Ansonsten wird der Wahrheitswert FALSE geliefert.  +  -  Zur "Untersuchung" wird die hinter ihm liegende +     Kachel - sofern dort kein Hindernis ist - von ihm +     betreten. Wenn er im Begriff ist, aus der Land +     schaft/dem Arbeitsfeld herauszulaufen, wird das +     Programm mit entsprechender Fehlermeldung abge +     brochen.  +  +#on("u")#'backen leer' und 'behaelter leer'#off("u")#  +  -  liefern den Wahrheitswert TRUE, wenn kein Korn/ +     kein Werkstück in den Backentaschen/im Behälter +     notiert ist. Ansonsten wird der Wahrheitswert FALSE +     geliefert.  + diff --git a/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 6 b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 6 new file mode 100644 index 0000000..0aeeff0 --- /dev/null +++ b/app/gs.hamster/1.1/doc/A5 - Doku: gs-Herbert und Robbi - Kapitel 6 @@ -0,0 +1,73 @@ +#limit (11.0)##pagelength (16.5)##block#  +#start (2.0,0.0)#  +#page (66)#  +#headodd#  +#center#gs-Herbert und Robbi#right#%  +  +#end#  +#headeven#  +%#center#gs-Herbert und Robbi  +  +#end#  +#center#6  +  +#center#Zusätzliche Kommandos  +  +  +PROC landschaft   (TEXT CONST landschaftsname)  +PROC arbeitsfeld  (TEXT CONST arbeitsfeldname)  +     Steht einer dieser Prozeduraufrufe innerhalb eines +  Hamster-/ Roboterprogramms vor dem ersten Befehl (am +  Anfang der Datei), so wird die Anfrage nach einem Land +  schafts-/Arbeitsfeldnamen zu Beginn des Laufs über +  gangen. Außerdem ist es möglich, den Hamster/Roboter +  in einem Programm durch meherere Landschaften/Ar +  beitsfelder laufen zu lassen. Beachten Sie bitte, daß +  der Landschaftsname / Arbeitsfeldname hier in Anfüh +  rungszeichen, aber #on("u")#ohne#off("u")# das Präfix 'Flaeche:' angegeben +  werden muß!  +  +PROC geschwindigkeit (INT CONST wert)  +     Möchte man von einem Programm aus eine bestimmte +  Geschwindigkeit des Hamsters/Roboters bei der Pro +  grammausführung festlegen oder die Geschwindigkeit +  vom Programm aus verändern, so kann man diese Proze +  dur verwenden. Zulässig sind für 'wert' nur Werte zwi +  schen 0 und 9. Dabei bedeuten:  +    0:   Einzelschrittmodus - Ausführung des nächsten +         Schritts auf Tastendruck  +    1:   geringste  Geschwindigkeit  (Wartezeit : ca. +         50 Zehntelsekunden  )  +    9:   höchste    Geschwindigkeit  (Wartezeit : +         keine)  +    2 - 8 sind dazwischenliegende Geschwindigkeiten  +  +TEXT PROC taste  +     Diese Prozedur liefert jeweils ein eingetipptes +  Zeichen. Die Taste <ESC>, welche zum Programmabbruch +  dient, wirkt sich schon aus, bevor hier ein Zeichen ge +  liefert werden könnte.  +  +PROC druckereinstellung fuer flaechenausdruck  +     Für den Landschafts-/Arbeitsfeldausdruck ist der +  Standardschrifttyp des Druckers voreingestellt. Dabei +  müssen 80 Druckpositionen in einer Zeile Platz haben. +  Außerdem sind voreingestellt : \#limit (20.5)\#, \#on("b")\# +  (Fettdruck) und \#start (0.0,0.0)\#. Zur Darstellung der +  Hinderniskacheln wird das Zeichen '\#\#' (Code 222) ver +  wendet. Kann Ihr Drucker dieses Zeichen nicht darstel +  len (z.B. Typenraddrucker mit deutschem Zeichenzatz), so +  können Sie hier ein #on("u")#anderes Zeichen#off("u")# auswählen. Weiter +  hin können Sie mit dieser Prozedur einen #on("u")#anderen +  Schrifttyp#off("u")# und eine #on("u")#andere Startposition#off("u")# (linker obe +  rer Eckpunkt des Druckfeldes) einstellen. Nachdem Sie +  das Kommando gegeben haben, wird zunächst der ge +  wünschte Schrifttyp erfragt. Geben Sie hier einen in +  Ihrer Installation vorhandenen Schrifttyp an (nur den +  Namen - ohne Anführungszeichen!). Anschließend werden +  Sie nacheinander nach den beiden Startwerten (erst die +  x-Richtung und dann die y-Richtung) gefragt. Geben +  Sie hier jeweils einen Wert (als REAL) ein. Bedenken Sie +  dabei, daß die 80 Druckpositionen nebeneinander Platz +  haben müssen!  + diff --git a/app/gs.hamster/1.1/doc/gs-Herbert und Robbi handbuch.impressum b/app/gs.hamster/1.1/doc/gs-Herbert und Robbi handbuch.impressum new file mode 100644 index 0000000..4c8e79d --- /dev/null +++ b/app/gs.hamster/1.1/doc/gs-Herbert und Robbi handbuch.impressum @@ -0,0 +1,87 @@ +____________________________________________________________________________  +  +  +#on("b")##on ("u")#  +#center#Betriebssystem E U M E L  +#off ("u")#  +  +  +#center#gs-Herbert und Robbi  +  +  +  +  +#off("b")#  +#center#Lizenzfreie Software der  +#on ("b")#  +  +#center#Gesellschaft für Mathematik und Datenverarbeitung mbH,  +#center#5205 Sankt Augustin  +  +  +#off("b")#  +#center#Die Nutzung der Software ist nur im Schul- und Hochschulbereich für  +#center#nichtkommerzielle Zwecke gestattet.  +  +#center#Gewährleistung und Haftung werden ausgeschlossen  +  +  +____________________________________________________________________________  +#page#  +  +#free (4.0)##on("b")#  +#center#gs-Herbert und Robbi +  +  +#center#Benutzerhandbuch  +  +  +#center#Version 1.0  +  +  +#off("b")##center#copyright  +#center#Eva Latta-Weber  +#center#Software- und Hardware-Systeme, 1988  +#center#ERGOS GmbH, 1990  +#page#  +#block#  +#center#____________________________________________________________________________  +  +  +Copyright:  ERGOS GmbH   März 1990  +  +             Alle Rechte vorbehalten. Insbesondere ist die Überführung in +             maschinenlesbare Form sowie das Speichern in Informations +             systemen, auch auszugsweise, nur mit schriftlicher Einwilliging +             Einwilligung der ERGOS GmbH gestattet.                    +  +#center#____________________________________________________________________________  +  +Es kann keine Gewähr übernommen werden, daß das Programm für eine +bestimmte Anwendung geeignet ist. Die Verantwortung dafür liegt beim +Anwender.  +  +Das Handbuch wurde mit größter Sorgfalt erstellt. Für die Korrektheit und +Vollständigkeit der Angaben kann keine Gewähr übernommen werden. Das +Handbuch kann jederzeit ohne Ankündigung geändert werden.  +  +Texterstellung   :  Dieser Text wurde mit der ERGOS-L3 Textverarbeitung +                   erstellt und aufbereitet und auf einem Kyocera Laser +                   drucker gedruckt.  +  +  +  +  +#center#___________________________________________________________________________  +  +  +  +Ergonomic Office Software GmbH  +  +Bergstr. 7              Telefon: (02241) 63075  +5200 Siegburg           Teletex: 2627-2241413=ERGOS  +                        Telefax: (02241) 63078  +  +  +#center#____________________________________________________________________________  + diff --git a/app/gs.hamster/1.1/source-disk b/app/gs.hamster/1.1/source-disk new file mode 100644 index 0000000..bd6ad37 --- /dev/null +++ b/app/gs.hamster/1.1/source-disk @@ -0,0 +1 @@ +informatikpaket/03_gs.hamster.img diff --git a/app/gs.hamster/1.1/src/ls-Herbert und Robbi 1 b/app/gs.hamster/1.1/src/ls-Herbert und Robbi 1 new file mode 100644 index 0000000..ed19e98 --- /dev/null +++ b/app/gs.hamster/1.1/src/ls-Herbert und Robbi 1 @@ -0,0 +1,84 @@ +(*  +         +          *********************************************************  +          *********************************************************  +          **                                                     **  +          **                ls-Herbert und Robbi 1               **  +          **                                                     **  +          **                     Version 1.1                     **  +          **                                                     **  +          **                  (Stand: 30.03.88)                  **  +          **                                                     **  +          **                                                     **  +          **         Autor: Wolfgang Weber, Bielefeld            **  +          **                                                     **  +          **                                                     **  +          ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **  +          **                                                     **  +          ** Copyright (C) 1988 ERGOS GmbH, Siegburg             **  +          **                                                     **  +          *********************************************************  +          *********************************************************  +  +                                                                           *)  +  +PACKET ls herbert und robbi 1  DEFINES{}       sei ein hamster, ist hamster,{}       sei ein roboter, ist roboter,{}       landschaft, arbeitsfeld,{}       vor, links um, nimm, gib,{}       korn da, werkstueck da,{}       backen leer, behaelter leer,{}       vorn frei, lauf,{}       hamsterinter, roboterinter,{}       geschwindigkeit, taste,{}       befehlssatz erweitern,{}       befehlssatz ist erweitert,{}       drucke landschaft,{}       hamster druckerstart einstellen,{}       hamster drucker xstart,{} +       hamster drucker ystart,{}       hamster landschaftsschrifttyp einstellen,{}       hamster landschaftsschrifttyp,{}       druckereinstellung fuer flaechenausdruck,{}       landschaftsauskunftstext,{}       testauskunftstext 1, testauskunftstext 2,{}       befehlsauskunftstext, laufauskunftstext,{}       kommandomodus, hamstermodus,{}       zeige landschaft, lege landschaft ab:{}TYPE LOCATION          = STRUCT (INT x, y);{}LET  menukarte         =  "ls-MENUKARTE:Herbert und Robbi",{}     richtung          =  ""3""8""10""2"",{} +     erscheinungsform  =           "A<V>",{}     praefix           =       "Flaeche:",{}     flaechentype      =             1007,{}     neutral           =                0,{}     erzeuge           =                1,{}     hamsterlauf       =                2,{}     interaktiv        =                3,{}     kommandostufe     =               99,{}     west              =            ""8"",{}     ost               =            ""2"",{}     cleol             =            ""5"",{}     piep              =            ""7"",{} +     mark ein          =           ""15"",{}     mark aus          =           ""14"",{}     escape            =           ""27"",{}     blank             =              " ",{}     niltext           =               "",{}     hindernis         =              "#",{}     korn              =              "o",{}     hinderniskachel   =             "##",{}     blankkachel       =             " .",{}     kornkachel        =             " o",{}     protokollname     =      "PROTOKOLL";{}LET    max x           =               40,{} +       max y           =               23;{}LET    FLAECHE         =  ROW max x ROW max y INT;{}LET    LANDSCHAFT      =  STRUCT (INT xpos, ypos, blickrichtung,{}                                      anzahl koerner, FLAECHE flaeche);{}LET    HAMSTER         =  STRUCT (LOCATION stelle, INT koerner, form);{}BOUND LANDSCHAFT VAR aktuelle landschaft;{}FLAECHE VAR land;{}HAMSTER VAR hamster;{}FILE VAR protokoll;{}INT  CONST besetzt                 ::             -1,{}           frei                    ::              0;{} +TEXT CONST kornsymbole             ::{}  "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";{}INT CONST maxkornzahl              ::   LENGTH kornsymbole;{}BOOL VAR   hamster eingestellt     ::           TRUE,{}           befehlssatz erweitert   ::          FALSE;{}TEXT VAR   eingabezeichen          ::        niltext,{}           archivlandschaftsname   ::        niltext,{}           hinderniszeichen        ::           "\#\#",{}           schrifttyp              ::        niltext;{}INT  VAR   verzoegerungsfaktor     ::              5,{} +           modus                   ::  kommandostufe,{}           a, b, c, d;{}REAL VAR   xstart                  ::            0.0,{}           ystart                  ::            0.0;{}WINDOW VAR fenster                 ::  window (1, 1, 79, 24);{}INITFLAG VAR in this task          ::  FALSE;{}OP := (LOCATION VAR l, LOCATION CONST r):{}   l.x := r.x; l.y := r.y{}END OP :=;{}PROC initialize hamstersystem:{}  IF NOT initialized (in this task){}     THEN install menu (menukarte);{}  FI{}END PROC initialize hamstersystem;{} +PROC sei ein hamster:{}  hamster eingestellt := TRUE{}END PROC sei ein hamster;{}BOOL PROC ist hamster:{}   hamster eingestellt{}END PROC ist hamster;{}PROC sei ein roboter:{}  hamster eingestellt := FALSE{}END PROC sei ein roboter;{}BOOL PROC ist roboter:{}   NOT hamster eingestellt{}END PROC ist roboter;{}PROC hole landschaft (TEXT CONST name):{}   aktuelle landschaft := old (praefix + name);{}   land                := aktuelle landschaft.flaeche;{}   hamster.form        := aktuelle landschaft.blickrichtung;{} +   hamster.stelle.x    := aktuelle landschaft.xpos;{}   hamster.stelle.y    := aktuelle landschaft.ypos;{}   hamster.koerner     := aktuelle landschaft.anzahl koerner{}END PROC hole landschaft;{}PROC lege landschaft ab (TEXT CONST name):{}   IF exists (praefix + name){}      THEN forget (praefix + name, quiet){}   FI;{}   aktuelle landschaft                := new (praefix + name);{}   aktuelle landschaft.flaeche        := land;{}   aktuelle landschaft.blickrichtung  := hamster.form;{}   aktuelle landschaft.xpos           := hamster.stelle.x;{} +   aktuelle landschaft.ypos           := hamster.stelle.y;{}   aktuelle landschaft.anzahl koerner := hamster.koerner;{}   type( old(praefix + name), flaechentype){}END PROC lege landschaft ab;{}PROC hamstermodus:{}   modus := neutral{}END PROC hamstermodus;{}PROC kommandomodus:{}   modus := kommandostufe{}END PROC kommandomodus;{}PROC erzeugemodus:{}   modus := erzeuge{}END PROC erzeugemodus;{}PROC intermodus:{}   modus := interaktiv{}END PROC intermodus;{}PROC laufmodus:{}   modus := hamsterlauf{} +END PROC laufmodus;{}BOOL PROC vorn frei:{}  kontrolliere modus;{}  LOCATION VAR hier :: hamster.stelle;{}  SELECT hamster.form OF{}    CASE 1: IF hamster.stelle.y < 2       THEN protestiere FI;{}            hier.y DECR 1{}    CASE 2: IF hamster.stelle.x < 2       THEN protestiere FI;{}            hier.x DECR 1{}    CASE 3: IF hamster.stelle.y >= max y  THEN protestiere FI;{}            hier.y INCR 1{}    CASE 4: IF hamster.stelle.x >= max x  THEN protestiere FI;{}            hier.x INCR 1{}    OTHERWISE modus := kommandostufe;{} +              IF ist hamster{}                 THEN errorstop(nachricht( 7)){}                 ELSE errorstop(nachricht(14)){}              FI{}  END SELECT;{}  IF modus = erzeuge{}     THEN TRUE{}     ELSE land[hier.x] [hier.y] <> besetzt{}  FI{}END PROC vorn frei;{}BOOL PROC korn da:{}  kontrolliere modus;{}  kornzahl > 0{}END PROC korn da;{}INT PROC kornzahl:{}  land [hamster.stelle.x] [hamster.stelle.y]{}END PROC kornzahl;{}BOOL PROC werkstueck da:{}  korn da{}END PROC werkstueck da;{}BOOL PROC backen leer:{} +  kontrolliere modus;{}  hamster.koerner <= 0 AND (modus = hamsterlauf OR modus = interaktiv){}END PROC backen leer;{}BOOL PROC behaelter leer:{}  backen leer{}END PROC behaelter leer;{}PROC protestiere:{}  IF modus = erzeuge{}     THEN out(piep); eins zurueck{}     ELSE verzoegere 10 mal; zeige("X"); verzoegere 10 mal;{}          kommandomodus;{}          IF ist hamster{}             THEN errorstop(nachricht( 6)){}             ELSE errorstop(nachricht(13)){}          FI;{}  FI.{}  eins zurueck:{} +    SELECT hamster.form OF{}      CASE 1:   hamster.stelle.y INCR 1{}      CASE 2:   hamster.stelle.x INCR 1{}      CASE 3:   hamster.stelle.y DECR 1{}      CASE 4:   hamster.stelle.x DECR 1{}      OTHERWISE kommandomodus;{}                IF ist hamster{}                   THEN errorstop(nachricht( 7)){}                   ELSE errorstop(nachricht(14)){}                FI;{}     END SELECT.{}  verzoegere 10 mal:{}    INT VAR j;{}    FOR j FROM 1 UPTO 10 REP{}      verzoegere{}    PER{}END PROC protestiere;{} +PROC verzoegere:{}  IF modus <> hamsterlauf{}     THEN LEAVE verzoegere{}  FI;{}  eingabezeichen := incharety (verzoegerungsfaktor);{}  IF   eingabezeichen = escape{}       THEN kommandomodus;{}            IF ist hamster{}               THEN errorstop(nachricht( 4)){}               ELSE errorstop(nachricht(11)){}            FI{}  ELIF eingabezeichen = "-" THEN verlangsame{}  ELIF eingabezeichen = "+" THEN beschleunige{}  ELIF eingabezeichen = "?" THEN boxinfo (fenster, laufauskunftstext,{}                                                   5, maxint, a, b, c, d);{} +                                 cursor on; zeige landschaft{}  ELIF pos ("0123456789", eingabezeichen) > 0{}        THEN geschwindigkeit (int (eingabezeichen)){}  FI.{}  verlangsame:{}    IF   verzoegerungsfaktor > 31 THEN  (* lass es dabei *){}    ELIF verzoegerungsfaktor < 1{}         THEN verzoegerungsfaktor INCR 1{}         ELSE verzoegerungsfaktor INCR verzoegerungsfaktor{}    FI.{}  beschleunige:{}    IF verzoegerungsfaktor < 1{}       THEN verzoegerungsfaktor := -1{}       ELSE verzoegerungsfaktor := verzoegerungsfaktor DIV 2{} +    FI{}END PROC verzoegere;{}PROC geschwindigkeit (INT CONST faktor):{}  SELECT faktor OF{}    CASE 0 :  verzoegerungsfaktor := 20000;{}    CASE 1 :  verzoegerungsfaktor :=    50;{}    CASE 2 :  verzoegerungsfaktor :=    20;{}    CASE 3 :  verzoegerungsfaktor :=    10;{}    CASE 4 :  verzoegerungsfaktor :=     8;{}    CASE 5 :  verzoegerungsfaktor :=     5;{}    CASE 6 :  verzoegerungsfaktor :=     2;{}    CASE 7 :  verzoegerungsfaktor :=     1;{}    CASE 8 :  verzoegerungsfaktor :=     0;{}    CASE 9 :  verzoegerungsfaktor :=    -1;{} +    OTHERWISE (*belasse es dabei*){}  END SELECT{}END PROC geschwindigkeit;{}PROC vor:{}  kontrolliere modus;{}  IF vorn frei{}     THEN zeige(kachel);{}          bilde neue hamsterkoordinaten;{}          zeige(erscheinungsform SUB hamster.form);{}          verzoegere{}     ELSE modus := kommandostufe;{}          zeige("X");{}          IF ist hamster{}             THEN errorstop(nachricht(1)){}             ELSE errorstop(nachricht(8)){}          FI{}  FI.{}  kachel:{}    INT CONST z :: land [hamster.stelle.x] [hamster.stelle.y];{} +    IF   z = besetzt THEN hinderniskachel{}    ELIF z = frei    THEN blankkachel{}                     ELSE kornkachel{}    FI.{}  bilde neue hamsterkoordinaten:{}    SELECT hamster.form OF{}      CASE 1    :hamster.stelle.y DECR 1{}      CASE 2    :hamster.stelle.x DECR 1{}      CASE 3    :hamster.stelle.y INCR 1{}      CASE 4    :hamster.stelle.x INCR 1{}      OTHERWISE  modus:=kommandostufe;{}                 IF ist hamster{}                    THEN errorstop(nachricht( 7)){}                    ELSE errorstop(nachricht(14)){} +                 FI{}    END SELECT.{}END PROC vor;{}PROC nimm:{}  kontrolliere modus;{}  IF korn da{}     THEN variiere kornzahl (-1);{}          IF kornzahl < 1 THEN zeige (ost + blank) FI{}     ELSE modus := kommandostufe;{}          zeige("X");{}          IF ist hamster{}             THEN errorstop(nachricht(2)){}             ELSE errorstop(nachricht(9)){}          FI{}  FI;{}  verzoegere{}END PROC nimm;{}PROC gib:{}  kontrolliere modus;{}  IF backen leer{}     THEN modus := kommandostufe;{}          zeige ("X");{} +          IF ist hamster{}             THEN errorstop(nachricht( 3)){}             ELSE errorstop(nachricht(10)){}          FI{}     ELSE variiere kornzahl (+1);{}          zeige(ost + korn){}  FI;{}  verzoegere{}END PROC gib;{}PROC links um:{}  kontrolliere modus;{}  hamster.form := hamster.form MOD 4 + 1;{}  (* da hamster.form der Werte 1,2,3,4 faehig ist und linksdreht *){}  zeige (subjekt);{}  verzoegere.{}  subjekt:{}    erscheinungsform SUB hamster.form.{}END PROC links um;{}PROC variiere kornzahl (INT CONST delta):{} +  IF delta * delta <> 1{}     THEN LEAVE variiere kornzahl{}  FI;   (* als delta kommen nur +1 und -1 vor *){}  INT VAR k;{}  IF kornzahl = -1 AND delta = 1{}     THEN k := 1{}     ELSE k := kornzahl + delta{}  FI;{}  IF k <= 0{}     THEN land [hamster.stelle.x] [hamster.stelle.y] := frei{}     ELSE land [hamster.stelle.x] [hamster.stelle.y] := min (k,maxkornzahl){}  FI;{}  IF modus = hamsterlauf OR modus = interaktiv{}     THEN hamster.koerner DECR delta{}  FI{}END PROC variiere kornzahl;{}PROC kontrolliere modus:{} +  initialize hamstersystem;{}  SELECT modus OF{}    CASE neutral    : erzeugemodus;{}                      landschaft;{}                      laufmodus{}    CASE erzeuge,{}         interaktiv,{}         hamsterlauf: (* nichts *){}    OTHERWISE         kommandomodus;{}                      line;{}                      IF ist hamster{}                         THEN sage(anwendungstext (21));pause(20);{}                              errorstop(nachricht( 5)){}                         ELSE sage(anwendungstext (22));pause(20);{} +                              errorstop(nachricht(12)){}                      FI{}  END SELECT{}END PROC kontrolliere modus;{}PROC zeige (TEXT CONST was):{}   cursor (2 * hamster.stelle.x - 1, hamster.stelle.y);{}   IF hamster.stelle.x >= max x  AND hamster.stelle.y > max y{}      THEN out ((was SUB 1)); out(west){}      ELSE out(was); (LENGTH was) TIMESOUT west{}   FI.{}END PROC zeige;{}PROC sage (TEXT CONST aussage):{}   cursor(1,24); out(aussage + cleol){}END PROC sage;{}TEXT PROC nachricht (INT CONST nummer):{} +   inv (text (anwendungstext (nummer), 65)) + piep{}END PROC nachricht;{}TEXT PROC inv (TEXT CONST text):{}  TEXT VAR aus :: mark ein + text + blank + mark aus;{}  aus{}END PROC inv;{}PROC zeige landschaft:{}  initialize hamstersystem;{}  INT VAR y;{}  FOR y FROM 1 UPTO max y REP{}     setze zeile zusammen;{}     cursor (1,y); out (zeile){}  PER;{}  cursor(1,24); out(cleol);{}  IF modus = interaktiv{}     THEN gib befehlszeile aus{}  FI;{}  zeige hamster; cursor on.{}  setze zeile zusammen:{}    TEXT VAR zeile :: niltext;{} +    INT VAR x;{}    FOR x FROM 1 UPTO max x REP{}       zeile CAT kachel{}    PER.{}  kachel:{}    INT CONST z :: land [x] [y];{}    IF   z = besetzt THEN hinderniskachel{}    ELIF z = frei    THEN blankkachel{}                     ELSE kornkachel{}    FI.{}   gib befehlszeile aus:{}     cursor(1,1); write(cleol); write (anwendungstext (62)){}END PROC zeige landschaft;{}PROC zeige hamster:{}   zeige (erscheinungsform SUB hamster.form){}END PROC zeige hamster;{}PROC landschaft (TEXT CONST kandidat):{} +  initialize hamstersystem;{}  archivlandschaftsname := kandidat;{}  IF   exists (praefix + kandidat){}         CAND type (old (praefix + kandidat)) = flaechentype{}       THEN behandle existierende landschaft{}  ELIF exists (praefix + kandidat){}       THEN forget (praefix + kandidat, quiet);{}            behandle neue landschaft{}  ELSE behandle neue landschaft{}  FI.{}  behandle existierende landschaft:{}    hole landschaft (kandidat);{}    SELECT modus OF{}      CASE hamsterlauf,{}           interaktiv,{} +           neutral       : zeige landschaft;{}                           laufmodus{}      CASE erzeuge       : modifiziere eventuell{}      CASE kommandostufe : modifiziere landschaft{}      OTHERWISE            errorstop (anwendungstext (15)){}    END SELECT.{}  behandle neue landschaft:{}    SELECT modus OF{}      CASE hamsterlauf,{}           interaktiv,{}           neutral,{}           erzeuge       : erschaffe landschaft;{}                           modifiziere landschaft;{}                           zeige landschaft;{} +                           laufmodus{}      CASE kommandostufe : erschaffe landschaft;{}                           modifiziere landschaft;{}      OTHERWISE            errorstop (anwendungstext (15)){}    END SELECT.{}  modifiziere eventuell:{}    IF ist hamster{}       THEN IF boxyes (fenster, anwendungstext (41), 5, a, b, c, d){}               THEN cursor on; modifiziere landschaft{}            FI{}       ELSE IF boxyes (fenster, anwendungstext (42), 5, a, b, c, d){}               THEN cursor on; modifiziere landschaft{} +            FI{}    FI;{}    zeige landschaft.{}  erschaffe landschaft:{}    INT VAR j;{}    FOR j FROM 1 UPTO max y REP{}      INT VAR k;{}      FOR k FROM 1 UPTO max x REP{}        land [k] [j] := frei{}      PER{}    PER;{}    hamster.form     :=   4;{}    hamster.stelle.x :=  20;{}    hamster.stelle.y :=  12;{}    hamster.koerner  :=   0.{}END PROC landschaft;{}PROC landschaft:{}  initialize hamstersystem;{}  IF ist hamster{}     THEN landschaft (erfragter landschaftsname (anwendungstext (36))){} +     ELSE landschaft (erfragter landschaftsname (anwendungstext (37))){}  FI{}END PROC landschaft;{}TEXT PROC erfragter landschaftsname (TEXT CONST satz):{}  TEXT VAR landschaftsname :: archivlandschaftsname;{}  REP{}    page; line (3); out (satz + cleol); line (2);{}    editget (landschaftsname);{}    landschaftsname := compress (landschaftsname);{}    IF landschaftsname = niltext{}       THEN line (2); out (anwendungstext (18) + piep);{}            line (2); out (anwendungstext (38)); pause{}    FI{} +  UNTIL landschaftsname <> niltext PER;{}  landschaftsname{}END PROC erfragter landschaftsname;{}PROC arbeitsfeld (TEXT CONST kandidat):{}  landschaft (kandidat){}END PROC arbeitsfeld;{}PROC arbeitsfeld:{}  landschaft{}END PROC arbeitsfeld;{}PROC modifiziere landschaft:{}  INT CONST modalibi :: modus;{}  erzeugemodus;{}  zeige landschaft;{}  informiere;{}  zeige hamster;{}  nimm ein eingabezeichen;{}  WHILE nicht endewunsch REP{}    erfuelle fortschreibungswunsch;{}    nimm ein eingabezeichen{}  PER;{} +  erfrage koernerzahl;{}  lege landschaft ab (archivlandschaftsname);{}  modus := modalibi.{}  nimm ein eingabezeichen:{}    inchar (eingabezeichen).{}  nicht endewunsch:{}    pos ("hH", eingabezeichen) = 0.{}  erfuelle fortschreibungswunsch:{}    INT CONST r :: pos (richtung, eingabezeichen){}    IF   r > 0{}         THEN IF hamster.form = r{}                 THEN vor{}                 ELSE hamster.form := r;{}                      zeige hamster{}              FI{}    ELIF eingabezeichen = "?" THEN boxinfo (fenster, landschaftsauskunftstext,{} +                                                     5, maxint, a, b, c, d);{}                                   cursor on; zeige landschaft; informiere{}    ELIF eingabezeichen = "k" THEN kopiere landschaft;{}                                   zeige landschaft; informiere{}    ELIF eingabezeichen = "g" THEN gib{}    ELIF eingabezeichen = "n" THEN IF korn da THEN nimm ELSE out (piep) FI{}    ELIF eingabezeichen = "z" THEN zeige (text (kornzahl, 2)){}    ELIF eingabezeichen = hindernis{}         THEN  land [hamster.stelle.x] [hamster.stelle.y] := besetzt; vor{} +    ELIF eingabezeichen = blank{}         THEN  land [hamster.stelle.x] [hamster.stelle.y] := frei;    vor{}    ELSE out (piep){}    FI.{}    kopiere landschaft:{}      TEXT VAR kopie;{}      IF NOT not empty (alle landschaften){}         THEN IF ist hamster{}                 THEN boxinfo (fenster, anwendungstext (196), 5, maxint){}                 ELSE boxinfo (fenster, anwendungstext (197), 5, maxint){}              FI{}         ELSE lasse original auswaehlen{}      FI.{}    lasse original auswaehlen:{} +      IF ist hamster{}         THEN kopie := boxone (fenster, alle landschaften,{}                               anwendungstext (23), anwendungstext (24),{}                               FALSE){}         ELSE kopie := boxone (fenster, alle landschaften,{}                               anwendungstext (25), anwendungstext (26),{}                               FALSE){}      FI;{}      cursor on; hole landschaft (kopie).{}    alle landschaften:{}      ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix).{} +    erfrage koernerzahl:{}      TEXT VAR eingabe; BOOL VAR ist ok; INT VAR zahl;{}      cursor (1,23); 79 TIMESOUT waagerecht;{}      REP{}        ist ok := TRUE;{}        IF ist hamster{}           THEN eingabe := boxanswer (fenster, anwendungstext (43),{}                                               text (hamster.koerner),{}                                               5, a, b, c, d){}           ELSE eingabe := boxanswer (fenster, anwendungstext (44),{}                                               text (hamster.koerner),{} +                                               5, a, b, c, d){}        FI;{}        disable stop;{}        IF eingabe = "" THEN eingabe := "0" FI;{}        zahl := int (eingabe);{}        IF zahl < 0 OR zahl > maxint THEN ist ok := FALSE FI;{}        IF is error THEN ist ok := FALSE; clear error FI;{}        enable stop;{}      UNTIL last conversion ok AND ist ok PER;{}      cursor on;{}      hamster.koerner := zahl.{}    informiere:{}      cursor (1,1);{}      IF ist hamster{}         THEN out (anwendungstext (27)){} +         ELSE out (anwendungstext (28)){}      FI{}END PROC modifiziere landschaft;{}PROC lauf (TEXT CONST dateiname):{}  initialize hamstersystem;{}  IF NOT exists (dateiname){}     THEN errorstop (anwendungstext (16) + dateiname + anwendungstext (17)){}  FI;{}  hamstermodus;{}  disable stop;{}  run (dateiname);{}  kommandomodus;{}  cursor (1, 24);{}  IF is error{}     THEN IF length (errormessage) > 1{}             THEN sage (errormessage); pause;{}          FI{}     ELSE sage (anwendungstext (29)); pause; konserviere landschaft{} +  FI;{}  clear error;{}  enable stop{}END PROC lauf;{}PROC lauf:{}  lauf (last param){}END PROC lauf;{}PROC konserviere landschaft:{}  TEXT VAR neuer landschaftsname;{}  IF ist hamster{}     THEN stelle landschaftsfrage{}     ELSE stelle arbeitsfeldfrage{}  FI; cursor on.{}  stelle landschaftsfrage:{}    IF boxyes (fenster, anwendungstext (45), 5){}       THEN bewahre landschaft auf{}    FI.{}  stelle arbeitsfeldfrage:{}    IF boxyes (fenster, anwendungstext (46), 5){}       THEN bewahre landschaft auf{} +    FI.{}  bewahre landschaft auf:{}    neuer landschaftsname := archivlandschaftsname + ".x";{}    lege landschaft ab (neuer landschaftsname);{}    gib hinweis auf neuen namen.{}  gib hinweis auf neuen namen:{}    IF ist hamster{}       THEN boxinfo (fenster, anwendungstext (30){}                     + inv (neuer landschaftsname), 5, maxint, a, b, c, d){}       ELSE boxinfo (fenster, anwendungstext (31){}                     + inv (neuer landschaftsname), 5, maxint, a, b, c, d){}    FI{}END PROC konserviere landschaft;{} +PROC hamsterinter (TEXT CONST landschaftsname):{}  initialize hamstersystem;{}  sei ein hamster;{}  steuere interaktiv (landschaftsname);{}  cursor on{}END PROC hamsterinter;{}PROC hamsterinter:{}  initialize hamstersystem;{}  hamsterinter (erfragter landschaftsname (anwendungstext (39))){}END PROC hamsterinter;{}PROC roboterinter (TEXT CONST landschaftsname):{}  initialize hamstersystem;{}  sei ein roboter;{}  steuere interaktiv (landschaftsname);{}  cursor on{}END PROC roboterinter;{}PROC roboterinter:{} +  initialize hamstersystem;{}  roboterinter (erfragter landschaftsname (anwendungstext (40))){}END PROC roboterinter;{}PROC steuere interaktiv (TEXT CONST landschaftsname):{}  forget (protokollname, quiet);{}  protokoll := sequential file (output, protokollname);{}  intermodus;{}  landschaft (landschaftsname);{}  TEXT VAR befehl :: niltext, letzter befehl :: niltext;{}  REP{}    arbeiten{}  PER.{}  arbeiten:{}    intermodus;{}    hole befehl;{}    fuehre befehl aus.{}  hole befehl:{}    TEXT VAR befehlszeichen;{} +    TEXT CONST befehlskette :: "vlngpeVLNGPE";{}    INT VAR befehlsposition;{}    zeige (hamsterform);{}    cursor (1,24);{}    IF ist hamster{}       THEN out (cleol + anwendungstext (32) + letzter befehl){}       ELSE out (cleol + anwendungstext (33) + letzter befehl){}    FI;{}    cursor(24,24);{}    inchar (befehlszeichen);{}    befehlsposition := pos(befehlskette,befehlszeichen);{}    IF befehlsposition = 0{}       THEN out(piep);{}            LEAVE arbeiten{}    FI;{}    SELECT befehlsposition OF{} +      CASE 1, 7: befehl := "vor";{}                           out("vor");{}                           letzter befehl := "vor"{}      CASE 2, 8: befehl := "links um";{}                           out("links um");{}                           letzter befehl := "links um"{}      CASE 3, 9: befehl := "nimm";{}                           out("nimm");{}                           letzter befehl := "nimm"{}      CASE 4,10: befehl := "gib";{}                           out("gib");{}                           letzter befehl := "gib"{} +      CASE 5,11: out("protokoll");{}                 letzter befehl := "protokoll";{}                 FILE VAR p :: sequential file (modify,protokollname);{}                 headline(p, protokollname + "  (Verlassen: <ESC><q>)");{}                 cursor on; show(p); cursor off;{}                 zeige landschaft; befehl := "";{}                 output(protokoll);{}                 LEAVE arbeiten{}      CASE 6,12: out("ende"); kommandomodus; befehl := "";{}                 LEAVE steuere interaktiv{} +    END SELECT.{}   hamsterform:{}     erscheinungsform SUB hamster.form.{}   fuehre befehl aus:{}     BOOL VAR korrekt;{}     disable stop;{}     do (befehl);{}     cursor (1,24);{}     korrekt := NOT is error;{}     IF is error{}        THEN IF errormessage > ""{}                THEN out (inv (text (errormessage, 65)) + piep);{}                     pause(30);{}             FI;{}             clear error{}     FI;{}     IF korrekt AND befehl <> ""{}        THEN protokolliere (befehl){}     FI;{}     enable stop;{} +END PROC steuere interaktiv;{}PROC protokolliere (TEXT CONST befehl):{}  putline (protokoll, befehl + ";"){}END PROC protokolliere;{}PROC drucke landschaft (TEXT CONST landschaftsname):{}  initialize hamstersystem;{}  ROW max y TEXT VAR drucklandschaft;{}  BOUND LANDSCHAFT VAR al;{}  INT VAR i, hamsterx, hamstery;{}  TEXT VAR hamsterzeichen;{}  landschaftsdatei holen;{}  drucklandschaft erzeugen;{}  hamster in drucklandschaft einsetzen;{}  druckdatei erzeugen;{}  disable stop;{}  TEXT VAR datname := std;{} +  do ("print (""druckdatei"")");{}  IF is error{}      THEN menuinfo (inv (errormessage));{}           clear error;{}  FI;{}  last param (datname);{}  enable stop;{}  druckdatei loeschen;{}  cursor on.{}  landschaftsdatei holen:{}    IF exists (praefix + landschaftsname) AND{}       (type (old (praefix + landschaftsname)) = flaechentype){}       THEN hole landschaft;{}       ELSE LEAVE drucke landschaft{}    FI.{}  hole landschaft:{}    al             := old (praefix + landschaftsname);{}    hamsterx       := al.xpos;{} +    hamstery       := al.ypos;{}    hamsterzeichen := erscheinungsform SUB al.blickrichtung.{}  drucklandschaft erzeugen:{}    TEXT VAR zeile; INT VAR  x;{}    FOR i FROM 1 UPTO max y REP{}        zeile := "";{}        FOR x FROM 1 UPTO maxx REP{}            zeile erzeugen{}        PER;{}        drucklandschaft[i] :=  zeile{}    PER.{}  zeile erzeugen:{}    INT CONST zeichen :: al.flaeche [x] [i];{}    IF   zeichen = besetzt THEN zeile CAT hinderniszeichen{}    ELIF zeichen = frei    THEN zeile CAT " ."{} +                           ELSE zeile CAT " o"{}    FI.{}  hamster in drucklandschaft einsetzen:{}    change (drucklandschaft [hamstery], hamsterx*2-1, hamsterx*2-1,{}            hamsterzeichen).{}  druckdatei erzeugen:{}    FILE VAR p::sequential file(output, "druckdatei");{}    INT VAR blankzahl;{}    line(p);{}    putline(p,"#type (""" + schrifttyp + """)#");{}    putline(p,"#start(" + text(xstart) + "," + text(ystart) + ")#");{}    putline(p,"#limit(20.8)#");{}    blankzahl := ( 80 - (8 + length (landschaftsname))) DIV 2;{} +    putline(p, blankzahl * " " + praefix + landschaftsname + " ");{}    putline(p, "  ");{}    FOR i FROM 1 UPTO maxy REP{}      putline(p, drucklandschaft[i] + " "){}    PER.{}  druckdatei loeschen:{}    forget("druckdatei", quiet){}END PROC drucke landschaft;{}PROC drucke landschaft:{}  initialize hamstersystem;{}  IF ist hamster{}     THEN drucke landschaft (erfragter landschaftsname (anwendungstext (36))){}     ELSE drucke landschaft (erfragter landschaftsname (anwendungstext (37))){}  FI;{}  cursor on{} +END PROC drucke landschaft;{}PROC druckereinstellung fuer flaechenausdruck:{}  initialize hamstersystem;{}  page;{}  IF ist hamster{}     THEN putline (center (invers (anwendungstext (71)))){}     ELSE putline (center (invers (anwendungstext (72)))){}  FI;{}  line (3);{}  put (anwendungstext (73));{}  editget (schrifttyp);{}  line (2);{}  schrifttyp := compress (schrifttyp);{}  putline (anwendungstext (74));{}  putline (anwendungstext (75)); line (2);{}  putline (anwendungstext (76) + text (xstart) + "," + text (ystart) +{} +           anwendungstext (77)); line;{}  put (anwendungstext (78)); get (xstart); line;{}  put (anwendungstext (79)); get (ystart); line (2);{}  IF yes (anwendungstext (80) + hinderniszeichen + anwendungstext (81)){}     THEN line;{}          put (anwendungstext (82)); inchar (hinderniszeichen); line (2);{}          hinderniszeichen CAT hinderniszeichen;{}          IF hinderniszeichen = "##"{}             THEN hinderniszeichen := "\#\#"{}          FI{}  FI;{}  line;{}  put (anwendungstext (83)){}END PROC druckereinstellung fuer flaechenausdruck;{} +PROC hamster druckerstart einstellen (REAL CONST xpos, ypos):{}  xstart := xpos; ystart := ypos{}END PROC hamster druckerstart einstellen;{}REAL PROC hamster drucker xstart:{}  xstart{}END PROC hamster drucker xstart;{}REAL PROC hamster drucker ystart:{}  ystart{}END PROC hamster drucker ystart;{}PROC hamster landschaftsschrifttyp einstellen (TEXT CONST typ):{}  schrifttyp := typ{}END PROC hamster landschaftsschrifttyp einstellen;{}TEXT PROC hamster landschaftsschrifttyp:{}  schrifttyp{}END PROC hamster landschaftsschrifttyp;{} +PROC drucke arbeitsfeld (TEXT CONST arbeitsfeldname):{}  drucke landschaft (arbeitsfeldname){}END PROC drucke arbeitsfeld;{}PROC drucke arbeitsfeld:{}  drucke landschaft{}END PROC drucke arbeitsfeld;{}TEXT PROC taste:{}  eingabezeichen{}END PROC taste;{}TEXT PROC landschaftsauskunftstext:{}  initialize hamstersystem;{}  IF ist hamster{}     THEN anwendungstext (52){}     ELSE anwendungstext (53){}  FI{}END PROC landschaftsauskunftstext;{}TEXT PROC laufauskunftstext:{}  initialize hamstersystem;{} +  anwendungstext (51){}END PROC  laufauskunftstext;{}TEXT PROC befehlsauskunftstext:{}  initialize hamstersystem;{}  IF ist hamster{}     THEN anwendungstext (54){}     ELSE anwendungstext (55){}  FI{}END PROC befehlsauskunftstext;{}TEXT PROC testauskunftstext 1:{}  initialize hamstersystem;{}  IF befehlssatz erweitert{}     THEN langer testauskunftstext{}     ELSE kurzer testauskunftstext{}  FI.{}  kurzer testauskunftstext:{}    IF ist hamster{}       THEN anwendungstext (56){}       ELSE anwendungstext (57){} +    FI.{}  langer testauskunftstext:{}    IF ist hamster{}       THEN anwendungstext (58){}       ELSE anwendungstext (60){}    FI.{}END PROC testauskunftstext 1;{}TEXT PROC testauskunftstext 2:{}  initialize hamstersystem;{}  IF befehlssatz erweitert{}     THEN eintragung{}     ELSE niltext{}  FI.{}  eintragung:{}    IF ist hamster{}       THEN anwendungstext (59){}       ELSE anwendungstext (61){}    FI{}END PROC testauskunftstext 2;{}PROC befehlssatz erweitern (BOOL CONST status):{}  befehlssatz erweitert := status{} +END PROC befehlssatz erweitern;{}BOOL PROC befehlssatz ist erweitert:{}  befehlssatz erweitert{}END PROC befehlssatz ist erweitert;{}END PACKET ls herbert und robbi 1;{} + diff --git a/app/gs.hamster/1.1/src/ls-Herbert und Robbi 2 b/app/gs.hamster/1.1/src/ls-Herbert und Robbi 2 new file mode 100644 index 0000000..7394932 --- /dev/null +++ b/app/gs.hamster/1.1/src/ls-Herbert und Robbi 2 @@ -0,0 +1,31 @@ +(*  +         +          *********************************************************  +          *********************************************************  +          **                                                     **  +          **               ls-Herbert und Robbi 2                **  +          **                                                     **  +          **                     Version 1.1                     **  +          **                                                     **  +          **                  (Stand: 30.03.88)                  **  +          **                                                     **  +          **                                                     **  +          **         Autor: Wolfgang Weber, Bielefeld            **  +          **                                                     **  +          **                                                     **  +          ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **  +          **                                                     **  +          ** Copyright (C) 1988 ERGOS GmbH, Siegburg             **  +          **                                                     **  +          *********************************************************  +          *********************************************************  +  +                                                                           *)  +  +PACKET ls herbert und robbi 2  DEFINES{}       rechts frei,{}       links frei,{}       hinten frei,{}       korn vorn,    werkstueck vorn,{}       korn links,   werkstueck links,{}       korn rechts,  werkstueck rechts,{}       korn hinten,  werkstueck hinten:{}BOOL PROC rechts frei:{}  rechts um;{}  IF vorn frei{}     THEN links um; TRUE{}     ELSE links um; FALSE{}  FI{}END PROC rechts frei;{}BOOL PROC links frei:{}  links um;{}  IF vorn frei{}     THEN rechts um; TRUE{}     ELSE rechts um; FALSE{} +  FI{}END PROC links frei;{}BOOL PROC hinten frei:{}  kehrt;{}  IF vorn frei{}     THEN kehrt; TRUE{}     ELSE kehrt; FALSE{}  FI{}END PROC hinten frei;{}BOOL PROC korn vorn:{}  IF vorn frei{}     THEN untersuche feld vor dir{}     ELSE FALSE{}  FI.{}  untersuche feld vor dir:{}    vor;{}    IF korn da{}       THEN mache vorwaertsgehen rueckgaengig; TRUE{}       ELSE mache vorwaertsgehen rueckgaengig; FALSE{}    FI.{}  mache vorwaertsgehen rueckgaengig:{}    kehrt; vor; kehrt{}END PROC korn vorn;{} +BOOL PROC korn links:{}  links um;{}  IF vorn frei{}     THEN untersuche feld links{}     ELSE rechts um; FALSE{}  FI.{}  untersuche feld links:{}    vor;{}    IF korn da{}       THEN mache linkswende rueckgaengig; TRUE{}       ELSE mache linkswende rueckgaengig; FALSE{}    FI.{}  mache linkswende rueckgaengig:{}    kehrt; vor; links um{}END PROC korn links;{}BOOL PROC korn rechts:{}  rechts um;{}  IF vorn frei{}     THEN untersuche feld rechts{}     ELSE links um; FALSE{}  FI.{}  untersuche feld rechts:{} +    vor;{}    IF korn da{}       THEN mache rechtswende rueckgaengig; TRUE{}       ELSE mache rechtswende rueckgaengig; FALSE{}    FI.{}  mache rechtswende rueckgaengig:{}    kehrt; vor; rechts um{}END PROC korn rechts;{}BOOL PROC korn hinten:{}  kehrt;{}  IF vorn frei{}     THEN untersuche feld hinter dir{}     ELSE kehrt; FALSE{}  FI.{}  untersuche feld hinter dir:{}    vor;{}    IF korn da{}       THEN mache kehrtwende rueckgaengig; TRUE{}       ELSE mache kehrtwende rueckgaengig; FALSE{}    FI.{} +  mache kehrtwende rueckgaengig:{}    kehrt; vor{}END PROC korn hinten;{}PROC kehrt:{}  links um; links um{}END PROC kehrt;{}PROC rechts um:{}  links um; links um; links um{}END PROC rechts um;{}BOOL PROC werkstueck vorn:{}  korn vorn{}END PROC werkstueck vorn;{}BOOL PROC werkstueck links:{}  korn links{}END PROC werkstueck links;{}BOOL PROC werkstueck rechts:{}  korn rechts{}END PROC werkstueck rechts;{}BOOL PROC werkstueck hinten:{}  korn hinten{}END PROC werkstueck hinten;{}END PACKET ls herbert und robbi 2;{} +befehlssatz erweitern (TRUE){} + diff --git a/app/gs.hamster/1.1/src/ls-Herbert und Robbi 3 b/app/gs.hamster/1.1/src/ls-Herbert und Robbi 3 new file mode 100644 index 0000000..e5db408 --- /dev/null +++ b/app/gs.hamster/1.1/src/ls-Herbert und Robbi 3 @@ -0,0 +1,84 @@ +(*  +         +          *********************************************************  +          *********************************************************  +          **                                                     **  +          **               ls-Herbert und Robbi 3                **  +          **                                                     **  +          **                     Version 1.1                     **  +          **                                                     **  +          **                  (Stand: 30.03.88)                  **  +          **                                                     **  +          **                                                     **  +          **         Autor: Wolfgang Weber, Bielefeld            **  +          **                                                     **  +          **                                                     **  +          ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **  +          **                                                     **  +          ** Copyright (C) 1988 ERGOS GmbH, Siegburg             **  +          **                                                     **  +          *********************************************************  +          *********************************************************  +  +                                                                           *)  +  +PACKET ls herbert und robbi 3  DEFINES{}  hamsterbefehlsauskunft,{}  hamsterlaufauskunft,{}  hamsterlandschaftsauskunft,{}  hamsterlandschaft verzeichnis,{}  hamsterlandschaft neu erstellen,{}  hamsterlandschaft ansehen,{}  hamsterlandschaft drucken,{}  hamsterlandschaft kopieren,{}  hamsterlandschaft umbenennen,{}  hamsterlandschaft loeschen,{}  hamsterprogramm verzeichnis,{}  hamsterprogramm neu erstellen,{}  hamsterprogramm ansehen,{}  hamsterprogramm kopieren,{}  hamsterprogramm umbenennen,{} +  hamsterprogramm loeschen,{}  hamsterprogramm drucken,{}  hamster laufen lassen,{}  hamsterinteraktiv laufen lassen,{}  hamster, roboter:{}LET  menukarte       = "ls-MENUKARTE:Herbert und Robbi",{}     praefix         = "Flaeche:",{}     flaechentype    =       1007,{}     niltext         =         "",{}     maxlaenge       =         60,{}     maxnamenslaenge =         50;{}TEXT VAR flaechenname :: "",{}         programmname :: "";{}INITFLAG VAR in this task :: FALSE;{}PROC initialize hamster:{} +  IF NOT initialized (in this task){}     THEN flaechenname := "";{}          programmname := ""{}  FI{}END PROC initialize hamster;{}PROC hamster:{}  sei ein hamster;{}  initialize hamster;{}  install menu (menukarte);{}  handle  menu ("HAMSTER"){}END PROC hamster;{}PROC roboter:{}  sei ein roboter;{}  initialize  hamster;{}  install menu (menukarte);{}  handle  menu ("ROBOTER");{}END PROC roboter;{}PROC hamsterlaufauskunft:{}  menuinfo (laufauskunftstext){}END PROC hamsterlaufauskunft;{}PROC hamsterlandschaftsauskunft:{} +  menuinfo (landschaftsauskunftstext){}END PROC hamsterlandschaftsauskunft;{}PROC hamsterbefehlsauskunft:{}  menuinfo (befehlsauskunftstext);{}  menuinfo (testauskunftstext 1);{}  IF testauskunftstext 2 <> ""{}     THEN menuinfo (testauskunftstext 2){}  FI{}END PROC hamsterbefehlsauskunft;{}PROC hamsterlandschaft verzeichnis:{}  THESAURUS VAR landschaften ::{}  ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix);{}  forget ("Interne Thesaurusdateiliste", quiet);{}  FILE VAR f :: sequential file (output, "Interne Thesaurusdateiliste");{} +  f FILLBY landschaften;{}  headline (f, anwendungstext (204)); modify (f);{}  to line (f, 1); insert record (f); write record (f, kenntext);{}  to line (f, 2); insert record (f);{}  to line (f, 1); menuwindowshow (f);{}  forget ("Interne Thesaurusdateiliste", quiet);{}  regenerate menuscreen.{}  kenntext:{}    IF ist hamster THEN anwendungstext (121) ELSE anwendungstext (151) FI.{}END PROC hamsterlandschaft verzeichnis;{}PROC hamsterprogramm verzeichnis:{}  THESAURUS VAR programme :: ALL myself - infix namen (ALL myself, praefix, flaechentype);{} +  forget ("Interne Thesaurusdateiliste", quiet);{}  FILE VAR f :: sequential file (output, "Interne Thesaurusdateiliste");{}  f FILLBY programme;{}  headline (f, anwendungstext (204)); modify (f);{}  to line (f, 1); insert record (f); write record (f, anwendungstext (181));{}  to line (f, 2); insert record (f);{}  to line (f, 1); menuwindowshow (f);{}  forget ("Interne Thesaurusdateiliste", quiet);{}  regenerate menuscreen{}END PROC hamsterprogramm verzeichnis;{}PROC hamsterlandschaft neu erstellen:{} +  hole flaechenname;{}  kontrolliere den flaechennamen;{}  kommandomodus;{}  landschaft (flaechenname);{}  regenerate menuscreen.{}  hole flaechenname:{}    IF ist hamster{}       THEN flaechenname := menuanswer (anwendungstext (101) +{}                                        anwendungstext (102), "", 5){}       ELSE flaechenname := menuanswer (anwendungstext (131) +{}                                        anwendungstext (132), "", 5){}    FI.{}  kontrolliere den flaechennamen:{}    IF   flaechenname = niltext{} +         THEN LEAVE hamsterlandschaft neu erstellen{}    ELIF length (flaechenname) > maxnamenslaenge{}         THEN meckere zu langen namen an;{}              flaechenname := niltext;{}              LEAVE hamsterlandschaft neu erstellen{}    ELIF exists (praefix + flaechenname){}         THEN meckere existierende flaeche an;{}              LEAVE hamsterlandschaft neu erstellen{}    FI{}END PROC hamsterlandschaft neu erstellen;{}PROC hamsterprogramm neu erstellen:{}  hole programmname;{}  kontrolliere den programmnamen;{} +  command dialogue (FALSE);{}  cursor on;{}  stdinfoedit (programmname);{}  cursor off;{}  command dialogue (TRUE);{}  regenerate menuscreen.{}  hole programmname:{}    programmname := menuanswer (anwendungstext (161) +{}                                anwendungstext (162), "", 5).{}  kontrolliere den programmnamen:{}    IF   programmname = niltext{}         THEN LEAVE hamsterprogramm neu erstellen{}    ELIF length (programmname) > maxnamenslaenge{}         THEN meckere zu langen namen an;{}              programmname := niltext;{} +              LEAVE hamsterprogramm neu erstellen{}    ELIF exists (programmname){}         THEN meckere existierendes programm an;{}              LEAVE hamsterprogramm neu erstellen{}    FI{}END PROC hamsterprogramm neu erstellen;{}PROC hamsterlandschaft ansehen:{}  IF flaechenname <> niltext CAND exists (praefix + flaechenname){}     THEN frage nach dieser flaeche{}     ELSE lasse flaeche auswaehlen{}  FI;{}  kommandomodus;{}  landschaft (flaechenname);{}  regenerate menuscreen.{}  frage nach dieser flaeche:{} +    IF menuno (ueberschrift + text 1 + name + text 2, 5){}       THEN lasse flaeche auswaehlen{}    FI.{}  ueberschrift:{}    IF ist hamster{}       THEN center (maxlaenge, invers (anwendungstext (105))) + ""13""13""{}       ELSE center (maxlaenge, invers (anwendungstext (135))) + ""13""13""{}   FI.{}  text 1:{}    IF ist hamster THEN anwendungstext (103) ELSE anwendungstext (133) FI.{}  name:{}    ""13""13" " + invers (flaechenname) + ""13""13"".{}  text 2:{}    IF ist hamster THEN anwendungstext (104) ELSE anwendungstext (134) FI.{} +  lasse flaeche auswaehlen:{}    THESAURUS VAR verfuegbare;{}    verfuegbare := ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix);{}    IF NOT not empty (verfuegbare){}       THEN noch keine flaeche;{}            LEAVE hamsterlandschaft ansehen{}       ELSE biete auswahl an{}    FI.{}  biete auswahl an:{}    IF ist hamster{}       THEN flaechenname := menuone (verfuegbare, anwendungstext (105),{}                                     anwendungstext (106), FALSE){}       ELSE flaechenname := menuone (verfuegbare, anwendungstext (135),{} +                                     anwendungstext (136), FALSE){}    FI;{}    IF flaechenname = niltext{}       THEN regenerate menuscreen;{}            LEAVE hamsterlandschaft ansehen{}    FI.{}END PROC hamsterlandschaft ansehen;{}PROC hamsterprogramm ansehen:{}  IF programmname <> niltext CAND exists (programmname){}     THEN frage nach diesem programm{}     ELSE lasse programm auswaehlen{}  FI;{}  cursor on;{}  stdinfoedit (programmname);{}  cursor off;{}  regenerate menuscreen.{}  frage nach diesem programm:{} +    IF menuno (ueberschrift + anwendungstext (163) + name{}                            + anwendungstext (164), 5){}       THEN lasse programm auswaehlen{}    FI.{}  ueberschrift:{}    center (maxlaenge, invers (anwendungstext (165))) + ""13""13"".{}  name:{}    ""13""13" " + invers (programmname) + ""13""13"".{}  lasse programm auswaehlen:{}    THESAURUS VAR verfuegbare;{}    verfuegbare  := ALL myself - infix namen (ALL myself, praefix, flaechentype);{}    IF NOT not empty (verfuegbare){}       THEN noch kein programm;{} +            LEAVE hamsterprogramm ansehen{}       ELSE biete auswahl an{}    FI.{}  biete auswahl an:{}    programmname := menuone (verfuegbare, anwendungstext (165),{}                             anwendungstext (166), FALSE);{}    IF programmname = niltext{}       THEN regenerate menuscreen;{}            LEAVE hamsterprogramm ansehen{}    FI.{}END PROC hamsterprogramm ansehen;{}PROC hamsterlandschaft drucken:{}  lasse flaechen auswaehlen;{}  drucke flaechen;{}  regenerate menuscreen.{}  lasse flaechen auswaehlen:{} +    THESAURUS VAR verfuegbare;{}    verfuegbare := ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix);{}    IF NOT not empty (verfuegbare){}       THEN noch keine flaeche;{}            LEAVE hamsterlandschaft drucken{}       ELSE biete auswahl an{}    FI.{}  biete auswahl an:{}    IF ist hamster{}       THEN verfuegbare := menusome (verfuegbare, anwendungstext (107),{}                                     anwendungstext (108), FALSE){}       ELSE verfuegbare := menusome (verfuegbare, anwendungstext (137),{} +                                     anwendungstext (138), FALSE){}    FI.{}  drucke flaechen:{}    show menuwindow;{}    steige ggf bei leerem thesaurus aus;{}    menuwindowout (menuwindowcenter (invers (bezeichnung)));{}    menuwindowline (2);{}    command dialogue (FALSE);{}    fuehre einzelne operationen aus;{}    command dialogue (TRUE);{}    schlage ggf neue seite auf;{}    menuwindowout (schlussbemerkung);{}    menuwindowstop.{}  bezeichnung:{}    IF ist hamster THEN anwendungstext (107) ELSE anwendungstext (137) FI.{} +  schlussbemerkung:{}    IF ist hamster THEN anwendungstext (110) ELSE anwendungstext (140) FI.{}  fuehre einzelne operationen aus:{}    INT VAR k;{}    FOR k FROM 1 UPTO highest entry (verfuegbare) REP{}      IF name (verfuegbare, k) <> ""{}         THEN disable stop;{}              menuwindowout ( " """ + name (verfuegbare, k) + """ "{}                                    + anwendungstext (201));{}              menuwindowline;{}              drucke landschaft (name (verfuegbare, k));{}              fehlerbehandlung{} +      FI{}    PER.{}  steige ggf bei leerem thesaurus aus:{}    IF NOT not empty (verfuegbare){}       THEN menuwindowline (2);{}            IF ist hamster{}               THEN menuwindowout (anwendungstext (109)){}               ELSE menuwindowout (anwendungstext (139)){}            FI;{}            menuwindowstop;{}            regenerate menuscreen;{}            LEAVE hamsterlandschaft drucken{}    FI.{}  schlage ggf neue seite auf:{}    IF remaining menuwindowlines < 7{}       THEN menuwindowpage; menuwindowline{} +       ELSE menuwindowline (2){}    FI.{}  fehlerbehandlung:{}    IF is error{}       THEN regenerate menuscreen;{}            menuinfo  (invers (errormessage));{}            clear error; enable stop;{}            LEAVE hamsterlandschaft drucken{}    FI.{}END PROC hamsterlandschaft drucken;{}PROC hamsterprogramm drucken:{}  lasse programme auswaehlen;{}  drucke programme;{}  regenerate menuscreen.{}  lasse programme auswaehlen:{}    THESAURUS VAR verfuegbare;{}    verfuegbare := ALL myself - infix namen (ALL myself, praefix, flaechentype);{} +    IF NOT not empty (verfuegbare){}       THEN noch kein programm;{}            LEAVE hamsterprogramm drucken{}       ELSE biete auswahl an{}    FI.{}  biete auswahl an:{}    verfuegbare := menusome (verfuegbare, anwendungstext (167),{}                             anwendungstext (168), FALSE).{}  drucke programme:{}    show menuwindow;{}    steige ggf bei leerem thesaurus aus;{}    menuwindowout (menuwindowcenter (invers (anwendungstext (167))));{}    menuwindowline (2);{}    command dialogue (FALSE);{} +    fuehre einzelne operationen aus;{}    command dialogue (TRUE);{}    schlage ggf neue seite auf;{}    menuwindowout (anwendungstext (170));{}    menuwindowstop.{}  fuehre einzelne operationen aus:{}    INT VAR k;{}    FOR k FROM 1 UPTO highest entry (verfuegbare) REP{}      IF name (verfuegbare, k) <> ""{}         THEN disable stop;{}              menuwindowout ( " """ + name (verfuegbare, k) + """ "{}                                    + anwendungstext (201));{}              menuwindowline;{} +              print (name (verfuegbare, k));{}              fehlerbehandlung{}      FI{}    PER.{}  steige ggf bei leerem thesaurus aus:{}    IF NOT not empty (verfuegbare){}       THEN menuwindowline (2);{}            menuwindowout (anwendungstext (169));{}            menuwindowstop;{}            regenerate menuscreen;{}            LEAVE hamsterprogramm drucken{}    FI.{}  schlage ggf neue seite auf:{}    IF remaining menuwindowlines < 7{}       THEN menuwindowpage; menuwindowline{}       ELSE menuwindowline (2){} +    FI.{}  fehlerbehandlung:{}    IF is error{}       THEN regenerate menuscreen;{}            menuinfo  (invers (errormessage));{}            clear error; enable stop;{}            LEAVE hamsterprogramm drucken{}    FI.{}END PROC hamsterprogramm drucken;{}PROC hamsterlandschaft kopieren:{}  ermittle alten flaechennamen;{}  erfrage neuen flaechennamen;{}  kopiere ggf die flaeche.{}  ermittle alten flaechennamen:{}    IF NOT not empty (bestand){}       THEN noch keine flaeche;{}            LEAVE hamsterlandschaft kopieren{} +       ELSE biete auswahl an{}    FI.{}  biete auswahl an:{}    TEXT VAR alter name := menuone ( bestand, text1, text2, TRUE);{}    IF alter name = niltext{}       THEN LEAVE hamsterlandschaft kopieren{}    FI.{}  bestand:{}    ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix).{}  text1:{}    IF ist hamster THEN anwendungstext (111) ELSE anwendungstext (141) FI.{}  text2:{}    IF ist hamster THEN anwendungstext (112) ELSE anwendungstext (142) FI.{}  erfrage neuen flaechennamen:{} +    TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5).{}  ausgabe:{}     ueberschrift + hinweis auf alt + bisheriger name + aufforderung.{}  ueberschrift:{}    IF ist hamster{}       THEN center (maxlaenge, invers (anwendungstext (111))) + ""13""13""{}       ELSE center (maxlaenge, invers (anwendungstext (141))) + ""13""13""{}    FI.{}  hinweis auf alt:{}    IF ist hamster THEN anwendungstext (113) ELSE anwendungstext (143) FI.{}  bisheriger name:{}    ""13""13" " + invers (alter name) + ""13""13"".{} +  aufforderung:{}    anwendungstext (202).{}  kopiere ggf die flaeche:{}    IF   neuer name = niltext{}         THEN menuinfo (invers (anwendungstext (192)));{}              LEAVE hamsterlandschaft kopieren{}    ELIF exists (praefix + neuer name){}         THEN mache vorwurf;{}              LEAVE hamsterlandschaft kopieren{}       ELSE copy (praefix + alter name, praefix + neuer name){}    FI.{}  mache vorwurf:{}    IF ist hamster{}       THEN menuinfo (anwendungstext (193)){}       ELSE menuinfo (anwendungstext (194)){} +    FI.{}END PROC hamsterlandschaft kopieren;{}PROC hamsterprogramm kopieren:{}  ermittle alten programmnamen;{}  erfrage neuen programmnamen;{}  kopiere ggf das programm.{}  ermittle alten programmnamen:{}    IF NOT not empty (bestand){}       THEN noch kein programm;{}            LEAVE hamsterprogramm kopieren{}       ELSE biete auswahl an{}    FI.{}  biete auswahl an:{}    TEXT VAR alter name := menuone ( bestand, anwendungstext (171),{}                                     anwendungstext (172), TRUE);{} +    IF alter name = niltext{}       THEN LEAVE hamsterprogramm kopieren{}    FI.{}  bestand:{}    ALL myself - infix namen (ALL myself, praefix, flaechentype).{}  erfrage neuen programmnamen:{}    TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5).{}  ausgabe:{}     ueberschrift + anwendungstext (173) + bisheriger name{}                  + anwendungstext (202).{}  ueberschrift:{}    center (maxlaenge, invers (anwendungstext (171))) + ""13""13"".{}  bisheriger name:{}    ""13""13" " + invers (alter name) + ""13""13"".{} +  kopiere ggf das programm:{}    IF   neuer name = niltext{}         THEN menuinfo (invers (anwendungstext (192)));{}              LEAVE hamsterprogramm kopieren{}    ELIF exists (neuer name){}         THEN mache vorwurf;{}              LEAVE hamsterprogramm kopieren{}       ELSE copy (alter name, neuer name){}    FI.{}  mache vorwurf:{}    menuinfo (anwendungstext (195)).{}END PROC hamsterprogramm kopieren;{}PROC hamsterlandschaft umbenennen:{}  ermittle alten flaechennamen;{}  erfrage neuen flaechennamen;{} +  benenne ggf die flaeche um.{}  ermittle alten flaechennamen:{}    IF NOT not empty (bestand){}       THEN noch keine flaeche;{}            LEAVE hamsterlandschaft umbenennen{}       ELSE biete auswahl an{}    FI.{}  biete auswahl an:{}    TEXT VAR alter name := menuone ( bestand, text1, text2, TRUE);{}    IF alter name = niltext{}       THEN LEAVE hamsterlandschaft umbenennen{}    FI.{}  bestand:{}    ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix).{}  text1:{}    IF ist hamster THEN anwendungstext (114) ELSE anwendungstext (144) FI.{} +  text2:{}    IF ist hamster THEN anwendungstext (115) ELSE anwendungstext (145) FI.{}  erfrage neuen flaechennamen:{}    TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5).{}  ausgabe:{}     ueberschrift + hinweis auf alt + bisheriger name + aufforderung.{}  ueberschrift:{}    IF ist hamster{}       THEN center (maxlaenge, invers (anwendungstext (114))) + ""13""13""{}       ELSE center (maxlaenge, invers (anwendungstext (144))) + ""13""13""{}    FI.{}  hinweis auf alt:{}    IF ist hamster THEN anwendungstext (116) ELSE anwendungstext (146) FI.{} +  bisheriger name:{}    ""13""13" " + invers (alter name) + ""13""13"".{}  aufforderung:{}    IF ist hamster THEN anwendungstext (117) ELSE anwendungstext (147) FI.{}  benenne ggf die flaeche um:{}    IF   neuer name = niltext{}         THEN menuinfo (invers (anwendungstext (192)));{}              LEAVE hamsterlandschaft umbenennen{}    ELIF exists (praefix + neuer name){}         THEN mache vorwurf;{}              LEAVE hamsterlandschaft umbenennen{}    ELSE rename (praefix + alter name, praefix + neuer name);{} +         flaechenname := neuer name{}    FI.{}  mache vorwurf:{}    IF ist hamster{}       THEN menuinfo (anwendungstext (193)){}       ELSE menuinfo (anwendungstext (194)){}    FI.{}END PROC hamsterlandschaft umbenennen;{}PROC hamsterprogramm umbenennen:{}  ermittle alten programmnamen;{}  erfrage neuen programmnamen;{}  benenne ggf das programm um.{}  ermittle alten programmnamen:{}    IF NOT not empty (bestand){}       THEN noch kein programm;{}            LEAVE hamsterprogramm umbenennen{}       ELSE biete auswahl an{} +    FI.{}  biete auswahl an:{}    TEXT VAR alter name := menuone ( bestand, anwendungstext (174),{}                                     anwendungstext (175), TRUE);{}    IF alter name = niltext{}       THEN LEAVE hamsterprogramm umbenennen{}    FI.{}  bestand:{}    ALL myself - infix namen (ALL myself, praefix, flaechentype).{}  erfrage neuen programmnamen:{}    TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5).{}  ausgabe:{}     ueberschrift + anwendungstext (176) + bisheriger name{}                  + anwendungstext (177).{} +  ueberschrift:{}    center (maxlaenge, invers (anwendungstext (174))) + ""13""13"".{}  bisheriger name:{}    ""13""13" " + invers (alter name) + ""13""13"".{}  benenne ggf das programm um:{}    IF   neuer name = niltext{}         THEN menuinfo (invers (anwendungstext (192)));{}              LEAVE hamsterprogramm umbenennen{}    ELIF exists (neuer name){}         THEN mache vorwurf;{}              LEAVE hamsterprogramm umbenennen{}       ELSE rename (alter name, neuer name);{}            programmname := neuer name{} +    FI.{}  mache vorwurf:{}    menuinfo (anwendungstext (195)).{}END PROC hamsterprogramm umbenennen;{}PROC hamsterlandschaft loeschen:{}  lasse flaechen auswaehlen;{}  loesche flaechen;{}  regenerate menuscreen.{}  lasse flaechen auswaehlen:{}    THESAURUS VAR verfuegbare;{}    verfuegbare := ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix);{}    IF NOT not empty (verfuegbare){}       THEN noch keine flaeche;{}            LEAVE hamsterlandschaft loeschen{}       ELSE biete auswahl an{} +    FI.{}  biete auswahl an:{}    IF ist hamster{}       THEN verfuegbare := menusome (verfuegbare, anwendungstext (118),{}                                     anwendungstext (119), FALSE){}       ELSE verfuegbare := menusome (verfuegbare, anwendungstext (148),{}                                     anwendungstext (149), FALSE){}    FI.{}  loesche flaechen:{}    show menuwindow;{}    steige ggf bei leerem thesaurus aus;{}    menuwindowout (menuwindowcenter (invers (bezeichnung)));{}    menuwindowline (2);{} +    command dialogue (FALSE);{}    fuehre einzelne operationen aus;{}    command dialogue (TRUE);{}    schlage ggf neue seite auf;{}    menuwindowout (schlussbemerkung);{}    menuwindowstop.{}  bezeichnung:{}    IF ist hamster THEN anwendungstext (118) ELSE anwendungstext (148) FI.{}  schlussbemerkung:{}    IF ist hamster THEN anwendungstext (120) ELSE anwendungstext (150) FI.{}  fuehre einzelne operationen aus:{}    INT VAR k;{}    FOR k FROM 1 UPTO highest entry (verfuegbare) REP{}      IF name (verfuegbare, k) <> ""{} +         THEN disable stop;{}              IF menuwindowyes (" """ + name (verfuegbare, k) + """ "{}                                      + anwendungstext (203)){}                 THEN forget (praefix + name (verfuegbare, k), quiet){}              FI;{}              fehlerbehandlung{}      FI{}    PER;{}    flaechenname := "".{}  steige ggf bei leerem thesaurus aus:{}    IF NOT not empty (verfuegbare){}       THEN menuwindowline (2);{}            IF ist hamster{}               THEN menuwindowout (anwendungstext (109)){} +               ELSE menuwindowout (anwendungstext (139)){}            FI;{}            menuwindowstop;{}            regenerate menuscreen;{}            LEAVE hamsterlandschaft loeschen{}    FI.{}  schlage ggf neue seite auf:{}    IF remaining menuwindowlines < 7{}       THEN menuwindowpage; menuwindowline{}       ELSE menuwindowline (2){}    FI.{}  fehlerbehandlung:{}    IF is error{}       THEN regenerate menuscreen;{}            menuinfo  (invers (errormessage));{}            clear error; enable stop;{} +            LEAVE hamsterlandschaft loeschen{}    FI.{}END PROC hamsterlandschaft loeschen;{}PROC hamsterprogramm loeschen:{}  lasse programme auswaehlen;{}  loesche programme;{}  regenerate menuscreen.{}  lasse programme auswaehlen:{}    THESAURUS VAR verfuegbare;{}    verfuegbare := ALL myself - infix namen (ALL myself, praefix, flaechentype);{}    IF NOT not empty (verfuegbare){}       THEN noch kein programm;{}            LEAVE hamsterprogramm loeschen{}       ELSE biete auswahl an{}    FI.{} +  biete auswahl an:{}    verfuegbare := menusome (verfuegbare, anwendungstext (178),{}                             anwendungstext (179), FALSE).{}  loesche programme:{}    show menuwindow;{}    steige ggf bei leerem thesaurus aus;{}    menuwindowout (menuwindowcenter (invers (anwendungstext (178))));{}    menuwindowline (2);{}    command dialogue (FALSE);{}    fuehre einzelne operationen aus;{}    command dialogue (TRUE);{}    schlage ggf neue seite auf;{}    menuwindowout (anwendungstext (180));{} +    menuwindowstop.{}  fuehre einzelne operationen aus:{}    INT VAR k;{}    FOR k FROM 1 UPTO highest entry (verfuegbare) REP{}      IF name (verfuegbare, k) <> ""{}         THEN disable stop;{}              IF menuwindowyes (" """ + name (verfuegbare, k) + """ "{}                                      + anwendungstext (203)){}                 THEN forget (name (verfuegbare, k), quiet){}              FI;{}              fehlerbehandlung{}      FI{}    PER;{}    programmname := "".{}  steige ggf bei leerem thesaurus aus:{} +    IF NOT not empty (verfuegbare){}       THEN menuwindowline (2);{}            menuwindowout (anwendungstext (169));{}            menuwindowstop;{}            regenerate menuscreen;{}            LEAVE hamsterprogramm loeschen{}    FI.{}  schlage ggf neue seite auf:{}    IF remaining menuwindowlines < 7{}       THEN menuwindowpage; menuwindowline{}       ELSE menuwindowline (2){}    FI.{}  fehlerbehandlung:{}    IF is error{}       THEN regenerate menuscreen;{}            menuinfo  (invers (errormessage));{} +            clear error; enable stop;{}            LEAVE hamsterprogramm loeschen{}    FI.{}END PROC hamsterprogramm loeschen;{}PROC hamsterinteraktiv laufen lassen:{}  frage nach neuer flaeche;{}  cursor on;{}  IF ist hamster{}     THEN hamsterinter (flaechenname){}     ELSE roboterinter (flaechenname){}  FI;{}  programmname := "PROTOKOLL";{}  cursor off;{}  regenerate menuscreen.{}  frage nach neuer flaeche:{}    IF menuyes (ueberschrift + fragetext, 5){}       THEN lasse flaeche auswaehlen{}       ELSE weise auf landschaftsgestaltung hin;{} +            LEAVE hamsterinteraktiv laufen lassen{}    FI.{}  ueberschrift:{}    IF ist hamster{}       THEN center (laenge, invers (anwendungstext (122))) + ""13""13""{}       ELSE center (laenge, invers (anwendungstext (152))) + ""13""13""{}    FI.{}  fragetext:{}    IF ist hamster{}       THEN center (laenge, anwendungstext (123)){}       ELSE center (laenge, anwendungstext (153)){}    FI.{}  laenge:{}    IF ist hamster{}       THEN max (length (anwendungstext (122)),{}                 length (anwendungstext (123))) + 5{} +       ELSE max (length (anwendungstext (152)),{}                 length (anwendungstext (153))) + 5{}    FI.{}  lasse flaeche auswaehlen:{}    THESAURUS VAR verfuegbare;{}    verfuegbare := ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix);{}    IF ist hamster{}       THEN flaechenname := menuone (verfuegbare, anwendungstext (122),{}                                     anwendungstext (106), FALSE){}       ELSE flaechenname := menuone (verfuegbare, anwendungstext (152),{}                                     anwendungstext (136), FALSE){} +    FI;{}    IF flaechenname = niltext{}       THEN weise auf landschaftsgestaltung hin;{}            regenerate menuscreen;{}            LEAVE hamsterinteraktiv laufen lassen{}    FI.{}  weise auf landschaftsgestaltung hin:{}    WINDOW VAR mfenster := current menuwindow;{}    IF ist hamster{}       THEN boxinfo (mfenster, anwendungstext (124), 5, maxint){}       ELSE boxinfo (mfenster, anwendungstext (154), 5, maxint){}    FI.{}END PROC hamsterinteraktiv laufen lassen;{}PROC hamster laufen lassen:{} +  programmname ermitteln;{}  BOOL VAR namen eingesetzt :: FALSE;{}  untersuche programmdatei auf flaechennamen;{}  page;{}  geschwindigkeit (5);{}  cursor on;{}  lauf (programmname);{}  cursor off;{}  IF namen eingesetzt{}     THEN entferne flaechennamen aus programmdatei{}  FI;{}  regenerate menuscreen.{}  programmname ermitteln:{}    IF programmname <> niltext CAND exists (programmname){}       THEN frage nach diesem programm{}       ELSE lasse programm auswaehlen{}    FI.{}  frage nach diesem programm:{} +    IF menuno (ueberschrift + anwendungstext (163) + name + anwendungstext (164), 5){}       THEN lasse programm auswaehlen{}    FI.{}  ueberschrift:{}    IF ist hamster{}       THEN center (maxlaenge, invers (anwendungstext (125))) + ""13""13""{}       ELSE center (maxlaenge, invers (anwendungstext (155))) + ""13""13""{}    FI.{}  name:{}    ""13""13" " + invers (programmname) + ""13""13"".{}  lasse programm auswaehlen:{}    THESAURUS VAR verfuegbare;{}    verfuegbare  := ALL myself - infix namen (ALL myself, praefix, flaechentype);{} +    IF ist hamster{}       THEN programmname := menuone (verfuegbare, anwendungstext (125),{}                                     anwendungstext (166), TRUE){}       ELSE programmname := menuone (verfuegbare, anwendungstext (155),{}                                     anwendungstext (166), TRUE){}    FI;{}    IF programmname = niltext{}       THEN LEAVE hamster laufen lassen{}    FI.{}  untersuche programmdatei auf flaechennamen:{}    FILE VAR a :: sequential file (modify, programmname);{}    TEXT VAR zeile;{} +    to line (a, 1);{}    REP{}      read record (a, zeile);{}      zeile := compress (zeile);{}      IF NOT eof (a) THEN down (a) FI{}    UNTIL zeile <> "" OR eof (a) PER;{}    IF pos (zeile, "landschaft") = 0 AND pos (zeile, "arbeitsfeld") = 0{}       THEN ermittle flaechennamen;{}            setze flaechennamen in datei ein{}    FI.{}  ermittle flaechennamen:{}    IF flaechenname <> ""{}       THEN frage nach altem flaechennamen{}       ELSE lasse flaeche auswaehlen{}    FI.{}  frage nach altem flaechennamen:{} +    IF ist hamster{}       THEN frage nach alter landschaft{}       ELSE frage nach altem arbeitsfeld{}    FI.{}  frage nach alter landschaft:{}    IF menuno (ueberschrift + anwendungstext (103){}                    + fname + anwendungstext (104), 5){}       THEN lasse flaeche auswaehlen{}    FI.{}  frage nach altem arbeitsfeld:{}    IF menuno (ueberschrift + anwendungstext (133){}                    + fname + anwendungstext (134), 5){}       THEN lasse flaeche auswaehlen{}    FI.{}  fname:{}    ""13""13" " + invers (flaechenname) + ""13""13"".{} +  lasse flaeche auswaehlen:{}    verfuegbare := ohne praefix (infix namen (ALL myself, praefix, flaechentype), praefix);{}    IF ist hamster{}       THEN flaechenname := menuone (verfuegbare, anwendungstext (125),{}                                     anwendungstext (106), FALSE){}       ELSE flaechenname := menuone (verfuegbare, anwendungstext (155),{}                                     anwendungstext (136), FALSE){}    FI;{}    IF flaechenname = niltext{}       THEN regenerate menuscreen;{}            landschaftsfehler anzeigen;{} +            LEAVE hamster laufen lassen{}    FI.{}  landschaftsfehler anzeigen:{}    IF ist hamster{}       THEN menuinfo (anwendungstext (124)){}       ELSE menuinfo (anwendungstext (154)){}    FI.{}  setze flaechennamen in datei ein:{}    to line (a, 1);{}    zeile := "landschaft (""" + flaechenname + """);";{}    insert record (a);{}    write record (a, zeile);{}    namen eingesetzt := TRUE.{}  entferne flaechennamen aus programmdatei:{}    FILE VAR b :: sequential file (modify, programmname);{} +    to line (b, 1);{}    REP{}      read record (b, zeile);{}      IF pos (zeile, "landschaft") = 0 AND pos (zeile, "arbeitsfeld") = 0{}         THEN IF NOT eof (b) THEN down (b) FI{}      FI{}    UNTIL zeile <> "" OR eof (b) PER;{}    IF pos (zeile, "landschaft") > 0 OR pos (zeile, "arbeitsfeld") > 0{}       THEN delete record (b){}    FI{}END PROC hamster laufen lassen;{}PROC meckere zu langen namen an:{}  menuinfo (anwendungstext (191)){}END PROC meckere zu langen namen an;{}PROC meckere existierende flaeche an:{} +  IF ist hamster{}     THEN menuinfo (anwendungstext (193)){}     ELSE menuinfo (anwendungstext (194)){}  FI{}END PROC meckere existierende flaeche an;{}PROC meckere existierendes programm an:{}  menuinfo (anwendungstext (195)){}END PROC meckere existierendes programm an;{}PROC noch keine flaeche:{}  IF ist hamster{}     THEN menuinfo (anwendungstext (196)){}     ELSE menuinfo (anwendungstext (197)){}  FI{}END PROC noch keine flaeche;{}PROC noch kein programm:{}  menuinfo (anwendungstext (198)){} +END PROC noch kein programm;{}END PACKET ls herbert und robbi 3;{} + diff --git a/app/gs.hamster/1.1/src/ls-Herbert und Robbi-gen b/app/gs.hamster/1.1/src/ls-Herbert und Robbi-gen new file mode 100644 index 0000000..ae21ddb --- /dev/null +++ b/app/gs.hamster/1.1/src/ls-Herbert und Robbi-gen @@ -0,0 +1,33 @@ +(*  +         +          *********************************************************  +          *********************************************************  +          **                                                     **  +          **                 ls-Herbert und Robbi                **  +          **                  GENERATORPROGRAMM                  **  +          **                     Version 1.1                     **  +          **                                                     **  +          **                  (Stand: 30.03.88)                  **  +          **                                                     **  +          **                                                     **  +          **         Autor: Wolfgang Weber, Bielefeld            **  +          **                                                     **  +          **                                                     **  +          ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **  +          **                                                     **  +          ** Copyright (C) 1988 ERGOS GmbH, Siegburg             **  +          **                                                     **  +          *********************************************************  +          *********************************************************  +  +                                                                          *)  +  +LET mm taskname = "ls-MENUKARTEN",{}    datei1      = "ls-Herbert und Robbi 1",{}    datei2      = "ls-Herbert und Robbi 2",{}    datei3      = "ls-Herbert und Robbi 3",{}    menukarte   = "ls-MENUKARTE:Herbert und Robbi";{}PROC stelle existenz des mm sicher:{}  cursor (1, 5); out (""4"");{}  IF NOT exists (task (mm taskname)){}     THEN errorstop ("Unbedingt erst den 'MENUKARTEN MANAGER' generieren!");{}  FI{}END PROC stelle existenz des mm sicher;{}PROC vom archiv (TEXT CONST datei):{}  cursor (1,5); out (""4"");{} +  out ("  """); out (datei); putline (""" wird geholt.");{}  fetch (datei, archive){}END PROC vom archiv;{}PROC hole (TEXT CONST datei):{}  IF NOT exists (datei) THEN vom archiv (datei) FI{}END PROC hole;{}PROC in (TEXT CONST datei):{}  hole (datei);{}  cursor (1, 5); out (""4"");{}  out ("  """); out (datei); out (""" wird übersetzt: ");{}  insert (datei);{}  forget (datei, quiet);{}END PROC in;{}PROC schicke (TEXT CONST datei):{}  cursor (1, 5); out (""4"");{}  out ("  """); out(datei);{}  out (""" wird zum MENUKARTEN-MANAGER geschickt!");{} +  command dialogue (FALSE);{}  save (datei, task (mm taskname));{}  command dialogue (TRUE);{}  forget (datei, quiet){}END PROC schicke;{}INT VAR size, used;{}BOOL VAR einzeln, mit erweiterung :: FALSE;{}storage (size, used);{}einzeln := size - used < 500;{}forget ("ls-Herbert und Robbi/gen", quiet);{}wirf kopfzeile aus;{}stelle existenz des mm sicher;{}hole die dateien;{}insertiere die dateien;{}mache global manager aus der task.{}wirf kopfzeile aus:{}  page;{}  putline ("              "15"ls-Herbert und Robbi - Automatische Generierung "14"");{} +  line (2);{}  putline ("  Bitte beantworten Sie noch die folgende Frage:");{}  line;{}  put("  Sollen neben den 'Standardtests' auch die folgenden 'Tests':");{}  line (2);{}  putline("          Für den Hamster:                   Für den Roboter:");{}  putline("           links frei                         links frei");{}  putline("           rechts frei                        rechts frei");{}  putline("           hinten frei                        hinten frei");{}  putline("           korn vorn                          werkstueck vorn");{} +  putline("           korn links                         werkstueck links");{}  putline("           korn rechts                        werkstueck rechts");{}  putline("           korn hinten                        werkstueck hinten");{}  line;{}  IF yes("  zur Verfügung gestellt werden"){}     THEN mit erweiterung := TRUE{}  FI.{}hole die dateien:{}  IF     NOT exists (datei 1){}     COR NOT exists (datei 3){}     COR NOT exists (menukarte){}     THEN hole dateien vom archiv; LEAVE hole die dateien{} +  FI;{}  IF mit erweiterung AND NOT exists (datei 2){}     THEN hole dateien vom archiv{}  FI.{}hole dateien vom archiv:{}  cursor (1,3); out (""4"");{}  IF yes ("Ist das Archiv angemeldet und die Diskette eingelegt"){}     THEN lese ein{}     ELSE line (2);{}          errorstop ("Ohne die Diskette kann ich das System nicht generieren!"){}  FI.{}lese ein:{}  cursor (1, 3); out (""4"");{}  out ("                   "15"Bitte die Diskette eingelegt lassen! "14"");{}  IF NOT einzeln{}     THEN  hole (datei 1);{} +           hole (datei 3);{}           hole (menukarte);{}           IF mit erweiterung{}              THEN hole (datei 2){}           FI;{}           cursor (1, 3); out(""4"");{}           out ("                  "15"Die Diskette wird nicht mehr benötigt! "14"");{}           release (archive){}  FI.{}insertiere die dateien:{}  check off;{}  cursor (1, 3); out(""4"");{}  out ("                  "15"Die Diskette wird nicht mehr benötigt! "14"");{}  in (datei 1);{}  IF mit erweiterung{}     THEN in (datei 2){} +  FI;{}  in (datei 3);{}  schicke (menukarte);{}  IF einzeln THEN release (archive) FI;{}  check on.{}mache global manager aus der task:{}  global manager.{} + diff --git a/app/gs.hamster/1.1/src/ls-MENUKARTE:Herbert und Robbi b/app/gs.hamster/1.1/src/ls-MENUKARTE:Herbert und Robbi Binary files differnew file mode 100644 index 0000000..2e9629c --- /dev/null +++ b/app/gs.hamster/1.1/src/ls-MENUKARTE:Herbert und Robbi  | 
