next up previous contents index
Next: Kommunikation mit Terminals Up: L3 Referenzhandbuch Previous: Intertask Kommunikation

Managertasks

Einführung

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.

Thesaurus

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.

Operationen auf Thesauri

tabular6264

tabular6269

tabular6274

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

Verknüpfungen

+

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.

Verwaltung von Objekten

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.

tabular6610

tabular6618

tabular6625

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

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"

Manager Operationen

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.

tabular6841

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:

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.

Managerprozeduren

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;

Zugriffsrechte

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.

Prozeduren

tabular7310

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.

Aufträge an Objektmanager

Die folgenden Prozeduren sind die standardmäßig verfügbaren Aufträge an Objektmanager.

tabular7407

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.

Archivemanager

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..).

Disketten

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.

Operationen des Archivmanagers

tabular7923

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.

Bandlaufwerk

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.

Operationen des Streamermanagers

tabular8140

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

Besonderes Verhalten

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 up previous contents index
Next: Kommunikation mit Terminals Up: L3 Referenzhandbuch Previous: Intertask Kommunikation

Michael Hohmuth
Sun Mar 31 04:49:53 MET DST 1996