Next: Kommunikation mit Terminals
Up: L3 Referenzhandbuch
Previous: Intertask Kommunikation
Ein Manager ist eine Task, die irgendwelche Objekte verwaltet und Aufträge bearbeitet, die sich auf diese Objekte beziehen. Eine Form des Managing findet in jeder
gewöhnlichen Task statt. Datenräume, häufig von der Art »Textdatei«, werden angelegt und, gegebenenfalls in Verzeichnissen geordnet, verwaltet. Diese innere Ordnung
von Datenräumen in einer Task mit der Möglichkeit Pfade über Verzeichnisse zu
spezifizieren und Mengen von Namen (Thesauri) zusammenzustellen, ist der lokale
Aspekt des Managing.
Eine Task kann aber nicht nur intern, sondern auch für andere Tasks Ressourcen
verwalten. In diesem Falle werden passende Aufträge via Intertask Kommunikation
von anderen Tasks erwartet.
Die Aufträge beziehen sich auf irgendwelche Ressourcen, die im Besitz dieses Managers sind. Standardbeispiel ist ein Dateimanager, eine Task, die Dateien besitzt und
nach Auftrag Dateien an andere Tasks sendet oder auch Dateien, die von anderen
Tasks geschickt werden, in ihren Besitzstand aufnimmt. Ein anderes Beispiel ist ein
Spoolmanager, der nur Dateien empfängt, möglicherweise in eine Warteschlange
reiht und schlußendlich an den Drucker leitet.
In beiden Fällen ist eine Managertask programmiertechnisch als Task zu verstehen,
die in einer Endlosschleife auf eine bestimmte Klasse von Aufträgen wartet. Die Realisierung als ELAN Programm besteht in jedem Fall aus einer Rahmenprozedur
manager, die die Endlosschleife realisiert und nach Eingang eines Auftrags (und
Analyse dieses Auftrags) eine Dienstprozedur aufruft, die den Auftrag bearbeitet. Die
Rahmenprozedur hat also die Gestalt:
PROC manager (PROC (INT CONST, TASK CONST) execute operation)
Die Dienstprozedur 'execute operation' kann, falls sie den vorliegenden Auftrag nicht
bearbeiten kann, eine andere Dienstprozedur aufrufen. Die Hierarchie der Dienstprozeduren ist in Kap.8.5 beschrieben. Neben dem eigentlichen Auftragscode, der INT
CONST in der obigen Prozedur, gehören ggf. weitere Parameter zum Auftrag an die
Managertask. Die grundsätzlich für Dateimanager zulässigen Aufträge und ihre
Parametrisierung sind zusammenfassend in Kap.13 »Das Dateimanagerprotokoll«
beschrieben.
Der Aufbau der folgenden Abschnitte ist folgender: zunächst sind die Basistypen für
die Klassifikation und Zusammenfassung von Objekten beschrieben. Die Klassifikation erfolgt über den Datentyp SHAPE, der die Aufteilung von Objekten in die
Klassen »Datenraum« und »Verzeichnis« zuläßt. Die Zusammenfassung von
Objekten ist über Verzeichnisse, die eine baumartige Ordnung auf Objekten definieren oder über den Typ THESAURUS, der eine lineare Namensliste liefert, möglich.
Mit diesen Mitteln lassen sich dann die möglichen Aktionen auf Objekten definieren,
zunächst sind die Aktionen mit Wirkung in einer Task beschrieben (local manager),
dann von außen induzierte und nach außen wirkende Aktionen (free manager).
Abschließend sind die beiden speziellen Managertypen archive manager und
streamer manager beschrieben.
Ein Thesaurus ist eine lineare Namensliste mit einer maximalen Länge von 29995
Zeichen. Jedem Namen in einem Thesaurus wird ein Index zugeordnet. Somit können
Thesauri zur Verwaltung benannter Objekte verwandt werden. Der Zugriff auf ein
Objekt ist dann über den Index seines Namens möglich.
Interessant ist die Möglichkeit Prozeduren mit TEXT Parameter durch das am Ende
dieses Abschnitts beschrieben do auf ganze Namenslisten anzuwenden. So ist es
möglich, eine Prozedur myproc (filename) auf alle Dateien einer gegebenen
Namensliste anzuwenden, indem auch noch die Prozedur für den Parametertyp
THESAURUS definiert wird.
Der Typ THESAURUS in seiner vorliegenden Form ist nicht vollständig an die
Möglichkeiten von L3 angepaßt. Eine Task kann 16000 benannte Datenräume
besitzen. Die Länge der Namensliste kann mit höchstens 29995 Zeichen zu gering
sein, um solche Namenslisten vollständig zu verwalten.
THESAURUS
TYPE THESAURUS
- Wirkung: Datentyp
:=
OP := (THESAURUS VAR dest, THESAURUS CONST source)
- Wirkung: Zuweisung
CONTAINS
BOOL OP CONTAINS (THESAURUS CONST thes, TEXT CONST name)
- Wirkung: Liefert TRUE, wenn das Objekt 'name' im Thesaurus 'thes'
enthalten ist.
delete
PROC delete (THESAURUS VAR thes, TEXT CONST name, INT VAR index)
- Wirkung: Falls der Name 'name' im Thesaurus 'thes' enthalten ist, wird er
aus dem Thesaurus gelöscht. 'index' enthält dann den Index den
dieser Eintrag im Thesaurus hatte. Falls der Name nicht in 'thes'
enthalten ist, wird als Index 0 geliefert.
PROC delete (THESAURUS VAR thes, TEXT CONST name)
- Wirkung: Falls der Name 'name' im Thesaurus 'thes' enthalten ist, wird er
aus dem Thesaurus gelöscht.
PROC delete (THESAURUS VAR thes, INT CONST ix)
- Wirkung: Löscht den 'ix'-ten Eintrag im Thesaurus 'thes'.
empty thesaurus
THESAURUS PROC empty thesaurus
- Wirkung: Liefert zum Zwecke der Initialisierung einen leeren Thesaurus.
get
PROC get (THESAURUS CONST t, TEXT VAR name, INT VAR index)
- Wirkung: Liefert den »nächsten« Eintrag aus dem Thesaurus 't'. »Nächster«
heißt hier, der kleinste vorhandene mit einem Index größer als
'index'. Dabei wird in 'name' der Name und in 'index' der Index
des Eintrags geliefert. D.h. 'index' wird automatisch weitergeschaltet. Den ersten Eintrag erhält man entsprechend durch
Aufruf mit index=0. Nach dem letzten Eintrag wird name="" und
index=0 geliefert.
- Beispiel:
TEXT VAR name;
INT VAR index := 0 ;
get (thesaurus, name, index) ;
WHILE index > 0 REP
putline (name) ;
get (thesaurus, name, index)
PER
highest entry
INT PROC highest entry (THESAURUS CONST t)
- Wirkung: Liefert den höchsten belegten Index des Thesaurus 't'.
- Bemerkung: Liefert nicht zwingend die Anzahl der vorhandenen Namen, da
durch Löschungen Lücken entstanden sein können.
insert
PROC insert (THESAURUS VAR t, TEXT CONST name, INT VAR index)
- Wirkung: Der Name 'name' wird als zusätzlicher Eintrag in den Thesaurus
't' eingetragen und der dafür vergebene Index geliefert. Falls der
Thesaurus schon voll ist und der Name nicht mehr eingetragen
werden kann, wird 0 als Index geliefert.
- Bemerkung: Achtung: Mehrfacheintragungen sind möglich. Wenn man diese
verhindern will, muß man entsprechend vermittels
IF NOT t CONTAINS name
THEN insert (t, name, index)
FI
eintragen.
- Fehler: Name unzulaessig
link
INT PROC link (THESAURUS CONST t, TEXT CONST name)
- Wirkung: Liefert den Index des Namens 'name' im Thesaurus 't'. Falls der
Name nicht enthalten ist, wird 0 geliefert. Ist der Name mehrfach
im Thesaurus enthalten, ist nicht definiert, welcher der möglichen
Indizes geliefert wird.
name
TEXT PROC name (THESAURUS CONST t, INT CONST index)
- Wirkung: Liefert den Namen des Eintrags mit dem Index 'index' aus dem
Thesaurus 't'. Falls kein solcher Eintrag im Thesaurus enthalten
ist, wird niltext geliefert.
rename
PROC rename (THESAURUS VAR t, TEXT CONST old, new)
- Wirkung: Ändert im Thesaurus 't' einen Eintrag mit dem alten Namen 'old'
in 'new' um. Falls 'old' nicht im Thesaurus enthalten ist, wird
keine Leistung erbracht. Falls 'old' mehrfach in 't' enthalten ist,
ist nicht definiert, welcher der möglichen Einträge geändert wird.
- Fehler: Name unzulaessig
PROC rename (THESAURUS VAR t, INT CONST index, TEXT CONST new)
- Wirkung: Ändert in Thesaurus 't' den Namen des durch 'index' identifizierten Eintrags in 'new'.
- Fehler: Name unzulaessig
+
THESAURUS OP + (THESAURUS CONST left, right)
- Wirkung: Liefert die Vereinigungsmenge von 'left' und 'right'.
Achtung: Die Vereinigungsmenge enthält keine Namen mehrfach.
THESAURUS OP + (THESAURUS CONST left, TEXT CONST right)
- Wirkung: Fügt dem Thesaurus 'right' zu, wenn 'right' noch nicht im Thesaurus enthalten ist.
-
THESAURUS OP - (THESAURUS CONST left, right)
- Wirkung: Liefert die Differenzmenge. Achtung: Die Differenzmenge enthält
keine Namen mehrfach.
THESAURUS OP - (THESAURUS CONST left, TEXT CONST right)
- Wirkung: Nimmt den Namen 'right' aus dem Thesaurus.
/
THESAURUS OP / (THESAURUS CONST left, right)
- Wirkung: Liefert die Schnittmenge
Achtung: Die Schnittmenge enthält keine Namen mehrfach.
ALL
THESAURUS OP ALL (TASK CONST task)
- Wirkung: Liefert einen Thesaurus, der alle Dateinamen der angegebenen
Task enthält.
THESAURUS OP ALL (TEXT CONST object name)
- Wirkung: Liefert einen Thesaurus, der die in der angegebenen Datei vorhandenen Namen (jede Zeile ein Name) enthält.
IF shape (object name) = dir
THEN all (object name)
ELIF shape (object name) = ds
THEN result FILLBY objectname
FI
all
THESAURUS PROC all
- Wirkung: Liefert einen Thesaurus, der alle Dateinamen der eigenen Task
enthält. Entspricht 'ALL myself'.
THESAURUS PROC all (TEXT CONST dirname)
- Wirkung: Liefert einen Thesaurus, der alle Namen von Datenräumen des
Verzeichnisses 'dirname' enthält.
THESAURUS PROC all (TEXT CONST dirname, SHAPE CONST shape)
- Wirkung: Liefert einen Thesaurus, der alle Namen von Objekten der Gestalt
'shape' des Verzeichnisses 'dirname' enthält.
THESAURUS PROC all (TASK CONST task, TEXT CONST dirname)
- Wirkung: Liefert einen Thesaurus, der alle Namen von Objekten des
Verzeichnisses 'dirname' aus der Task 'task' enthält.
THESAURUS PROC all (TASK CONST task, TEXT CONST dirname, SHAPE
CONST shape)
- Wirkung: Liefert einen Thesaurus, der alle Namen von Objekten der Gestalt
'shape' des Verzeichnisses 'dirname' aus der Task 'task' enthält.
- Beispiel: copy (all (myself, "TP/TVISION", ds) LIKE
"*.PAS",/"DOK", ".")
Lies: »kopiere alle Datenräume aus dem Verzeichnis
"TP/TVISION" dieser Task, deren Name mit ".PAS" endet, in das
Wurzelverzeichnis der Task "DOK".
FILLBY
OP FILLBY (THESAURUS VAR thesaurus, FILE VAR file)
- Wirkung: Schreibt 'file' in den Thesaurus. Dabei werden Zeilen, die schon
im Thesaurus sind, nicht mehr in den Thesaurus geschrieben.
Jede Zeile kommt im Thesaurus also nur einmal vor.
OP FILLBY (FILE VAR file, THESAURUS CONST thesaurus)
- Wirkung: Schreibt den Thesaurus in die Datei 'file'.
OP FILLBY (TEXT CONST filename, THESAURUS CONST thesaurus)
- Wirkung: Richtet eine Datei mit dem Namen 'filename' ein und schreibt
den Thesaurus in die Datei.
LIKE
THESAURUS OP LIKE (THESAURUS CONST thesaurus, TEXT CONST muster)
- Wirkung: Alle im Thesaurus enthaltenen Dateien, die dem 'muster' entsprechen sind im Ergebnisthesaurus enthalten.
Das 'muster' kann insbesondere durch Verwendung des
"*"-Operators gebildet werden.
- Beispiel: print (all LIKE "*.p")
SOME
THESAURUS OP SOME (THESAURUS CONST thesaurus)
- Wirkung: Bietet den angegebenen Thesaurus zum editieren an. Dort können
nicht erwünschte Namen gestrichen werden.
THESAURUS OP SOME (TASK CONST task)
- Wirkung: Aufruf von: SOME ALL task.
THESAURUS OP SOME (TEXT CONST file name)
- Wirkung: Aufruf von: SOME ALL filename.
do
PROC do (PROC (TEXT CONST) operate, THESAURUS CONST thes)
- Wirkung: Die Prozedur 'operate' wird mit allen in 'thes' enthaltenen Namen
als Parameter ausgeführt. Wenn in 'thes' n Namen enthalten sind,
wird 'operate' n-mal ausgeführt. Die Reihenfolge ergibt sich durch
die Indizes in 'thes'.
- Bemerkung: Häufig haben Prozeduren genau einen Textparameter, der den
Dateinamen der Datei, auf die diese Prozedur angewendet werden
soll, übergibt. Da ELAN generische Prozeduren kennt, läßt sich
mit Hilfe dieses do leicht die Anwendung dieser Prozedur auf
Mengen von Namen, also mehrere Dateien, konstruieren.
- Beispiel:
(* 1 *) do (PROC (TEXT CONST) lexsort, SOME all);
(* 2 *) PACKET new packet DEFINES myproc:
PROC myproc (TEXT CONST filename):
......
END PROC myproc;
PROC myproc (THESAURUS CONST thes):
do (PROC(TEXT CONST) myproc, thes)
END PROC myproc
remainder
THESAURUS PROC remainder
- Wirkung: Liefert nach einem errorstop die noch nicht abgearbeiteten
Dateien.
- Beispiel: Während der Ausführung von saveall (archivea) erfolgt ein
Abbruch vom Archivmanager mit der Meldung »Archiv voll«. Nach
Einlegen einer neuen Diskette können die noch nicht auf Diskette
geschriebenen Dateien mit save (remainder, archive) gesichert
werden.
Aus Gründen der Übersichtlichkeit und vor allem der Kompatibilität zu DOS muß
neben der linearen Namensordnung THESAURUS noch die hierarchische Namensordnung DIRECTORY (Verzeichnis) verfügbar sein. Bei L3 sind Verzeichnisse nichts
weiter als Namenspräfixe, die »Sichtbarkeitsregeln« für Dateien ergeben. Beispielsweise sind die Dateien des Verzeichnisses MYDIR genau alle die Dateien in der Task,
deren voller Name mit \MYDIR\ beginnt. Tiefere Verschachtelungen von Verzeichnissen sind also Präfixverkettungen auf Dateinamen. Wie üblich kann man »in Verzeichnisse wechseln«. Dateien können dann mit ihrem verkürzten Namen (ohne
Verzeichnispräfix) bezeichnet werden.
Zur Realisierung dieser Namenshierarchie gibt es in einer Task zwei »Gestalten«
(SHAPES) von lokalen Objekten: dir (Verzeichnis) und ds (Dataspace). Ein Verzeichnis ist also etwas gänzlich anderes als ein Datenraum (eine Datei). Eine Datei
(meistens synonym für Textdatei) ist ein besonderer Typ Datenraum. Es ist durchaus
zulässig einem Datenraum die Gestalt eines Eimers zuzugestehen, gleichgültig ob
Texteimer oder anderer Eimer. Ein Verzeichnis hingegen ist von körperloser Gestalt,
insbesondere hat das zur Folge, daß man es für sich nicht kopieren oder verschicken
kann, sondern nur die mit seinem Namenspräfix existierenden Datenräume.
SHAPE
TYPE SHAPE
- Wirkung: Datentyp. Bezeichnet die Gestalt eines benannten Objekts.
:=
OP := (SHAPE VAR dest, SHAPE CONST source)
- Wirkung: Zuweisung für SHAPE.
=
BOOL OP = (SHAPE CONST left, right)
- Wirkung: Liefert TRUE, falls 'left' gleich 'right' ist.
<>
BOOL OP <> (SHAPE CONST left, right)
- Wirkung: Liefert TRUE, falls 'left' ungleich 'right' ist.
any shape
SHAPE CONST any shape
- Wirkung: Bezeichnet die Menge aller Gestalten.
dir
SHAPE CONST dir
- Wirkung: Bezeichnet die Gestalt »Verzeichnis«.
ds
SHAPE CONST ds
- Wirkung: Bezeichnet die Gestalt »Datenraum«.
LIKE
BOOL OP LIKE (SHAPE CONST left, right)
- Wirkung: Liefert TRUE, falls 'left' und 'right' eine nicht leere Schnittmenge
haben.
nil shape
SHAPE CONST nil shape
- Wirkung: Bezeichnet eine ungültige Gestalt.
OR
SHAPE OP OR (SHAPE CONST left, right)
- Wirkung: Bildet eine Menge aus 'left' und 'right'.
Pfadnamen sind Texte, die die Zeichen '/' bzw. '\' als Trenner enthalten können.
\
TEXT OP \ (TEXT CONST header, tail)
- Wirkung: Liefert Pfadnamen aus 'header' und 'tail'.
extend
PROC extend (TEXT CONST path name, prefix,
TEXT VAR extended path name)
- Wirkung: Erzeugt einen vollqualifizierten Dateinamen. Falls etwa interaktiv
in einem Unterverzeichnis eine Datei gelöscht werden soll, wird
zunächst aus dem eingegebenen relativen Namen 'file name' und
dem 'prefix' current directory der absolute Objektnamen extendiert. Das Resultat wird in 'extended path name' geliefert.
Dieser 'extended path name' wird dann in der Kontrollabfrage
ausgegeben und intern zum Löschen benutzt.
- Beispiel:
TEXT VAR abs path name := "",
extend (std, current directory, abs path name);
putline (abs path name)
head
TEXT PROC head (TEXT CONST pathname)
- Wirkung: Liefert den Teilpfadnamen bis zum ersten Trenner.
- Beispiel: head ("ab\cd\ef") => "ab"
header
TEXT PROC header (TEXT CONST pathname)
- Wirkung: Liefert den Teilpfadnamen bis zum letzten Trenner.
- Beispiel: header ("ab\cd\ef") => "ab\cd"
is relative path
BOOL PROC is relative path (TEXT CONST path name)
- Wirkung: Liefert 'TRUE`, falls der Pfadname nicht mit einem Trenner
beginnt.
is simple name
BOOL PROC is simple name (TEXT CONST path name)
- Wirkung: Liefert 'TRUE`, falls der Pfadname keine Trenner enthält.
PREFIXES
BOOL OP PREFIXES (TEXT CONST left path, right path)
- Wirkung: Liefert TRUE, falls 'left path' header von
'right path' ist.
tail
TEXT PROC tail (TEXT CONST pathname)
- Wirkung: Liefert den Teilpfadnamen hinter dem letzten Trenner.
- Beispiel: tail ("ab\cd\ef") => "ef"
trailer
TEXT PROC trailer (TEXT CONST pathname)
- Wirkung: Liefert den Teilpfadnamen hinter dem ersten Trenner.
- Beispiel: trailer ("ab\cd\ef") => "cd\ef"
Mit den Datentypen SHAPE und THESAURUS stehen Hilfsmittel zur Verfügung, um
die Verwaltung der lokalen Objekte einer Task zu bewerkstelligen. Die Verwaltung
erledigt der »Catalogue Handler« der Task.
Die Objektverwaltung in einer Task wird durch eine maximal 16382 Einträge enthaltende Liste realisiert. Objekte können über ihren Namen oder ihren Listenindex
(catalogue index) identifiziert werden. Die lokale Verwaltung umfaßt nicht nur die
Namensverwaltung für die Datenräume und Verzeichnisse in der Task, sondern auch
die Verwaltung der (Datei)attribute.
Objektnamen, in der Beschreibung der Prozeduren stets als TEXT CONST pathname
auftauchend, können vollqualifizierte Name mit Pfadangabe sein. Falls man auf die
Verwendung von Verzeichnissen verzichtet, kann dieser Pfadname einfach als Dateiname TEXT CONST filename verstanden werden.
all
THESAURUS PROC all
- Wirkung: Liefert den THESAURUS, der alle Objektnamen des aktuellen
Verzeichnisses enthält.
THESAURUS PROC all (TEXT CONST path name)
- Wirkung: Liefert den THESAURUS, der alle Objektnamen des angegebenen
Verzeichnisses 'path name' enthält.
THESAURUS PROC all (TEXT CONST path name, SHAPE CONST mask)
- Wirkung: Liefert den THESAURUS, der die Namen aller Objekte der Gestalt
'mask' des des aktuellen Verzeichnisses enthält.
catalogue index
INT PROC catalogue index (TEXT CONST name)
- Wirkung: Liefert den Katalogindex des Objekt 'name'. Der Index
liegt zwischen 1 und 16382. Falls der Index 0 geliefert wird,
bedeutet das: »'name' gibt es nicht«.
catalogue name
TEXT PROC catalogue name (INT CONST index)
- Wirkung: Liefert den Namen des Objekts mit dem Katalogindex 'index'.
Falls kein Objekt existiert, wird niltext geliefert.
copy
PROC copy (TEXT CONST source path, dest path)
- Wirkung: Kopiert die Quelle 'source path' nach 'dest path'. Attribute werden
mitkopiert. Die Quelle wird über einen Zieldatenraum oder in ein
Zielverzeichnis kopiert. Falls 'source path' ein Verzeichnis ist,
werden alle seine Objekte kopiert.
Datenräume werden nach Zustimmung bei der Kontrollabfrage
überschrieben.
PROC copy (TEXT CONST source path, dest path, QUIET CONST quiet)
- Wirkung: s.o. aber ohne Kontrollabfrage.
PROC copy (THESAURUS CONST names, TEXT CONST dest path)
- Wirkung: Kopiert alle Objekte aus 'names' nach 'dest path'. Attribute
werden mitkopiert. Existiert 'dest path' nicht, so wird ein
Verzeichnis angelegt, in das 'names' hineinkopiert wird.
PROC copy (THESAURUS CONST names, TEXT CONST dest path,
QUIET CONST quiet)
- Wirkung: s.o. aber ohne Kontrollabfrage.
PROC copy (DATASPACE CONST source ds, TEXT CONST dest path)
- Wirkung: Erzeugt ein Objekt 'dest path' und kopiert den Datenraum 'source
ds'.
PROC copy (DATASPACE CONST source ds, TEXT CONST dest path,
QUIET CONST quiet)
- Wirkung: s.o. aber ohne Kontrollabfrage.
create
PROC create (TEXT CONST path name, SHAPE CONST shape)
- Wirkung: Ein Objekt der angegebenen Gestalt wird erzeugt. Falls erforderlich, werden Verzeichnisse wie in 'pathname' angegeben, erzeugt.
- Beispiel: create ("ab\cd\ef", ds)
(* erzeugt Datenraum "ef" im Unterverzeichnis "ab\cd" *)
(* das Verzeichnis wird ggf. neu erzeugt *)
create ("NEW DIR", dir)
(* erzeugt ein Verzeichnis *)
PROC create (TEXT CONST path name)
- Wirkung: wie create (pathname, ds)
current directory
TEXT PROC current directory
- Wirkung: Liefert den Namen des aktuellen Verzeichnisses.
PROC current directory (TEXT CONST path name)
- Wirkung: Stellt 'path name' als aktuelles Verzeichnis ein.
- Fehler: "path name" gibt es nicht
dataspace
DATASPACE PROC dataspace (TEXT CONST pathname)
- Wirkung: Liefert den Datenraum 'pathname'.
- Fehler: "path name" gibt es nicht
delete
PROC delete (TEXT CONST path name)
- Wirkung: Das Objekt 'pathname' wird gelöscht. Falls command dialogue
(TRUE) gilt (Standardeinstellung), erfolgt zunächst eine Kontrollfrage. Falls ein Verzeichnis angegeben wird, müssen vor Löschen
des Verzeichnisses alle darin enthaltenen Datenräume gelöscht
werden.
PROC delete
- Wirkung: Löscht das durch std benannte (zuletzt benutzte) Objekt.
PROC delete (TEXT CONST path name, QUIET CONST quiet)
- Wirkung: Löscht wie oben beschrieben, aber ohne Kontrollabfrage.
PROC delete (THESAURUS CONST path names)
- Wirkung: Löscht alle in der Liste bezeichneten.
PROC delete (THESAURUS CONST path name, QUIET CONST quiet)
- Wirkung: Löscht alle in der Liste bezeichneten, aber ohne Kontrollabfrage.
- Beispiel: delete ("datei")
delete ("mydir\subdir\file1.text", quiet)
delete ( SOME all)
exists
BOOL PROC exists (TEXT CONST path name)
- Wirkung: shape (path name) <> nil shape
Liefert TRUE, falls es das Objekt 'pathname' gibt.
is empty directory
BOOL PROC is empty directory (TEXT CONST path name)
- Wirkung: Liefert TRUE, falls 'pathname' ein Verzeichnis spezifiziert, das
keine Datenräume oder Unterverzeichnisse enthält.
list
PROC list
- Wirkung: Listet alle Objekte des aktuellen Verzeichnisses in einer temporären Datei auf. Von Verzeichnissen wird nur der Name, nicht der
Inhalt gelistet.
PROC list (TEXT CONST path name)
- Wirkung: Listet alle Objekte des Verzeichnisses 'path name' auf.
PROC list (TEXT CONST path name, SHAPE CONST shapemask)
- Wirkung: Listet alle Objekte des Verzeichnisses 'path name' auf, deren
Gestalt 'shapemask' entspricht.
- Beispiel: list ("\", dir) listet alle Verzeichnisnamen der Task.
PROC list (FILE VAR file)
- Wirkung: Wie list, die Ausgabe wird jedoch in die eine mit sequential file
assoziierte Datei 'file' gelenkt.
- Bemerkung: Auch die anderen list Prozeduren können mit einer FILE VAR
parametrisiert werden.
move
PROC move (TEXT CONST source path, dest path)
- Wirkung: move entspricht copy mit Löschung der Quelle. Intern ist also
nur eine Umbenennung erforderlich. Falls 'source path' ein
Verzeichnis ist, werden alle seine Objekte verschoben.
Datenräume werden nach Zustimmung bei der Kontrollabfrage
überschrieben.
PROC move (TEXT CONST source path, dest path, QUIET CONST quiet)
- Wirkung: s.o. aber ohne Kontrollabfrage.
PROC move (THESAURUS CONST names, TEXT CONST dest path)
- Wirkung: Versetzt alle Objekte aus 'names' nach 'dest path'.
PROC move (THESAURUS CONST names, TEXT CONST dest path,
QUIET CONST quiet)
- Wirkung: s.o. aber ohne Kontrollabfrage.
PROC move (DATASPACE CONST source ds, TEXT CONST dest path)
- Wirkung: Erzeugt ein Objekt 'dest path' und versetzt den Datenraum
'source ds'.
PROC move (DATASPACE CONST source ds, TEXT CONST dest path, QUIET
CONST quiet)
- Wirkung: s.o. aber ohne Kontrollabfrage.
name
TEXT PROC name (DATASPACE CONST ds)
- Wirkung: Falls der Datenraum 'ds' im Katalog enthalten ist, wird sein Name
geliefert, sonst niltext.
remove
PROC remove (TEXT CONST path name)
- Wirkung: Entspricht delete, soweit Datenräume betroffen sind. Das
Löschen von nicht leeren Verzeichnissen wird jedoch grundsätzlich abgewiesen.
PROC remove (TEXT CONST path name, QUIET CONST quiet)
- Wirkung: s.o. jedoch ohne Kontrollabfrage.
rename
PROC rename (TEXT CONST source path, new simple name)
- Wirkung: Schreiberleichterung. Entspricht:
move (source path, header (source path\ new simple name)
- Bemerkung: last param wird gesetzt.
shape
SHAPE PROC shape (TEXT CONST path name)
- Wirkung: Liefert die Gestalt des Objekts 'path name'.
xlist
PROC xlist
- Wirkung: Listet alle Objekte des aktuellen Verzeichnisses in einer temporären Datei auf. Von Verzeichnissen wird auch ihr Inhalt gelistet.
PROC xlist (TEXT CONST path name)
- Wirkung: Listet alle Objekte des Verzeichnisses 'path name' auf.
PROC xlist (TEXT CONST path name, SHAPE CONST shapemask)
- Wirkung: Listet alle Objekte des Verzeichnisses 'path name' auf, deren
Gestalt 'shapemask' entspricht.
- Beispiel: xlist ("\", dir)
listet alle Verzeichnisnamen der Task.
- Bemerkung: Alle xlist Prozeduren können mit einer FILE VAR parametrisiert
werden. Die Ausgabe wird dann in eine Textdatei gelenkt.
ATTRIBUTES
TYPE ATTRIBUTES
- Wirkung: Datentyp »Objekt (Datei)attribute«. Die Attribute sind:
-
Datum/Zeit des letzten Zugriffs,
-
Datum/Zeit des letzten Schreibzugriffs,
-
Datum/Zeit des letzten Backups,
-
SHAPE
-
DOS Attributemaske
nilattributes
ATTRIBUTES PROC nilattributes
- Wirkung: Liefert das Initialisierungsobjekt für ATTRIBUTES.
:=
OP := (ATTRIBUTES VAR left, ATTRIBUTES CONST right)
- Wirkung: Zuweisungsoperator für ATTRIBUTES.
attributes
ATTRIBUTES PROC attributes (TEXT CONST path name)
- Wirkung: Liefert die Attribute des Objekts 'path name'.
PROC attributes (TEXT CONST path name, ATTRIBUTES CONST attr)
- Wirkung: Das durch 'pathname' identifizierte Objekt erhält das Attribute
'attr'.
attribute mask
INT PROC attribute mask (TEXT CONST path name)
- Wirkung: Liefert die DOS Attributmaske des Objekts 'path name'.
last access time
DATETIME PROC last access time (ATTRIBUTES CONST attr)
- Wirkung: Liefert aus 'attr' Datum/Uhrzeit der letzten Sicherung mit einem
Sicherungssystem.
last update time
DATETIME PROC last update time (ATTRIBUTES CONST attr)
- Wirkung: Liefert aus 'attr' Datum/Uhrzeit des letzten Schreibzugriffs.
last backup time
DATETIME PROC last backup time (ATTRIBUTES CONST attr)
- Wirkung: Liefert aus 'attr' Datum/Uhrzeit des letzten Zugriffs.
Wie bereits in 8.1 erwähnt wird die Managerfunktion einer Task durch eine Rahmenprozedur der Art:
PROC manager (PROC (INT CONST, TASK CONST) execute operation)
realisiert. Die Dienstprozedur execute operation wird von der Prozedur manager
aufgerufen, wenn ein Auftrag empfangen wurde. Der Auftrag und ggf. Parameter
werden dem Botschaftsvektor entnommen.
Falls die von der Rahmenprozedur aufgerufene Prozedur execute operation den
vorliegenden Auftrag nicht bearbeiten kann, so ist möglich, daß diese Prozedur eine
andere Dienstprozedur execute operation aufruft. Auf diese Weise läßt sich eine
Hierarchie von Prozeduren aufbauen, die eine flexible Reaktion auf möglich Aufträge
ermöglichen.
Die Zugriffsrechte auf Managerleistungen werden durch eine »access mask«
beschrieben. Darin wird definiert, welche Art des Zugriffs (lesend, schreibend,
zerstörend) von welcher Gruppe von Tasks zugelassen ist.
- Beispiel:
PACKET read manager
DEFINES read manager :
LET delete ops = 0x 00 00 00 01,
write ops = 0x 00 00 01 00,
read ops = 0x 00 01 00 00,
info ops = 0x 01 00 00 00,
free bit = 1,
family bit = 2,
system bit = 4,
terminal bit = 8;
INT CONST read access := delete ops * 0
OR write ops * 0
OR read ops * free bit
OR info ops * free bit;
PROC read manager :
manager type ("read only");
manager (PROC (INT CONST, TASK CONST) read manager);
END PROC read manager;
PROC read manager (INT CONST order code, TASK CONST order task) :
object manager (order code, order task, read access)
END PROC read manager;
END PACKET read manager;
Rechte für den Zugriff auf Objekte in der Task können in der oben skizzierten Weise
definiert werden. Für jede der vier Zugriffsarten »Löschen«, »Schreiben«, »Lesen«
und »Info« wird in einem Byte der (Integer) Maske festgelegt, von wo aus dem System
auf diese Weise zugegriffen werden darf. Folgende Rechte sind vordefiniert:
monitor access
- Wirkung: Lösch-, Schreib-, Lese-, Infooperationen nur von Tasks aus, die im
selben Terminalstack stehen.
family access
- Wirkung: Lösch-, Schreib-, Lese-, Infooperationen nur von Tasks aus, die im
selben Terminalstack stehen und von Tasks, die direkter Nachkomme der Task sind.
free access
- Wirkung: Lösch-, Schreib-, Lese-, Infooperationen von allen Tasks aus.
system access
- Wirkung: Lösch-, Schreiboperationen nur von Systemtasks (system
privilege) aus, Lese-, Infooperationen von jeder Task
aus.
void manager
PROC void manager (INT CONST order code, TASK CONST order task,
INT CONST access mask))
- Wirkung: Weist jeden Auftrag von jeder Task ab. Es wird ein errorstop mit
der Meldung falscher Auftrag für Task ... ausgelöst.
command manager
PROC command manager (INT CONST order code, TASK CONST order task,
INT CONST access mask))
- Wirkung: Akzeptiert nur den Auftrag sich an ein Terminal zu koppeln. Wenn
die Task an ein Terminal gekoppelt ist, beginnt ein Kommandodialog.
Insbesondere erlaubt ein solcher Manager also die in Kap. 8.4
beschriebenen Aktionen zur lokalen Dateiverwaltung.
object manager
PROC object manager (INT CONST order code, TASK CONST order task,
INT CONST access mask))
- Wirkung: Stellt seine lokalen Objekten (Datenräume, Verzeichnisse),
anderen Tasks zur Verfügung. Wenn ein solcher Manager nicht
zum Dialog an ein Terminal gekoppelt ist, erwartet er Aufträge zur
Dateiverwaltung. Solche Aufträge können z.B derart sein, daß ein
zugesandter Datenraum unter einem ebenfalls zugestellten
Namen in das lokale Dateisystem eingefügt werden soll.
- Bemerkung: Die Codierung und Parametrisierung der zulässigen Aufträge
findet sich in Kap.13.
begin manager
PROC begin manager (INT CONST order code, TASK CONST order task,
INT CONST access mask))
- Wirkung: Akzeptiert Aufträge wie ein object manager und zusätzlich den
Auftrag Sohntasks einzurichten.
- Bemerkung: Auch »normale Tasks« können Sohntasks anlegen, jedoch nur,
wenn der Auftrag in der Task selbst erzeugt wird (interaktiv oder
durch Programm). Dem begin manager kann der Auftrag jedoch
von außen, z.B. von der Terminaltask aus, zugestellt werden.
monitor manager
PROC monitor manager (INT CONST order code, TASK CONST order task)
- Wirkung: Die Task wird ein command manager mit Zugriffsrecht
monitor access.
family manager
PROC family manager (INT CONST order code, TASK CONST order task)
- Wirkung: Die Task wird ein object manager mit Zugriffsrecht family
access.
free manager
PROC free manager (INT CONST order code, TASK CONST order task)
- Wirkung: Die Task wird ein begin manager mit Zugriffsrecht free access.
manager type
PROC manager type (TEXT CONST string)
- Wirkung: Der Text 'string' wird hinter dem Tasknamen ausgegeben, immer
wenn die Task an einen Bildschirm gekoppelt ist. So ist leicht
erkennbar, welche Rechte die Task anderen einräumt. Beispielsweise wird ein free manager als (FREI) gekennzeichnet usw.
Die folgenden Prozeduren sind die standardmäßig verfügbaren Aufträge an Objektmanager.
all
THESAURUS PROC all (TASK CONST manager,
TEXT CONST dir, SHAPE CONST shape)
- Wirkung: Der Manager 'task' liefert einen THESAURUS, der die Namen aller
seiner Objekte der Gestalt 'shape' des Verzeichnisses 'dir' enthält.
THESAURUS PROC all (TASK CONST manager, TEXT CONST dir)
- Wirkung: Der Manager liefert einen THESAURUS mit den Namen aller seiner
Objekte im Verzeichnis 'dir'.
THESAURUS PROC all (TASK CONST manager)
- Wirkung: Der Manager liefert einen Thesaurus mit den Namen aller seiner
Objekte.
attributes
ATTRIBUTES PROC attributes(TASK CONST manager,
TEXT CONSTpathname)
- Wirkung: Der Manager liefert die Attribute zu 'pathname'.
copy
PROC copy (TASK CONST sourcetask, TEXT CONST sourcename, destname)
- Wirkung: Aus der Task 'sourcetask' wird 'sourcename' unter dem Namen
'destname' kopiert.
PROC copy (TASK CONST sourcetask, THESAURUS CONST sourcenames,
TEXT CONST destname)
- Wirkung: Aus der Task 'sourcetask' werden alle in 'sourcenames'
beschriebenen Datenräume in das eigene Verzeichnis 'destname'
kopiert.
PROC copy (TASK CONST sourcetask, TEXT CONST sourcename)
- Wirkung: Aus 'sourcetask' wird 'sourcename' kopiert.
PROC copy (TASK CONST sourcetask, THESAURUS CONST sourcenames)
- Wirkung: Aus 'sourcetask' werden alle in 'sourcenames' beschriebenen
Datenräume kopiert. Die Verzeichnisstruktur von 'sourcetask'
wird übernommen. Leere Verzeichnisse werden jedoch nicht
kopiert.
PROC copy (TEXT CONST sourcename, TASK CONST dest task,
TEXT CONST destpath)
- Wirkung: Der Datenraum 'sourcename' wird unter dem Namen 'destpath'
in die Task 'desttask' kopiert. Falls es 'destpath' schon in
'desttask' gibt, kommt eine Kontrollfrage "destpath"
überschrieben? (j/n).
PROC copy (THESAURUS CONST sourcenames, TASK CONST desttask,
TEXT CONST destname)
- Wirkung: Die in 'sourcenames' angegebenen Datenräume werden in das
Verzeichnis 'destname' von 'desttask' kopiert.
PROC copy (TEXT CONST sourcename, TASK CONST desttask)
- Wirkung: Kopiert 'sourcename' nach 'desttask'.
PROC copy (THESAURUS CONST sourcenames, TASK CONST desttask)
- Wirkung: Kopiert die in 'sourcenames' angegebenen Datenräume unter
ihrem vollen Namen nach 'desttask'.
- Bemerkung: Alle Prozeduren können auch als zusätzlichen Parameter eine
QUIET CONST quiet erhalten. In diesem Falle unterbleiben
Kontrollabfragen vor dem Überschreiben.
create
PROC create (TASK CONST manager, TEXT CONST pathname,
SHAPE CONST shape)
- Wirkung: Erzeugt in 'manager' ein Objekt 'pathname' der Gestalt 'shape'.
- Beispiel: create (/"PUBLIC", "A new dir", dir)
delete
PROC delete (TASK CONST manager, TEXT CONST pathname)
- Wirkung: Löscht in 'manager' das Objekt pathname mit Kontrollfrage. Falls
'pathname' ein Verzeichnis ist, werden zunächst alle Unterverzeichnisse und Datenräume nach Abfrage gelöscht. Falls
'pathname' danach »leer« ist wird 'pathname' selbst gelöscht.
PROC delete (TASK CONST manager, THESAURUS CONST thes)
- Wirkung: Löscht in 'manager' die in 'thes' angegebenen Datenräume.
erase
PROC erase (TEXT CONST name)
- Wirkung: Der Datenraum- (meistens Datei-)name 'name' wird mit current
directory zum vollständigen 'pathname' extendiert. Der derart
spezifizierte Datenraum wird in der Vatertask (die in diesem Falle
natürlich Manager sein muß) nach Kontrollfrage gelöscht.
- Bemerkung: Im wesentlichen stellt das eine Schreiberleichterung dar, da man
in einem Unterverzeichnis befindlich, einfach den verkürzten
Namen verwenden kann.
- Beispiel:
REF HB\subdir1\subsubdir (PRIVAT)
erase ("text")
wirkt wie: delete (father, "\subdir1\subsubdir\text")
PROC erase (THESAURUS CONST thes)
- Wirkung: Wie oben, aber alle in 'thes' angegebenen Datenräume.
PROC erase
- Wirkung: Wie oben, aber die zuletzt benutzte Datei (siehe std).
PROC erase (TEXT CONST name, TASK CONST manager)
- Wirkung: Wie oben, aber in der Task 'manager'.
PROC erase (THESAURUS CONST thes, TASK CONST manager)
- Wirkung: Wie oben, aber in der Task 'manager'.
exists
BOOL PROC exists (TASK CONST manager, TEXT CONST pathname)
- Wirkung: Liefert TRUE, falls es eine Objekt 'pathname' in 'manager' gibt.
fetch
PROC fetch (TEXT CONST name)
- Wirkung: Der Datenraum- (meistens Datei-)name 'name' wird mit current
directory zum vollständigenn 'pathname' extendiert. Der derart
spezifizierte Datenraum wird aus der Vatertask (die in diesem
Falle natürlich Manager sein muß) kopiert.
- Bemerkung: Im wesentlichen stellt das eine Schreiberleichterung dar, da man
in einem Unterverzeichnis befindlich, einfach den verkürzten
Namen verwenden kann.
- Beispiel:
REF HB\subdir1\subsubdir (PRIVAT)
fetch ("text")
wirkt wie: copy (father, "\subdir1\subsubdir\text")
PROC fetch (THESAURUS CONST thes)
- Wirkung: Wie oben, mit allen Datenräumen aus 'thes'.
PROC fetch (TEXT CONST name, TASK CONST manager)
- Wirkung: Wie oben, aber aus der Task 'manager'.
PROC fetch (THESAURUS CONST thes, TASK CONST manager)
- Wirkung: Wie oben, aber aus der Task 'manager'.
fetchall
PROC fetchall (TASK CONST manager)
- Wirkung: Holt alle Datenräume aus 'manager'. Die Verzeichnisstruktur von
'manager' wird vollständig übernommen.
PROC fetchall
- Wirkung: Holt alle Datenräume aus der Vatertask 'manager'. Die Verzeichnisstruktur der Vatertask wird vollständig übernommen.
is empty directory
BOOL PROC is empty directory (TASK CONST manager,
TEXT CONST dirname)
- Wirkung: Liefert TRUE , falls das Verzeichnis 'dirname' in der Task
'manager' leer ist.
list
PROC list (TASK CONST manager)
- Wirkung: Listet Verzeichnisnamen und Datenraumnamen aus dem »root
directory« der Task 'manager' in einer temporären Datei, die mit
show angezeigt wird. Von Verzeichnissen wird nur der Name,
nicht der Inhalt, angezeigt.
PROC list (TASK CONST manager, TEXT CONST dirname)
- Wirkung: Wie oben, aber Verzeichnis 'dirname' als Ausgangspunkt.
PROC list (TASK CONST manager, TEXT CONST dirname,
SHAPE CONST shape)
- Wirkung: Wie oben, aber nur Objekte der Gestalt 'shape'.
- Beispiel: list (archive, ".", dir)
zeigt alle Verzeichnisse des Archivs.
PROC list (FILE VAR file, TASK CONST manager)
PROC list (FILE VAR file, TASK CONST manager,
TEXT CONST dirname, SHAPE CONST shape)
- Wirkung: Wie oben, die Ausgabe erfolgt aber in eine Datei.
manager params
PROC manager params (TEXT CONST param1, TEXT CONST param2)
- Wirkung: Mit diesen beiden Parameter kann einem Manager zusätzliche
Information für besondere Aufgaben übermittelt werden.
Beispielsweise wird dem »mail manager« so der Empfänger einer
Botschaft übermittelt.
- Siehe: Beispieldiskette, Datei "mail manager", "mail functions"
manager receive timeout
PROC manager receive timeout (INT CONST wait)
- Wirkung: Wartet 'wait' Millisekunden darauf, daß ein Manager auf einen
Auftrag der mit einer Sendung beantwortet werden soll,
erwartungsgemäß reagiert.
- Bemerkung: Dient insbesondere dazu, daß Programme, die mit Managern
kommunizieren, die sich nicht wie Standardmanager verhalten,
nicht hängen bleiben, wenn z.B. ein »list« keine Reaktion seitens
des Managers hervorruft.
Voreinstellung ist never!
INT PROC manager receive timeout
- Wirkung: Liefert den aktuellen Wert.
manager send timeout
PROC manager send timeout (INT CONST wait)
- Wirkung: Wartet 'wait' Millisekunden darauf, daß ein Manager auf einen
Auftrag, bei dem dieser Manager etwas empfangen soll,
erwartungsgemäß reagiert.
- Bemerkung: Dient insbesondere dazu, daß Programme, die mit Managern
kommunizieren, die sich nicht wie Standardmanager verhalten,
nicht hängen bleiben, wenn z.B. ein »save« keine Reaktion seitens
des Managers hervorruft.
Voreinstellung ist never!
INT PROC manager send timeout
- Wirkung: Liefert den aktuellen Wert.
move
- Wirkung: move entspricht dem oben beschriebenen copy. Der Unterschied
besteht darin, daß nicht kopiert wird, sondern die Quelle gelöscht
wird. Es ist also als »Verschieben« aufzufassen. Die mögliche
Parametrisierung entspricht copy.
print
PROC print (TEXT CONST name)
- Wirkung: Die Datei 'name' wird zum Drucken an printer geschickt.
PROC print (THESAURUS CONST thes)
- Wirkung: Alle in 'thes' angegebenen Dateien werden zum Drucken
an printer geschickt.
PROC print
- Wirkung: Die zuletzt benutzte Datei wird zum Drucken an printer
geschickt.
PROC print (TEXT CONST name, TASK CONST printer manager)
- Wirkung: Die Datei 'name' wird zum Druck an 'printer manager' geschickt.
PROC print (THESAURUS CONST thes, TASK CONST printer manager)
- Wirkung: s.o.
remove
PROC remove (TASK CONST manager, TEXT CONST pathname)
- Wirkung: In 'manager' wird 'pathname' gelöscht. Falls es ein Verzeichnis
ist, wird nur dann gelöscht, wenn 'pathname' leer ist. Im Gegensatz zu delete wird nicht versucht zuerst die enthaltenen Objekte
und schließlich 'pathname' zu löschen.
PROC remove (TASK CONST manager, TEXT CONST pathname,
QUIET CONST quiet)
- Wirkung: Wie oben, aber ohne Kontrollabfrage.
save
PROC save (TEXT CONST name)
- Wirkung: Der Datenraum- (meistens Datei-)name 'name' wird mit current
directory zum vollständigenn 'pathname' extendiert. Der derart
spezifizierte Datenraum wird zur Vatertask (die in diesem Falle
natürlich Manager sein muß) kopiert.
- Bemerkung: Im wesentlichen stellt das eine Schreiberleichterung dar, da man
in einem Unterverzeichnis befindlich, einfach den verkürzten
Namen verwenden kann.
- Beispiel:
REF HB:\subdir1\subsubdir (PRIVAT)
save ("text")
wirkt wie: copy("\subdir1\subsubdir\text",father)
PROC save (THESAURUS CONST thes)
- Wirkung: Wie oben, mit allen Datenräumen aus 'thes'.
PROC save
- Wirkung: Wie oben, mit der zuletzt benutzten Datei.
PROC save (TEXT CONST name, TASK CONST manager)
- Wirkung: Wie oben, aber in die Task 'manager'.
PROC save (THESAURUS CONST thes, TASK CONST manager)
- Wirkung: Wie oben, aber in die Task 'manager'.
saveall
PROC saveall (TASK CONST manager)
- Wirkung: Kopiert alle Datenräume nach 'manager'. Die eigene Verzeichnisstruktur wird vollständig übergeben.
PROC saveall
- Wirkung: Kopiert alle Datenräume in die Vatertask. Die Verzeichnisstruktur
wird vollständig übergeben.
shape
SHAPE PROC shape (TASK CONST manager, TEXT CONST pathname)
- Wirkung: 'manager' liefert die Gestalt des Objekts 'pathname'.
storage
INT PROC storage (TASK CONST manager, TEXT CONST dsname)
- Wirkung: 'manager' liefert die Größe des Datenraums 'pathname' in Byte.
- Fehler: Operation mit einem Verzeichnis nicht erlaubt
type
INT PROC type (TASK CONST manager, TEXT CONST dsname)
- Wirkung: 'manager' liefert den Typ des Datenraums 'dsname'.
xlist
PROC xlist (TASK CONST manager)
- Wirkung: Listet Verzeichnisnamen und Datenraumnamen aus dem »root
directory« der Task 'manager' in einer temporären Datei, die mit
show angezeigt wird. Die vollständige Baumstruktur der
Verzeichnisse/ Datenräume wird dargestellt.
PROC xlist (TASK CONST manager, TEXT CONST pathname)
- Wirkung: Wie oben, aber Verzeichnis 'dirname' als Ausgangspunkt.
PROC xlist (TASK CONST manager, TEXT CONST pathname,
SHAPE CONST shape)
- Wirkung: Wie oben, aber nur Objekte der Gestalt 'shape'.
- Beispiel: xlist (archive, ".", dir)
zeigt alle Verzeichnisse des Archivs.
PROC xlist (FILE VAR file, TASK CONST manager)
PROC xlist (FILE VAR file, TASK CONST manager,
TEXT CONST pathname, SHAPE CONST shape)
- Wirkung: Wie oben, die Ausgabe erfolgt aber in eine Datei.
Archive sind im L3 Sprachgebrauch Medien zur Datensicherung. Derzeit sind
Disketten- und Bandlaufwerke als Betriebsmittel für Archive verfügbar. Insbesondere
Diskettenlaufwerke nehmen also eine andere Stellung ein, als bei DOS. Man kann
kein originäres L3 Programm »von der Diskette starten«, Disketten und Bänder
dienen ausschließlich der Auslagerung von Daten. Die in L3DOS enthaltenen
Möglichkeit DOS Programme von Diskette zu starten ist eine aus Gründen der
Kompatibilität implementierte »Unmöglichkeit«.
Zur Benutzung des Diskettenlaufwerks ist bei L3 eine Reservierungslogik notwendig,
um die ein oder zwei Diskettenlaufwerke des Rechners beliebigen Tasks zuordnen zu
können. Zu diesem Zweck wird ein Diskettenlaufwerk stets von einem Archivmanager
verwaltet. Ein Archivmanager ist ein spezieller Dateimanager, dessen Dateien sich
nicht auf der Festplatte, sondern auf Diskette befinden. Die Kommunikation mit dem
Archivmanager erfolgt in der üblichen Art und Weise (fetch, save, copy..).
Der Archivmanager für das erste Diskettenlaufwerk heißt ARCHIVE A, der Archivmanager für ein zweites Diskettenlaufwerk heißt ARCHIVE B.
Um eine Diskette zu lesen oder zu beschreiben, muß stets eine Reservierung des
Laufwerks beim Archivmanager vorgenommen werden. Nach Beendigung der Aktionen muß die Reservierung aufgehoben werden. Um zu verhindern, daß das Laufwerk versehentlich von einer Task nicht wieder freigegeben wird, hebt der Archivmanager eine Reservierung auf, falls seit 5 Minuten kein Zugriff auf das Laufwerk
stattgefunden hat und ein Reservierungsgesuch einer anderen Task vorliegt. Falls
keine andere Task versucht, das Laufwerk zu reservieren, bleibt die Zuordnung
erhalten.
Disketten können mit Namen (Labels) versehen werden. Falls eine Diskette benannt
ist, muß zur erfolgreichen Reservierung auch noch der Diskettenname angegeben
werden (reserve ("my floppy", /"ARCHIVE A")). Nicht nur bei Mehrbenutzersystemen können durch diese Maßname unerfreuliche Verluste verhindert werden.
Die möglichen Aufträge an einen solchen Archivmanager sind die, die an einen
»normalen« Dateimanager gegeben werden können (copy, list, save..). Sie sind hier
nicht gesondert aufgeführt, da Unterschiede lediglich im Zeitverhalten bestehen.
Erläutert sind die zusätzlichen, spezifischen Aufträge zur Diskettenbehandlung.
Disketten werden in einem DOS kompatiblen Dateiformat beschrieben. Neben der
Möglichkeit, dateiweise zu lesen und zu schreiben, ist auch blockweises Lesen und
Schreiben möglich.
archive
TASK PROC archive
- Wirkung: Liefert den internen Taskbezeichner von ARCHIVE A. Schreibvereinfachung.
- Beispiel: reserve (archive)
(* statt *)
reserve(/"ARCHIVE A")
archive a
TASK PROC archive a
- Wirkung: Liefert den internen Taskbezeichner von ARCHIVE A. Schreibvereinfachung.
- Beispiel: reserve (archive a)
(* statt *)
reserve(/"ARCHIVE A")
archive b
TASK PROC archive b
- Wirkung: Liefert den internen Taskbezeichner von ARCHIVE B. Schreibvereinfachung.
- Beispiel: reserve (archive a);
reserve (archive b);
fetchall(archive a);
save (ALL archive a, archive b);
(* statt *)
reserve(/"ARCHIVE A");
reserve(/"ARCHIVE B").....
check
PROC check (TEXT CONST name, TASK CONST archivetask)
- Wirkung: Prüflesen des Datenraums 'name' durch den Archivemanager
'archivetask' auf der eingelegten Diskette. Es werden keine Daten
übertragen. Falls fehlerfrei gelesen werden kann, erscheint eine
dementsprechende Meldung, sonst eine Fehlermeldung.
PROC check (THESAURUS CONST thes, TASK CONST archivetask)
- Wirkung: Prüflesen aller im Thesaurus 'thes' angegebenen Datenräume
durch 'archivetask'.
clear
PROC clear (TASK CONST archivetask)
- Wirkung: Initialisiert die eingelegte Diskette. Falls durch reserve ein
Archivname eingestellt wurde, erhält die eingelegte Diskette diesen
Namen.
Da die Initialisierung dem Löschen aller auf der Diskette vorhandenen Dateien entspricht, wird vorher ein Kontrolldialog
geführt.
Die Dateien werden nicht physisch gelöscht. Es werden nur die
Einträge im Katalog der Diskette gelöscht. Der Katalog läßt sich
aber nicht wiederherstellen.
format
PROC format (TASK CONST archivetask)
- Wirkung: Formatiert die Diskette in dem von der 'archivetask' verwalteten
Laufwerk im Standardformat des Laufwerks.
PROC format (INT CONST code,TASK CONST archivetask)
- Wirkung: Formatiert die Diskette in dem von der 'archivetask' verwalteten
Laufwerk. 'code' spezifiziert das gewünschte Format. Falls ein
anderer Wert als unten beschrieben oder eine für das Laufwerk
nicht durchführbare Option gefordert wird, wird eine Meldung
ausgegeben.
Falls bei Reservierung des Archivs ein Name eingestellt wurde,
erhält die Diskette nach erfolgter Formatierung diesen Archivnamen.
- Bemerkung: format beinhaltet also clear.
- Parameter:
code = 0 : high density (1200 oder 1440)
code = 360 : 360 KB, 40 Spuren, 9 Sektoren
code = 720 : 720 KB, 80 Spuren, 9 Sektoren
code = 1200 : 1200 KB, 80 Spuren, 15 Sektoren
code = 1440 : 1440 KB, 80 Spuren, 18 Sektoren
- Fehler: Falscher Formatschlüssel
release
PROC release (TASK CONST archivetask)
- Wirkung: Die Reservierung des Archivmanagers wird beendet.
reserve
PROC reserve (TASK CONST archivetask)
- Wirkung: Reserviert den Archivmanager. Falls eine andere Task "t" diesen
bereits reserviert hat, erscheint die Meldung:
Archiv wird von Task "t" benutzt
Es findet im weiteren keine Überprüfung des Archivnamens statt.
PROC reserve (TEXT CONST name, TASK CONST archivetask)
- Wirkung: Wie oben, es wird zusätzlich bei folgenden Archivoperationen
(save, fetch, format, clear ..) geprüft, ob die Diskette den Archivnamen 'name' hat.
volume label
TEXT PROC volume label (TASK CONST archivetask)
- Wirkung: Liefert der Archivnamen der Diskette, die in dem durch 'archivetask' verwalteten Laufwerk ist.
- Fehler: Archiv nicht angemeldet
volume storage
PROC volume storage (TASK CONST task, INT VAR size, used)
- Wirkung: Der Archivemanager 'task' übergibt in 'size' die Kapazität, in
'used' den bereits belegten Speicherplatz der eingelegten Diskette.
Die Angabe erfolgt in Bytes.
- Beispiel:
reserve (archive a);
INT VAR size, used;
volume storage (archive, size, used);
IF size - used {\tt >} 32 * 1024
THEN put ("mehr als 32 KByte frei")
ELSE put ("weniger als 32 KByte")
FI
read
PROC read (TASK CONST task, BOOL CONST cyl,
INT CONST sector no, stream adress, stream length)
- Wirkung: Von der von 'task' verwalteten Diskette werden ab Beginn des
Sektors 'sector no' 'stream length' Byte gelesen und beginnend ab
Adresse 'stream adress' in den eigenen Standarddatenraum
geschrieben.
- Parameter:
- task:
- Archivmanager
- cyl:
- TRUE zylinderorientiertes Lesen
FALSE seitenorientiertes Lesen
- sector no:
- erster zu lesender Sektor auf Diskette
- stream adr:
- Adresse eines Datenobjekt im STDDS
- stream length:
- Anzahl Bytes, muß durch 512 ohne Rest
teilbar sein.
write
PROC write (TASK CONST task, BOOL CONST cyl,
INT CONST sector no, stream adress, stream length)
- Wirkung: Auf die von 'task' verwaltete Diskette werden ab Beginn des
Sektors 'sector no' 'stream length' Byte geschrieben. Beginnend ab
Adresse 'stream adress' wird aus dem eigenen Standarddatenraum gelesen.
- Parameter: siehe oben.
- sector no:
- erster zu schreibender Sektor auf der
Diskette
- Beispiel:
INT VAR x := archive blocks;
ROW 512 BYTE VAR buffer;
page;
putline("PATSCH....");
put ("Archiveblocks:");put (x); line (2) ;
read (archive a, TRUE, 1000, ADDR (buffer [1]), 512);
INT VAR return := int (buffer [100]);
put ("Wert ändern: ");
TEXT VAR tr := text (return) ;
editget (tr);
return := int (tr);
IF (0 < return) CAND (return < 255 )
THEN buffer [100] := byte (return)
FI;
line(2);
IF yes ("zurückschreiben")
THEN write (archive a, TRUE , 1000, ADDR (buffer [1]),
512);
FI;
read diskette
PROC read diskette (TEXT CONST dsname)
- Wirkung: Liest eine Diskette vollständig in den zuvor erzeugten Datenraum
'dsname' ein. Der Inhalt des ersten Sektors von Spur 0 der
Diskette findet sich zu Beginn der zweiten Seite des Datenraums
(also ab Adresse 0x1000). Das Einlesen einer 360K Diskette
erzeugt also einen Datenraum mit 91 ds pages.
- Bemerkung: Das Diskettenlaufwerk muß reserviert sein.
Die Prozedur beinhaltet einen Kontrolldialog.
write diskette
PROC write diskette (TEXT CONST dsname)
- Wirkung: Schreibt den Inhalt des Datenraums 'dsname' auf eine Diskette.
Der Inhalt des ersten Sektors von Spur 0 der Diskette ergibt sich
aus den ersten 512 Bytes der zweiten Seite des Datenraums usw.
(also ab Adresse 0x1000).
- Bemerkung: Der Datenraum 'dsname' sollte zuvor mit read diskette erzeugt
worden sein.
Das Diskettenlaufwerk muß reserviert sein.
Die Prozedur beinhaltet einen Kontrolldialog.
Ein Bandlaufwerk ist ein Archiv zur Speicherung großer Datenmengen. Die Übertragung zum/vom Band erfolgt dateiweise. Die Struktur eines beschriebenen Bandes
läßt sich so darstellen:
Volume header | file header, data, filemark | file header, data, ......
Im »Volume header« wird insbesondere ein Bandname volume name eingetragen.
Man kann auf einem Band nicht überschreiben, sondern nur anfügen. Das Band
kann nicht teilweise, sondern nur vollständig zurückgespult werden.
Der Manager für das Bandlaufwerk heißt STREAMER. Dieser Manager kommuniziert
systemseitig mit dem (ladbaren) Treiber des Streamercontrollers
(systemtask("S0")) und benutzerseitig mit irgendeiner Task, die eine Reservierung
des Bands vorgenommen hat. Die benutzerseitige Schnittstelle ähnelt der des
Diskettenlaufwerks.
Erläutert sind nicht nur die spezifischen Aufträge an den Streamermanager, sondern
auch die normalen Dateimanageraufträge, da hier gewisse Unterschiede zu beachten
sind.
check
PROC check (TEXT CONST name, TASK CONST streamer)
- Wirkung: Prüflesen des Datenraums 'name' durch streamer auf der
eingelegten Bandkassette. Es werden keine Daten übertragen.
Falls fehlerfrei gelesen werden kann, erscheint eine
dementsprechende Meldung, sonst eine Fehlermeldung.
PROC check (THESAURUS CONST thes, TASK CONST archivetask)
- Wirkung: Prüflesen aller im Thesaurus 'thes' angegebenen Datenräume
durch steamer.
clear
PROC clear (TASK CONST streamer)
- Wirkung: Initialisiert das eingelegte Band. Falls durch reserve ein Archivname eingestellt wurde, erhält das eingelegte Band diesen Namen
(volume label)
Da die Initialisierung dem Löschen aller auf dem Band
vorhandenen Dateien entspricht, wird vorher ein Kontrolldialog
geführt.
Die Dateien werden nicht physisch gelöscht. Es wird nur »end of
tape« direkt hinter den »Volume Header« geschrieben.
format
PROC format (TASK CONST streamer)
- Wirkung: Formatiert das Band. Da ein Band automatisch beim Beschreiben
formatiert wird, ist formatieren nur sinnvoll, falls ein beschriebenes Band physisch gelöscht werden soll. Beinhaltet clear.
release
PROC release (TASK CONST streamer)
- Wirkung: Die Reservierung des Streamermanagers wird beendet.
reserve
PROC reserve (TASK CONST streamer)
- Wirkung: Reserviert den Streamermanager. Falls eine andere Task "t"
diesen bereits reserviert hat, erscheint die Meldung:
Band wird von Task "t" benutzt
PROC reserve (TEXT CONST name, TASK CONST archivetask)
- Wirkung: Wie oben, es wird zusätzlich bei folgenden Archivoperationen
(save, fetch, format, clear ..) geprüft, ob das Band den Archivnamen 'name' hat.
volume label
TEXT PROC volume label (TASK CONST archivetask)
- Wirkung: Liefert der Archivnamen der Diskette, die in dem durch 'archivetask' verwalteten Laufwerk ist.
- Fehler: Archiv nicht angemeldet
PROC copy (..., TASK CONST streamer, TEXT CONST pathname)
PROC move (..., TASK CONST streamer, TEXT CONST pathname)
PROC save (..., TASK CONST streamer, TEXT CONST pathname)
- Wirkung: Anfügendes Schreiben. Auf einem Band kann nicht überschrieben
werden. Falls ein Datenraum mit dem angegebenen Namen auf
dem Band ist, so wird der »alte« Datenraum umbenannt und der
in einer der obigen Prozeduren angegebene »hinten« auf das
Band geschrieben.
Die Umbenennung des schon auf dem Band befindlichen Datenraums erfolgt durch:
text (pathname) + "." + text (filenumber) + "#"
- Bemerkung: Wegen des Formats der Fileheader auf dem Band werden Namen
so gekürzt, daß sie maximal 99 Zeichen lang sind:
subtext (pathname, 1, 90) + text (filenumber) + "#"
PROC create (TEXT CONST pathname, TASK CONST streamer)
PROC delete (TEXT CONST pathname, TASK CONST streamer)
PROC move (TASK CONST streamer, TEXT CONST pathname,...)
- Wirkung: Diese Aktionen sind auf einem Band nicht durchführbar.
Next: Kommunikation mit Terminals
Up: L3 Referenzhandbuch
Previous: Intertask Kommunikation
Michael Hohmuth
Sun Mar 31 04:49:53 MET DST 1996