|
|
25.04.2024 | Archiv # Recherche # Links # Kontakt # Gästebuch # Impressum |
Index Login Die Anzeige des Archivs erfolgt grafisch. Ändern |
GeoCom-Workshop #8 - DiskettenoperationenIm letzten Teil haben wir unser Programm in mehrere Module aufgeteilt. Zwei fehlten, die nun nachgeschoben werden sollen: Sinn der Entwicklung dieser Module im Rahmen des Workshops kann es natürlich nicht sein, eine ausgefeilte Laufwerksprogrammierung unter GEOS zu zeigen. Würde man hierbei auf alle möglichen Feinheiten eingehen, ließe sich mühelos eine eigene Artikelreihe daraus machen, also verzeiht mir bitte die eine oder andere Oberflächlichkeit bzw. Auslassung. Vielmehr soll es hier um die wesentlichen Grundbegriffe gehen. Dazu wollen wir mit einer Arbeit in ObjectEdit beginnen: Bevor eine Datei erstellt werden kann, müssen diverse Parameter festgelegt werden: Dateityp, GEOS-Klasse, Struktur, Autor, Icon, usw. All dies geschieht sehr einfach mit Hilfe von ObjectEdit. Dieser FileHeader sollte möglichst so (oder ähnlich) aufgebaut werden: C=-Typ: USR GEOS-Typ: Datendatei Struktur: sequentiell Startflag: nur 40-Zeichen Klasse: Statdata V1.0 Alle anderen Angaben werden nicht zwingend für diesen Datentyp benötigt, nur irgendein Icon solltet Ihr noch entwerfen. Bitte genau auf die richtige Schreibweise der Klasse achten, acht Zeichen Text, vier Leerzeichen und das letzte Zeichen der Versionsnummer an Position 16. Dies entspricht zum einem dem GEOS-Standard, zum anderen ist es notwendig, damit die folgenden Routinen korrekt arbeiten. Nachdem wir nun das Object erstellt und eingebunden haben, wollen wir es auch benutzen. Beginnen wir also bei Modul 3, dem Speichern. Einzig erklärungsbedürftig ist allenfalls der Ausdruck "FILEVAR data". Bei Programmieren im Standardmodus gibt es viele trockene Zahlen, über die der Rechner geöffnete Dateien zuordnen und bearbeiten kann, die Kanalnummer. Unter GEOS verwenden wir dafür einfach Dateivariablen. Bevor wir die Speicherroutine starten, sollte zunächst getestet werden, ob überhaupt speicherfähige Daten vorliegen: IF (schongewürfelt<> 1) THEN STRNBOX "Es sind noch keine Daten","vorhanden.","" MAINLOOP ENDIF Dann folgt der Programmteil "erstellen": @erstellen CREATEBOX filename,"/BNBeuer Dateiname:/P",0 "filename" ist der Name, in dem der eingegebene Dateiname gespeichert wird, die "0" soll hier mal nicht weiter interessieren, da dies die am meisten gebrauchte Einstellung ist und alles andere über das Ziel dieses Kurses hinausgehen würde. Was kann nun alles passieren?
Um die Texteingabe müssen wir uns nicht kümmern, dies tun die Routinen von GEOS und "CREATEBOX". Ebenso erfolgt die Laufwerksumschaltung auch automatisch, bleiben nur noch die letzten beiden Fälle und der Klick auf "Abbruch" übrig. Doch halt! Was passiert, wenn ein Benutzer das Laufwerk gewechselt hat, dann auf Abbruch klickt und unser Programm wieder ein Modul nachladen muß, aber mittlerweile ein anderes Laufwerk als das des Programms das aktuelle ist? ...Richtig! Es kommt auf jeden Fall zu Fehlfunktionen. Was tun? Im Modul 0, dem Initialisierungsteil, müssen wir die Nummer des Startlaufwerks gleich zu Beginn durch folgende Zeile sichern: Nun aber zurück zu unseren offenen Möglichkeiten: IF(dbstat==2) THEN DEVICE proglfw RETURN ENDIF 2. RETURN ohne Texteingabe IF ((dbstat==13) AND ((LEN filename)==0)) THEN DEVICE proglfw RETURN ENDIF 3. Texteingabe und RETURN Durch den folgenden Befehl Ich habe hier exemplarisch nur einen Fall eingebaut, der Rest kann anhand der Fehlertabelle aber leicht ausgebaut werden. Auch das hier gegebene Beispiel kann noch erweitert werden, man könnte u.a. eine Abfrage einbauen, ob die existierende Datei gelöscht und neu angelegt werden soll, oder ob ein neuer Name einzugeben ist. Wenn die Variable den Wert "iostat" hat, so ist die zu erzeugende Datei bereits vorhanden. Wir geben eine entsprechende Meldung aus und springen zum Anfang der Routine zurück. In den verbleibenden Fällen wird die Standard-Fehlerbox mit der entsprechenden Meldung aufgerufen und das Modul verlassen. Achtung: Vor dem Verlassen wieder auf das Programmlaufwerk zurückschalten! Fertig sieht dies so aus: IF (iostat==5) THEN CREATE filename,header OPEN data,filename SETWRITE data zähler=0 REPEAT PUT data,(würfelzahl<zähler>) INC zähler UNTIL(zähler==6) CLOSE data ELSE IF (iostat==0) THEN STRNBOX filename,"/Bist nicht vorhanden./P","" GOTO erstellen ELSE ERROR ENDIF ENDIF DEVICE proglfw (und dann folgt das schon in Teil 7 eingefügte RETURN) Interessant ist noch der Teil zwischen IF... und ELSE, hier wird die Datei erzeugt: Das Laden ist schneller erledigt, die meisten Elemente sind nun auch bereits bekannt, da es eine fast 100% Umkehrung des Speichern-Vorgangs ist. Also auf zu Modul 2: FILEVAR data BYTEVAR zähler STRVAR16; filename OPENBOX filename,3,"Statdata V1.0",0 IF(dbstat==2) THEN DEVICE proglfw RETURN ENDIF FINDFILE filename IF(iostat==0) THEN OPEN data,filename zähler=0 REPEAT GET data,(würfelzahl<zähler>) INC zähler UNTIL (zähler==6) durchschnitt=0 gesamtwert=0 schongewürfelt=1 CLOSE data DEVICE proglfw action=3 GOTOMOD 1 ELSE ERROR DEVICE proglfw RETURN ENDIF OPENBOX ruft die Standard-Fileauswahlbox auf, der Dateiname ist in die Variable "filename" zu sichern, angezeigt werden sollen alle Dateien des Types "Datendatei" (=3) mit der Klasse "Statdata V1.0" (daher vorhin der Hinweis, daß die genaue Schreibweise so wichtig sei), die abschließende Null werden wir hier nicht weiter betrachten. Hier haben wir nur den Fall "Klick auf ABBRUCH" und "Laufwerkswechsel" zu behandeln. Für den Laufwerkswechsel ist es am einfachsten, die bereits eingeführte Variable proglfw auch hier zum zurückschalten zu benutzen. Mit FINDFILE wird die Datei gesucht, dann sind zwei Fälle zu unterscheiden: 1. Suche erfolgreich: 2. Suche fehlgeschlagen: Die gerade erwähnte Methode 3 muß abschließend im Modul 1 ergänzt werden: IF (action==3) THEN : grafik_aufbauen : MAINLOOP : ENDIF Beachtet bitte, daß hier, im Gegensatz zu den Zeilen mit action==1 oder ==2 auf ein GOTO verzichtet werden muß, da die Routine grafik_aufbauen eine Unterroutine ist und über RETURN verlassen wird. Und damit geht der Workshop rund um GeoCom zu Ende. Ein paar abschließende Worte habe ich noch: Zunächst einmal wieder: Die Workshop-Diskette ist ergänzt. Die nun endgültige Fassung ist in Kürze in der GeoThek zu haben. Die richtige Nummer wird Werner Weicht dann hier noch bekannt geben. Dann ein großes Dankeschön an alle User, die sich für diese Reihe interessiert haben, und mir geschrieben haben. Es wird noch mehr zu GeoCom geben: Noch in diesem Jahr wird bei der GIG Süd über Manfred Frick ein GEOS-Sonderheft "GeoCom" mit mindestens 50 Seiten erscheinen.
Olaf Dzwiza
Kurzlink hierhin: http://geos-printarchiv.de/2136 |
Letzte Änderung am 01.11.2019 |