Directory-Editor mit Komfort
Mit diesem Programm gestalten Sie das Disketten-Directory ganz nach Ihren Wünschen.
Mit dem Directory-Editor kann man das Inhaltsverzeichnis einer Diskette auf komfortable Art und Weise ändern. Das Programm ist lauffähig auf dem Commodore 64 sowie seinen »großen Brüdern«CBM 2001 bis8001. Es erkennt Computer und Floppy-Laufwerk-Typ und sollte ohne Schwierigkeiten auch an andere und zukünftige Commodore-Computer und -Floppy-Laufwerke anzupassen sein.
Das Programm wird mit RUN gestartet. Es dauert einige Sekunden, bis Computer- und Floppy-Laufwerk-Typ erkannt und die Variablen entsprechend gesetzt sind.
Befehlsbeschreibung
Tabelle 1 zeigt eine Übersicht über alle Befehle des Directory-Editors. Die Befehle im einzelnen: Durch »A« oder »SPACE« (Leertaste) erhöht man eine zweiseitige Kurzanleitung mit einer Befehlsübersicht (weiter mit beliebiger Taste).
Befehl | Mnemonic | *) | Bedeutung |
---|---|---|---|
A/SPC | Anl | Anleitung zeigen | |
B | Block | blockweises Weiterlesen der Directory | |
D | DEL | File als gelöscht kennzeichnen | |
E | Ende | Bearbeitung der Directory beenden | |
F | Floppy | Floppykommando eingeben | |
I | Init | Editor initialisieren, Diskettennamen und -ID ändern | |
L | Letter | Groß-/Kleinschrift umschalten | |
N | Name | Dateinamen neu eingeben | |
P | PRG | als Programmfile kennzeichnen | |
R | REL | *) | als relatives File kennzeichnen |
S | SEQ | als sequentielles File kennzeichnen | |
U | USR | als User-File kennzeichnen | |
V | Valid | Block-Überprüfung erzwingen | |
X | Exit | Programm beenden | |
←= | nächsten Fileeintrag anzeigen | ||
<RET> | einen Fileeintrag zurückgehen | ||
* | *) | geöffnetes File schließen | |
+ | *) | Löschschutz aktivieren | |
− | *) | Löschschutz abschalten | |
0/1 | auf entsprechendes Laufwerk schalten |
Mit »0« und »1« kann man bei einem angeschlossenen Doppelfloppy-Laufwerk zwischen den beiden Laufwerken wählen. Falls ein Doppelfloppy-Laufwerk angeschlossen ist, wird beim Start des Programms automatisch Laufwerk 1 gewählt, so daß sich folgende Laufwerksaufteilung anbietet: Laufwerk 0 mit Systemdiskette und Laufwerk 1 mit der zu bearbeitenden Diskette.
»L« dient zur Umschaltung zwischen Groß- und Kleinschreibung. Mit »X« kann das Programm jederzeit verlassen werden. Wird gerade eine Diskette bearbeitet, so wird zunächst automatisch der Befehl »E« ausgeführt.
Der eigentliche Editor wird mit »I« initialisiert. Die Aufforderung zum Einlegen der zu bearbeitenden Diskette bestätigt man mit einem beliebigen Tastendruck. Nun wird die eingelegte Diskette initialisiert und nachgeprüft, ob sie dem Format des Floppy-Laufwerks entspricht. Jetzt werden nacheinander Diskettenname und Identität (ID) angezeigt, die man durch einfaches Überschreiben ändern kann. Die ID darf übrigens bis zu fünf (bei CBM 2040/3040 vier) Zeichen lang sein. Mit der RETURN-Taste kommt man zum Inhaltsverzeichnis.
Das Programm zeigt jetzt den ersten Eintrag an. Im ersten Feld wird die Länge des Files in Blöcken angezeigt. Das zweite Feld enthält den Filenamen, der nach dem Drücken von »N« frei geändert werden kann.
Im dritten Feld werden drei Fileparameter angezeigt, die in dem Directory auf der Diskette alle in einem Byte untergebracht sind: Wenn ein Stern vor dem Filetyp angezeigt wird, so wurde das File nach dem Schreiben nicht geschlossen, was es normalerweise unmöglich macht, auf dieses File wieder zuzugreifen. Glücklicherweisegeschiehtdies recht selten, daso etwas nur durch Stromausfall, versehentliches Ziehen des Netzsteckers oder durch Unterbrechen eines Basic-Programms mitten im Schreibvorgang zustandekommen kann. Trotzdem ist es ärgerlich, wenn es einmal passiert. Mit dem Directory-Editor können solche Files wieder lesefähig gemacht werden, indem man »*« eingibt. Dabei wird die erste Spur/Sektor-Kennzeichnung ausgelesen und das File bis zum Ende verfolgt. Danach wird die errechnete Blockzahl in das Directory geschrieben und ein Validate der Diskette nach dem Programmlauf veranlaßt (ab Zeile 6000). Der Stern vor dem Filetyp verschwindet, das File ist wieder in Ordnung. Es kann wohl vorkommen, daß die letzten (maximal 254) Bytes verlorengehen, wenn diese bei dem Zwischenfall noch im Floppypuffer zwischengespeichert waren; dafür ist der Rest aber gerettet.
Als zweite Information in diesem dritten Feld wird der Filetyp ausgegeben. Dieser kann durch Drücken des Anfangsbuchstaben des gewünschten Filetyps geändert beziehungsweise das File mit »D« gelöscht werden. Auch gelöschte Files werden mit angegeben und können (leider nicht bei den Floppy-Laufwerken CBM 2040/3040 wegen der völligen Zerstörung der Block-Zeiger) wieder eingetragen werden. Bei der Benutzung ist aber Vorsicht geboten, denn wenn nach dem Löschen schon wiederauf die Diskette geschrieben wurde, können Teile des Files oder Programms zerstört sein. Werden nach einem Validate zu viele freie Blöcke ausgegeben, dann kann man nichts mehr retten und das File sollte wieder gelöscht und die Diskette mit dem Validate-Befehl nochmals überprüft werden.
Die dritte Information, die nur ab DOS-Version 2 vorhanden ist (also nicht für 2040/3040), ist der Löschschutz. Er wird durch »+« ein- und durch »—« wieder ausgeschaltet und schützt vor dem Scratch-Befehl. Der New-Befehl beachtet solch einen softwaremäßigen Schutz nicht, hier hilft nur der physikalische Löschschutz, das Ankleben einer Schreibschutzmarke. Der softwaremäßige Löschschutz wird mit »\<« hinter dem Filetyp in der Directory angezeigt.
Die letzten beiden Felder der Zeile zeigen den Startsektor, also den Anfang des Files, auf der Diskette. Bei 2040/3040-Floppy-Laufwerken sieht man, daß mit »Scratch« gelöschte Files eine Null in der Anzeige der Spur anzeigen und somit nicht mehr reparabel sind.
Mit der RETURN-Taste, »-« oder »=« kann man den nächsten Eintrag in die Anzeige holen. Sucht man nur ein bestimmtes File, um etwas zu ändern, so kann man mit »B« gleich bis zum Ende des Directory-Blocks »vorspulen«. Dies hat den Vorteil, daß es schneller geht. Trotzdem kann man immer mit »t» oder »@« ein File zurückgehen, falls es in demselben Block liegt.
Wenn ein File wieder in die Directory zurückgeholt oder gelöscht wird, so muß die Diskette später zur korrekten Blockbelegung überprüft werden. Will man diesen Vorgang erzwingen, so kann man »V« drücken. Ob überprüft wird oder nicht, steht unten in der vorletzten Textzeile hinter »V«. Ein »+« bedeutet, daß erst später überprüft wird.
Mit »E« kann die Bearbeitung jederzeit unterbrochen und zum Ende gesprungen werden. Am Ende des Directory, beziehungsweise wenn »E« eingegeben wurde, wird — falls erforderlich durch Löschen, Wiedereintragen oderSchließen eines Files — die Diskette mit dem »Validate«-Befehl überprüft. Dies kann eine Minute dauern, falls sich viele Files auf der bearbeiteten Diskette in ungelöschtem Zustand befinden. Danach wird die Anzahl der benutzten und der freien Blöcke ausgegeben. In Klammern erscheint die Anzahl der freien Blöcke, die in dem Directory abgelegt sind. Kommt es zu Unterschieden, so sollte, wenn das Directory bis zum Ende durchgeblättert wurde, mit »Validate« überprüft werden. Wenn mit »E« oder »X« abgebrochen wurde, dann sind wahrscheinlich nicht alle belegten Blöcke mitgezählt worden und die Zahlen, die nicht in Klammern stehen, sind nicht relevant. Nach Anzeige der Blockzahlen ist das Programm bereit, eine neue Diskette zu bearbeiten.
Eingebaute Geräteanpassung
Am Anfang des Programms wird in eine Unterroutine ab Zeile 7 500 gesprungen, die durch Vergleichen eines Bytes mit einer Tabelle herausfindet, in welchem Computer sich das Programm im Augenblick befindet, und danach alle systemspezifischen Adressen, die vom Hauptprogramm benötigt werden, in Variablen einliest. Dieses Vorgehen ermöglicht es, jeden Commodore-Computer, der mindestens einen 40 Zeichen breiten Bildschirm besitzt, zu benutzen, ohne das Programm vollständig verändern zu müssen. Außerdem können auch die großen Commodore CBM 600/700 oder die kleinen C 16/C 116 und der Plus/4 mit dem gleichen Programm laufen, wenn die Abfragen entsprechend erweitert werden. Zur eigenen Anpassung des Programms sind in Tabelle 2 die benötigten Systemadressen aufgeführt. Sie müssen in dieser Reihenfolge nach dem PEEK-Wert und dem Namen des Computers ab Zeile 7 560 in DATAs abgelegt werden.
Computer-Name | ||||||
---|---|---|---|---|---|---|
Variable CT$ | Bedeutung | CBM 2001 | CBM 3001 | CBM 4001 | CBM 8001 | C 64 |
C%(0) | PEEK(58453) | 136 | 152 | 32 | 76 | 189 |
WI | Zeilenlänge des Bildschirms | 40 | 40 | 40 | 80 | 40 |
C0 | Länge des Tastaturpuffers | 525 | 158 | 158 | 158 | 198 |
C1 | =0: Cursor eingeschaltet | 532 | 167 | 167 | 167 | 204 |
C2 | Zähler für Cursorblinken | 533 | 168 | 168 | 168 | 205 |
C3 | Zeiger auf Start der BS-Zeile | 224 | 196 | 196 | 196 | 209 |
C4 | augenblickl. Cursorspalte | 226 | 198 | 198 | 198 | 211 |
C5 | =1: Hochkommamodus (”) | 234 | 205 | 205 | 205 | 212 |
C6 | Länge der Bildschirmzeile | 242 | 213 | 213 | 213 | 213 |
C7 | augenblickliche Cursorzeile | 245 | 216 | 216 | 216 | 214 |
C8 | Anzahl der Inserts | 251 | 220 | 220 | 220 | 216 |
C9 | =128: Repeat auf allen Tasten bei C9=0: kein Repeat-Flag | --- | --- | --- | 228 | 650 |
Für alle Commodore-Computer gilt, daß mindestens 16 KByte RAM vorhanden sein müssen. Hiervon sollten 12 KByte zur freien Verfügung übrigbleiben, denn der Directory-Editor belegt 10 KByte und benötigt noch einmal 2 KByte für Variablen.
Auch die Floppy-Laufwerke besitzen unterschiedliche Eigenschaften und Eigenarten, die es nötig machen, den Geräte-Typ durch das Programm erkennen zu lassen, um ein zufriedenstellendes Arbeiten des Directory-Editors mit allen Laufwerken zu gewährleisten. Diese Routine (ab Zeile 7 000) wurde aus dem Programm »Disk Addr Change« der 1541-Test/ Demo-Diskette entnommen und für den Directory-Editor erweitert. Auch dieses Unterprogramm kann leicht an neue Floppy-Laufwerke angepaßt werden. Es werden mit »M-R« einzelne Bytes aus dem Floppy-ROM gelesen, die charakteristisch für bestimmte Floppy-Laufwerke sind. Anpassungen an alle gängigen Commodore-Floppy-Laufwerke sind eingebaut (2/4031, 1540/1, 2/3040, 4040, 8050, 8250, wobei CBM 4040/8050 entweder mit DOS 2.1/2.5 oder DOS 2.7 ausgestattet sind). Die Erweiterung auf neue Commodore-Laufwerke (zum Beispiel 1571 und SFD 1001/1002) ist natürlich möglich. In Tabelle 3 werden alle erforderlichen Variablen erklärt und am Beispiel der eingebauten Anpassung demonstriert. Tabelle 4 zeigt die Bedeutung wichtiger Variablen, die bei verschiedenen Laufwerks-Typen unterschiedlich sein kann.
Floppy-Name und DOS-Version | |||||||
---|---|---|---|---|---|---|---|
Variable F$ | Bedeutung | 2/3040 | 4040 2.1/2.7 | 2/4031 1540/1 | 8050 2.5/2.7 | 8250 /LP | |
F%(2) | Floppy-PEEK(65535) *) | 226 | 213/198 | 254 | 242/198 | 198 | |
F%(1) | Floppy-PEEK(16618) | –99 | –99/0 | –99 | –99/1 | 1 | |
F%(2) | Floppy-PEEK(16556) | –99 | –99/–99 | –99 | –99/1 | 2 | |
DR | Anzahl der Laufwerke –1 | 1 | 0 | 1 | |||
BF | Puffer #0 (High-Byte) | 17 | 3 | 17 | |||
TY | Floppy-Typ (siehe Tab. 4) | 1 | 2 | 3 | 4 |
Variable | Bedeutung | TY= 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
FB | Anzahl der freien Blöcke | 670 | 664 | 2052 | 4133 |
DM$ | Formatkennzeichen auf Disk | CHRS$(1) | "a" | "c" | "c" |
TT,TS | Directory-Header-Block | 18,00 | 39,00 | ||
TD,SD | erster Directory-Block | 18,01 | 39,01 | ||
NB | Beginn des Namen (Byte#) | 144 | 6 | ||
AT | Anzahl der Tracks +1 | 36 | 78 | ||
DT | Anzahl der Dateitypen | 4 | 5 | ||
FT$ | Dateitypen (im Augenblick: DEL, SEQ, PRG, USR, REL) | ||||
Typ 1: | 2040/3040 V1.0 | ||||
Typ 2: | 4040 V2.1/2.7, 1540/1 V2.6, 4031/2031 V2.6, (SFS 491) | ||||
Typ 3: | 8050 V2.5/2.7 | ||||
Typ 4: | 8250/LP V2.7, (SFD 1001/1002) |
Die Unterroutinen
Der Programmablauf ist in Tabelle 5 erläutert. Einige interessante, auch für andere Programme verwendbare Unterroutinen sind enthalten. Das Unterprogramm ab Zeile 8000 stellt eine neue Eingabe-Routine dar, die die Möglichkeit bietet, die Cursorsteuerung sowie lnsert/Delete zu erlauben, und trotzdem aufzupassen, daß nicht über den Rand des Eingabefeldes hinausgefahren wird. Außerdem sind zwei Tasten etwas anders belegt: Die HOME-Taste setzt den Cursor auf den Anfang des Eingabe-Feldes und CLR löscht nur das Eingabe-Feld, so daß der Bildschirmaufbau nicht aus Versehen einmal zerstört werden kann. Zeile 8021 wurde nur speziell für den Directory-Editor eingebaut: sie füllt den Rest des Strings bis zur Maximallänge IL mit SHIFT-Leerzeichen auf. Das wird zum Löschen eines möglichen Reststrings in der Directory benötigt und kann bei eigener Anwendung der Eingabe-Routine gegebenenfalls weggelassen werden. Die Eingabe von SHIFT-RETURN bewirkt, daß der Rest ab der Cursor-Position gelöscht und die Eingabe wie bei RETURN beendet wird.
Adresse | Bedeutung |
---|---|
1000-1999 | Initialisierung der Variablen, Aufruf von 7000 und 7500 |
2000-2499 | Eingabe-Warteschleife und Verarbeitung der Befehle |
2500-2999 | Unterprogramm: Schließen eines Files |
2800-2999 | Unterprogramm: Umschaltung Groß-/Kleinschreibung |
3000-3499 | Unterprogramm: Ausgabe der Anleitung |
3500-3999 | Unterprogramm: Ein- und Weitergabe eines Floppykommandos |
4000-4999 | Unterprogramm: Initialisierung des Editors |
5000-5999 | Unterprogramm: Anzeige des nächsten Eintrags |
6000-6999 | Unterprogramm: Ende des Directorys, Anzeige der Blockzahl |
7000-7099 | Unterprogramm: Erkennung des Floppy-Typs |
7100-7199 | Vorbereitung von 2040/3040 |
7200-7299 | Data: Floppy-Laufwerk-Erkennung (Tabelle 3) |
7300-7399 | Data: Merkmale gleicher Typen (Tabelle 4) |
7400-7499 | Data: erweitertes M-R für 2/3040 |
7500-7599 | Unterprogramm: Erkennung des Computer-Typs |
7600-7699 | Data: computerspezifische Variablen (Tabelle 2) |
8000-8999 |
Unterprogramme: 8000 Eingabe-Routine 8030 Inget-Routine 8040 Bildschirroll-Routine 8050 Diskettenfehler behandeln 8060 Taste holen 8070 Ausgabe mit Steuerzeichen 8080 Cursor auf Zeile LN stellen |
9000-9099 | Data: Bildschirmaufbau |
9100-9199 | Data: Änderungen des Aufbaus für die Anleitung |
9500-9999 | Data: Anleitung |
Die Routine ab Zeile 8040 scrollt einen beliebigen Bildschirmbereich von Zeile X1 bis X2 aufwärts, falls der Cursor in Zeile X2 steht. Dies geschieht durch »INPUT« vom Bildschirm und Ausgabe der eingegebenen Strings je eine Zeile höher.

Ab Zeile 8060 steht die Warteschleife bis zum Drücken einer Taste. Dabei wird der Cursor eingeschaltet und an eine vordefinierte Stelle auf den Bildschirm gesetzt. In PR$ ist das Promptzeichen enthalten. Wenn das Unterprogramm von Zeile 2000 her angesprungen wird, sieht man ein »>«. Aus einem anderen Unterprogramm heraus (zum Beispiel Anleitung) zeigt sich ein » < «. Daran erkennt man, in welchem Modus man sich gerade befindet. Die gedrückte Taste wird direkt daneben angezeigt.
Ab Zeile 8 070 befindet sich eine Routine, die einen Text inklusive aller Steuerzeichen ausdruckt. Auch ein sonst »unverdauliches« RETURN-Zeichen (CHR$(13)) wird mitgedruckt. Da Sie mit einem fehlerhaft arbeitendem Directory-Editor einigen Schaden anrichten können, sollten Sie erst nach dem sorgfältigen Austesten des Programms mit Disketten, von denen ein Doppel existiert, die Arbeit mit dem Directory-Editor beginnen.
(Dieter Temme/ev)1000 rem" *** di-di-editor v2.8 *** " 1010 rem dieter temme, -03.01.1985- 1020 rem freiherrenstr. 15 1030 rem 5100 aachen 1040 rem tel. 0241/13415 1050 rem ---------------------------- 1060 fd=8:rem >> floppy device << 1070 ft$="del seq prg usr rel":rem filetypen 1080 lb=256:b2=128:sc=64:bt=7:c$=chr$(13):de$=chr$(20):ze$=chr$(0):tw$=chr$(2) 1090 br$="ua 2 ":bw$="ub 2 ":te$="u0":mr$="m-r":mw$="m-w" 1100 ch$="{home}":cc$="{clr}":cr$="{rght}":cl$="{left}":cd$="{down}":cu$="{up}":rv$="{rvon}":ro$="{rvof}" 1110 be$=chr$(7):pp=59468:le=0:printch$ch$cc$chr$(142)chr$(8)"bitte warten!" 1120 d$=ch$:fori=1to25:d$=d$+cd$:s$=s$+" ":z$=z$+cl$+cl$:fr=fre(0):next 1130 z$=be$+left$(s$,36)+left$(z$,36):u$=chr$(160):t$=u$ 1140 open1,fd,15,te$ 1150 gosub7000:bf$=chr$(bf):dr$=chr$(dr+48) 1160 gosub7500:t$=t$+left$(s$,(wi-40)/2):t=len(t$)+1 1170 readr$:ifr$<>">s"goto1170 1180 dimm$(18),b$(14):fori=1to18:readm$(i):next:printcc$; 1190 fori=1to9:printt$m$(i):next 1200 fori=1to11:printt$m$(10):next 1210 fori=11to15:printt$m$(i):next 1220 iferthenprintleft$(d$,24)tab(t)rv$z$er$ch$cd$cd$cd$:ifer<3thenend 1230 iferthenclose1:open1,fd,15:rem re-init 1240 printleft$(d$,6)tab(t+11)dr$tab(t+13)ct$tab(t+23)f$ 1250 bz$=t$+m$(14):ifc9thenpokec9,128 2000 rem $$$ eingabe $$$ 2010 pr$=">":gosub8060:g$=k$:pr$="<" 2020 ifbzthenln=peek(c7):printleft$(d$,24)bz$:gosub8080:bz=0 2030 ifg$="a"org$=" "thengosub3000 2040 ifg$="l"thengosub2800 2050 ifg$="x"theng$="e":ex=1 2060 ifop=0goto2220 2070 ifg$="b"thengb=1:g$=c$:ifgz=1thengz=0:gb=0:g$="e":en=1 2080 ifg$="n"org$=cr$thenprinttab(t+5);:il=16:gosub8000:n$=ix$:printcu$; 2090 ifg$="*"org$=":"thenifftthenifpt$>""thenifcandft<>4thengosub2500:pr=1 2100 ifg$="+"org$=";"org$="-"thenifty>1thens=-(g$<>"-")*sc:pr=1 2110 ifg$="^"org$="@"thenifzz>0thenprinttab(t)" "cu$:ng=ng+2:zr=1:zz=zz-2:g$="_ 2120 ifg$="_"org$=c$org$="="thenif(enorer)=0thengosub5000:ifgbthenifzz<7goto2120 2130 ifen=1andgb=1thengz=1:pt$=" ":printcu$tab(t)">"cu$:ifzzthenzz=zz-1:en=0 2140 ifgz=1thengb=0:ifer=0goto2000 2150 ifen=1goto2250 2160 ifg$="v"thenln=peek(c7):va=1:vo=1:printleft$(d$,22)tab(t+1)"+":gosub8080 2170 ifg$="e"thenen=1:gosub5000:goto2250 2180 ifpt$=""goto2210 2190 fori=0todt-1:ifg$=mid$(ft$,i*4+1,1)thenft=i:i=dt:c=oc:pr=1:ifft=0thenc=b2 2200 next 2210 : 2220 ifop=1goto2260 2230 ifg$="i"thengosub4000:on-(er=0)gosub5240:ifergoto1220 2240 ifg$="f"thengosub3500 2250 ifg$="0"org$="1"thenifval(g$)<=drthendr$=g$:printleft$(d$,6)tab(t+11)g$ 2260 ifenthengosub6000 2270 ifpr=1thengosub5190:pr=0 2280 ifex=1thener=2:er$=">>> programmende 2290 ifergoto1220 2300 gb=0:goto2000 2500 rem $$$ file schliessen $$$ 2510 print#1,mr$chr$(k+1)bf$tw$:get#1,h$,i$:ifh$=""orft=4thenreturn 2520 printtab(t)"*"cu$:open3,fd,3,"#1":bg$=chr$(bf+1):bk=0 2530 rt=asc(h$):rs=asc(i$+ze$):print#1,"ua"3;dr$rt;rs:bk=bk+1 2540 print#1,mr$chr$(3)bg$tw$:get#1,h$,i$:ifh$<chr$(at)andh$>""goto2530 2550 print#1,mw$chr$(k+28)bg$tw$chr$((bk-32768)and(lb-1))chr$(bk/lb) 2560 ifh$>""thenprint#1,mw$ze$bg$tw$ze$ze$:print#1,"ub"3;dr$rt;rs 2570 va=1:c=0:oc=c:close3:fr=fre(0):return 2800 rem $$$ letter on/off $$$ 2810 ifright$(ct$,3)="001"thenpokepp,(peek(pp)and253)or(2-le) 2820 ifright$(ct$,3)<>"001"thenprintchr$(14-128*(le>0)); 2830 le=2-le:return 3000 rem $$$ anleitung $$$ 3010 ln=peek(c7):printleft$(d$,7):open3,3:fori=0to14:input#3,b$(i):printcl$ 3020 next:printleft$(d$,7)t$m$(16):fori=0to14:printt$m$(17):next:printt$m$(18) 3030 ifan=1thenrestore:printleft$(d$,8)tab(t)rv$z$tab(t+12)"bitte warten 3040 readr$:ifr$<>">a"goto3040 3050 printleft$(d$,7):fori=0to4:readb$:printtab(t)z$b$:next 3060 printleft$(d$,12):fori=0to9:readb$:printtab(t)z$b$:next:gosub8060 3070 readb$:ifb$<>"*"goto3060 3080 printleft$(d$,7)t$m$(7):fori=0to14:printb$(i):next 3090 printt$m$(13):gosub8080 3100 an=1:pokec0,0:fori=0to14:b$(i)="":next:fr=fre(0):close3:return 3500 rem $$$ disk-kommando $$$ 3510 printleft$(d$,24)t$m$(17)cu$c$tab(t)"@";:il=35:ij=1:gosub8000:ij=0:bz=1 3520 ifleft$(ix$,1)<>"u"thenprint#1,ix$:goto8050 3530 return 4000 rem $$$ start $$$ 4010 br$=left$(br$,5)+dr$+",":bw$=left$(bw$,5)+dr$+"," 4020 printleft$(d$,8)t$m$(8)cd$:fori=1to11:printt$m$(10):next:printcd$t$m$(12) 4030 printleft$(d$,24)tab(t)rv$z$" bitte diskette einlegen":gosub8060 4040 print#1,"i"+dr$:va=0:x1=10:x2=20:gosub8050:iferthenreturn 4050 printcu$bz$:open2,fd,2,"#0":print#1,br$tt;ts:gosub8050:iferthenreturn 4060 print#1,mr$tw$bf$chr$(1):get#1,do$:ifdo$<>dm$goto4200 4070 print#1,mr$chr$(nb)bf$chr$(16):gosub8030:printleft$(d$,8)tab(t+6); 4080 gosub8070:printc$cu$tab(t+6);:il=16:gosub8000:n$=ix$ 4090 print#1,mr$chr$(nb+18)bf$chr$(5+(ty=1)):gosub8030:printcu$tab(t+30); 4100 gosub8070:printc$cu$tab(t+30);:il=5+(ty=1):gosub8000:print 4110 print#1,mw$chr$(nb)bf$chr$(23+(ty=1))n$"--"ix$:print#1,bw$tt;ts:zz=0:op=1 4120 zb=0:va=0:vo=0:ln=peek(c7):printleft$(d$,22)tab(t+1)"-":zt=td:zs=sd 4130 il=16:goto8080 4200 er=3:er$=">>> falsches disk-format":return 5000 rem $$$ naechster eintrag $$$ 5010 ifen=1goto5080 5020 printtab(t)" ":print#1,mw$chr$(k+3)bf$chr$(16)n$:ifzrthenprintcu$cu$;:zr=0 5030 print#1,mw$chr$(k)bf$chr$(1)chr$(sor(b2-c)orft) 5040 if(of=0andft>0)or(of>0andft=0)thenva=1:ln=peek(c7) 5050 ifvo=0andva=1thenln=peek(c7):printleft$(d$,22)tab(t+1)"+":gosub8080:vo=1 5060 ifzz<7thenprint#1,mr$chr$(zz*32+39)bf$chr$(1):get#1,nf$ 5070 if(nt>0or(i<7andnf$>""))thengosub8040 5080 ifen=1thenzz=7 5090 zz=zz+1:ifzz>7goto5220 5100 k=zz*32+2:print#1,mr$chr$(k+3)bf$chr$(16):gosub8030:ifh$=""thenen=1:return 5110 n$=i$:print#1,mr$chr$(k)bf$chr$(1):get#1,i$:ft=asc(i$+ze$) 5120 s=scandft:c=b2-(b2andft):ft=(bt)andft:of=ft:oc=c:ifft=0thenoc=0 5130 printtab(t+5);:ifng=0theni$=n$:gosub8070 5140 print#1,mr$chr$(k+28)bf$tw$:get#1,k$,l$:bk=asc(k$+ze$)+lb*asc(l$+ze$) 5150 ifng=0thenifft<>0thenzb=zb+bk 5160 printc$cu$tab(t)">"right$(str$(1000+bk),3);:ifngthenng=ng-1 5170 print#1,mr$chr$(k+1)bf$tw$:get#1,pt$,k$:printtab(t+31); 5180 printright$(str$(100+asc(pt$+ze$)),2)cr$right$(str$(100+asc(k$+ze$)),2); 5190 printc$cu$tab(t+25)" ";:ifcthenifftthenprintcl$"*"; 5200 printmid$(ft$,ft*4+1,3)" ";:ifs>0andty>1thenprintcl$"<"; 5210 printc$cu$;:fr=fre(0):return 5220 print#1,bw$zt;zs:ifen=0thenzs=asc(bl$+ze$):zt=nt:ifzt=0thenen=1 5230 ifen=1thenreturn 5240 print#1,br$zt;zs:print#1,mr$ze$bf$tw$:get#1,tr$,bl$:nt=asc(tr$+ze$):zz=0 5250 goto5100 6000 rem $$$ ende $$$ 6010 printleft$(d$,24);:ifva=0goto6040 6020 printtab(t)z$" ueberpruefe blockbelegung"cu$:print#1,"v"dr$:gosub8050 6030 iferthenreturn 6040 printbz$c$cu$cu$cu$tab(t+17)right$(str$(1000+zb),3); 6050 printtab(t+27)right$(str$(1000+fb-zb),3)cr$cr$; 6060 close2:open2,fd,0,"$"+dr$+":"+ze$:get#2,b$,b$,b$,b$,b$,b$ 6070 get#2,b$:ifb$>""goto6070 6080 get#2,b$,b$,k$,l$ 6090 printright$(str$(1000+asc(k$+ze$)+lb*asc(l$+ze$)),3) 6100 close2:op=0:en=0:fr=fre(0):return 7000 rem $$$ floppy-typ $$$ 7001 readn:dimf%(n):fori=0ton:readx:print#1,mr$chr$((x-32768)and255)chr$(x/256) 7002 get#1,i$:f%(i)=asc(i$+ze$):next:er=0:ty=0:print#1,te$ 7003 j=0:fori=0ton:readx:ifx>-1thenifx<>f%(i)thenj=1 7004 next:readf$:iff$<>"***"thenreaddr,bf,ty:ifjgoto7003 7005 iff$="***"thener=1:er$=">>> floppy-typ unbekannt":return 7006 readr$:ifr$<>">t"goto7006 7007 readj,fb,dm$,tt,ts,td,sd,nb,at,dt:ifj<>tygoto7007 7099 ifty>1thenreturn 7100 readr$:ifr$<>">m"goto7100 7101 mr$="uc:":dm$=chr$(1):i$=chr$(19)+chr$(1):readj 7102 fori=0toj:readj:print#1,mw$chr$(i)i$chr$(j):next:return 7200 rem +++ data: floppy-typen +++ 7201 data 2,65535,16618,16556:rem fpeeks 7202 rem f%0,f%1,f%2,"name dos",dr,bf,ty 7203 data 226,-99,-99,"2040/3040v1.0",1,017,1 7204 data 213,-99,-99,"4040 v2.1",1,017,2 7205 data 242,-99,-99,"8050 v2.5",1,017,3 7206 data 254,-99,-99,"1541/2031v2.6",0,003,2 7207 data 198,000,-99,"4040 v2.7",1,017,2 7208 data 198,001,001,"8050 v2.7",1,017,3 7209 data 198,001,002,"8250 v2.7",1,017,4 7298 data -99,-99,-99,"***" 7299 data">t":rem erkennung 7300 rem +++ data: typen-auswahl +++ 7301 rem typ,blks,dos,name ,direc,nby,at,dt,dos 7302 data 1 , 670,-1-,18,00,18,01,144,37, 4 7303 data 2 , 664,"a",18,00,18,01,144,37, 5 7304 data 3 ,2052,"c",39,00,39,01, 6,78, 5 7305 data 4 ,4133,"c",39,00,39,01, 6,78, 5 7399 data">m":rem erkennung 7400 rem +++ data: 2040/3040 m-r +++ 7401 data 37,104,104,160,0,177,3,141,180,66,141,224,16,177,3,153,180,67,200,196 7402 data 5,144,246,169,13,153,180,67,200,32,153,231,169,181,133,93,76,7,253 7500 rem $$$ computer-typ $$$ 7501 readr$:ifr$<>">c"goto7501 7502 readn:dimc%(n):fori=0ton:readx:c%(i)=peek(x):next 7503 j=0:fori=0ton:readx:ifx<>c%(i)thenj=1 7504 next:readct$:ifct$="***"thenprintcd$"?unbekannter computer";:end 7505 readwi,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9:ifjgoto7503 7520 ifct$="c=64"thenpoke53280,0:poke53281,0:rem border&ground=schwarz 7521 ifright$(ct$,3)="001"thenpokepp,12:rem gross/graphik 7522 ifright$(ct$,3)<>"001"thenprintchr$(158);:rem cursor=gelb 7598 return 7599 data">c":rem erkennung 7600 rem +++ data: computer-typen +++ 7601 data 0,58453:rem cpeeks 7602 rem c%0,name , wi, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 7603 data 136,"cbm 2001", 40,525,532,533,224,226,234,242,245,251,0 7604 data 152,"cbm 3001", 40,158,167,168,196,198,205,213,216,220,0 7605 data 032,"cbm 4001", 40,158,167,168,196,198,205,213,216,220,0 7606 data 032,"cbm 8001", 80,158,167,168,196,198,205,213,216,220,228 7607 data 189,"c=64" , 40,198,204,205,209,211,212,213,214,216,650 7608 data -99,"***" 8000 rem $$$ input routine $$$ 8001 rem il=max. laenge,ix$=eing. string 8002 ix=pos(0)+il-1:iy=peek(c3)+peek(c3+1)*lb+ix:open4,0:pokec6,ix+1 8003 ip=peek(iy-ix+pos(0)):pokec8,0:pokec5,0:pokec2,1:pokec1,0 8004 waitc0,15:getiy$:pokec1,1:pokeiy-ix+pos(0),ip:ifpeek(iy)=96thenpokeiy,32 8005 if(asc(iy$+ze$)and127)<32goto8008 8006 ifpos(0)>ixgoto8003 8007 printiy$;:goto8003 8008 ifiy$=chr$(148)thenifpeek(iy)=32goto8006 8009 ifiy$=chr$(141)thenforiz=iy-ix+pos(0)toiy:pokeiz,32:next:iy$=c$ 8010 ifiy$=c$goto8017 8011 ifiy$=rv$oriy$=ro$goto8007 8012 ifiy$=cr$goto8006 8013 ifiy$=cc$thenforiz=iy-il+1toiy:pokeiz,32:next:iy$=ch$ 8014 ifiy$=ch$thenpokec4,ix-il+1:goto8003 8015 ifiy$<>de$andiy$<>cl$goto8003 8016 on(pos(0)>ix-il+1)+2goto8007,8003 8017 deffnas(x)=(xand63)or((xand64)*2)or(((xand160)=0)*-64):ix$="":ix=0 8018 foriz=iytoiy-il+1step-1:iy=fnas(peek(iz)) 8019 ifixor(iyand127)-32thenix$=chr$(iy)+ix$:ix=255 8020 next 8021 ifij=0theniflen(ix$)<ilthenix$=ix$+u$:goto8021 8022 pokec6,wi-1:print:close4:return 8030 rem $$$ inget $$$ 8031 i$="":get#1,h$:ifh$theninput#1,i$ 8032 i$=h$+i$:return 8040 rem $$$ scroll up $$$ 8041 sr=0:ifpeek(c7)<x2thenreturn 8042 printleft$(d$,x1+1);:open3,3 8043 input#3,x$:printcl$ 8044 printcu$cu$x$cd$ 8045 ifpeek(c7)<x2goto8043 8046 printcu$t$m$(10)cu$ 8047 close3:sr=1:return 8050 rem $$$ disk-fehler? $$$ 8051 input#1,er,er$,tr,bl:ifer=0thenreturn 8052 er$="***"+str$(er)+":"+er$+" " 8053 iftrorblthener$=er$+"in "+right$(str$(100+tr),2)+","+right$(str$(100+bl),2) 8054 bz=1:op=0:er=4:return 8060 rem $$$ taste $$$ 8061 l2=ln:ln=peek(c7):po=pos(0):printleft$(d$,6)tab(t+5)pr$" "cl$; 8062 pokec1,0:pokec0,-(peek(c0)>0):waitc0,15:getk$:pokec1,1 8063 k$=chr$(asc(k$+ze$)and127):pokepeek(c3)+peek(c3+1)*lb+pos(0),141 8064 ifk$<>c$thenpokec8,1:printk$ 8065 gosub8080:printtab(po);:ln=l2:return 8070 rem $$$ print mit steuerzeichen $$$ 8071 pokec8,len(i$):foriz=1tolen(i$):ix=asc(mid$(i$,iz)) 8072 if(ixand127)<>13thenprintmid$(i$,iz,1);:goto8074 8073 print" ";:pokepeek(c3)+peek(c3+1)*lb+pos(0)-1,13-(ixand128)*64 8074 next:return 8080 rem $$$ in die richtige zeile $$$ 8081 printleft$(d$,ln+1);:return 8999 data">s":rem erkennung 9000 rem +++ data: schirmbild +++ 9001 data"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S} 9002 data"{SHIFT--}{rvon}{CBM-R}{SHIFT-*}{CBM-S}{CBM-R} {CBM-R}{SHIFT-*}{CBM-S}{CBM-R} {CBM-A}{SHIFT-*}{CBM-S}{CBM-R}{SHIFT-*}{CBM-S}{CBM-R}{CBM-A}{CBM-R}{CBM-S}{CBM-A}{SHIFT-*}{CBM-S}{CBM-R}{SHIFT-*}{CBM-S}{rvof}{SHIFT--}(c)1984{SHIFT--} 9003 data"{SHIFT--}{rvon}{SHIFT--} {SHIFT--}{SHIFT--}{SHIFT-*}{SHIFT-*}{SHIFT--} {SHIFT--}{SHIFT--}{SHIFT-*}{SHIFT-*}{CBM-Q}{SHIFT-*} {SHIFT--} {SHIFT--}{SHIFT--} {SHIFT--} {SHIFT--} {SHIFT--}{CBM-Q}{CBM-R}{CBM-X}{rvof}{SHIFT--} by {SHIFT--} 9004 data"{SHIFT--}{rvon}{CBM-Z}{SHIFT-*}{CBM-X}{CBM-E} {CBM-Z}{SHIFT-*}{CBM-X}{CBM-E} {CBM-Z}{SHIFT-*}{CBM-X}{CBM-Z}{SHIFT-*}{CBM-X}{CBM-E} {CBM-E} {CBM-Z}{SHIFT-*}{CBM-X}{CBM-E}{CBM-Z}{CBM-X}{rvof}{SHIFT--}d.temme{SHIFT--} 9005 data"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-W} 9006 data" v2.8{SHIFT--}> {SHIFT--}dr# {SHIFT--} {SHIFT--} {SHIFT--} 9007 data"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-W} 9008 data"{SHIFT--}name= {SHIFT--}id= {SHIFT--} 9009 data"{CBM-Q}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{CBM-W} 9010 data"{SHIFT--} {SHIFT--} {SHIFT--} {SHIFT--} {SHIFT--} {SHIFT--} 9011 data"{CBM-Q}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-R}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{CBM-W} 9012 data"{SHIFT--}v-{SHIFT--}blks benutzt= {SHIFT--}frei= ( ){SHIFT--} 9013 data"{CBM-Q}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-W} 9014 data"{SHIFT--}a/l/x,i/f/01,n/d/spur/*/+-/_/b/^/v/e{SHIFT--} 9015 data"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X}{home} 9100 rem +++ data: rahmen (anl) +++ 9101 data"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-E}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-W} 9102 data"{SHIFT--} {SHIFT--} 9103 data"{CBM-Q}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-W} 9499 data">a":rem erkennung 9500 rem +++ data: anleitung +++ 9501 data"{CBM-A}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-S} 9502 data"{SHIFT--} disk-directory-editor {SHIFT--} 9503 data"{SHIFT--} k u r z a n l e i t u n g {SHIFT--} 9504 data"{CBM-Z}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{CBM-X} 9505 data" 9506 data"<a/spc> ausgabe dieser anleitung 9507 data"<l> gross- oder kleinschrift 9508 data"<i> start des editors 9509 data"<f> eingabe floppy-kommando 9510 data"<0/1> laufwerks-nummer festlegen 9511 data" (falls doppel-laufwerk) 9512 data"<n/right> neuen namen eingeben 9513 data"<s/p/u/r> filetyp neu festlegen 9514 data"<d> file loeschen 9515 data,+ 9516 data"<*> offenes file schliessen 9517 data"<+/-> fileschutz setzen/aufheben 9518 data"<_/=/ret> eintrag weitergehen 9519 data"<b> block weitergehen 9520 data"<^/@> eintrag zurueckgehen 9521 data"<v> spaeter 'validate' 9522 data"<e> ausstieg aus editor 9523 data"<x> beenden des programms 9524 data,,* 10000 open3,8,0,"$:$$ 10001 get#3,a$:printasc(a$+chr$(0))a$:goto10001