[front | anfang] : [m89] : [uqlx] : [english]
Für Korrekturen und Ergänzungen
Copyright (C) 1999 by h-peter recktenwald berlin, 6.8.1999, email:phpr@snafu.de
Text und Code gegenüber den UQLX-RPM-Paketen ergänzt
rsp. korrigiert!
Diese Beschreibung ist als einfache Textdatei im T6-Archiv enthalten.
Dies, um mich u.a. gegenüber Pudel-in-Microwellenöfen-trocknenden
Volltrotteln abzusichern:
Code und Texte zu M89 und T6 haben sich
grundlegend sicher gezeigt, befinden sich jedoch in experimentellem
Zustand, infolgedessen deren Verwendung unabsehbaren Schaden
verursachen kann; Garantie, welcher Art auch immer, ist
darum ausgeschlossen.
NUR nichtkommerzielle unentgeltliche Weitergabe und entsprechende
Verwendung erlaubt, alles darüber hinausgehende bedarf der
ausdrücklichen handschriftlichen Genehmigung.
Aufnahme von T6 oder M89 oder Teilen daraus in andere Erzeugnisse
impliziert, daß jene in wenigstens demselben Maße freigegeben
sind, unabhängig von ggf. dort anderslautenden Angaben.
Aufnahme von T6 oder M89 in Softwarearchive zwecks Weitergabe ist nur mit
Hinweis auf den Ursprung erlaubt. Grund: Ich will nicht für veraltete
Versionen verantwortlich gemacht werden.
Besondere Nutzungsbedingungen gelten zusätzlich
für die "Commandline History" (s.dort.).
Generell gilt im Zweifel stets die die Freigabe stärker
einschränkende Interpretation oder Formulierung der betr.
Nutzungsbedingungen; bei Anfechtung ganz oder von Teilen daraus, oder bei auf
der anzuwendenden Rechtslage beruhender Ungültigkeit derselben, gilt
jegliche Verwendung insgesamt und bedingungslos als nicht genehmigt. - Dies
nicht, um jemanden zu ärgern, sondern allein, um irrwitzige Forderungen
nach dem Beispiel einer ebenso irrwtzigen "Rechtsprechung" in einem sich
selber als "führende Nation der westlichen Welt" deklarierenen Lande
(sprachen da die Orwell'schen Herren-Schweinchen?) garnicht erst
aufkommenzulassen.
Und nicht ganz ohne (nun nicht mehr) geheimes Kichern...
Hinweise auf (neue?) Fehler bitte ich, mir per email zu
übermitteln.
Falls Details der Beschreibung unzureichend erscheinen, bitte ich ebenfalls um
Nachricht.
Archiv "t6" |
ca. 62K (tar & bzip2 gepackt) |
|
|
qhpt6.txt, qhpt6ex.txt |
dieser text, beschreibung
|
|
e-qhpt6.txt, e-qhpt6ex.txt |
english explanations
|
|
t6m89-94 |
t6 für minerva 1.89
|
|
t6m97-94 |
t6 für minerva 1.97
|
|
testxtcc_asm |
beispiel zu den zusätzlichen job-parametern
|
Archiv "m89" |
ca. 65K (tar & bzip2 gepackt) |
|
|
m89m-14 |
m89 für uqlx, entspr. minerva 1.89
|
|
m89t-14-94 |
m89 & t6 zum UQLX-system-rom zusammengefaßt
|
T6 : T6M89 und T6M97
Zusammenfassung von Systemerweiterungen nach TK2-Vorbild
(Version 2.13), verbunden mit systemkonformen Erweiterungen aus
SMSQ/E und dem TURBO-Toolkit
(QLib-Ergänzung in Arbeit), soweit sie sich - auch mit
IO2 - widerspruchsfrei in die Sammlung einordnen
ließen.
Funktion nur mit MINERVA 1.89 rsp. 1.97 im UQLX geprüft,
der Code ist auf die genannten ROM-Varianten spezialisiert und in
anderen QDOS-Versionen nicht verwendbar. Mangels der Programmteile
zum QDOS-Netzwerk und den MDV-Laufwerken und wegen direkter Aufrufe der
vectorisierten QDOS-Routinen wird der Einsatz in anderer Konstellation kaum
möglich sein.
Die Neufassung wurde u.a. notwendig, weil die Arbeit daran ungeachtet
bekannter Fehler schon vor geraumer Zeit offenkundig aufgegeben wurde.
Betreffs (u.a.) TK2 nahm selbst bei den jüngeren seitens deren
mutmaßlicher Autoren noch versorgten Systemen der Aufwand für
Bug-Reports und Kampf um Anerkennung nachgewiesener(!) Fehler unzumutbare
Ausmaße an, sodaß die Neubearbeitung bei weitaus
größerer Erfolgsaussicht zudem noch weniger aufwendig war.
Wenngleich ich davon überzeugt bin, mich mit dieser Veröffentlichung
auf rechtlich sicherem Terrain zu bewegen, sollte jenseits solcher
Erwägungen die Bindung an UQLX und ausschließlich MINERVA für
eine Art Burgfrieden sorgen können.
Als nur lästiger und hoffentlich unnötiger Ausweg mit ansonsten
(wenigstens!) identischem Ergebnis bliebe T6 als Patch zu einer der ohnehin
frei im Internet verfügbaren TK2-Versionen...
Bezüglich eigener und der nur funktional gleichartigen rsp.
erweiterten Aufrufe nach MINERVA-, TURBO-Toolkit- und SMSQ/E-Vorbild sind
rechtfertigende Überlegungen ohnehin unnötig.
T6-Anpassung für andere Systeme ist möglicherweise wo
möglich möglich, auch Reaktivieren der Programmteile für NET
und MDV... (e-mail).
M89M ist das MINERVA 1.89 ROM in einer
nur für den UQLX zurechtgemachten und
für 16MB adressierbaren RAM-Bereichs sowie übergroße
Bildschirmmaße korrigierten Variante. M89T ist die
Zusammenfassung von M89M mit T6M89 als UQLX-Systemrom.
MPX - in Vorbereitung -
Auf MINERVA 1.89 rsp 1.97 spezialisierte Variante des Pointer-I.F
("ptr_gen") aus Version 1.71, in Einheit mit PEX aus Version 35.
Die T6-Varianten basieren auf TK2, Version 2.13, neugefaßt, auf 32K
Codebereich erweitert und speziell für den UQLX
präpariert. Sie können NUR in direkter Verbindung mit o.g.
M89-Variante rsp. mit MINERVA 1.97 benutzt
werden.
T6 bietet je zusammen mit der passenden MINERVA mit
Ausnahme von ALTKEY, das ohnedies vom den - ebenfalls frei verfügbaren -
"HOTKEY"s überdefiniert wird, die S.Basic-Aufrufe des
TK2. Die auf NETzwerk und MDV
bezogenen Teile sind im UQLX nutzlos und fehlen darum, FSERVE etc. sind als
leere Definitionen nur vorhanden, um unnötigen Programmabbruch zu
vermeiden. Die Aufrufe der (in schlampigem und halbherzigem Aufbau dem TK2
durchaus ebenbürtigen) Demo-Version 3.22 des
TURBO-Toolkit sind, soweit sie nicht allein für den
Compiler selbst benötigt werden, im T6 ebenfalls enthalten und soweit in
Ordnung gebracht, daß sie z.B. im multitasking und bei interpretierten
Programmen keine Fehler auslösen. Ergänzend wurden neben der
bewährten und außerordentlich hilfreichen "Command Line
History" von Boris Jakubith einige MINERVA-spezifische
Erweiterungen aufgenommen (TRACE & MB), und, um die
Übertragung anderer Programme zu erleichtern, möglichst auch das mit
dem SMSQ/E Hinzugekommene. Letzteres entrümpelt und
weniger halbherzig, soweit das sinnvoll erschien und nicht in gleicher oder
vielseitigerer Form mit der IO2-Sammlung ohnehin schon vorhanden. So sei
etwa anstelle der DMEDIUM-Reihe auf die "fio"-Gruppe in IO2 verwiesen; mit
VNEW aus "sv0" kann selbst die weitschweifige Namensgebung noch nachgesetzt
werden.
Um irrigen Annahmen vorzubeugen:
Definitiv bin ich zur Korrektur immer wieder neuer Eigenheiten jener SMS-se nicht mehr bereit! Die betr.
Ergänzungen in T6 sind lediglich ein Versuch konstruktiver Schadensbegrenzung.
Zum TK2 gibt es frei über das Inet zugängliche ausführliche
Beschreibungen (NVG). Hier nur Hinweise auf Korrekturen und nach außen
wirksame Unterschiede gegenüber der genannten Version ("U6" bezieht sich
auf den Turbo-Toolkit - dessen Nutzen jeder selber ergründen mag):
T6 enthält Aufrufe, die in den QL-Standardsystemen nicht
verfügbar sind, und für die es auch separat keinen Ersatz
gibt. Bei entsprechendem Bedarf an Stellen, wo T6 partout nicht einsetzbar
ist, mache ich eine passende Sammlung zum Nachladen zurecht (ggf. bitte
mail). Da T6 weder MDV- noch NETzwerk-Routinen und ALTKEYs
enthält, lassen sich - im geeigneten MINERVA-System! - aber
bereits installierte TK2-Varianten überschreiben, ohne
daß deren Funktion verlorengeht. Behelfsweise kann z.B. im Codefile der
Name "TK2_EXT" in "TK6_EXT" geändert, T6 mit LBYTES & CALL adr+offset
(s.u.) geladen und mit TK6_EXT aktiviert werden. Um den TK2 wieder in den
alten Stand zu versetzen und nur die neuen Namen als Änderungen
übrigzulassen, ruft man dann nötigenfalls noch TK2_EXT auf.
INITIIERUNG
- T6 insgesamt wird in Verbindung mit dem System-ROM beim
Start automatisch initiiert.
- TK2_EXT
re-initiiert den TK2-entsprechenden Teil von T6, z.B. nach Neudefinition
durch andere Erweiterungen. Für die Namen aus dem Turbo-Toolkit ist
TUK_EXT (s.u.) vorgesehen.
- v92: Der Code kann auch nachträglich geladen und
aktiviert werden:
- TUK_EXT
re-initiiert die Namen aus dem TURBO-Toolkit.
- T6I_EXT
Setzt (außer VIEW) die ggf. aus IO2 überdefinierten Aufrufe auf
die T6-Varianten zurück:
v93: GET$ INPUT$ SETHEAD
KENNUNG
- TK2_EXT[
#kanal ] !
mit irgendeinem Parameter, leer oder z.B. Ausgabekanal, gibt die Version
an.
- Version und Datum stehen in Klartext am File-Anfang.
UNKORRIGIERT
- ED bleibt bei von
den Standardmaßen abweichender Zeichengöße
(CHAR_INC) stecken, sofern nicht im Kanal#2 (eines
beliebigen S.Basic-Jobs) gearbeitet wird.
- DELETE
Directories können im UQLX nicht
entfernt werden (per Version 1.10.99).
- T6
Im übrigen ist der Code insgesamt keineswegs hinreichend
geprüft, es gibt sicherlich noch etliche unerkannte Fehler darin -
welche möglichst mir
mitzuteilen sehr hilfreich wäre...
ÄNDERUNGEN ALLGEMEIN
- Adressenlage von
T6
T6 kann an beliebiger Adresse angesiedelt werden.
- Basic-Speicher
- vor Überschreiben durch
verdorbene Namen geschützt, einiges ergänzt rsp. neu,
- Fehler in Speicherfreigabe und
-reservierung korrigiert (FPOS, PARSTR$, etc.) - s.u.
- Arbeitspuffer für Eingabe
und COPY-Varianten vergrößerbar (s.u., SB_BUF).
- CTR/F5
Globale Bildschirmsperrung bei COPY u.dgl. durch reguläre
Tastatureingabe ersetzt (s.u.).
- COPY- und DIR-Varianten
- WCOPY kann meist noch fortgesetzt werden, wenn
verdorbene Files angetroffen wurden; Fehlermeldungen erscheinen vor
ggf. erneuter Tastaturanforderung im Ausgabefenster.
- Ein UQLX-spezifischer Fehler, bei dem der
Lese-Aufruf zwar ohne Fehler beendet wird, obwohl keine Daten
ankommen, wird vorläufig mit ERR.TE (-13) quittiert.
- DATAD / PROGD
bei fehlender Laufwerksangabe wird stets nach Scheitern der
zweckentsprechenden Vorgabe die andere Alternative geprüft - z.B. bei
EX nach PROGD$ auch DATAD$.
- Gegenüber TK2 erweiterte Funktionen der MINERVA
bleiben (weitestgehend) erhalten.
- Fehlertexte mit
ut_err (z.b. ED, SAVE, SEXEC, etc)
gehen nach #0 des betr. Jobs und nur im Notfall zum q-kanal 0 (#0 im
Ur-Basic).
- Fehlerbehandlung
generell korrigiert, (halbwegs) konsistent gemacht, und
ausführlicher:
- Abbruch bei Programmierungsfehlern oder Fehlern in
Proceduren;
- Fehlercode aus Funktionen bei Datenfehlern;
- interne Korrektur ohne Meldung, falls eindeutig
möglich.
- überzählige Parameter werden
(möglichst) ohne "Fehler"-Abbruch verworfen.
- Job-Spezifikation
ergänzt. Es gelten nun (und funktionieren):
- Name in Gestalt einer unbesetzten Variablen
entsprechend dem Jobnamen,
- String mit dem Jobnamen,
- Zahl mit der ganzen Job-ID,
- Zwei Zahlen mit QDOS-Jobnummer und Tagnummer des
Jobs (TK2),
- Zahl mit nur der QDOS-Jobnummer
(QLib);
- ohne Job-Parameter gilt für TK2-Aufrufe der
aktuelle Job,
Vorgabe bei Namen des Turbo-Toolkit ist
der S.Basic-Job 0.
- EXTRAS JOBS VIEW
DIR- und COPY-Varianten
Bei der Ausgabe in CON-Kanäle wirken Halt der Bildschirmausgabe, Tastendruck zur
Fortsetzung und zusätzlich ESC zum Abbruch nur im betr. Job, die Tastatureingabe bleibt
ansonsten ungestört. Ausgabe in SCR-Kanäle
weiterhin mit globaler Bildschirmsperrung.
- Kanal-Parameter
Aufrufe wie FLEN etc. nehmen Filenamen auch ohne die
Mätzchen mit leerem Parameter und Schrägstrich "\" an, sofern
sie eindeutig auswertbar sind, d.h. Strings oder noch nicht mit einem Wert
besetzte Namen:
- länge = FLEN( boot )
- länge = FLEN( "flp3_boot" )
- Programmteile für MDV
und NET
stillgelegt rsp. entfernt, da im UQLX wertlos.
- für NET ist ein UQLX-tauglicher Ersatz (evtl. auch für QLAY)
in Vorbereitung -
- WHEN-Verarbeitung
nach MINERVA-Muster in Ordnung gebracht.
- WMON WTV werden immer ohne
Fehlerabbruch beendet.
RAUS
- ALTKEY
zum einen nicht sonderlich geeignet für ein multitasking-System -
Übernahme einer eigenen Variante ist in Vorbereitung - und zum andern
durch die zwar keineswegs besser geeigneten, aber z.B. zur Nutzung des
"Thing"-Systems unvermeidlichen "hotkey"s überdefiniert, womit die
TK2-Variante überflüssig ist. Nun muß jedoch u.U. vor
Angabe eines ALTKEY-String die bisherige Funktion der betr. Taste explizit
gelöscht werden. Der ALT/ENTER-Zusatz wird durch die
HISTORY (s.u.) überflüssig.
- CALL CLOSE CONTINUE RETRY
STOP
sind bei MINERVA in Ordnung und haben bereits die durch TK2 nachgesetzte
Funktion; zudem war die WHEN-Behandlung durch TK2 unsicher.
- CLOSE in m89
s.o.
- DELETE
Nur ROM-Routine. Die für ein multitasking-System unzureichend
gesicherte durch andere Jobs jederzeit und unkontrollierbar
veränderliche Devicevorgabe der Vorlage ist (mir) dabei entschieden
zu riskant. - WDEL bleibt davon unberührt.
- ERNUM
Wegen möglicher Fehldeutung des 16bit-Wertes bei frei definierten
Meldungstexten für vollständige Fehlercodierung als ggf.
Fließkomma-Zahl in M89 entspr. MI-1.97 ergänzt.
- ERR_DF ist ohnehin
in Ordnung.
- REPORT
Fehlernummer
Ergänzung hierfür entspr. MI.1.97 in das M89-ROM verlegt.
TURBO
Der Turbo-Toolkit weist (nicht nur in Demo-Version!) Fehler auf, die zu den
sattsam bekannten Problemen beim Einsatz damit compilierter Programme
führen. Um dem möglichst abzuhelfen, sind folgende Namen aus dem
Turbo Toolkit (Demo 3.22), soweit mit dem System verträglich rsp
korrigierbar, mit compatibler und teils erweiterter (s.u.) Funktion in T6 enthalten:
Geändert wurde hier neben zahllosen fehlerhaften Referenzen auf
absolute S.Basic-Adressen insbes. allzuhäufiges Unterbinden des
multitasking zugunsten der Ausführungsgeschwindigkeit, die dann einzig
der gerade aktiven Turbo-"task" zugutekommt, das übrige System aber
nahezu vollständig zum Stillstand bringt. Diese Vorgehensweise bleibt
hier nur einigen wenigen Stellen vorbehalten, die entweder in anderer Form
sehr umständlich oder unzumutbar langsam würden. Die gänzlich
unsinnigen (und fehlerhaften!) Interrupt-Sperrungen unterbleiben ganz.
- regulär:
allocation basic_b% basic_w% basic_l
basic_f basic_index% basic_name$
basic_type% catnap channel_id compiled connect cursor_off
cursor_on dataspace deallocate default_device device_space device_status
edit$ editf
edit%
end_cmd erlin% ernum% execute execute_a execute_w float$ free_memory
get% getf get$ gethead input$ integer$ move_memory peek_f peek$ poke$
position release_task remove_task search_memory
sethead set_channel set_font set_position set_priority snooze string%
stringf string$ suspend_task sys_vars tk_ver$ turbo_f turbo_p
type_in.
- leer, ret ok:
command_line IMPLICITL IMPLICITB IMPLICITC IMPLICITF IMPLICITD IMPLICITV
DEBUG DEBUG_LEVEL option_cmd$ TURBO_objfil TURBO_objdat TURBO_repfil
TURBO_taskn TURBO_diags TURBO_struct TURBO_model TURBO_optim TURBO_windo
TURBO_locstr MANIFEST IMPLICIT% IMPLICIT$ EXTERNAL GLOBAL DATA_AREA
REFERENCE RETRY_HERE WHEN_ERROR END_WHEN THROW_AWAY
- undefiniert, ret err.ni:
gminfo get_msec put_msec link_load link_load_w link_load_a
Die Aufrufe des Turbo-TK, die den Turbo-Compiler ergänzen rsp. zum
Betrieb damit compilierter Programme benötigt werden, sind (mangels
hinreichender Dokumentation) weitgehend ungeprüft und mit einiger
Sicherheit noch fehlerbehaftet. Darum werden diese Erweiterungen
sicherheitshalber nicht automatisch initiert, hierfür ist der gesonderte
Aufruf TUK_EXT zu verwenden.
LEER
Vor allem vorhanden, um Programmabbruch durch hier sinnlose SQ-Spezifika zu
vermeiden.
- ALTKEY FSERVE NFS_USE
- INSTR_CASE
S.Basic-Erweiterungen zum Stringvergleich unter verschiedenen Bedingungen
gibt es anderweitig in ausreichender Zahl - auch in "ep0_byt" aus
IO2.
- KBD_TABLE, LANG_USE
Wegen des m.E. völlg überzogenen Aufwandes durch Vorhalten
überwiegend nutzloser Texte und TRA-Tabellen in einer Vielzahl
Sprachvarianten mögen interessierte Anwender die zugehörigen
Funktionen bei Bedarf ggf. selber nachsetzen. Texte und Tabellen liegen
der regulären Software zur MINERVA bei, und im QDOS sind alle
erforderlichen Hilfsmittel (s. auch "PiQ") vorhanden, sodaß es damit
keine Probleme geben sollte.
Im UQLX kann die Tastaturumsetzung allerdings auch empfindlich
stören.
- LANGUAGE, LANGUAGE$
ggf. leicht durch entpr. S.Basic-Funktionen nachzubilden.
GEKÜRZT
- CLEAR NEW
RUN
führen nach internem CLCHP-Aufruf nur die ROM-Routinen aus.
- EX
für TK2-"special-jobs"
Dieses, wie sich zeigte, nutzlose Zeug ist
nicht mehr vorhanden.
- FSERVE NFS_USE
Leer, solange im UQLX noch kein Ersatz für das QDOS-Netzwerk
besteht.
ERGÄNZT
- ALARM CLOCK
FSERVE (Job "server") MB
(neu, s.u.) SPL
Aufrufender Job wird Besitzer der hierdurch eingerichteten Jobs.
- AJOB
eines bereits aktiven Jobs gilt nicht als Fehler, der Aufruf stellt dann
nur die Priorität ein.
- AJOB ALCHP RJOB
SPJOB etc.
Erweiterte Möglichkeiten der Job-Angabe (s.o.,
"Job-Spezifikation").
- adr =ALCHP([ jobspec, ]
pufferzuweisung
)
nimmt nach auch eine Job-Spezifikation für den Besitzerjob der
Speicherzuweisung an. Vorgabe ist der aufrufende Job; bei Zuweisung an
"fremde" Jobs wird der Block nicht in die RECHP-Kette aufgenommen und geht
dann auch durch NEW etc. nicht verloren.
- ALLOCATION
U6: wie ALCHP mit mit möglicher Jobangabe, Vorgabejob ist Basic-0.
Ohne Freigabe-Automatik.
- BASIC_B% BASIC_W% BASIC_L BASIC_F
BASIC$
BASIC_INDEX% BASIC_NAME$ BASIC_TYPE%
U6: nehmen als führende(n) Parameter auch eine Job-Spezifikation nach
o.a. Muster an.
- BGET
holt Daten auch in Strings, in ganzer rsp. spezifizierter Länge. ->
Beispiele.
- BIN$ HEX$ OCT$
- Ohne oder bei zu großem Wert für die Bit-Anzahl werden 32
Bits übernommen.
- OCT$ neu (s.u.).
- BPUT
erlaubt zusätzlich - und auch mit Zahlen gemischt - Senden der Daten
aus Strings.
- CLOSE
- in T6M97 q-kanal Null geschützt, desgl. bei
M89 im ROM.
- S.Basic-Kanal wird nur bei Erfolg der QDOS-Operation geschlossen
markiert, rsp. wenn Kanalbesitzer ein anderer Job ist.
- '#'-Zeichen vor Kanalnummern hier überflüssig, sie
können fortgelassen werden.
- v93: eigener Fehler bei der Markierung korrigiert.
- CDEC$ FDEC$
IDEC$
v93: als vierter Parameter kann der Code des Dezimalbruch-Trennzeichens
angegeben werden. Bei CDEC$ wird dann auch die Tausender-Trennung
entsprechend geändert.
- COPY COPY_H COPY_N
- Datum der
Quelle wird mitcopiert,
- Copie an das
Ende einer vorhandenen Datei wird mit Trennzeichen "!"
zwischen den Namen veranlaßt; nötigenfalls wird die
Zieldatei neu angelegt.
- Angabe #ziel-kanal
zusätzlich möglich, Kanal bleibt offen.
- Arbeitspuffer
(in vernünftigem Rahmen) mit SB_BUF beliebig
groß einstellbar.
- DATAD$ etc.
Bei allen Aufrufen mit möglicher Device-Vorgabe wird jene, falls sie
noch fehlt, insgesamt mit leeren Posten und ggf. mit dem explizit
angegebenen Text initiiert.
- DEL_DEFB [ devicename [ nummer[_] ]
]
Definitionsblöcke ausgewählter Geräte und Laufwerke
können einzeln gelöscht werden.
- DEVICE_SPACE
U6: nimmt anstelle der Kanalangabe auch ganze File- oder Directorynamen
an.
- DO
CLCHP-Aufruf entfernt, reservierte Speicherbereiche bleiben erhalten.
- ED
spielt
in MINERVA-Jobs nun ohne ständig nötiges Umhergeknipse zum
Ur-Basic.
- Löschen des q-Kanals Null beim Aufruf
unterbleibt,
- Fehlermeldungen gehen zum wirklichen Kanal #0,
statt nach q-Kanal Null.
- Aufruf ohne Nummer geht zur jüngst editierten
Zeile > 0 (bv.edlin) rsp. zur unteren Zeile, die beim Editieren
sichtbar war (bv.lsbas).
- EDIT$ EDITF
EDIT%
U6: Mit dem vierten Parameter kann die maximale Wartezeit bis zum
Abschluß der Eingabe festgelegt werden. Wiederholung nach
Eingabefehler ohne Zeitbegrenzung (nicht EDIT$).
- EDITF EDIT%
Auswertung abhängig vom führenden Zeichen auch "$":sedezimal,
"&":octal, "%":binär:
- z.B. PRINT EDIT%(#1,"$500 =
",,0) schreibt: $500 =
1280
- Bei Fehlern gibt EDIT% den Wert -32768 zurück, EDITF liefert
-1e601.
- EX
- Besitzer neuer Jobs wird der aufrufende Job.
- "XTcc"-Felder gelten, falls der File-Header mit Typ
0 gelesen wurde, wie die regulären Headerdaten für
Job-"dataspace" und -Typenflag. Vorhandensein des Feldes steht dann
für den Typen 1 (Job) und sein Wert gilt für den
Datenbereich.
Das XTcc-Feld
wird nicht in den Codebereich übernommen.
- Name und die anderen Headerdaten der als Job
aufgerufenen Programmdatei können innerhalb des Programms im
Anschluß an die (TK2-)übliche Anordnung im Stack des Jobs
gelesen werden. Der Datenbereich für den Job ist entsprechend
vergrößert . ->
Details und Beispiele zur
Prüfung.
- EXTRAS
Anzeige kann global (durch Systemvariable) mit <ESC>
beendet werden (s.o.).
- FDAT FPOS FTYP
etc.
Alle diese Aufrufe brechen bei Fehlern nicht mehr ab, sie geben stets den
Code zurück.
- FDAT
gibt bei regulärem Filetypen 0 und vorhandenem
XTcc-Feld die dort festgelegte Größe des
Datenbereichs zurück.
- leerstring | filename = FNAME$(
... )
- gibt bei Fehlern einen Leerstring zurück, ERNUM hat dann den
Fehlercode.
- der Name wird aus den Systemdaten ermittelt, der Filepointer bleibt
darum erhalten.
- FPOS
Die mit ggf. einem zweiten Parameter übergebene
Position wird eingestellt, zurückgegeben wird
dagegen stets der vor dem Aufruf gültige (alte)
Wert.
- FTYP
gibt bei regulärem Filetypen 0 und vorhandenem
XTcc-Feld den Filetypen 1 (Job) zurück.
- date | ernum = FUPDT( kanal [ ,neues-datum ] )
Schreib-Datum einer Datei lesen und optional mit
zweitem Parameter einstellen (s.u.).
- LRESPR
lädt Files mit ROM-header und arbeitet auch, wenn
schon Jobs vorhanden sind.
- MOVE_MEMORY
T6: Stets nicht-überschreibend, Vorzeichen der Längenangabe
belanglos.
- NXJOB
arbeitet auch mit nur der ersten Jobangabe.
- OPEN und
Varianten
Ein dritter Parameter kann als Kanalnummer oder Kanal-ID - insbes. zur
Verkettung von Ein-/Ausgabe-PIPEs - rsp. mit dem OPEN-Code übergeben
werden.
- PARSTR$
Leerstring auch bei Fehlern, ERNUM hat dann den Fehlercode, ist sonst
Null.
- PARUSE PARTYP
können auch mit der Nummer des betr. Posten einer
Proc-/Fu-Parameterliste indiziert werden; diese Aufrufform wird durch
führendes "#" Nummernzeichen markiert. PARHASH
und PARSEPA
(s.u.) nehmen diese Variante ebenfalls an, aber ohne brauchbares Ergebnis,
da die Markierungen beim Lesen des Index-Wertes verlorengehen.
- string$
=
PEEK$(adresse [ , länge ] )
string$
=
BASIC$(adresse [ , länge
]
)
BASIC$ auf die Basis des Basic-Jobs 0 bezogen, sonst wie PEEK$; PEEK$ holt
bei nur einem Parameter den String ab adresse+1
der Länge aus dem Byte auf adresse.
- RJOB
eines nicht vorhandenen Jobs gilt nicht als Fehler.
- adresse = SEARCH_MEMORY( von TO
bis, text$ )
- Bereich auch "von TO bis" anstelle der
Größe des zu durchsuchenden Bereichs.
- Suche zum Ende hin auf RAMTOP begrenzt (verhindert Fehler durch
Umlauf).
- Längere Suchsequenzen können nicht mehr das ganze System
blockieren.
- SPL
- arbeitet - wesentlich schneller - mit auf 2K+
vergrößertem Datenpuffer.
- bereits offene Kanäle bleiben offen.
- VIEW
- schnellere Ausgabe bei Files mit langen Textzeilen
oder bei Codefiles.
- bei offenen File-Kanälen wird die
WIDTH-Einstellung für die Zeilenlänge
benutzt.
- WCOPY WDEL WDIR WREN
WSTAT
Die "wildcard"-Kommandos
sind korrigiert und teils weiter ausgebaut (s.u.).
- WCOPY
- überträgt auch das Datum der Quellenfiles
an die Copien.
- Directories werden ohne Meldung
übersprungen.
- ".-UQLX-" und ".--LINUX--" werden nicht
überschrieben.
- WDEL
".-UQLX-" und ".--LINUX--"
können nur einzeln gelöscht werden, nach "A"lle aus der
Tastaturabfrage bleiben sie erhalten.
- WDIR
DIR etc
- (Sub-)Directories werden mit '->'
gekennzeichnet.
- auch SERnet-Namen
(Sn_...) werden erkannt.
- Abbruch auch mit der <ESC>-Taste (global)
möglich.
- Filetypen-Auswahl
bei zusätzlicher Zahlen-Angabe für den Typen.
- WMON WTV [[ mode ] , [ x_pix,
y_pix ]]
- richtet bei vorhandenem PIF die "outline" für
Fenster #0 in Standardmaßen ein.
- Ergänzt für übergroße Bildschirmabmessungen:
- Bei zwei (MODE unverändert) oder mehr Parametern gelten die
letzten beiden als Pixelposition der linken
oberen Ecke (Fenster #2) im Bildschirmbereich.
- Ohne Parameter oder nur mit MODE-Angabe bleibt
die Position unverändert;
Vorgabe für MODE ist 0 (rsp. 4 oder 512, alles
dasselbe).
- Der Ursprung (links oben) bleibt auch bei
ungeeigneten Parametern erhalten, der Aufruf wird dann ohne Fehler und
mit unveränderten Fenstermaßen abgebrochen.
- überzählige Parameter werden ohne Aktion
verworfen.
NEU
Die Angabe "kanal" bezieht sich auf die
TK2-Spezifikation für Kanäle oder Filenamen;
{.. | ..} eine der durch "|" getrennten
Alternativen muß hingeschrieben werden, [ .. ] optional..
KORREKTUREN
- AJOB etc.
- Parameterasuwertung für verläßliche Ergebnisse
völlig neu eingerichtet.
- die Job-Aufrufe geben bei Fehlern den Code nach QDOS-Konvention
zurück.
- CLOSE
bricht auch bei (isoliertem) Parameterfehler nicht ab.
- COPY-Varianten,
SPL
mit "#kanal" übergebene offene (Ziel-)Kanäle bleiben offen.
- COPY-Varianten,
WCOPY
- Kanäle werden auch bei leerem File oder nach
Abbruch ordentlich geschlossen. Hier verusachte Fehler wurden
verschiedentlich dem QDOS-Netz
zugeschrieben. Das ist Unsinn! Systembedingt kamen sie dort nur
besonders leicht zum tragen.
- Datum der Quelle bleibt erhalten, wenn die
QDOS-Trap FS.DATE verfügbar ist.
- DATAD$ etc, DIR etc.
Fehler durch ungeeignete Daten abgefangen (S.Basic-Jobs konnten
zerstört werden!).
- DEL_DEFB
Mögliches Hängenbleiben in Endlos-Schleife bei sv_mdrun=/=0
unterbunden.
- DO LOAD etc
Basic-#0 =/= QDOS-0 bleibt offen.
- ED
spielt auch in MINERVA-Basic-Jobs:
Fehlermeldungen erscheinen 1. überhaupt und 2. im richtigen
Fenster;
ED anderswo als in #2 spielt (bei Standard-Zeilenhöhe; NICHT z.B.
CHAR_INC#1,6,8).
- FLEN
liefert die zum Zeitpunkt des Aufrufs wirklich
File-Länge. Datengewinnung über Positionierung des
Filepointers statt im TK2 durch Lesen aus den meist wertlosen Headerdaten
eines offenen Kanals.
- FOPEN FOP_DIR FOP_IN FOP_NEW
FOP_OVER FTEST
brechen in keinem Falle ab, bei Fehlern wird stets der entspr. Code
zurückgegeben.
- FTYP FUPDT FDAT FXTRA
FNAME$
stellen - als Nebenwirkung der 'XTcc'-Erkennung - den
Filepointer auf Null. Das geschieht bei den
Original-QL-Systemen durch die QDOS-Trap 'fs.headr' auch, bei MINERVA und
SQ(?) dagegen bleibt die Position erhalten. Die Änderung wird
akzeptabel sein, da für übertragbare Programme ohnehin eine
bekannte Position des Filepointers nicht vorausgesetzt werden kann.
- JOBS JOB$
- in JOBS ist ein Stackfehler beseitigt.
- Namen länger als 255 Zeichen werden zum Schutz gegen
Pufferüberlauf (JOB$) rsp. Ausgabe allzuvieler unsinniger Zeichen
bei verdorbenen Daten unterdrückt.
- MERGE
innerhalb eines aktiven Programms führt MRUN
aus.
- NXJOB
gibt die Werte der Trap mt.jinf zurück, und ggf. die wirkliche
Fehlercodierung.
- PARTYP PARUSE (und PARSEPA
PARHASH)
Kein Fehlerabbruch,
stattdessen ggf. Rückgabe der Fehlercodierung.
- PARSTR$
Insbes. dieser, aber auch die verwandten Aufrufe, können fehlerfrei
mit anderen Daten zu Strings zusammengefügt werden; etwa:
nn=FOPEN("win2_xx_"&PARSTR$(y,2)&'_asm")'.
- SBYTES LBYTES EXEC
etc.
Codelänge geradzahlig aufgerundet, EOF ist dann kein Fehler, wenn 1
Byte Differenz.
- SBYTES SBYTES_O
sicherer Abschluß mit fs_flush.
- SEXEC SEXEC_O
hängt XTcc-Feld an, sicherer Abschluß mit
fs_flush.
- SPL
- mit "#kanal" übergebene offene Kanäle bleiben offen. -
COPY gleichartig ergänzt.
- Fehler bei der Datenübertragung werden in #0 oder #1 des ersten
Basic angezeigt.
- TK2_EXT
mit ROM-init automatisch, sonst nur zum Restaurieren
überdefinierter Worte erforderlich.
- WCOPY
fällt beim Antreffen von Sub-Directories nicht mehr in die
Tastatur-Abfrage zurück; da sie ohnehin nicht copiert werden
können, werden sie ohne weiteres übersprungen.
- WDIR etc
Behandlung der Schreibweise von Umlauten, Diphtongen und
Zeichen > 160 berichtigt.
- WTV WMON
- immer ohne Fehlerabbruch. Bei ungeeigneten
Maßen keine Aktion.
- Ohne den - unsinnigen - Test auf überzählige Parameter,
damit auf SQ abhebende Programme ungeändert benutzt werden
können - s.o.
- Die sonstigen Parameterkonventionen aus SQ wurden nicht
nachgebildet.
IN VORBEREITUNG
- multitasking-taugliche Devicevorgabe (DATAD, etc.)
- multitasking-taugliche ALTKEYs
- multitasking-taugliche
Bildschirmausgabe bei VIEW, DIR, etc. (v94)
- multitasking-taugliche und sichere ENVironment-Variable
- DEV-Device nach GC-Muster
- BEEP für den UQLX im Linux (zunächst nur Piepser des IBM-Typ
PC)
- vereinfachte Ausführung von Linux-Kommandos mittels PTY
- Filtypen-selektives
(W)DIR (v91)
- TURBO-runtimes
(v93)
- QLib-runtimes
- NETzwerk zwischen UQLX und QL.
- .hpr'4/99 - t6m & m89m - eof -
[anfang | front] : [uqlx] : [m89] : [oben | top]