diff options
Diffstat (limited to 'app/gs.hamster')
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 |