Floppy

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
*) nicht für 2040/3040-Laufwerke
Tabelle 1. Die Befehle des Directory-Editors

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
Tabelle 2. Adressenerklärung zur Computeranpassung

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
*) –99: Nicht zur Unterscheidung benötigt, daher auf »0« gesetzt
Tabelle 3. Variablenerklärung zur Floppy-Anpassung
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)
Tabelle 4. Variablenerklärung für verschiedene Floppy-Laufwerke

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
Adressbereiche und ihre Bedeutung

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.

Das Hauptmenü des Disk-Directory-Editors

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
Listing »Disk-Directory-Editor«. Beachten Sie bitte die Eingabehinweise auf Seite 6.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →