Make your own free website on Tripod.com
zurück : weiter : inhalt =
 
 

5.2.3 ** I/O Trap #3

 


 
iob.test IO.PEND 3 / 0  
Prüfung auf noch laufenden Eingabevorgang
  IN:   OUT:  
A1 A1 verdorben
 
ERR.NC -1
ERR.EF -10
Daten werden nicht gelesen, der Kanal nicht geändert.
Bei PIPEs Test der Lese-Seite.



 
iob.fbyt IO.FBYTE 1 / 3  
Ein Byte holen
  IN:   OUT:  
D1 geholtes Byte
A1 verdorben
 
ERR.NC -1
ERR.EF -10
Bei fehlerhaftem Aufruf bleibt D1 im allgemeinen unverändert.
 



 
iob.flin IO.FLINE 3 / 2  
Holt eine Zeile Zeichen begrenzt durch {NL} in einen Puffer
  IN:   OUT:  
D1.W Anzahl empfangene Zeichen
D2.W Länge des Puffers D2
A1 Adresse des Puffers A1 Ptr hinter letztes Zeichen
 
ERR.NC -1
ERR.EF -10
ERR.BO -5
Die Wartezeit gilt bis zum Abschluß des ganzen Prozesses - s. IO.EDLIN.
Bei Konsolkanälen erscheinen die Daten im Bildschirm und können editiert werden. Ein <NL>-Zeichen vor Pufferende zählt bei der zurückgegebenen Stringlänge mit.

D1 bleibt bei fehlerhaftem Aufruf unverändert, bei Fehler ERR.NC (-1) wird die bis zum Abbruch evtl. empfangene Anzahl zu einem schon vorhandenen Wert addiert.

 



 
iob.fmul IO.FSTRG 3 / 3  
 Holt einen String
  IN:   OUT:  
D1 (s. IO.FLINE) D1.W Anzahl empfangene Zeichen 
D2.W Länge des Puffers D2
A1 Adresse des Puffers A1 Ptr hinter letztes Zeichen
 
ERR.NC -1
ERR.EF -10


 
iob.elin IO.EDLIN 3 / 4  
Editieren einer Zeile (nur bei CON_) 
  IN:    OUT:  
D1 Cursor.W | Zeilenlänge.W D1 Cursor.W | Zeilenlänge.W
D2.W Länge des Puffers
A1 Ptr auf Zeilenende A1 Ptr auf Zeilenende
 
ERR.NC -1
ERR.BO -5
Aufruf bricht auch bei laufender Eingabe bei Überschreitung der Wartezeit ab.
 
Der zu editierende String darf kein <NL>-Zeichen enthalten;
bei MINERVA (ab 1.97) kann über mehrere Zeilen hinweg editiert werden.
<CTRL/J>, <ENTER>, Cursor hoch oder Cursor runter gelten als Endzeichen.
D1.hi.w bezieht sich auf den Stringanfang.
Das Endzeichen zählt nicht zur Länge, kann aber auf Position (A1) gelesen werden - in MINERVA, sonst wegen Fehlern darin nicht in allen QDOS-Systemen.



 
iob.sbyt IO.SBYTE 3 / 5  
Ein Byte senden
  IN:   OUT:  
D1.B zu sendendes Byte D1 verdorben
A1 A1 verdorben
 
ERR.NC -1
ERR.DF -11
ERR.OR -4
Fehlermeldungen erfassen die Pufferung von Daten nicht.



 
iob.suml IOB.SUML 3 / 6  NUR SQ
Gruppe Zeichen vom TRA-Zustand unabhängig senden
iob.smul IO.SSTRG 3 / 7  
Gruppe von Zeichen senden 
  IN:   OUT:  
D1.W Zahl der gesendeten Zeichen
D2.W Anzahl Zeichen
A1 Anfang des Puffers A1 Neuer Zeiger auf Puffer
 
ERR.NC -1
ERR.DF -11
IOB.SUML (nur SQ) unterliegt nicht dem Einfluß der TRA-Einstellungen.
Gleichartiges liefert die SIMSER-Erweiterung für alle QDOS-Systeme ab JM. Damit können auch einzelnen Kanälen voneinander unabhängig jeweils eigene TRA-Tabellen und Umsetzungsmodi eingeprägt werden.
Bei JM ist nur hiermit (oder mit ähnlichen Erweiterungen) die Nutzung der dort im System erst vorbereiteten Ausgabe-Umsetzung möglich.



 
iow.xtop SD.EXTOP 3 / 9  
Bildschirmhandler erweiternde Operation 
  IN:   OUT:  
D0 Fehlercode
D1 Datenübergabe D1 Datenrückgabe
D2 dto.
A1 dto. A1 Datenrückgabe
A2 Ptr auf Routine der Operation A2
 
ERR.NC -1
Der Aufruf wird abgearbeitet, als sei er Teil des Bildschirmhandlers.
Innerhalb der Routine (A2) gilt für die Register:
 
  IN:   OUT:  
D0 Fehlercode
D1 eingebrachte Daten D1 Rückgabe an den Aufruf
D2 eingebrachte Daten
A0 Basis der Kanalparameter
A1 eingebrachte Daten A1 Rückgabe an den Aufruf
A3 Handler-Basisadresse (CH.LXINT)
A6 Basisadresse der Systemvariablen
A7 SSP
 
A0 kommt PIF-bereinigt in den Aufruf, sodaß die standardmäßigen Kanalparameter der cdt stets in derselben Relation zum Registerwert stehen. Was zugleich aber heißt, daß die wirkliche Basis der cdt nicht von A0 hergeleitet werden kann, sie muß ggf. direkt aus den QDOS-Tabellen ermittelt werden.
ERR.xx    frei wählbar


 
ow.pixq SD.PXENQ 3 / 10  
Fenstergröße und Cursorposition in Pixelmaßen holen
 
iow.chrq SD.CHENQ 3 / 11  
Fenstergröße und Cursorposition im Zeichenraster holen 
  IN:   OUT:  
A1 Ptr auf Zwischenspeicher A1 verdorben
 
ERR.NC -1
Rückagbedaten im Puffer:
0(A1) Breite des Fensters
2(A1) Höhe dto.
4(A1) X-Position des Cursors bezogen auf 0,0 links oben
6(A1) Y dto.
 

 
iow.defb SD.BORDR 3 / 12  
Randbreite und -Farbe definieren
  IN:   OUT:  
D1.B Farbe D1 verdorben
D2.W Breite
 
ERR.NC -1
Die Breite gilt vertikal verdoppelt. Der Cursor wird auf 0,0 gestellt.
128 = $80 in D1 erhält die alte Farbe. Nach Breite D2 = 0 gilt Schwarz.
 

iow.defw SD.WDEF 3 / 13  
Umdefinieren eines Fensters
  IN:   OUT:  
D1.B Borderfarbe D1 verdorben
D2.W Borderbreite
A1 Ptr zum Datenblock A1 verdorben
 
ERR.NC -1
ERR.OR -4
Bildschirminhalt unbeeinflußt. Cursor auf Position 0,0 gestellt.
Der Datenblock enthält:
0(A1) Breite
2(A1) Höhe
4(A1) X-Ursprung
6(A1) Y-Ursprung
 

 
iow.ecur SD.CURE 3 / 14  
Aktivieren des Cursors. 
iow.dcur SD.CURS 3 / 15  
 Cursor abschalten
  IN:   OUT:  
D1 verdorben
A1 verdorben
 
ERR.NC -1
 

 
iow.scur SD.POS 3 / 16  
 Cursor auf Position im Zeichenraster setzen
  IN:   OUT:  
D1.W Spalte D1 verdorben
D2.W Zeile
A1 verdorben
 
ERR.NC -1
ERR.OR -4 Position wäre außerhalb des Fensters
Bei Fehlermeldung wurde die Position nicht verändert.
 

 
iow.scol SD.TAB 3 / 17  
Cursor auf Spaltenposition einstellen
  IN:   OUT:  
D1.W  Spalte D1 verdorben
A1 verdorben
 
ERR.NC -1
ERR.OR -4 Position wäre außerhalb des Fensters
Die Trap hebt bevorstehende <NL>-Aktionen auf.



 
iow.newl SD.NL 3 / 18  
Cursor in neue Zeile bringen - Sequenz CR LF
iow.pcol SD.PCOL 3 / 19  
Cursor ein Zeichen zurückziehen
iow.ncol SD.NCOL 3 / 20  
Cursor eine Spalte weiterrücken
iow.prow SD.PROW 3 / 21  
Positioniert den Cursor eine Zeile höher
iow.nrow SD.NROW 3 / 22  
Positioniert den Cursor eine Zeile tiefer
  IN:   OUT:  
D1 verdorben
A1 verdorben
 
ERR.NC -1
ERR.OR -4 Position wäre außerhalb des Fensters

iow.spix SD.PIXP 3 / 23  
 Positioniert den Cursor auf Pixelkoordinaten
  IN:   OUT:  
D1.W X-Koordinate D1 verdorben
D2.W Y-Koordinate
A1 verdorben
 
ERR.NC -1
ERR.OR -4 Position wäre außerhalb des Fensters
Die Trap hebt bevorstehende <NL>-Aktionen auf.



 
iow.scra SD.SCROL 3 / 24  
Scrollt das ganze Fenster
iow.scrt SD.SCRTP 3 / 25  
Scrollt Teilfenster oberhalb der Cursorzeile
iow.sceb SD.SCRBT 3 / 26  
Scrollt Teilfenster unterhalb der Cursorzeile
  IN:   OUT:  
D1.W Anzahl Bildlinien D1 verdorben
A1 verdorben
 
ERR.NC -1
Scrollen - SCReen ROLL - mit positiven Werten D1 nach oben.
Cursorposition bleibt bestehen.



 
iow.pana SD.PAN 3 / 27  
Fensterinhalt seitwärts schieben
iow.panl  SD.PANLN 3 / 30  
Inhalt der Cursorzeile verschieben
iow.panr SD.PANRT 3 / 31  
Inhalt der Cursorzeile rechts ab einschl. Cursor verschieben
  IN:   OUT:  
D1.W  Anzahl senkr. Linien D1 verdorben
A1 verdorben
 
ERR.NC -1
Bei positivem Wert D1 wird nach rechts geschoben.
 

 
iow.clra SD.CLEAR 3 / 32  
Ganzes Fenster löschen
iow.clrt SD.CLRTP 3 / 33  
Teilfenster über der Cursorzeile löschen
iow.clrb SD.CLRBT 3 / 34  
Teilfenster unter der Cursorzeile löschen
iow.clrl  SD.CLRLN 3 / 35  
Löscht die Cursorzeile
iow.clrr SD.CLRRT 3 / 36
Löscht Cursorzeile ab Cursor nach rechts
  IN:   OUT:  
D1 verdorben
A1 verdorben
 
 ERR.NC -1


 
iow.font SD.FOUNT 3 / 37  
Zeichensatz für ein Fenster angeben
  IN:   OUT:  
D1 verdorben 
A1 Ptr auf 1. Zeichensatz  A1 verdorben 
A2 Ptr auf 2. Zeichensatz
 
ERR.NC -1
Null statt der Ptr restauriert die Grundeinstellung aus dem Rom, rsp bei MINERVA aus SX.F0 und SX.F1, wo dann auch frei definierte Zeichensätze vorgegeben werden können.
 

 
iow.rclr SD.RECOL 3 / 38  
Fensterinhalt umfärben
  IN:   OUT:  
D1 verdorben
A1 Ptr auf Farbenliste A1 verdorben
 
ERR.NC -1
Die Farbenliste gibt in 8 Bytes der Reihe nach die neuen Farben an.



 
iow.spap SD.SETPA 3 / 39  
Farbe für PAPER festlegen
iow.sstr SD.SETST 3 / 40  
Farbe für STRIP festlegen
iow.sink  SD.SETIN 3 / 41  
Farbe für INK festlegen
  IN:   OUT:  
D1.B Farbe
D2 SQ: verdorben
A1 verdorben
 
ERR.NC -1
 

 
iow.sfla SD.SETFL 3 / 42  
 Blinken schalten
  IN:   OUT:  
D1.B  =/=0 zum Blinken D1 verdorben
A1 verdorben
 
ERR.NC -1
 

 
iow.sula SD.SEUFL 3 / 43  
 Unterstreichung schalten
  IN:   OUT:  
D1.B  =/=0 Unterstreichen D1 verdorben
A1 verdorben
 
ERR.NC -1


 
iow.sova SD.SETMD 3 / 44  
 Art der Zeichendarstellung einstellen
  IN:   OUT:  
D1.W Typ -1, 0 oder 1 D1 verdorben
A1 verdorben
 
ERR.NC -1
 

 
iow.ssiz SD.SETSZ 3 / 45  
 Zeichengröße einstellen
  IN:   OUT:  
D1.W Zeichenbreite D1 verdorben
D2.W Zeichenhöhe
A1 verdorben
 
ERR.NC -1
Angabe zu Breite und Höhe entsprechen dem Basicbefehl CSIZE.
 

 
iow.blok SD.FILL 3 / 46  
 Rechteck einfärben
  IN:   OUT:  
D1.W Farbe D1 verdorben
A1 Ptr auf Blockdefinition A1 verdorben
 
ERR.NC -1
ERR.OR -4
Blockmaße:
0(A1) Blockbreite in Pixel.
2(A1) Höhe dto.
4(A1) X-Ursprung des Blockes relativ zum Fensterursprung
6(A1) Y dto.
 

 
iog.dot SD.POINT 3 / 48  
Einen Punkt im scalierten Fenster zeichnen 
  IN:   OUT:  
D1 verdorben
A1 Arithmetikstack A1 verdorben
 
ERR.NC -1
Die Parameter sind im Fließkommaformat in einem Stackbereich auf A1 bereitzuhalten, wo in Richtung niedriger Adressen Platz für mindestens 40 f.p.-Zahlen frei ist.
Übergabe im Stack:
00(A1) Y-Koordinate
06(A1) X dto.
 

 
iog.line SD.LINE 3 / 49  
Linie zeichnen
 
Parameter wie SD.POINT
 00(A1) Y-Koordinate des Endpunktes
 06(A1) X dto.
$0C(A1) Y-Koordinate des Startpunktes
$12(A1) X dto.


 
iog.arc  SD.ARC 3 / 50  
Bogen zeichnen 
 
Parameter wie SD.POINT
$00(A1) Winkelspanne des Bogens
$06(A1) Y-Koordinate des Endpunktes
$0C(A1) X dto.
$12(A1) Y-Koordinate des Startpunktes
$18(A1) X dto.
 

 
iog.elip SD.ELIPS 3 / 51  
Ellipse zeichnen
 
Parameter wie SD.POINT
$00(A1) Winkelstellung
$06(A1) Kleine Halbachse (Senkrechte bei Winkel 0)
$0C(A1) Halbachsenverhältnis der Ellipse
$12(A1) Y-Koordinate des Mittelpunktes
$18(A1) X dto.
 

 
iog.scal SD.SCALE 3 / 52  
Maßstab und Ursprung der scalierten Graphik angeben 
 
Parameter wie SD.POINT
$00(A1) Y-Koordinate der unteren Zeile des Fensters
$06(A1) X-Koordinate der linken Spalte im Fenster
$0C(A1) scalierte Fensterhöhe
 

 
iog.fill SD.FLOOD 3 / 53  
Füllen konkav umschlossener Flächen schalten
  IN:   OUT:  
D1.L Schalterflag D1 verdorben
A1 verdorben
 
ERR.NC -1
D1 = 0 schaltet Füllen aus, D1 = 1 veranlaßt Füllen (erneut).
Der Befehl malt die Fläche mit der Farbe von INK aus.
Es ist auch die Angabe einer frei definierten Routine vorgesehen, deren Adresse mit D1(?) übergeben wird. Hier soll es jedoch je nach System gravierende Fehler geben.
 

 
iow.sgcr SD.GCUR 3 / 54  
 Pixelkoordinaten relativ zur Position des Graphikcursors
 
Parameter wie SD.POINT
$00(A1) Graphik X-Koordinate
$06(A1) Y dto.
$0C(A1) Pixelversatz nach rechts
$12(A1) dto. nach unten
 

 
  SD.ROP 3 / 61  
Operation im Pixelraster
  SD.DOT 3 / 62  
Punkt(e) im Pixelraster zeichnen
  SD.LIN 3 / 63  
Linie(n) im Pixelraster zeichnen
 
Anwendung ist nicht dokumentiert, Funktion ungewiß {4}.
 

 
iof.chek FS.CHECK 3 / 64  
Prüfen eines File auf noch laufende Bearbeitung
  IN:   OUT:  
D1 verdorben
A1 verdorben
 
ERR.NC -1
Arbeit an File oder Slave Blocks nicht abgeschlossen



 
iof.flsh FS.FLUSH 3 / 65  
Slave Blöcke des File senden, dann auflösen
  IN:   OUT:  
D1 verdorben
A1 verdorben
 
ERR.NC -1
Zum sicheren Abschluß eines File ohne Datenverfälschung oder -Verlust. Mit TK2 werden zur zusätzlichen Sicherheit Map und Directory aktualisiert {in LV2 unsicher}.
 

 
iof.posa FS.POSAB 3 / 66  
Zugriffs-Ptr eines File einstellen
iof.posr FS.POSRE 3 / 67  
Zugriffs-Ptr eines File weiterstellen
  IN:   OUT:  
D1 aufzusuchende Position D1 erreichte Fileposition
A1 verdorben
 
ERR.NC -1 neue Position wird eingestellt
ERR.EF -10
Wenn D1 in eine Position außerhalb des File weist, wird die nächstgelegene Grenze aufgesucht.
FS.POSRE:
Neue Stelle im File mit Abstand D1 (vorzeichenbehaftet) zur aktuellen Position aufsuchen. Bei Übergabe D1 = 0 wird aktueller Ptr zurückgegeben.
Für MDV-Positionierung soll D1 im Integer-Bereich liegen (16-Bit-Zahlen).
 

 
iof.minf FS.MDINF 3 / 69  
Holt Informationen über den Datenträger
  IN:   OUT:  
D1.hi.w Freie Sectoren
D1.lo.w gute Sectoren
A1 Ptr auf 10 Bytes A1 Ptr hinter den Namen
Puffer für den Namen A2 verdorben
A3 verdorben
Im SMSQ bleiben nach {15} A2 und A3 erhalten
ERR.NC -1


 
iof.shdr FS.HEADS 3 / 70  
Setzt Kopfzeile - File Header. In TK2 u.U. unsicher
  IN:   OUT:  
D1.W Länge d. gesetzten Headers
A1 Ptr auf die Headerdaten A1 Ende der Headereintragung
 
ERR.NC -1
Die ersten 14 Bytes des Fileheaders werden besetzt:
$00 .l Filelänge : vom System ggf. überschrieben
$04 .b Fileverwendung : Null in QDOS V1.03
$05 .b Filetyp : 0 allgemein, 1 Job, 2 Sinclair Object File., -1 Directory
$06 8.b Angabe typenabhängig:
$06 .l Größe des einem Job einzurichtenden Datenspeichers
$0A .l Extra - z.B. mit FXTRA des TK2 lesbar
Bei rein seriellen Kanälen wird zuvor ein Byte $FF gesendet.
Das File-Datum kann mit Hilfe der QDOS-Uhr verändert werden - s. FS.DATE.

Directory-Filetyp bei Thor-Geräten ist 3 (?).

Mit der Bitte, auch dies zu berücksichtigen:
File-Typ 5 im F6-Forth des Verfassers kennzeichnet vorcompilierte Codepassagen.



 
iof.rhdr FS.HEADR 3 / 71  
Kopfzeile lesen. Setzt FPOS auf Null {3.5.1}
  IN:   OUT:  
D1.W  Länge d. gelesenen Headers
D2.W Pufferlänge
A1 Ptr zum Puffer A1 Ptr hinter die Daten
 
ERR.NC -1
ERR.BO -5
Der Pufferlänge 13 < D1 < 65 entsprechende maximale Anzahl Daten aus dem Header werden in den Puffer geholt.
Bei seriellen Kanälen ist für ein zusätzliches Flagbyte Platz zu reservieren.
Der Fileptr wird NUR bei den QL-Systemen anschließend auf Null gestellt, bei MINERVA und SQ bleibt er erhalten. Darum, und weil die Dokomente hierzu unklar rsp. widersprüchlich sind, sollten andere Einstellungen stets erneuert werden.
Nähere Angaben hierzu im Text {3.5.1}.
 

 
iof.load FS.LOAD 3 / 72  
Ganzes File in den Speicher holen
iof.save FS.SAVE 3 / 73  
  Daten aus dem Speicher in ein File schreiben
  IN:   OUT:  
D1 verdorben
D2 Filelänge
A1 Ptr auf Datenbereich A1 Endadresse nach dem Laden/Sichern
 
Die Wartezeit in D3 ist mit -1 anzugeben, sonst wird der Vorgang womöglich unvollständig abgewickelt.
A1 muß geradzahlig sein.
Die QDOS-Systeme laden unterschiedllich stets ab Fileanfang oder ab dem aktuellen Filepointer. Dies ist nicht eindeutig dokumentiert, also einigermaßen unsicher. Der Filepointer sollte darum ggf. zuvor auf Null gestellt werden.
Der Wert von A1 kommt nicht immer richtig zurück (auch SQ),
Fortsetzung mit den zurückgelieferten Daten ist unsicher.

Je nach System wird mit Fixdaten gearbeitet, ungeachtet der wirklichen Struktur z.B. auf Discetten, woraus tiefgreifende Fehler resultieren können.

In der Literatur wird das Verfahren gelegentlich auch "scatter load/save" genannt:
FS.SAVE/LOAD bilden eine Art DMA nach, Daten werden direkt zwischen dem Speicher des Rechners und einem (peripheren) Datenträger übertragen. Wirklicher DMA ist sehr schnell, im QDOS jedoch ist die schrittweise Übertragung mittels der String-Traps meist sicherer, insbes. auch über das QDOS-Netzwerk (die unseligen Störungen bei SQ/QXL einmal außer acht gelassen), und dank der überaus wirkungsvollen Slaveblock-Verwaltung auch schneller. Nur, wo der Rechner ansonsten ruhen würde, oder wenn der Arbeitsspeicher knapp ist, werden FS.SAVE/LOAD effektiv schneller sein.
 



 

Bei allen folgenden Aufrufen sind sämtliche Fehlercodes des IOSS möglich.

Mit Toolkit II oder MINERVA:
 



 
iof.rnam FS.RENAME 3 / 74  
File umbenennen - TK, MINERVA
  IN:   OUT:  
D1 verdorben
A1 Ptr zum neuen Namen  A1 verdorben
 
Mit MINERVA bleibt die Update-Eintragung im Directory unverändert.

Neu eingerichtete Files lassen sich nicht umbenennen. Sie müssen ggf. geschlosssen und dafür erneut geöffnet werden (festgestellt bei QL/GC mit MGG/MINERVA, QXL/SMSQ).



 
iof.trnc FS.TRUNC 3 / 75  
File an aktueller Position kappen - TK, MINERVA
  IN:   OUT:  
  -/-
 



 
 

Weitere Aufrufe sind mit Level 2 Device-Handler (einzeln, GoldCard, SMSQ) verfügbar. Auch dort können alle Fehlercodes des IOSS zurückkommen.
 

 



 

iof.date FS.DATE 3 / 76  
Lesen/Eintragen des Update- oder Backup-Datums
  IN:   OUT:  
D1 -1: Lesen D1 eingestelltes Datum
  0: aktuelles Datum
Zahl: Sekunden für Datum 
D2.B 0 Update
bleibt beim Schließen des File erhalten.
2 Backup
Auch bei OPEN_IN geöffnetem File änderbar.
 
Die Datumseintragung kann sonst z.B. durch vorübergehendes Einstellen der QDOS-Uhr (bis nach dem Schließen des betr. File) auf das gewünschte Datum beeinflußt werden - was so aber immerhin in allen Systemen gleichermaßen verwendbar ist (Beispiel CDISK).
 



 
iof.mkdr FS.MKDR 3 / 77  
leeres(!) File zum Directory machen 
  IN:   OUT:  
D1 0
D3.W -1
 
Macht ein leeres File zum Directory. Es übernimmt sofort alle bereits vorhandenen und später bei deren Anlegen alle neuen Namen, deren mit einem Unterstrich ("_") begrenzter Anfangsteil sich mit dem Namen des hierzu geöffneten Kanals decken.
 


 
iof.vers FS.VERS 3 / 78  
Lesen/Eintragen einer 16-Bit-Zahl für die File-Version
  IN:   OUT:  
D1 0 Lesen, D1 aktuelle Versionsnummer
>0 neue Nummer
-1 Lesen und eins weiterzählen
 
Eine gerade eingetragene Nummer bleibt nach CLOSE oder FLUSH unverändert.

Außerdem, ohne Namensangabe:
"Watermark" (was auch immer das sein soll) für Thor-Geräte {SNG}:
 



 
iof.xinf FS.XINF 3 / 79  
erweiterte Angaben zu Device und Datenträger holen
  IN:   OUT:  
A1 Ptr 64 Bytes Datenpuffer A1 unverändert
 
 
Media-Daten im Puffer:  
IOI.NAME 00 .w count-w 
02 .b 20 *  Name des Datenträgers
IOI.DNAM 22 $16 .w   count-w
24 $18 .b   4 * bis zu 4 Zeichen Gerätename
IOI.DNUM 28 $1c .b Lauferksnummer
IOI.RDON 29 $1d .b =/= 0 schreibgeschützt (nicht QXL)
IOI.ALLC 30 $1e .w Größe einer Zuweisungseinheit
IOI.TOTL 32 $20 Gesamtanzahl Zuweisungseinheiten
IOI.FREE 36 $24 Anzahl freier Zuweisungseinheiten
IOI.HDRL 40 $28 Länge des physischen Fileheaders
IOI.xxxx 44 $2c .b 20 * mit $ff auf 64 Bytes aufgefüllt
Die Ur-Definition endet hier. Mehr nur in SQ, jüngeren "level 2" etc., nach {15}:
IOI.FTYP 44 $2c .b Format-Typ 1:QDOS, 2:MDOS
IOI.STYP 45 $2d .b Format-Variante
IOI.DENS 46 $2e .b Aufzeichnungsdichte 
IOI.MTYP 47 $2f .b Medium 0:RAM 1:FLP 2:HD 3:CD
IOI.REMV 48 $30 .b =/= 0 bei Wechselmedium
IOI.xxxx 49 $31 .b 15 * mit $ff auf 64 Bytes aufgefüllt
 

In {15} heißt es:
"Ausführbarkeit dieser Trap ist Kriterium für Vorhandensein eines ´level 2´-Handlers.
"Dann ist garantiert, daß alle anderen Traps des Filing-Systems verfügbar sind.

FEHLER mit (älteren) TK2:
Aufgrund eines Fehlers in manchen LV2-Versionen werden vom Aufruf u.U. 100 Bytes in den Speicher geholt.

FEHLER bei SQ/QXL:
IOI.RDO wird in der QXL nicht rsp. falsch besetzt.
Erkennen dieses Zustandes ist auf ordentlichem Wege nicht möglich.

Ein physisch schreibgeschütztes Medium ist immerhin sicher, nicht aber das System des Rechners! Reaktion auf Schreibversuche ist bestenfalls endloses Gejaule des Tongenerators, das nicht nur an den Nerven des Benutzers zerrt, sondern auch sonst wegen seiner Unzuverlässigkeit eher schädlich ist:
Die eigentliche Gefahr liegt darin, daß Files vielfach ganz ohne Reaktion vermeintlich gesichert werden und selbst im Directory erscheinen, sodaß sie im Vetrauen darauf und auf ein Getön im Fehlerfalle dann unversehens und unrettbar verlorengehen.
Die sorglose Behandlung des DIR-Befehls im SQ-Basic kann ferner durch Anzeige völlig verdorbener überlanger Fehl-Eintragungen selbst zum Zusammenbruch des ganzen Systems und schließlich auch so zum Verlust sämtlicher Daten führen.
 
 


Nur mit der "SYSTEM"-Erweiterung {Schiemann}:
 

iof.attr IOF.ATTR 3 / 80  
File-Attribut(e) setzen/löschen, "SYSTEM" 
  IN:   OUT:  
D1.W Schalter D1 verdorben
D2.B Attribut(e) D2 verdorben
 
Schalter:
D1=0 Löschen der angegebenen Attribute
sonst Attribut(e) setzen
 
Attribute in D2.B:
  Bit gesetzt
7 Scheibschutz
6 File unsichtbar machen
0-5 Benutzernummer
111111 mit D1:=0 für Benutzer 0
 
Files mit der User-Nummer 0 können jederzeit gelesen werden, andere nur, wenn die Nummern übereinstimmen. Setzen der Benutzernummer ("user"..) und weitere Eingriffe sind nur mit dem richtigen Passwort dem "Super-User" möglich.

Durch Veränderungen an den Systemvariablen wurde "SYSTEM" für SQ unbrauchbar.
 
 

 
  oben : zurück : weiter : inhalt 

(count)