[front] [english] und jüngste Änderungen v06 QVFS-Archiv

Zusätzlich gelten die Nutzungsbedingungen der ersten Seite "index.html".


QVFS

QDOS Virtuelles File System - v03 - v05

Erste Prüfversion eines Dateiensystems nach Internet-Vorbild für den QL
Jüngste Ergänzungen und Änderungen finden sich zuerst in der englischsprachigen Seite.


Copyright (C) 1997 by H.-Peter Recktenwald, Berlin, alle Rechte vorbehalten.
H.-Peter Recktenwald, D-12159 Berlin, Albestr. 21; email: phpr@snafu.de

Verwendung des QVFS als Dateiensystem in einem Computer ist kostenlos freigestellt.

Sollten Teile der Nutzungsbedingungen rechtsunwirksam sein oder angefochten werden, so gilt die Erlaubnis zur Verwendung des QVFS insgesamt und ohne Einschränkung als nicht erteilt.

Alle frei verfügbaren Angaben sind als HTML-Dokumente im Internet zu finden und dürfen aus dieser Quelle nur inhaltlich unverändert, ggf. auch in andere Sprachen übersetzt, als Klartext oder in der dort gegebenen Form und mit einer entsprechenden Möglichkeit der Betrachtung weitergegeben werden. Maßgeblich ist die englischsprachige Beschreibung, sie wird vorrangig aktuellgehalten.

Für eigene Programme erforderliche Details a.A., QVFS-Quelltexte stehen nicht zur Verfügung.

Quelle der QVFS-Dokumentation:

http://www.snafu.de/~phpr/qhpqvfs.html

Nutzung und Weitergabe der unter dem Namen "QVFS" gehenden Software- und Textsammlung zu einem QDOS-kompatiblen Filesystem nach Internet-Konvention ist ganz und/oder in Teilen mit der Einschränkung freigestellt, daß dies in beliebigem Zusammenhang mit einer im Austausch geforderten oder erbetenen Lieferung oder Leistung welcher Art auch immer nur nach Lizenzvereinbarung mit dem Autor der QVFS-Sammlung gestattet ist, widrigenfalls die aktiv an Erzeugung oder Versand solcher Artikel Beteiligten bereits durch die Tatsache der Mißachtung einer genannten Voraussetzung auf ihre Rechte daran verzichten und bei sofortiger Vollstreckbarkeit einzeln gesamtschuldnerisch für die zur Lizensierung anfallenden Gebühren nebst allen Zusatzkosten bei banküblicher Verzinsung für Überziehungskredite ab dem festgestellten Zeitpunkt des Lizenzverstoßes in der zu dem Zeitpunkt geltenden Höhe haften, da der Autor des QVFS davon Kenntnis erhielt.
Die Höhe der Lizenzgebühren ist beim Autor zu erfragen, einen Anhaltspunkt geben die im englischsprachigen Text zum QVFS genannten Zahlen.


Das QVFS richtet ein Filesystem nach den Konventionen des virtuellen Internet Filesystems ein. Es folgt zugleich weitgehend den im LINUX gängigen Konventionen und stellt eindeutige Verbindungen aller vorhandenen Geräte (devices) zum QDOS-Filesystem her, einschließlich der "einfachen" Devices, wie z.B. SER oder PIPE. Wodurch mit dem QVFS zugleich die einheitliche Adressierung sämtlicher Kanaltypen möglich wird.

Zugriffsrechte für einzelne Dateien wurden (noch) nicht vorgesehen, es sind jedoch ausreichend Hilfsmittel vorhanden, mit denen Dateien gegen unerlaubten Zugriff gesichert werden können - s.u.

Das QVFS wurde im QL mit MINERVA und GoldCard entwickelt und dort wie auch in der QXL mit SMSQ 2.76 erprobt. Wiewohl auf andere Varianten Rücksicht genommen wurde, sind sichere Aussagen dazu mangels geeigneter Ausstattung nicht möglich.

Im QL mit Original-ROM wird das System möglicherweise aufgrund der Lage auch der Deviceverkettung im nicht änderbaren Speicher unbrauchbar sein. Einzig MINERVA würde wegen anderer Tabellenstruktur auch dann den Einsatz des QVFS gestatten. Funktion mit MINERVA ist gegeben, das weitere konnte aus o.g. Grunde ebenfalls nicht geprüft werden. Ansonsten eignet sich die Erweiterung für jede QDOS-Variante, auch ohne TK2 oder Äquivalent, und mit nur dem ursprünglichen MDV-Filesystem.

Der Code ist ROM-tauglich.
Mehrfaches Laden ist unschädlich.

Mit LRESPR oder RESPR(8000)/LBYTES/CALL wird der Code geladen und, sofern der Aufruf aus dem ersten *Basic (Job 0) erfolgte, das QVFS dem System eingegliedert. Es ist dann nach Durchlaufen der weiter unten beschriebenen Anmeldeprocedur einsetzbar. Im einfachsten Falle genügt dazu:

LRESPR"qvfs_byt"
ch = FOP_DIR("VFS .opn")
id = FOP_DIR("VFS .dev flp2_inet_devices")
id = FOP_DIR("VFS .nam flp2_dateien")

wobei wenigstens die Datei "flp2_inet_devices" bereits vorhanden und gemäß untenstehender Beschreibung mit den Device-Zuordnungen besetzt sein muß.

FOP_DIR liefert zuerst die übliche *Basic-Kanalnummer. Weitere Aufrufe geben dann bei Erfolg die ID des jobeigenen VFS-Kanals zurück, sonst den Fehlercode.
VFS_FOP(4,...) kann gleichermaßen benutzt werden, und hilft, wenn sonst die zu übergebende Textlänge intern auf irgendeinen zu kurzen Wert begrenzt wird. Beschreibung der Funktion weiter unten.

Das QVFS ist nun bereits einsatztauglich, vorausgesetzt, daß in allen Pfaden die Zuordnungsdateien zur Inet- nach QDOS-Namens-Umsetzung vorhanden sind.

Zuordnen der Dateien eines Geräts in einfachster Form etwa

VFS_SYNC"flp2_"

Alle so angemeldeten QDOS-Pfade sind, sofern die zugehörigen Laufwerke in der Deviceliste eingetragen sind, nun auch aus dem Inet-Filesystem zugänglich. Die dort verzeichneten Namen unterscheiden sich in diesem Fall einzig dadurch, daß jeder Unterstrich in QDOS-Namen durch einen Divisionsstrich in Inet-Namen ersetzt ist, sofern er wenigstens fünf Zeichen vor dem Namensende steht. Der letzte Unterstrich im Abstand von höchstens fünf Zeichen zum Namensende wird durch einen Punkt ersetzt, sofern der Teil davor nicht ein Directory bezeichnet.

Mit den angegebenen Maßnahmen ist das Inet-Filesystem funktionstauglich eingerichtet und der Zugriff auf QDOS-Dateien ist auch mittels der Inet-Filenamen in gewohnter Form möglich.


        <lf>            ASCII-Code für ein Byte mit dem Wert 10.
        <nl>            "new line", Zeilenvorschub, im QL identisch <lf>.
        <nul>           ASCII-Code für ein Byte mit dem Wert 0.
QVFS v01:               Als Begrenzungszeichen symbolisch für
                        jeden Code unter 32, ausgenommen <lf>, Code 10.
        Devicename      Gerätekennung, ggf. mit Laufwerksnummer.
        Directory       Dateienverzeichnis,
                        Subdirectories sind Unterverzeichnisse.
        File            Aufzeichnungseinheit in einem Datenträger.
        FS              File-System.
        FSS             filing sub-system innerhalb des QDOS.
        Header          beschreibender Teil am Anfang eines Datenblocks.
        HD, home        symbolischer Name für das einem VFS-Kanal-Besitzer
                        zuzuordnende Standardverzeichnis nebst Pfad dorthin.
        Inet            Internet.
        Inetname, Iname Filename im Internet-FS.
        IOSS            Ein-/Ausgabe-Hilfssystem (i/o-Subsystem) im QDOS.
        Job 0           der erste *Basic-Job, im Standard-QL der einzige.
        N.I.            vorbereitet, (noch) NICHT INSTALLIERT.
        Pfad            zum Auffinden einer Datei z.B. mit DIR erforderlicher
                        führender Teil des Filenamen, nur bestehend aus den
                        vorangestellten Directory-Namen und dem Devicenamen.
        Qdosname        Filename im QDOS-FS.
        SBasic          das SuperBASIC des QL, und was wirklich compatibel
                        dazu ist - derzeit ist nichts dergleichen bekannt.
        *Basic          alles, was Optimisten ein für die QDOS-Rechner taug-
                        liches "compatibles" Basic nennen mögen, ungeprüft.
        WD              aktueller Pfad, "working directory".

Zum Umgang mit dem QVFS


Maximale Länge von Pfad samt Filenamen im Inet-System ist 255 Zeichen; Mindestanforderung für die von einem Empfänger zu verarbeitende Länge von Pfad- und Fileangabe insgesamt ist 63 Zeichen.

In Pfad-/Filenamen ist mit Ausnahme des Schrägstriches "/" ab dem Code 32 (Leerzeichen) jedes Zeichen bis zum Code 255 zulässig.

Reservierte Namen und Einzelzeichen:

Sonderfunktion haben folgende Zeichen, sofern sie am Anfang eines File- oder Pfadnamen stehen:

Im Standardmodus des QVFS gelten als führende(s) Zeichen einer Pfadangabe nur:

	/	folgt ganzer Pfad einschließlich der Devicebezeichnung;
	./	symbolisiert das "working directory", den aktuellen Pfad;
	~/	symbolisiert den Pfad zum 'home'-Directory
		(Tilde auf Taste CTR/< im QL, in der QXL auf der "#"-Taste).

Jeder andere Namensanfang wird abgewiesen, sofern nicht ein "/" irgendwo im Namen steht. In letzterem Falle wird die betr. Datei im "working directory" gesucht. Erst danach werden alle Namen, die nicht als Inet-Typ erkannt wurden, zu den QDOS-Devices selbst weitergereicht.

Im Inet-Vorzugsmodus werden außerdem alle Namen ohne "/" im "working directory" gesucht und bei Mißerfolg mit err.bn (-12) quittiert.

Im QDOS-Modus werden Inetnamen generell nicht ausgewertet, das QVFS tritt dann nicht in Erscheinung.

Innerhalb eines Pfades:

	/../	Übergang in das nächst übergeordnete Directory.
	pfad/.	Inet-Directory, in Gestalt der betr. Zuordnungsdatei,
	pfad/..	die Deviceliste, wenn das Basis-Directory erreicht ist.

Symbolische Namen der Systemdateien:

        .opn    Codename zum Einrichten der VFS-Kanal Datenstruktur.
        .dev    Datei der angemeldeten QDOS-Devices;
N.I.:   .dir    Datei der Inet-Namen des betr. (sub-)Directory;
N.I.:   .lok    (nur lesbare) Datei unzugänglicher QDOS-Devices;
        .nam    Datei für die Zuordnung von Inet- und QDOS-Namen.

Schreibweise:

        Groß- und Kleinschreibung wird bei beiden Typen von File- und
        Pfadnamen unterschieden. Z.B. bezeichnet der Name
                /tmp/krause
        EINE ANDERE DATEI als
                /tmp/Krause

        Diese Konvention entspricht dem Umgang im Linux/Unix, nicht aber
        in allen Fällen auch dem Internet. Sie wurde dennoch gewählt, da
        es im QL nicht ganz einfach und vor allen sehr zeitraubend ist,
        die je nach Landessprache unterschiedlich codierten Umlaute und
        Sonderzeichen in einheitliche Schreibweise zu wandeln. Der möglichst
        schnellen Ausführung der Device-Routinen wurde Vorrang eingeräumt.
        - Das läßt sich ändern, ggf. bitte Nachricht an den Autor. -

Die in den betr. Systemdateien eingetragenen Pfad- rsp. Filenamen müssen mit einem <nul>-Zeichen abgeschlossen werden. Die <nul> kann darum nicht im Namen selbst vorkommen. Ausgeschlossen sind weiter alle anderen Zeichen bis zum Code 31. Der Rest ist in den Pfad-/Dateinamen beider Systeme zulässig. - Ein kleines (aber sehr vielseitiges) Editorprogramm, bei dem auch die <nul> über die Tastatur eingegeben werden kann, ist dem QVFS-Archiv beigefügt.

Pfade werden intern in File- und Gerätenamen ("device") unterteilt. Letztere bestehen aus bis zu drei Großbuchstaben, einer angehängten Ziffer im Bereich 1 bis 8 und daran angehängt einem Unterstrich.
Den bis zu fünf Zeichen des Devicenamen können bis zu 36 beliebige Zeichen folgen, es gibt keinerlei Sonderzeichen, jeder Code ist zulässig. Im QVFS ist jedoch die Verwendung der ASCII-<nul> nicht möglich (s.o.), sie kann darum, wie auch die anderen Zeichen mit einem Code kleiner 32, dazu benutzt werden, eine QDOS-Datei sicher gegen Zugriff aus dem QVFS zu schützen.

Die Schreibweise Groß oder Klein von Filenamen ist im QDOS zwar gleichgültig, wird aber bei der Auswertung der Zuordnungsdateien berücksichtigt und muß darum im QVFS stets beachtet werden.
Dabei nicht zu vergessen, daß im QVFS ggf. nur aufgrund ihrer Schreibweise unterschiedene Dateien vom QDOS gleichbehandelt werden!

Eingeschränkt wird die maximale Gesamtlänge von 41 Zeichen ggf. durch den TK2-Fileserver, der neben Netznummer und Zieldevice für den Filenamen nur bis zu 31 Zeichen weitergeben kann, da der Name des Zieldevice zu den erlaubten max. 36 Zeichen des Namensanteils beiträ:gt.
Im QVFS werden QDOS-Namen bis zur Maximallänge von 41 Zeichen und ggf. abschließender <nul> übernommen, alle weiteren Einschränkungen, soweit nicht vom QDOS selbst zu bewältigen, sind vom Anwendungsprogramm zu kontrollieren.
Bei korrekt und QDOS-konform aufgebauten Programmen braucht im allgemeinen nur die Einhaltung der Grenzen eigener Datenpuffer überwacht zu werden. Alles weitere kann einfach dem QDOS-FSS überlassen bleiben, das die Tauglichkeit eines Namen durch den Fehlercode in D0 entsprechend mitteilt.

Das QVFS:

Für die sichere Arbeit in jedem QDOS-artigen System können bis zu 31 Zeichen als stets verfügbare Maximallänge für Pfade und Namen angenommen werden. Wodurch sich immerhin mehr als 10^20 Files bezeichnen lassen. Das wären z.B. über eine Milliarde möglicher Namen für jedes einzelne Byte einer 2-Giga-Byte Festplatte, was sicher für alle Zukunft ausreichend sein dürfte.

Die vorangestellten Devicenamen werden daran erkannt, daß an dritter bis fünfter Position im Normalfalle oder an dritter Position bei den Dateien des TK2-Fileservers ein "_" Unterstrich steht, und die erste dieser ggf. zwei Gruppen einen gültigen Devicenamen bezeichnet. Dieser Teil wird durch das IOSS im QDOS vom Namen abgetrennt, nachdem zugehöriges Gerät und Laufwerk erkannt wurden. Wieweit der Rest nun Sub-/Directories oder einfache Filenamen bezeichnet, ist belanglos, im QDOS existieren Directories als ordnende Elemente nur auf System-Ebene. Sind sie vorhanden, enden ihre Namen stets mit dem Unterstrich; ist ein so benanntes Directory nicht vorhanden, behandelt das System den Namen in derselben Weise wie jeden anderen Filenamen auch.

Aus diesen Namenskonventionen im QDOS resultiert der Extremfall maximal 14 (ohne Netzwerk 16) einander nachgeordneter Sub-Directories nebst dem Filenamen, alle aus nur einem Zeichen und dem Unterstrich bestehend.
Vom QDOS her sind beliebige Zeichen in den Namen zulässig. Um aber in den Fällen, wo die automatische Devicevorgabe der TK2-Aufrufe aus dem *Basic einsetzt, für die Inet-Seite Eindeutigkeit sicherzustellen, werden die Namen nur an das QDOS-FS weitergegeben, wenn sie nicht mit einem Divisionsstrich beginnen. Derartige QDOS-Filenamen sind innerhalb des QVFS also unbrauchbar.

Die Zuordnungsdateien ausgenommen kontrolliert das QVFS die QDOS-Kanäle sonst nicht.

Es gibt darum von dort aus keinerlei Einschränkungen. Ergänzt um die "w/o"-OPEN-Variante bleibt die Gerätedefinition sonst völlig unbeeinflußt und damit im gesamten Umfang wie gewohnt steuerbar.

Einzige Begrenzung ist die Gesamtlänge eines Inet-Filenamen einschließlich des ganzen Pfades auf maximal 255 Zeichen. Dabei zu beachten, daß diese Anzahl das per conventionem erlaubte Maximum für die größte Pfadlänge ist, nicht aber bindend vorgesehene Anforderung. Die Mindestlänge, mit der jedes über das Inet erreichbare Programm umgehen können muß, beträgt 63 Zeichen. Ein Sender kann also nicht voraussetzen, daß 255 Zeichen lange Namen stets empfangen werden können. Die Verwaltung solcher Eigenheiten bleibt allein den jeweiligen Programmen überlassen, Aufgabe des QVFS ist dergleichen nicht.

Die in den betr. Systemdateien eingetragenen Inet-Pfad-/Filenamen müssen an Ende mit einer ASCII-<nul> als Begrenzungszeichen versehen sein und dürfen weder diese noch Zeichen mit einem anderen Code unterhalb 32 enthalten. Groß- und Kleinschreibung werden unterschieden.

Device-, Directory- und Filenamen werden einfach daran erkannt, daß sie in der richtigen Anordnung in den jeweiligen Zuordnungsdateien gefunden werden. Darum kann jedes beliebige Gerät, das im QDOS bekannt ist, auch eines ohne Directories (SER etc.), in das Inet-FS des QVFS eingeordnet werden.

Solange das virtuelle Filesystem aktiv ist, können alle freigegebenen Dateien mit ihren Inet-Namen geöffnet werden. Daneben steht das QDOS-FSS weiterhin und mit den wenigen o.g. Ausnahmen uneingeschränkt zur Verfügung.

Ist das Filesystem einmal eingerichtet, wird es von jeder Anwendungsebene aus in derselben Weise zugänglich, wie die Filesysteme im IOSS des QDOS. Nur bei OPEN sind neue "Umgangsformen" zu beachten.
Hier gibt man nicht mehr den bekannten Devicenamen an, gefolgt vom Filenamen, dem ggf. auch weitere Namensteile für einen (Sub-)Directory-Pfad vorangestellt sind, sondern nur den Namen mit vorangestelltem rsp. nach o.a. Muster abgekürzt bezeichnetem Pfad. Darin ist im Inet-System auch die Entsprechung der QDOS-Laufwerks- und/oder Geräteangabe enthalten.

Die für die Verwendung im QVFS zugelassenen QL-Geräte (beliebige "Devices", wo erforderlich mit Laufwerksnummer, und ggf. mit vorangestelltem "N" und Netzwerk-Nummer) müssen in eine Systemdatei eingetragen werden, bevor sie in diesem FS erkannt werden können. Die genauen Modalitäten sind weiter unten beschrieben.

Die QDOS-Namen können beliebige QL-Pfade darstellen, es ist also mehr als nur die reine Laufwerksangabe zulässig.
Directory-Trennung für die Pfade des Inet-Filesystems ist der "/" Schrägstrich nach rechts.

Der sonst nötige Laufwerksname verbirgt sich hinter dem ersten Teil des Pfadnamen, oder er ist der irgendwann zuvor als jobbezogener Systempfad (HD rsp. WD) angegebene Name, wenn er nicht ausdrücklich erwähnt wird. Das QVFS stellt zwei solcher jobeigenen Pfade zur Verfügung, als "WD" zum aktuellen "working" Directory und als "HD" zum "home" Directory eines bestimmten Jobzweiges. Beide werden mit eigenen QDOS-Traps (auch aus dem *Basic) festgelegt rsp. verändert, wobei das beim HD - das ist der einzige Unterschied gegenüber dem WD - nur dem Besitzerjob und dem Job 0 möglich ist.
Vorgabe sind die Daten des im selben Jobzweig ältesten Vorgängers mit offenem VFS-Kanal.

    kanal = FOPEN("/floppy/eins/directory/nochwas/filename.extn")

Die TK2-Devicevorgaben sind für das QVFS belanglos, können jedoch abhängig von ihrem Inhalt empfindlich stören und ungewollt neue Files einrichten: Gegen die ungeignete Fehlerbehandlung der OPEN-Routinen im TK2 ist kaum ein Kraut gewachsen - außer gezielt falscher Fehlercodierung, wovon im QVFS der zuverlässigen Auswertung halber aber kein Gebrauch gemacht wird. Um die dadurch oft entstehenden Irrläufer zu vermeiden, wird untersucht, ob das erste Zeichen nach einer möglichen TK2-Vorgabe ein "/" Divisionsstrich ist. Trifft das zu, geht der Fehlercode err.bn (-12) zurück, der jede weitere Device-Suche im QDOS unterbindet.

Die Namensumsetzung unmittelbar von QDOS-Devices nach Inet-Directories wird in der jeweiligen Zuordnungsdatei Datei notiert. Jeder QDOS-Job kann einen Satz solcher Dateien verwenden, der ggf. für die Abkömmlinge dieses Jobs zugleich Vorgabe ist. Weitere Versuche, eine der grundlegenden Systemdateien anzumelden, geben statt einer Fehlercodierung die betr. Kanal-ID in D0 zurück.
Bis zu deren Installation gelten die Angaben des Besitzerjobs.

Ist im ganzen Jobzweig zu den Vorgängern hin noch kein VFS-Kanal mit bereits angemeldeten Systemdateien vorhanden, wird der Fehler err.nf (-7) zurückgegeben.

Neben den unten erkärten Dateimarkierungen ist insbes. die Tatsache ein wesentliches Sicherheitsmoment, daß nur die freigegebenen Laufwerke, ggf. sogar nur ausgewählte Directories, vom QVFS und damit von Inet-Programmen überhaupt erkannt werden können. Der Rest ist völlig dicht abgeschottet.
Die Zuordnungsdatei für die QDOS-Devices kann, sobald sie beim QVFS angemeldet wurde, nur noch gelesen werden, sodaß dort keinerlei Eingriffe möglich sind.
Die Filenamen-Zuordnungsdateien sind insofern geschützt, als sie nur für die Namenssuche während des OPEN-Vorganges geöffnet werden. Da aber während dieser Zeit das System keine anderen Aktionen zuläßt, ist es von außen her nicht möglich, deren Namen festzustellen. Zum andern sind diese Dateien damit auch sehr sicher vor zerstörerischen Irrläufern im eigenen System.

Da die Inet-Namen im gewöhnlichen QDOS-Filesystem nicht vorkommen, ist der direkte Zugriff auf QDOS-Files darüber nicht möglich. Dabei ist nur darauf zu achten, daß von der QDOS-Seite her nicht Dateien angelegt werden, deren jeweiliger Name als Inet-Name interpretierbar ist. Diese Bedingung ist leicht erfüllbar und bringt keinerlei Nachteile mit sich.
Besondere Dateien lassen sich weiter sehr sicher schützen, indem man in ihre Namen ein <nul>-Zeichen einfügt, das unbedingte Endmarkierung für alle im QVFS auswertbaren Namen ist, im QDOS aber kein Hindernis darstellt.

FORMATieren ist mit den Inet-Namen nicht möglich, da die betr. Systemaufrufe vom QDOS garnicht erst in die erforderliche Namens-Decodierung durchgereicht werden. Damit sind derartige äußere Angriffe zuverlässig unterbunden.

In Gestalt einer Sperrliste ist eine weitere Schutzform vorbereitet. Dort können QDOS-Namen angegeben werden, die unter allen Umständen unzugänglich bleiben sollen. Diese Datei selbst sollte nicht in einem gesperrten Directory aufbewahrt werden, da sie sonst erst nach erneutem Start des gesamten Systems und nur ohne das QVFS wieder freigegeben wird. Da aber solch eine zusätzliche Kontrolle sehr viel Zeit erfordert, ist sie noch nicht vollständig installiert. Sie wird nur bei dringendem Bedarf in einer späteren Version komplettiert und zugänglich gemacht werden.

Programme, die aus einer Kanal-ID den zum Öffnen desselben benutzten Namen ermitteln, werden normalerweise scheitern. Sie liefern nur den Oberbegriff "VFS" rsp. "VFC", unter dem sämtliche Kanäle gehen, die das QVFS verwaltet. Zur genauen Analyse sind die Hilfsdaten aus der "VFC"-cdt heranzuziehen, oder die geeigneten QDOS-Aufrufe, wie sie in der einschlägigen Literatur zum System beschrieben sind (ein Beispiel gibt "!CHNAME" aus dem F6-Forth).

Hier wie bei den weiter unten aufgeführten Beispielen mit den Standard-Aufrufen rsp. den Erweiterungen des TK2 gilt die im *Basic gänzlich unsinnige Längenbegrenzung auf 41 rsp. 39 Zeichen für den an eine der OPEN-Varianten übergenen Namen - unsinnig insofern, als die Länge ohnehin in den QDOS-Traps selbst hinreichend überprüft wird. Die Abfrage im *Basic ist bestenfalls geeignet, eine fragwürdige Sicherheit dort vorzutäuschen, wo ohnehin keine Gefahr für System oder Programme besteht.
Die beim QVFS nachgesetzte Procedur OPEN_WO und die Aufrufe der IO2-Sammlung, wo es keine solche Kontrolle gibt, belegen dies. Dergleichen kann für alle OPEN-Modi ohne jedes Risiko definiert und benutzt werden (s. "VFS_FOP").

nn = FOPEN("VFS")
macht zu Prüfzwecken einen VFS-Kanal auf, in den nicht geschrieben werden kann, und bei dem Leseoperationen nicht möglich sind. Der OPEN-Aufruf gibt 0 zurück, wenn der aufrufende Job noch keinen VFS-Kanal besitzt, sonst dessen Kanal-ID. Es kann immer nur ein Kanal für jeden Job geöffnet werden.
CLOSE wirkt auf den mit OPEN geöffneten Kanal in gewohnter Weise.
Schreiboperationen gehen unter, Leseversuche werden mit dem Fehlercode err.ef (-10) quittiert.

nn = FOP_IN("VFS")
wie OPEN, jedoch wird ggf. statt der Kanal-ID die Fehlermeldung err.iu (-9) zuückgegeben.
CLOSE wirkt wie nach OPEN. Dient insbes. als Prüfaufruf, u.a. für FTEST etc. eingerichtet.

nn = FOP_DIR("VFS .cmd qdosdevice_directory_filename")
legt eine der Systemdateien an; ".cmd" steht hier symbolisch für eine der weiter unten beschriebenen Marken .dev, .lok, .dir, .nam.
CLOSE schließt den VFS-Kanal und, wenn kein anderer VFS-Kanal sie benutzt, dessen Systemkanäle. Der aufrufende Job erkennt danach die Inet-Namen nur, wenn im übergeordneten Jobzweig noch ein VFS-Kanal vollständig eingerichtet ist. Dann gelten dessen Einstellungen.
Noch offene reguläre Files können in jedem Falle weiterbearbeitet werden.

Um die überaus wortreichen Pfadbeschreibungen für Inet-Filenamen übertragbar zu halten, ist es sinnvoll, die QDOS-Zuordnung schon ab der ersten Directorystufe so kurz wie irgend möglich zu wählen.
Bei der automatischen Umsetzung wird nach Möglichkeit die Endung beibehalten, dazu der Filename ab dem letzten Unterstrich vor dem Trennzeichen zur Endung. Das Markierungszeichen vor der Endung gilt im QDOS als Teil des Filenamen ohne besondere Funktion.
Die "/" Schrägstriche der Inet-Namen werden stets als "_" Unterstriche übernommen, egal, ob sie "echte" Directories bezeichnen, oder nicht. Der letzte "_" Unterstrich wird in einen "." Punkt umgesetzt, sofern er nicht einen Directorynamen abschließt und er vom Namensende her gezählt an maximal fünfter Position steht.
Namensteile, die wegen zu langer Pfadbezeichnung nicht vollständig übernommen werden können, werden in eine Kurzform umgesetzt, dergestalt, daß der QDOS-Name aus dem ersten Buchstaben des Inet-Filenamen und dann von dessen Ende her bis zum Erreichen der zulässigen Länge zeichenweise zusammengesetzt wird.

Leider ist es nicht möglich, schon bei der Directory-Erzeugung automatisch Abkürzungen einzusetzen, da beim OPEN-Aufruf für das Filesystem noch nicht klar ist, ob aus der gerade zu eröffnenden Datei ein Directory werden soll: Es gibt keine QDOS-Operation zum unmittelbaren Anlegen neuer Directories; sie entstehen aus existierenden leeren Dateien durch eine besondere Trap#3-Operation.
Dies muß darum von der Anwenderseite her verwaltet werden.

Folgende strenge Namens-Konvention erspart umständliche Parameterkorrekturen und dient vor allem der schnelleren Ausführung:

        Alle Angaben sind durch je ein einziges Leerzeichen zu trennen.
        Führender Schrägstrich beim Inet-Namen sowie Schrägstrich rsp. Unter-
                strich an Ende eines Directorynamen müssen angegeben werden.
        Bei den OPEN-Varianten zur Anmeldung muß VFS großgeschrieben werden.
        Die Inet-Kennungen der Systemdateien müssen kleingeschrieben werden.

Jeder Job kann einen eigenen Satz Systemdateien einrichten, Vorgabe ist die zum jeweiligen Besitzerjob gehörende Dateiengruppe. Die Suche danach geht im aktuellen Jobzweig zurück bis zum Job 0 und sie gilt, wenn ein Filename nicht explizit angegeben oder die Datei nicht gefunden wurde.

Eine mit ".dev" anzumeldende Datei muß in einem jederzeit zugänglichen Laufwerk vorhanden sein. Sie kann aus Sicherheitsgründen durch das VFS oder andere Teile des Inet-Filesytems in ihrem Inhalt nicht verändert werden. Die unter ".dev" angemeldete Datei muß darum alle nötigen Eintragungen enthalten, bevor ihr Name einem offenen VFS-Kanal mitgeteilt wird.

Die Geräte-Eintragungen lassen sich z.B. von Hand nach folgendem Muster in einem Editor vornehmen:

        InetDir<nul>  devN_<nul>
"<nul>" symbolisiert hierbei die ASCII-<nul>
"devN_" ist das QDOS-Laufwerk, ggf. auch um einen Directorypfad ergänzt,
"InetDir" ist das zugeordnete primäre Directory in Inet-FS-Nomenklatur.

Allgemein (s.oben):

        /var/<nul> win1_v_<nul> 
        /tmp/<nul> win1_t_<nul>
        /usr/<nul> win1_d_<nul>

Wenn die Unterteilung nicht wirklich erforderlich ist, lassen sich auch mehrere Inet-Directorystufen, ggf. einschließlich der Device-Zuordnung, zu einer QDOS- Stufe zusammenfassen. In der Device-Datei könnte dann etwa stehen:

        /www.snafu.de/~phpr/<nul>    win2_inet_phpr_<nul>
QVFS v01: Die anfangs vorgesehenen zusätzlichen Marken "qdos" rsp. "pcdos" entfallen.
Die einzelnen Zeilen dürfen einschließlich der Zeilenendmarkierung ( <lf> oder <cr><lf>) bis zu 448 Zeichen lang sein, allerdings wirken sich überlange Zeilen stark verzögernd auf die Ausführungszeit der OPEN-Varianten aus. Die bestimmenden Angaben müssen in den ersten 383 Zeichen jeder Zeile stehen.

Mit einem "#" Nummern-Zeichen (sharp) eingeleiteter Text bleibt unbeachtet.

ch = FOP_DIR("VFS .opn")
legt für einen Job den Systemkanal an, über den später die Verwaltung der Systemdateien dieses Jobs abgewickelt wird.

Ist im selben Jobzweig hin zu älteren Jobs schon ein VFS-Kanal vorhanden, und sollen dessen Daten als (änderbare) Vorgabe übernommen werden, genügt für die Anmeldung der Systemdateien dieser eine OPEN_DIR-Aufruf.
Der erste aus einem bestimmten Job geöffnete VFS-Kanal wird neu angelegt, die weiteren Anmeldungen geben dessen ID statt der Fehlercodierung in D0 zurück, oder den QDOS-Fehler ERR.BN (-12), wenn die betr. Systemdatei weder gefunden noch - dann leer - angelegt werden konnte.

Nach dieser allgemeinen Anmeldung können die Systemkanäle geöffnet werden:

id = FOP_DIR("VFS .dev laufwerk_qdosdirectory_filename")
meldet die Datei ".dev" an und teilt dem Filesystem mit, unter welchem vollständigen(!) QDOS-Namen diese Systemdatei zu finden ist.

Jene wird sofort geöffnet und automatisch erst dann geschlossen, wenn alle VFS-Kanäle, die sie benutzen, ihrerseits ebenfalls geschlossen sind. Dies geschieht auch, wenn die Kanäle durch Entfernen aller beteiligten Jobs vom QDOS aufgegeben werden. Besitzer der Systemkanäle ist immer der Job 0.

Das QVFS ist erst voll funktionsfähig, wenn alle Systemdateien von demselben Job angemeldet wurden. Das sind neben ".dev" die Dateien ".lok", ".dir" und ".nam", die an jeweils unterschiedlichem Ort liegen können. Wenigstens ".dev" und ".nam" müssen angemeldet worden sein, um die Arbeit überhaupt zu ermöglichen, ".lok" und ".dir" haben ergänzende Funktion - beide sind in der vorliegenden Version entbehrlich, weil ungenutzt. Für alle Systemdateien gilt die Anmeldeprocedur nach obigem Beispiel.

Jeder QDOS-Job kann einen eigenen Satz Systemdateien öffnen. Jene können zugleich auch von fremden Jobs benutzt werden, d.h. von Jobs, die nicht derselben nach Einrichten des Kanals gültigen Jobhierarchie entstammen.
Die in den Systemdateien festgelegten Eigenschaften gelten für den Besitzer des Kanals und für alle aus diesem Job hervorgehenden weiteren Jobs, solange diese nicht einen eigenen VFS-Kanal öffnen.

Soll ein Satz Systemdateien für das gesamte QDOS-System gelten, so muß er dementsprechend aus dem Stamm-Basic, Job 0, angemeldet werden.

".opn"
Abfrage rsp. Vorbereitung für einen neuen Satz Systemdateien.
Das QVFS wird für den aufrufenden Job präpariert. Wenn dieser Aufruf eine positive Zahl oder Null in D0 zurückgibt, können die Systemdateien angemeldet sowie die Pfade für Arbeits- und 'home'-Directory (WD und HD) festgelegt werden.
Beim ersten Versuch geht entweder ein Fehlercode oder 0 in D0 zurück, und die Kanal-ID in A0, später in D0 die Kanal-ID des Systemkanals, A0 ist dann unbestimmt.

".dev"
Device-Zuordnung.
Nur die hier Verzeichneten QDOS-Geräte (devices) werden vom QVFS erkannt.
Es können auch ganze QDOS-Pfade angegeben werden.

".lok" - Name reserviert, Datei wird nicht benutzt -

".dir" - Name reserviert, Datei wird nicht benutzt -

".nam"
File-Zuordnungsdateien. Diese Marke hat zweifache Funktion:

1. Anmeldung

Eintragungen aller QDOS-Namen mit Inet-Zuordnung im betr. Laufwerk und (Sub-)Directory.
Mit dem Namen dieser Datei wird der QDOS-Dateiname festgelegt, unter dem in allen Subdirectories die jeweiligen Zuordnungen zu finden sind.
Der QDOS-Name muß eindeutig sein und als Dateiname ohne Subdirectory gelten. Er dient dann ab dem Zeichen nach dem ersten Unterstrich in allen (Sub-)Directories und Geräten einheitlich als Filename für die Zuordnungsdateien. Beispiel:
                "win2_inet_dateien"

Dann wird in allen weiteren freigegebenen Geräten/Directories eine Zuordnungsdatei mit dem Filenamen "inet_dateien" erwartet.

2. Directorydatei-Initiierung

Endet der QDOS-Name mit einem "_" Unterstrich und wurde die .nam-Datei entsprechend den obigen Angaben angemeldet, gilt er als Directory, für das die Zuordnungs-Datei initiiert werden soll.
In diese Datei werden dann sämtliche QDOS-Namen des betr. (Sub-)Directory/Gerätes aufgenommen. "_" Unterstriche darin erscheinen als "/" Divisionsstrich in der Inet-Zuordnung, der letzte Unterstrich wird in einen "." Punkt umgesetzt, sofern er innerhalb der letzten 5 Zeichen des Namen steht, sich in diesem Bereich sich nicht ohnehin schon ein Punkt befindet, und wenn ihm ein Namensteil vorausgeht, der kein Directory kennzeichnet. Nach '.opn'-Anmeldung mit
                "win2_dateien"
und '.nam'-Aufruf für
                "win2_qvfs_"
ergeben sich Eintragungen in
                "win2_qvfs_dateien"
dergestalt:
                /qvfs/subdir/<nul>          qvfs_subdir_<nul>
                /qvfs/filename<nul>         qvfs_filename<nul>
                /qvfs/file.name<nul>        qvfs_file_name<nul>
                /qvfs/ein_filename<nul>     qvfs_ein_filename<nul>
                /qvfs/ein filename<nul>     qvfs_ein filename<nul>
Bei Sub-Directory-Angabe
                "win2_qvfs_subdir_"
entsteht die Datei:
                "win2_qvfs_subdir_dateien"
z.B. mit dem Inhalt:
                /qvfs/subdir/dateien/filename<nul>   qvfs_subdir_dateien_filename<nul>
                /qvfs/subdir/dateien/file_namen<nul> qvfs_subdir_dateien_file_namen<nul>
                /qvfs/subdir/dateien/file.name<nul>  qvfs_subdir_dateien_file_name<nul>
                /qvfs/subdir/dateien/a_b.c<nul>      qvfs_subdir_dateien_a_b.c<nul>
Mit dem Namen
                "win2_"
wird die Systemdatei selbst erneuert.

Ähnlichlautende Namen nach obigem Muster entstehen beim automatischen Anlegen dieser Dateien. Die Inet-Namen können durch Editieren oder durch andere Programme beliebig anders gewählt werden.

Ist ein Inet-File benannt, aber als QDOS-Datei nicht vorhanden, wird jene je nach OPEN-Variante ggf. automatisch angelegt und mit beiden Namen in die Zuordnungsdatei aufgenommen, oder es geht der übliche QDOS-Fehlercode zurück.

Ausnahme bei einfachen Devices:
Für gewöhnliche Devices gibt es u.U eine eine gewisse Einschränkung dadurch, daß zum einen sie nur in die Device-Zuordnung aufgenommen werden, also nicht nachträglich neu angemeldet werden können, und zum andern ihre Zulässigkeit zunächst an einem OPEN_IN-Aufruf geprüft wird, bevor das QVFS dann endgültig den betr. Kanal im OPEN_NEW-Modus öffnet. Dies läßt sich nur dadurch umgehen, daß deren vollständiger Name in der Devicezuordnungsdatei verzeichnet wird, etwa

                "/printer<nul>              ser1ht<nul>"
                "/pipe_200<nul>             pipe_200<nul>"
                "/console-von-meier<nul>    con_200x100a20x50<nul>"
                "/pipe_name<nul>            pipe_400<nul>"
Wobei es, wo PIPEs mit Namen zulässig sind, auch hiervon wieder Ausnahmen gibt. Dergleichen sprengt den vorgsehenen Ramen des QVFS und muß vom Anwender geeignet verwaltet werden, z.B. durch den Eintrag am Listenende:
                "/pipe/<nul>                pipe_<nul>"

Im frischen System sind die Directory-Systemdateien noch unbekannt. Sie müssen angelegt werden, bevor das QVFS ordentlich zur Wirkung kommen kann.
".nam" wird in jedem zugelassenen Laufwerk und Directory mit demselben Namen erwartet, wie er bei der Anmeldung dem symbolischen Namen ".nam" zugeordnet wurde. Man legt diese Dateien besonders einfach mit der Procedur VFS_SYNC in der dazu beschriebenen Weise an, oder mit Hilfe des beigefügten Editors "E83", z.B. folgendermaßen:

        EDI"win2_qdosdirectory"
        nn = FOPEN("ED01")      - für den Namen s. "edi_hilfe_txt" -
        WDIR #nn,"win2_"
        CLOSE#nn
Der Editor ist danach wieder zugänglich und enthält das Directory von WIN2_. Nun schreibt man von Hand vor jeder Eintragung den zugehörigen Inet-Namen hin, Directorynamen sind durch einen "/" Divisionsstrich am Ende des Namen zu kennzeichnen, und als Begrenzungszeichen folgt eine <nul> wie schon bei den grundlegenden Systemdateien (Taste CTR/ESC im QL).
Im Abstand von mindestens einem Leerzeichen folgt dann der QDOS-Eintrag wie er eben durch WDIR abgelegt worden ist. Sind QDOS-Subdirectories vorhanden und mit irgendwelchen markierenden Zeichen versehen, die nicht zum Namen selbst gehören, müssen jene entfernt werden, QDOS-Directorynamen sind mit einem "_" Unterstrich abzuschließen.
Wieder folgt als Begrenzungszeichen eine ASCII-<nul>.
Im Code-Bereich 32 bis 255 sind auch in QDOS-Namen alle Zeichen erlaubt.

Dasselbe Vorgehen wird mit jedem freigegebenen Gerät, Directory und Schritt für Schritt durch alle zugelassenen Subdirectories wiederholt.
Alle dann nicht aufgeführten Dateien bleiben dem QVFS versperrt.
Es legt selbstätig nur neue Namen an, wenn in einem gültigen Gerät/Pfad zugleich auch ein QDOS-File neu angelegt wird, kann aber vorhandene Posten nicht verändern; lediglich beim IDELETE werden sie ggf. durch Überschreiben des ersten Zeichens der betr. Zeile mit einem Nummernsymbol "#" auskommentiert.

Die parameterlosen OPEN-Varianten

         nn = FOPEN( "VFS" )
         nn = FOP_IN( "VFS" )
dienen nur der Prüfung, ob das VFS-Device überhaupt zur Verfügung steht.
Ist schon ein aktiver VFS-Kanal vorhanden, gibt OPEN in D0 dessen ID zurück, OPEN_IN den Fehlercode err.iu (-9).
Sonst machen beide einen inaktiven Kanal auf, der beim Lesen EOF (D0=-10) und beim Schreiben immer D0=0 rsp. err.ro (-20) liefert.

        DELETE "VFS"
GIBT ES NICHT! Um das QVFS zu deaktivieren genügt es, die VFS-Kanäle aller Jobs zu schließen. Damit werden automatisch die zugehörigen Systemkanäle geschlossen und das QVFS tritt vorläufig nicht mehr in Erscheinung.
Zu diesem Zeitpunkt noch offene Inet-Files können weiterbearbeitet werden, doch auch sie sind nach dem Schließen nicht mehr über Inet-Namen zugänglich.
Erst mit einem neuen Initiierungs-Aufruf (s.o.) wird das QVFS wieder aktiv.

        INPUT#vfs_kanal,stringvariable$
verkürzt das WD um eine Directorystufe und gibt deren Namen in der Variablen zurüück.

        PRINT#vfs_kanal,inetpfad$;
erweitert den aktuellen Pfad (das WD) um die in inetpfad$ angegebene Stufe. "/" an Anfang und Ende sind optional, sie werden notfalls nachgesetzt, der PRINT-Aufruf ist mit einem Semikolon abzuschließen.

        SETHEAD
z.B. aus der IO2-Sammlung kann zur Übergabe des ganzen WD benutzt werden, sofern die im QDOS übliche Länge für Fileheader nicht erreicht wird, d.h. max. 63 Bytes sind für den Text zulässig, während beim direkten QDOS-Aufruf die gesamte Pfadlänge nutzbar ist (s.u., QDOS-Traps).

	OPEN #kanal, inetfilename$
Neben den OPEN-Varianten des VFS-Device, die ausschließlich verwaltende Funktion haben, gelten alle OPEN-Arten für Inet-Namen in derselben Weise, wie für gewöhnliche QDOS-Files.

Einzig DELETE muß aufgrund der Struktur des QDOS-FS durch einen besonderen Aufruf durchgeführt werden, der den Einsprung der QDOS-Directory-Device-Definition unnötig macht. Die Unterschiede im Innern sind marginal: DELETE wird normalerweise automatisch mit D3=-1 an OPEN weitergeleitet. Dies muß nun direkt durch den Aufruf geschehen.
Es ist also die QDOS-Trap io.open mit D3=-1 direkt aufzurufen. Dies oder

        IDELETE "inetpfad/filename"
macht den Inet-Namen ungültig und löscht die zugeordnete QDOS-Datei.

Einen gewöhnlichen Directorykanal öffnet

        OPEN_DIR "inetpfad/"
Die entsprechende Zuordnungsdatei öffnet;:
        OPEN_DIR "inetpfad/."
Ist der "inetname" mit "/." abgeschlossen, wird ein nur lesbarer Kanal auf die jeweilige Zuordnungsdatei geöffnet, unabhängig vom angeforderten Modus immer wie OPEN_IN, rsp. D3=1 beim direkten QDOS-Aufruf, der dann geeignet ausgewertet werden muß. Die Standard-Kommandos aus *Basic oder TK2 liefern in diesem Fall kaum brauchbre Resultate.
Die letzte Stufe wird durch den Namen "/.." erreicht, wo ein OPEN_DIR dann die Datei der Devicezuordnung öffnet.

        DIR "inetpfad"
gibt zumeist nur sinnvolle Texte aus, wenn mit dem WD oder HD aufgerufen. Volle Pfadangabe kann aufgrund der Parameterauswertung in der TK2-Procedur ab einer gewissen Anzahl Directorystufen und von der Gestalt der Namen abhängig zu unleserlichen Fehlinterpretationen führen.

Die gewohnte DIR-Darstellung liefert

        DIR"/win/zwo/"
Die Inetnamen:
        DIR"/win/zwo/."


Kommandos der QVFS *Basic-Erweiterungen

Proceduren

ein File löschen und aus der Zuordnungsliste entfernen.

öffnet eine vorhandene unbenutzte Datei nur zum Schreiben und stellt den Filepointer auf EOF.

"qdosdirectory_" bezeichnet einen vollständigen QDOS-Pfad, einschließlich Device. Der Name muß mit einem Unterstrich "_" enden. In diesem Directory wird dann die entsprechende Zuordnungsdatei unter dem aktuellen Namen erzeugt, der bei der Anmeldung des QVFS festgelegt wurde. Etwa nach Anmeldung mit
        id = FOP_DIR("VFS .nam win1_dateien")
erzeugt
        VFS_SYNC"win2_inet_"
die Zuordnungsdatei
        "win2_inet_dateien"

(Re-)Initiierung der *Basic-Kommandos.

erweitert den Pfad zum WD um die Directorystufe "inetdir". Der Kanal kann, wenn er ohne führendes '#'-Zeichen notiert wurde, auch als QDOS-ID oder QDOS-Nummer angegeben werden.

Funktionen

wie OPEN_WO, liefert Fehlercode oder *Basic-Kanalnummer als Funktionsergebnis.

Die VFS-Kanäle arbeiten während aller OPEN-Aufrufe, die an das QDOS übergeben werden, wenn sie sie nicht als ungeeignet abweisen, intern mit verschiedenen Dateien. Die evtl. dabei auftretenden Fehler dürfen nicht unmittelbar an das QDOS zurückgegben werden. Sie werden darum in der VFS-Kanaltabelle abgelegt, woraus sie sich mit dieser Funktion lesen lassen.

gibt die Basic-Kanalnummer der im Modus 'open_code' geöffneten Datei "inetname" zurück. Folgende Werte gelten für 'open_code':
        0       r/w     wie FOPEN des TK2, entspr. OPEN#kanal im Basic
        1       r/o         FOP_IN                 OPEN_IN
        2       r/w         FOP_NEW                OPEN_NEW
        3       r/w         FOP_OVER               OPEN_OVER
        4       r/o         FOP_DIR                OPEN_DIR
        8       w/o     in die Datei kann nur geschrieben werden (s. FOP_WO).
Der Code 8 gilt als OR-Maske, d.h. er kann dazu benutzt werden, jeden der o.a. Standard-Modi auf nur schreibende Arbeitsweise zu modifizieren.
Der OPEN_OVER-Modus steht nicht in jeder QDOS-Variante zur Verfügung. Darum und auch, weil damit gelegentlich Fehler auftreten, die ihren Ursprung in den zugrundeliegenden Betriebssystemen haben, ist es sinnvoll, anstelle von OPEN_OVER die Kombination IDELETE und OPEN_NEW zu verwenden.
Diese Aufrufform spielt in jedem System und sie ist überall sicher.

liest und legt den Pfad zum HD fest. Beide Parameter müssen angegeben sein.
Bei inetpfad$="" nur Lesen ohne Veränderung des gespeicherten Pfades.
Änderungen sind nur vom Besitzerjob oder dem Job 0 aus möglich.

verkürzt den Pfad zum WD um eine Directorystufe und gibt deren Namen als Funktionswert zurück.

liefert err.iu (-9), wenn der aufrufende Job einen VFS-Kanal besitzt, sonst 0.

liest und legt den Pfad zum WD fest. Beide Parameter müssen angegeben sein.
Bei inetpfad$="" nur Lesen ohne Veränderung des gespeicherten Pfades.


VFS-Kanal QDOS-Traps:

Alle aufrufe geben die üblichen Fehlercodes zurück, außerdem

                err.bo  Pufferüberlauf, D2 nicht ausreichend oder < 0

D0=1                    io.fbyte
                Not implemented
                Nicht eingerichtet.
        Wodurch z.B. erreicht wird, daß im *Basic das Kommando PRINT ohne
        besondere Vorkehrungen benutzt werden kann: Ein <nl> etwa, das als
        einzelnes Byte nach dem eigentlichen String gesendet wird, kann
        nicht stören, weil es garnicht erst ankommt.

D0=02, 03               io.fline, io.fstrg                      pop from WD
                Pop latest directory name from working directory path.
                Jüngste Directorybezeichnung vom Arbeitspfad abtrennen.
                FLINE ist aus dem *Basic durch INPUT zugänglich.
        IN
                D2      Pufferlänge
                D2 = 0  dient zum Löschen des ganzen Pfades
                A1      Rückgabepuffer
        OUT
                D1      Pfadlänge rsp. max. Pufferlänge
                A1      Ende des (Sub-)Directory-String, zeigt auf <nul>-Byte

        HINWEIS:
        FLINE gibt das mit <lf> abgeschlossene Directory in ggf. auf (D2)
        begrenzter Länge zurück.
        FSTRG schließt den String mit <nul> ab; A1 zeigt auf dieses Zeichen,
        das in der mit D1 zurückgegebenen Länge jedoch nicht enthalten ist.

D0=5                    io.sbyte
                Not implemented
                Nicht eingerichtet.

D0=07                   io.sstrg                                push to WD
                Append string as directory name to working directory path.
                Angegebenen Namen an Directorypfad anhängen.
                Der Name muß mit einer <nul> abgeschlossen werden.
                SSTRG ist aus dem *Basic durch PRINT zugänglich
        IN
                D2      Stringlänge
                A1      Stringpuffer
        OUT
                D1/A1   wie io.fline

D0=09                   sd.extop                                user defined

        Allgemein nur für Job 0 und den Besitzerjob des VFS-Kanals freigegeben.
        Parameter und Ausführung anwenderbestimmt nach QDOS-Konvention.
        Soweit nötig werden alle Register automatisch restauriert, auch A6.
        Neben D0 und den programmbedingt ggf. erforderlichen Werten in D1
        und A1 muß nur der Stackpointer richtig justiert sein.
        Sicher gegen Eingriffe über das QDOS-Netzwerk durch den TK2-Fileserver,
        da jener sämtliche sd.extop-Aufruf abfängt.

        IN den mit A2 angegebenen Aufruf gelangen die Register:
                D0      -15     err.bp
                D1/D2           Parameterübergabe
                D3              QDOS-Wert (0 oder -1)
                D4              Übergabewert von A2
                D5      0       Null
                D6      47      "/"-Zeichen
                D7              unbestimmt
                A1              Parameterübergabe
                A2              intern benutzte Aufrufadresse
                A3              handler-Basisadresse
                A4/A5           unbestimmt
                A6              QDOS Systemvariable
                A7              SSP

        Die vorläufigen(!) Daten der Handler- und Kanaltabellen sind 
        im dem QVFS-Archiv beigefügten Text vollständig aufgeführt.

        Sonderfunktionen, codiert in 0 < A2 < 10 und ungerade:

        A2 = 09
                Eintragen des 'home'-Pfades
                Nur für Job 0 und den Besitzerjob des VFS-Kanals freigegeben.
                A1      Pufferadresse für den Pfad-String mit .w-Zähler.
                Rückgabe
                D1/A1   wie io.fstrg

        A2 = 07
                Lesen und Eintragen des WD
                Für alle aufrufenden Jobs freigegeben.
                A1      Pufferadresse für den Pfad-String mit .w-Zähler.
                        Der Puffer muß mindestens 256 Bytes groß sein.
                Rückgabe
                D1/A1   wie io.fstrg

        A2 = 05
                Lesen und Eintragen des HD
                Nur für Job 0 und den Besitzerjob des VFS-Kanals freigegeben.
                Parameter wie bei A2=7

D0=70                   fs.heads                                set WD
                Set fully specified working directory
                Vollständigen Arbeitspfad angeben
                Parameter wie io.sstrg.
                Der String muß mit einer <nul> abgeschlossen sein.


D0=71                   fs.headr                                read WD
                Read working directory of the VFS-channel's owner-job(s chain)
                Arbeitspfad des Kanalbesitzer-Job(zweige)s nur lesen
                Parameter wie io.fline
                Bei D2 = 512 wird, wenn der Aufruf von einem zugelassenen Job
                kommt, statt des Arbeitspfades der 'home'-Pfad zurückgegeben.

D0=74                   fs.renam                                set 'home'
                'home'-Directory festlegen,
                nur für VFS-Besitzerjob und Job 0 freigegeben, damit auch
                sicher(?) gegen Eingriff über den Netzwerk-Fileserver des TK2.
        IN
                A1 ptr auf den Pfadnamen als QDOS-String mit .w-Zähler,
        OUT
                D1/A1 wie io.fstrg

io.open D0=1    D1/A0 Übergabe u. D0-Fehlermeldung in Standard-QDOS-Codierung.

        Sonder-Modi:

        D3      OR-Maske 8      "open w/o"
                für nur zu beschreibende Datei - "write only".
                Die Maske kann allen QDOS-Standard-Modi überlagert werden.
                Leseoperationen werden dann mit err.ef (-10) abgewiesen:
                Das betrifft die QDOS-i/o-Traps 0..3, 8..11, 69, 72 und ab 78.
                Der Filepointer ist zu Beginn auf EOF eingestellt.
                Keine Fehlermeldung bei Codierung 9 (r/o und w/o):
                Solche Kanäle können auf Fileposition, Filelänge und die
                Headerdaten untersucht werden, sind sonst aber geschützt.

        D3      -1              "idelete"
                Löschen der in (A0)+ mit Inet-Namen bezeichneten Datei.
                Ersetzt den standardmäßigen Trap#2-Aufruf (D0=4), der
                für die Inet-Namen QDOS-bedingt nicht zugänglich ist.

Bekannte Fehler(-Erscheinungen):

Das "Level-3" Filesystem des SMSQ/E gibt in der QXL bei mehreren auf dieselbe Datei mit OPEN_IN geöffneten Kanälen mitunter den Fehler "bad medium" (-16) zurück, wonach dann auf das ganze Gerät kein Zugriff mehr möglich ist. Dies ist ein Fehler im SMSQ, der allein dadurch umgangen werden kann, daß auch die nur zum Lesen geöffneten Dateien stets von nur einem Kanal benutzt werden.
Das QVFS hat darauf keinen Einfluß.

Mit Rücksicht auf eine höchst zweifelhafte Eigenheit von C68-Programmen stellen die WIN-/FLP-Handler im SMSQ den Längeneintrag des für die Kanaldaten angelegten Speicherblocks auf einen weniger als halb so großen Wert ein, und restaurieren ihn erst für die Freigabe bei CLOSE. Die außerhalb der fixierten Länge liegenden Daten werden aber benutzt und dürfen keinesfalls anderweitig verändert werden. Dieser seltsame Übergriff auf Daten, die für ein Programm, das nicht unmittelbar der Systemverwaltung dient, vollkommen belanglos sind (zu sein haben), kann Ursache schwer zu analysierender Fehler sein!


v05 QVFS Archiv e-mail
[top]
= .hpr.g3 = =