C 64
Dateiorganisation

Dateiorganisation

Dieses Programm ist eine echte Hilfe für den C64-Benutzer, der sich einmal etwas näher mit der internen Dateiorganisation des 1541-Laufwerks beschäftigen möchte.

Die Idee zu diesem Programm kam mir, als ich nach einem »SCRATCH«-Befehl mit Bedauern feststellen mußte, ein in mühevoller Arbeit erstelltes Programm versehentlich mitgelöscht zu haben. Doch glücklicherweise hatte ich kurz zuvor erfahren, wie man ein gelöschtes File auf der 1541-Floppy regeneriert:

Filetyp im Directoryeintrag im Direktzugriff wieder setzen und anschließend ein »VALIDATE« ausführen.

Es begann also die Suche nach besagtem Byte, sowie die intensive Erkundung der Dateiorganisation und des Direktzugriffs.

Nun, nach mehreren Monaten Arbeit liegt endlich das fertige Programm vor. Es druckt eine Vielzahl von Floppy-Informationen auf einem Epson-Drucker aus. Auf eine Bildschirmausgabe wurde aus Gründen der Übersichtlichkeit verzichtet.

Was bietet das Programm

Ganze Dateien aufzeigen:

Hierbei fragt das Programm nach dem gewünschten Filenamen. Bei korrekter Eingabe werden folgende Informationen ausgedruckt: Filename, Filetyp, Filelänge in Blocks, Spur, Sektor, laufende Blocknummer und natürlich der Inhalt sämtlicher von dieser Datei belegten Blöcke in ASCII-Codes und -Zeichen (je 8 Byte). Eine Seite wird mit genau 2 Blocks beschrieben, dann erfolgt automatisch ein Seitenvorschub. Bei ungerader Blockanzahl kann ein Seitenvorschub auch vom Benutzer ausgelöst werden. Bei Dateiende springt das Programm wieder ins Menü zurück.

Einzelne Blöcke ausgeben:

Dieser Modus unterscheidet sich vom vorigen dadurch, daß hier bestimmte Sektoren ausgewählt werden können. Und dies auf zwei verschiedene Arten:

  1. Eingabe von Spur und Sektor:
    Geben Sie, durch Komma getrennt, Spur- und Sektornummer des auszudruckenden Blocks ein;
  2. Eingabe von Filename und Blocknummer: Das Programm liest aus der Directory, wieviele Blocks das angegebene File belegt und zeigt dies am Bildschirm an. Nun können Sie wählen, welchen dieser Blöcke Sie sehen möchten.
Bild 3. Menüpunkt 2 (Einzelne Blöcke) mit Eingabe Filename/Blocknummer

Bytereihen ausdrucken:

Mit diesem Menüpunkt können Sie gezielt bestimmte Bytes einer Datei oder eines Sektors herauspicken. Die Form der Eingabe von Parametern ist identisch mit der des Teilprogrammes »Einzelne Blöcke ausgeben«. Zusätzlich müssen Sie das erste und letzte auszudruckende Byte eines Sektors festlegen (0-255). Das erste Byte kann auch zugleich das letzte sein, was die Ausgabe nur eines Wertes bewirkt.

Bild 4. Bytereihen mit Eingabe Filename/Blocknummer
Absatz 1: erstes Byte: 149; letztes Byte: 182;
Absatz 2: erstes Byte: 192; letztes Byte: 205.

Blockbelegung von Files:

Von einer Datei belegte Sektoren werden ihrer Reihenfolge entsprechend, im Format: laufende Blocknummer, Spur/Sektor, ausgegeben. Auch eine Routine zur Berechnung der tatsächlichen Filelänge in Bytes ist in dieses Teilprogramm integriert. Das zweite Byte des letzten Blockes gibt die Anzahl der von der Datei in diesem Block benötigten Bytes an. Daraus ergibt sich folgende Formel für die Filelänge: (Gesamtzahl belegter Blocks — 1) * 254 + 2. Byte letzter Block.

Einschränkung für relative Dateien: Spur und Sektor von Side-Sektor-Blöcken werden nicht angezeigt. An ihrer Stelle erscheint das Kürzel »SSB«, so daß man wenigstens weiß, wieviel SSB das DOS zur Verwaltung der Datei benötigt.

Bild 5: Blockbelegung von Files. Die obere Spalte enthält die laufende Blocknummer, darunter sind Spur/Sektor angegeben.

Directory:

Dieser Befehl bringt Ihnen eine erweiterte und vor allem übersichtlichere Directory Ihrer Disketten zu Papier. Selbstverständlich ohne das Programm zu zerstören. Sie enthält Informationen über:

Bei relativen Dateien finden Sie im Anschluß an den Filetyp zwei zusätzliche Angaben:

Bild 1. Directoryausdruck

BAM (Block Available Map)

Das Format des Blockbelegungsplanes ist wie folgt festgelegt: Horizontal werden die einzelen Sektoren aufgetragen, vertikal die Spuren 1—35. Ein Stern kennzeichnet einen belegten Sektor, das Minuszeichen einen freien. Mit »/« markierte Sektoren sind nicht vorhanden, da die Anzahl der Sektoren je Spur zum Diskettenmittelpunkt hin abnimmt. Dem Wert rechts neben jeder Spur können Sie entnehmen, wieviele Blöcke auf dieser noch nicht belegt sind. Die Summe der freien Sektoren finden Sie ganz unten. Sollte einmal die Gesamtzahl der freien Blöcke nicht mit der Angabe in der Directory übereinstimmen, so ist mit der Diskette ein »VALIDATE« durchzuführen, um den korrekten Zustand wieder herzustellen.

Bild 2. Blockbelegungsplan einer Diskette

Benötigte Hardware

Erstellt und getestet wurde das Programm auf einem C 64 mit Floppy VC 1541 und Epson RX-80 (mit Data-Becker-Interface).

Eine Umsetzung auf andere Druckertypen dürfte keine großen Schwierigkeiten machen, da die meisten Steuerzeichen für Druckerfunktionen in den Zeilen 4220-4370 untergebracht sind. Weitere Steuerzeichen, welche vereinzelt im Programmtext vorkommen, sind durch die Form (c$="string":c3=Zahl:gosub4030) leicht zu erkennen. Durch diese Druckparameter werden vor allem Schriftart und Zeilenabstand gesteuert.

Ausnahme: Teilprogramm »Blockbelegung von Files«
Zeilen
1890—1900 : A(3) = 254
1930—1940
2020—2030 : A(3) = 255

In diesen Zeilen wird in den Grafikmodus des Druckers umgeschaltet und eine Punktmatrix (CHR$(254) oder CHR$(255) für die senkrechten Linien, CHR$(64) für die waagrechte Linie übermittelt.

Zu bemerken wäre noch, daß bei Verwendung des neuen Data-Becker-Interfaces die OPEN-Befehle in den Zeilen 710 und 7 6 0 geändert werden sollten:

710 OPEN 1,4,2: ...

760 OPEN 4,4,2: ...

Auch die Initialisierung des Druckers in den Zeilen 3960 bis 3990 muß entsprechend den Angaben im Handbuch abgeändert werden.

Mit diesen Hinweisen sollte die Anpassung an andere Drucker keine Schwierigkeit mehr darstellen.

Zum Schluß möchte ich noch auf ein Buch hinweisen, das mir erst die nötigen Grundlagen zu diesem Programm vermittelte: »Das große Floppy-Buch« von Data Becker. Eine wirklich ausgiebige und informative Quelle für alle jene, die sich intensiver mit der Floppy-Programmierung befassen wollen.

Ich denke, daß Sie das Programm nun sinnvoll einsetzen können, zumal es auch Routinen enthält, die man in andere Programme übernehmen kann.

(Johann Auer / ev)
Zeile(n) Bedeutung
10-100 Titelvorspann
170 Aufruf ’Initialisierung’
190 Aufruf ’Menü’
210 Sprungbefehl zu Teilprogrammen (Startadressen)
280-430 Initialisierung
460-770 Menü
710-750 Prüfen ob Drucker eingeschaltet
800-960 Ganzes File ausgeben (Teilprogramm)
990-1350 Einzelne Blöcke ausdr. (Teilprogramm)
1050-1080 Eingabewahl:
1) Spur/Sektor
2) Filename/Blocknr.
1380-1680 Bytereihen (Teilprogramm)
1440 Sprung zu Eingabewahl (Zeilen 1050-1080)
1710-2130 Blockbelegung von Files (Teilprogramm)
2050 Spur/Sektor des nächsten Datenblocks laden
2160-2870 Direktory aufzeigen (Teilprogramm)
2430-2650 8 mal 32 Zeichen eines Directoryeintrages lesen — Zerlegung dieses Strings
2 900-3430 BAM (Teilprogramm)
3150-3220 4 Bytes für je eine Spur lesen und in Binärstring umwandeln
3390-3430 Anzahl Sektoren pro Spur berechnen
3460-3490 Ende (Teilprogramm)
Tabelle 1. Programmbeschreibung
3520-3760 File vorhanden (Directory durchsuchen)
3780-3790 Floppy initialisieren
3810-3850 Sektor in Pufferspeicher laden — Pufferzeiger setzen
3870-3910 2 Bytes aus Pufferspeicher holen
3930-3940 Floppykanäle schließen
3960-3990 Drucker initialisieren
3980 Drucker auf halbe Geschwindigkeit stellen (kann weggelassen werden)
4010-4030 Parameterisierte Schriftenübermittlung zum Drucker
4050-4200 Kopfzeilen für Menüpunkte 1—4 drucken
4220-4370 Verschiedene Druckparameter für Schriftart
4390-4630 Bytenummer, Bytes und ASCII-Zeichen für Teilprogramme 1—3 drucken
4490-4560 8 Zeichen aus Pufferspeicher holen und umwandeln
4650-4750 Basic-Token der Operatoren in Zeichen umwandeln und String aufaddieren
4770-4830 Filename eingeben
4840-4890 Hinweis, wenn File nicht vorhanden
4910-4950 Für Teilprogramm 1 prüfen, ob bereits 2 Sektoren pro Seite gedruckt sind
4970-5040 Eingabe Blocknummer für Teilprogramm 2 und 3, Laden dieses Blocks
5060-5090 Abfrage Seitenvorschub
5110-5160 Tastaturabfrage auf J/N
5180-5210 F1 - Funktionstastenabfrage
5230-5260 Aufforderung gewünschte Diskette einzulegen
5280-5300 F1 - Fertig - Abfrage
5320-5410 Diskettenname und ID lesen
Tabelle 2. Unterprogramme
Name Bedeutung
NU$ String mit 8 Nullen und 8 Punkten
A Teilprogrammnummer
FT$(I) Filetypen
BN aktuelle Blocknummer
AN Anfangswert für Laufvariable in UP »Bytes ausdrucken
EN Endwert für Laufvariable in UP »Bytes ausdrucken«
BP Block Pointer (Zeiger im Pufferspeicher)
SP Spur
SE Sektor
S1/S2 ASC-Codes aus UP »2 Bytes holen«
MSE Maximale Anzahl Sektoren pro Spur
EB Erstes zu druckendes Byte in Teilprogramm »Bytereihen«
LB Letztes zu druckendes Byte in Teilprogramm »Bytereihen«
RE Anzahl Blöcke pro Zeile bei Teilprogramm 4
AR Anzahl der Reihen in Teilprogramm 4
FL Filelänge in Blocks
DN$ enthält den Diskettennamen
ID$ ID der Diskette
FB freie BLöcke
ET$ ein kompletter Directoryeintrag
EN$ Eintragsnummer
FT$ Filetyp (String)
FT Filetyp (Zahi) Tabelle 3.
F$ Filename Die wichtigsten
LA$ Filelänge in Blocks Variablen
BY$ Filelänge in Bytes
RL$ Recordlänge
GF Gesamtzahl freier Blöcke der Diskette
L$ Bitmuster der belegten Sektoren einer Spur (0 = Sektor belegt, 1 = frei)
P$ aus Directory gelesener Filename in UP »File vorhanden«
FL$ enthält Filelänge in Blocks für UP »Kopf drucken«
I1$ 8 Bytes für UP »Bytes ausdrucken«
B$ ASCII-Zeichen der 8 Bytes
AB Anzahl Blocks pro Seite
Tabelle 3. Die wichtigsten Variablen
|
10 rem   ****************************
20 rem   ****************************
30 rem   **                        **
40 rem   ** johann auer            **
50 rem   ** hermann-hiller-str. 54 **
60 rem   ** 8263 burghausen        **
70 rem   **                        **
80 rem   ****************************
90 rem   ****************************
100 :
110 :
120 :
130 rem *******************************
140 rem *******file-organisation*******
150 rem *******************************
160 :
170 gosub280:rem ***initialisierung****
180 :
190 gosub460:rem ********menue*********
200 :
210 onagoto800,990,1380,1710,2160,2900,3460
220 :
230 rem *******************************
240 rem *******file-organisation*******
250 rem *******************************
260 :
270 :
280 rem ********initialisierung********
290 :
300 dimft$(3):dima$(7):a$(6)="{rght}{rvon}{CBM-K}{down}{left}{CBM-K}{rvof} {yel}":a$(7)="{rvof} {blk}{CBM-K}{left}{up}{CBM-K}{down}"
310 rf=53280:hf=rf+1:a$="":nu$="00000000.......":eb=-1:n3=0:restore
320 di$="d"+chr$(105)+chr$(115)+chr$(107)+chr$(101)+chr$(116)+chr$(116)
330 di$=di$+chr$(101)+chr$(110)+chr$(110)+chr$(97)+chr$(109)++chr$(101)+":"
340 fori=1to40:readq:a$=a$+chr$(q):next
350 a$(0)=left$(a$,9):a$(1)=mid$(a$,10,4):a$(2)=mid$(a$,14,10)
360 a$(3)=mid$(a$,24,5):a$(4)=mid$(a$,29,7):a$(5)=right$(a$,5)
370 data70,105,108,101,110,97,109,101,58,84,121,112,58,70,105
380 data108,101,108,123,110,103,101,58,83,112,117,114,58,83,101
390 data107,116,111,114,58,66,121,116,101,58
400 ft$(0)="rel":ft$(1)="usr":ft$(2)="prg":ft$(3)="seq"
410 lz$="--- --- --- --- --- --- ---          "
420 printchr$(8);:poke788,52
430 return
440 :
450 :
460 rem *************menue*************
470 :
480 pokerf,0:pokehf,11:printchr$(14)"{clr}{down}"tab(11);
490 print"{cyn}FILE-ORGANISATION":printtab(11)"{blk}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}"
500 print"{rght}{CBM-D}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-F}"
510 printa$(6)"Ganzes File {blk}.................... {yel}{rvon}1"a$(7)
520 printa$(6)"Einzelne Bloecke {blk}............... {yel}{rvon}2"a$(7)
530 printa$(6)"Bytereihen {blk}..................... {yel}{rvon}3"a$(7)
540 printa$(6)"Blockbelegung von Files {blk}........ {yel}{rvon}4"a$(7)
550 printa$(6)"Direktory {blk}...................... {yel}{rvon}5"a$(7)
560 printa$(6)"BAM {blk}............................ {yel}{rvon}6"a$(7)
570 printa$(6)"ENDE {blk}........................... {yel}{rvon}7"a$(7)
580 print"{rght}{rvon}{CBM-K}{down}{left}{rvof}{CBM-C}{rvon}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{CBM-I}{rvof}{CBM-V}{up}{left}{CBM-K}{down}"
590 print"{down}   {cyn}Ihre Wahl?{yel} ";
600 getei$:ifei$<>""then620
610 print" {left}";:fort=1to150:next:print"{CBM-P}{left}";:fort=1to150:next:goto600
620 a=val(ei$)::ifa<1ora>7then600
630 printei$:fort=1to1000:next
640 ifa=7orsp>0thenreturn
650 print"{up}   {yel}Ausgabe auf {blk}EPSON{yel}-Drucker {blk}RX-80{yel}"
660 print"   mit {blk}DATA-BECKER{yel} Interface!":fort=1to2500:next
670 print"{up}{up}   {blk}Drucker einschalten und Papier    "
680 print"   positionieren!!!            "
690 print"   {yel}Fertig {blk}.................... {yel}{rvon}F1"
700 gosub5180
710 open1,4,1:poke768,61
720 print#1,chr$(7);:close1
730 poke768,139
740 ifst<>-128then760
750 goto700
760 open4,4,1:gosub3960
770 return
780 :
790 :
800 rem**********ganzes file***********
810 :
820 print"{clr}{down}           {blk}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}"
830 print"           >>>{wht}Ganzes File{blk}<<<"
840 print"           {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}"
850 gosub5230
860 ab=0:n=0:bn=1:goto4770
870 gosub4050
880 an=0:en=255
890 bp=0:gosub3830:gosub3870
900 ifs1=0thenn=1:en=s2
910 gosub4390:print#4:print#4:gosub4910
920 ifn=1thenn=0:goto940
930 sp=s1:se=s2:bn=bn+1:gosub4100:goto890
940 gosub3930:print#4:print#4
950 ifab=1thengosub5060
960 bn=0:goto190
970 :
980 :
990 rem********einzelne bloecke********
1000 :
1010 print"{clr}         {blk}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}"
1020 print"         >>>{wht}Einzelne Bloecke{blk}<<<"        "
1030 print"         {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}"
1040 gosub5230
1050 print"{down} {blk}EINGABE:":print"{down} {cyn}Spur/Sektor {blk}........... {cyn}1"
1060 print" Filename/Blocknr. {blk}..... {cyn}2"
1070 input"{down} {blk}>>> {yel}";e$
1080 e=int(val(e$)):ife<1ore>2then1100
1090 onegoto1110,1190
1100 print"{up}{rght}{rght}{rght}{rght}{rght}{rght}          {up}{up}":goto1070
1110 input"{down} {blk}Spur/Sektor: {yel}";sp$,se$
1120 sp=int(val(sp$)):se=int(val(se$)):i=sp:gosub3390
1130 if(sp=>1andsp<=35)and(se=>0andse<=mse)then1160
1140 print"{up}";:fort=1to38:print" ";:fort1=1to5:nextt1:nextt
1150 print"{up}{up}":goto1110
1160 gosub3780:bp=0:gosub3810:bn=0
1170 ifa=3then1460
1180 n2=1:goto1220
1190 n2=0:goto4770
1200 goto4970
1210 sp=s1:se=s2
1220 gosub3830:gosub3870:an=0:en=255:ifs1=0thenen=s2
1230 ifn2=1thengosub4100:goto1250
1240 gosub4050
1250 n2=0:gosub4390:print#4:print#4:print#4
1260 gosub5060
1270 print"{down} {blk}Weiterer Block   {yel}J/N?";:gosub5110
1280 ifa$="j"then1300
1290 gosub3930:bn=0:goto190
1300 ife=1then1330
1310 print"{down} {blk}Gleiches File    {yel}J/N?";:gosub5110
1320 ifa$="j"then1340
1330 n2=0:gosub3930:goto990
1340 n2=1:s1=e1:s2=e2
1350 print"{clr}{down}{down}";:goto1200
1360 :
1370 :
1380 rem***********bytereihen**********
1390 :
1400 print"{clr}            {blk}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}"
1410 print"            >>>{wht}Bytereihen{blk}<<<"
1420 print"            {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}"
1430 gosub5230
1440 n3=0:goto1050
1450 sp=s1:se=s2:gosub3830
1460 input"{down}{rght}{blk}Erstes Byte:  {yel}";eb
1470 ifeb<0oreb>255thengosub1510:goto1460
1480 input"{down}{rght}{blk}Letztes Byte: {yel}";lb
1490 iflb<0orlb>255orlb<ebthengosub1510:goto1480
1500 goto1520
1510 print"{up}";tab(14);"          {up}{up}":return
1520 ifn3<>0thengoto1670
1530 ife=1thengosub4100:goto1550
1540 gosub4050
1550 an=eb:en=lb:gosub4390
1560 print"{clr}{down}";:gosub5060
1570 print"{down}{rght}{blk}Weitere Reihe    {yel}J/N?";:gosub5110
1580 ifa$="j"then1600
1590 gosub3930:print#4:print#4:print#4:eb=-1:n3=0:goto190
1600 print"{down}{rght}{blk}Gleicher Block   {yel}J/N?";:gosub5110
1610 ifa$="j"thenn3=1:print"{down}";:goto1460
1620 print#4:print#4
1630 ife=1then1660
1640 print"{down}{rght}{blk}Gleiches File    {yel}J/N?";:gosub5110
1650 ifa$="j"thenn3=2:s1=e1:s2=e2:print"{down}";:goto4970
1660 gosub3930:print#4:goto1380
1670 ifn3=1then1550
1680 gosub4100:goto1550
1690 :
1700 :
1710 rem*********blockbelegung*********
1720 :
1730 print"{clr}          {blk}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}"
1740 print"          >>>{wht}Blockbelegung{blk}<<<"
1750 print"          {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}"
1760 gosub5230:goto4770
1770 print"{down}{down}{rght}FORMAT:  {wht}Blocknummer":print" {blk}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}   {SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}"
1780 print"          {wht}Spur/Sektor"
1790 gosub4050:print#4:re=10:rd=295:x1=39:x2=1
1800 ar=int(fl/10+0.95):gosub4300
1810 fori=1toar:print#4,"      ";
1820 iffl/10=int(fl/10)then1840
1830 ifi=arthengosub2120
1840 j=0
1850 j=j+1:su=(i-1)*10+j:bn$=str$(su)
1860 l3=len(bn$)-1:bn$=" "+left$(nu$,3-l3)+right$(bn$,l3)+" "
1870 print#4,bn$;
1880 ifj+0.5=>rethen1920
1890 print#4,chr$(27);"k";chr$(5);chr$(0);:a(3)=254
1900 forij=1to5:print#4,chr$(a(ij));:nextij
1910 goto1850
1920 c$="3":c3=20:gosub4030:print#4
1930 print#4,"      ";:print#4,chr$(27);"k";chr$(x1);chr$(x2);
1940 forij=1tord:print#4,chr$(64);:nextij:c3=8:gosub4030:print#4
1950 c3=40:gosub4030:print#4,"      ";
1960 j=0:ss=0
1970 j=j+1:sp$=str$(s1):se$=str$(s2):ifs1=0thenss$=" ssb ":ss=ss+1:goto2000
1980 l4=len(sp$)-1:l5=len(se$)-1
1990 ss$=left$(nu$,2-l4)+right$(sp$,l4)+"/"+left$(nu$,2-l5)+right$(se$,l5)
2000 print#4,ss$;
2010 ifj+0.5=>rethen2040
2020 print#4,chr$(27);"k";chr$(5);chr$(0);:a(3)=255
2030 forij=1to5:print#4,chr$(a(ij));:nextij:ifs1=0then1970
2040 ifs1=0then2060
2050 sp=s1:se=s2:bp=0:gosub3830:gosub3870:ifj<rethen1970
2060 print#4:nexti:print#4:gosub4320:gosub3930
2070 gosub4220:print#4,"gesamtl"chr$(91)"nge:";:gosub4270
2080 print#4,(fl-1-ss)*254+s2"bytes":print#4:print#4:print#4:print#4
2090 print"{down}";:gosub5060:print"{down}{rght}{blk}Weiteres File    {yel}J/N?";:gosub5110
2100 ifa$="j"then1710
2110 goto190
2120 re=10*(fl/10-int(fl/10)):rd=int(re*29.5+0.5)
2130 x1=rd-int(rd/256)*256:x2=int(rd/256):return
2140 :
2150 :
2160 rem***********direktory***********
2170 :
2180 print"{clr}            {blk}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}"
2190 print"            >>>{wht}Direktory{blk}<<<"
2200 print"            {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}":gosub5230:gosub5280
2210 print"{down} {blk}ABKUERZUNGEN:":print" {yel}BL.   {blk}- {cyn}Filelaenge in Bloecken;"
2220 print" {yel}BYTES {blk}- {cyn}ungefaehre Filelaenge in                Bytes ";
2230 print"(BL*254);":print" {yel}1.DB. {blk}- {cyn}1. Datenblock des Files;"
2240 print" {yel}TYP   {blk}- {cyn}Filetyp.":print"{down} {blk}Nur bei relativen Dateien:"
2250 print" {yel}1.SSB {blk}- {cyn}1.Side-Sektor-Block;"
2260 print" {yel}Rl    {blk}- {cyn}Recordlaenge."
2270 gosub3780:print#4,"     ";
2280 gosub4240:c$="w":c3=1:gosub4030
2290 print#4,"direktory":print#4:c3=0:gosub4030:gosub4270
2300 gosub4300:print#4,"      gn  aufz.-dichte     dos   ";
2310 print#4,"anzahl bl"chr$(92)"cke   spur  sekt."
2320 print#4,"      08  256 bytes/sekt.  v2.6  683 (664 frei)  0018  01-18"
2330 print#4
2340 gosub5320:gosub3930:gosub4320
2350 print#4,"     ";:gosub4240:print#4,di$;:gosub4270:print#4,dn$;
2360 gosub4240:print#4,"id:";:gosub4270
2370 print#4,id$:print#4
2380 print#4,"     nr.  filename          bl.  bytes";
2390 print#4,"  1.db.   typ":gosub4340:print#4,"     ";
2400 fori=1to46:print#4,"-";:nexti:print#4
2410 et$="":i=0:fb=0:sp=18:se=1:bp=0:gosub3810
2420 gosub3870:bp=2:gosub3840
2430 forj=1to8:i=i+1
2440 forj1=1to32:get#3,a$:ifa$=""thena$=chr$(0)
2450 et$=et$+a$:nextj1:et$=left$(et$,30)
2460 ft=asc(left$(et$,1)):f1=ft:ifft=0theni=i-1:goto2650
2470 en$=left$(nu$,4-len(str$(i)))+right$(str$(i),len(str$(i))-1)
2480 ifft<128thenof$="*"
2490 of$=" "
2500 ft=(f1or128)and135:ft$=of$+ft$(132-ft)
2510 as=asc(mid$(et$,2,1)):sp$=left$(nu$,3-len(str$(as)))
2520 sp$=sp$+right$(str$(as),len(str$(as))-1)
2530 as=asc(mid$(et$,3,1)):se$=left$(nu$,3-len(str$(as)))
2540 se$=se$+right$(str$(as),len(str$(as))-1)
2550 db$=sp$+"/"+se$
2560 f$=mid$(et$,4,16)
2570 as=asc(right$(et$,1))*256+asc(mid$(et$,29,1)):fb=fb+as
2580 la$=left$(nu$,4-len(str$(as)))+right$(str$(as),len(str$(as))-1)
2590 as=(as*256)-(as*2)-127
2600 by$=left$(nu$,6-len(str$(as)))+right$(str$(as),len(str$(as))-1)
2610 print#4,"     "en$"  "f$"  "la$;
2620 print#4,"  "by$"  "db$"  "ft$;
2630 ifright$(ft$,3)="rel"thengosub2780
2640 print#4
2650 et$="":nextj
2660 ifs1=0then2680
2670 sp=s1:se=s2:bp=0:gosub3830:goto2420
2680 fb=664-fb:gosub4360
2690 print#4:gosub4300:print#4,"      ";
2700 print#4,"freie bl"chr$(92)"cke:"fb"  in bytes:"(fb*254);
2710 print#4,"  freie eintr"chr$(91)"ge:"144-i:print#4:print#4:print#4:print#4
2720 gosub4320:gosub3930
2730 gosub5060
2740 print"{down}{rght}{blk}Weitere Diskette {yel}J/N?";
2750 gosub5110
2760 ifa$="j"then2160
2770 goto190
2780 as=asc(mid$(et$,20,1)):sp$=left$(nu$,3-len(str$(as)))
2790 sp$=sp$+right$(str$(as),len(str$(as))-1)
2800 as=asc(mid$(et$,21,1)):se$=left$(nu$,3-len(str$(as)))
2810 se$=se$+right$(str$(as),len(str$(as))-1)
2820 db$=" "+sp$+"/"+se$
2830 as=asc(mid$(et$,22,1)):rl$=left$(nu$,4-len(str$(as)))
2840 rl$=" "+rl$+right$(str$(as),len(str$(as))-1)
2850 gosub4300:print#4,"   1.ssb:";:gosub4320:print#4,db$;
2860 gosub4300:print#4,"   r"chr$(108)":";:gosub4320:print#4,rl$;
2870 return
2880 :
2890 :
2900 rem**************bam**************
2910 :
2920 print"{clr}              {blk}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}{CBM-O}"
2930 print"              >>>{wht}B A M{blk}<<<":print"              {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}"
2940 print"         {yel}({blk}B{yel}lock {blk}A{yel}vailable {blk}M{yel}ap)"
2950 print"{down}{down} {blk}FORMAT: {cyn}horizontal {blk}- {cyn}Sektoren"
2960 print"         vertikal   {blk}- {cyn}Spuren"
2970 print"{down}{rght}{blk}ZEICHENBEDEUTUNG: {cyn}'*'{blk}={cyn}Block belegt;"
2980 printtab(19)"{cyn}'-'{blk}={cyn}Block frei;"
2990 printtab(19)"{cyn}'/'{blk}={cyn}Block nicht vor-":printtab(23)"handen."
3000 gosub5230:gosub5280
3010 t1$="":l$="":gosub3780:gosub5320:print#4,"     ";
3020 gosub4240:c$="w":c3=1:gosub4030
3030 print#4,"blockbelegungsplan":print#4:c3=0:gosub4030:gosub4270
3040 c$="3":c3=24:gosub4030:print#4,"     ";:gosub4240:print#4,di$;
3050 gosub4270:print#4,dn$;:gosub4240:print#4,"id:";:gosub4270
3060 print#4,id$
3070 print#4:print#4,"     s"chr$(101)chr$(107)chr$(116)chr$(111)chr$(114);
3080 print#4,"                 1 1 1 1 1 1 1 1 1 1 2   freie"
3090 print#4,"     "chr$(112)"  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0   ";
3100 print#4,"bl"chr$(92)"cke":print#4,"     "chr$(117)
3110 gf=0:bp=4:gosub3840
3120 fori=1to35:ifi=1then3380
3130 gosub3390:ifi<10thenprint#4,"     "i;:goto3150
3140 print#4,"    "i;
3150 forj=1to4:get#3,a$:ifa$=""thena$=chr$(0)
3160 ac=asc(a$):ifj=1thenfb=ac:gf=gf+fb:goto3210
3170 t1=2*(ac/2-int(ac/2)):t1$=right$(str$(t1),1)
3180 l$=l$+t1$:ac=int(ac/2):ifac=0then3200
3190 goto3170
3200 l$=l$+left$(nu$,8-(len(l$)-(j-2)*8)):goto3220
3210 ifi=18thengf=gf-fb
3220 nextj
3230 forj=1to21:ifj<=msethen3250
3240 print#4,"/ ";:goto3270
3250 ifmid$(l$,j,1)="0"thenprint#4,"* ";:goto3270
3260 print#4,"- ";
3270 nextj:iffb<10thenprint#4,"  0"right$(str$(fb),1):goto3290
3280 print#4," "fb
3290 l$="":nexti
3300 fori=1to51:print#4," ";:nexti:ifgf>99thenprint#4,"---":goto3320
3310 print#4," --"
3320 fori=1to54-len(str$(gf)):print#4," ";:nexti:print#4,gf:gf=0
3330 gosub4360:print#4:print#4:print#4
3340 gosub3930:gosub5060
3350 print"{down}{rght}{blk}Weitere Diskette {yel}J/N?";:gosub5110
3360 ifa$="j"then2900
3370 goto190
3380 mse=21:print#4,"     "chr$(114)"1 ";:goto3150
3390 ifi=>1andi<=17thenmse=21:goto3430
3400 ifi=>18andi<=24thenmse=19:goto3430
3410 ifi=>25andi<=30thenmse=18:goto3430
3420 ifi=>31andi<=35thenmse=17
3430 return
3440 :
3450 :
3460 rem*************ende**************
3470 :
3480 print"{clr}{grn}"chr$(9);:close4:pokehf,0
3490 poke788,49:clr:goto5430
3500 :
3510 :
3520 rem*******up file vorhanden*******
3530 sp=18:se=1:bp=0:p$=""
3540 gosub3780
3550 gosub3810:gosub3870
3560 bp=2:gosub3840
3570 get#3,a$:ifa$=""thena$=chr$(0)
3580 ifasc(a$)=0then3660
3590 get#3,a$,a$
3600 fori=1to16
3610 get#3,a$:ifa$=""thena$=chr$(0)
3620 ifa$=chr$(160)then3640
3630 p$=p$+a$:next
3640 print"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}                  ":print"{up}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}"p$
3650 iff$=p$thenp$="":goto3700
3660 bp=bp+32:ifbp>226thenp$="":goto3680
3670 gosub3840:p$="":goto3570
3680 ifs1=0thengosub3930:goto4840
3690 gosub3930:sp=s1:se=s2:bp=0:goto3550
3700 bp=bp+1:gosub3840
3710 gosub3870:sp=s1:se=s2
3720 bp=bp-1:gosub3840:gosub3870:ft=(s1or128)and135
3730 ft$=ft$(132-ft)
3740 bp=bp+28:gosub3840:gosub3870:fl=s1+256*s2
3750 fl$="ca."+str$(fl)+" blocks":s1=sp:s2=se
3760 return
3770 :
3780 rem*****floppy initialisieren*****
3790 open1,8,15,"i":close1:return
3800 :
3810 rem************b-r/b-p************
3820 open2,8,15:open3,8,2,"#"
3830 print#2,"u1 2 0 ";sp;se
3840 print#2,"b-p 2 ";bp
3850 return
3860 :
3870 rem*********2 bytes holen*********
3880 get#3,a1$,a2$:ifa1$=""thena1$=chr$(0)
3890 ifa2$=""thena2$=chr$(0)
3900 s1=asc(a1$):s2=asc(a2$):nd=s1*s2
3910 return
3920 :
3930 rem******kanaele schliessen*******
3940 close3:close2:return
3950 :
3960 rem****drucker initialisieren*****
3970 print#4,chr$(27);chr$(64);
3980 print#4,chr$(27);chr$(115);chr$(1);
3990 return
4000 :
4010 rem*******schriftart senden*******
4020 print#4,chr$(c1);chr$(c2);chr$(c3);:return
4030 print#4,chr$(27);c$;chr$(c3);:return
4040 :
4050 rem*********kopf drucken**********
4060 gosub4220:print#4,a$(0);:gosub4270:print#4,"   ";f$
4070 gosub4220:print#4,a$(1);:gosub4270:print#4,"        ";ft$
4080 gosub4220:print#4,a$(2);:gosub4270:print#4,"  ";fl$
4090 ifa=4then4190
4100 gosub4220:print#4,a$(3);:gosub4270:print#4,sp;
4110 ifsp<10thenprint#4," ";
4120 print#4,"   ";:gosub4240:print#4,a$(4);:gosub4270:print#4,se;
4130 ifbn>0thenprint#4,"   ";:goto4150
4140 print#4," ":goto4180
4150 ifse<10thenprint#4," ";
4160 gosub4240:print#4,"b"chr$(108)chr$(111)chr$(99)chr$(107)":";
4170 gosub4270:print#4,bn
4180 gosub4250:print#4:print#4,"     ";a$(5)
4190 gosub4280
4200 return
4210 :
4220 rem*****schriftart auswaehlen*****
4230 print#4,"     ";
4240 c$="-":c3=1:gosub4030
4250 c$="e":c3=0:gosub4030
4260 return
4270 c$="-":gosub4030
4280 c$="f":gosub4030
4290 return
4300 c$="m":c3=0:gosub4030
4310 return
4320 c$="p":c3=0:gosub4030
4330 return
4340 c$="0":c3=0:gosub4030
4350 return
4360 c$="2":c3=0:gosub4030
4370 return
4380 :
4390 rem*******bytes ausdrucken********
4400 gosub4340
4410 lz=32*(an/8-int(an/8)):l1$=left$(lz$,lz):ifeb=>0thenan=int(eb/8)*8
4420 lz=32-32*((en+1)/8-int((en+1)/8)):iflz=32thenlz=0
4430 l2$=left$(lz$,lz)
4440 bp=an:gosub3840
4450 forj=antoenstep8:h$=str$(j):l1=len(h$)
4460 h$="      "+left$(nu$,4-l1)+right$(h$,l1-1)+chr$(62)+"   "
4470 gosub4300
4480 print#4,h$;l1$;:l1$="":i1$=""
4490 fori=0to7
4500 get#3,a$:ifa$=""thena$=chr$(0)
4510 ifeb=>0andj+i<ebthena$=".":gosub4730:goto4560
4520 as=asc(a$):i$=str$(as):l2=len(i$)
4530 i$=left$(nu$,4-l2)+right$(i$,l2-1)+" ":i1$=i1$+i$
4540 gosub4650
4550 ifj+i=enthen4570
4560 nexti:i=i-1
4570 ifj+i=entheni1$=i1$+l2$:j=en:l2$=""
4580 i1$=i1$+"  "
4590 print#4,i1$;:gosub4320
4600 b$=left$(b$,len(b$))+right$(nu$,8-len(b$))
4610 print#4,b$:b$=""
4620 nextj
4630 gosub4360:print#4:return
4640 :
4650 rem***operat.in zeichen umwand.***
4660 ifas<32oras>90thena$=".":goto4750
4670 ifas=170thena$="+":goto4750
4680 ifas=171thena$="-":goto4750
4690 ifas=173thena$="/":goto4750
4700 ifas=172thena$="*":goto4750
4710 ifas=173thena$="/":goto4750
4720 ifas=177thena$=">":goto4750
4730 ifas=178thena$="=":goto4750
4740 ifas=179thena$="<"
4750 b$=b$+a$:return
4760 :
4770 rem*******eingabe filename********
4780 input"{down} {blk}Filename: {yel}";f$
4790 iflen(f$)<=16then4820
4800 print"{up}             ";
4810 fort=1tolen(f$):print" ";:nextt:print"{up}{up}":goto4780
4820 gosub3520:e1=s1:e2=s2
4830 onagoto870,1200,1200,1770
4840 print"{down}{down} {wht}FILE{$a0}NICHT{$a0}VORHANDEN!"
4850 print"{down} F1{blk}=Neue Eingabe  {wht}F3{blk}=Menue"
4860 geta$
4870 ifa$=chr$(133)then210
4880 ifa$=chr$(134)then190
4890 goto4860
4900 :
4910 rem******2 blocks pro seite*******
4920 ab=ab+1:ifab=2then4940
4930 return
4940 ab=0:print#4,chr$(12):gosub3960
4950 return
4960 :
4970 rem******eingabe blocknummer******
4980 print"{down}{rght}{wht}File belegt";fl" Bloecke!"
4990 input"{down}{rght}{blk}Blocknummer:  {yel}";bn:ifbn<1orbn>flthengosub3930:goto210
5000 n1=1
5010 ifn1=bnthen5040
5020 sp=s1:se=s2:bp=0:gosub3830:gosub3870
5030 n1=n1+1:goto5010
5040 onagoto0,1210,1450
5050 :
5060 rem******seitenvorschub j/n*******
5070 print"{down}{rght}{blk}Seitenvorschub   {yel}J/N?";:gosub5110
5080 ifa$="j"thengosub4940
5090 return
5100 :
5110 rem********tastaturabfrage********
5120 geta$
5130 ifa$="j"thenprint"{left}{left}{left}{left}{cyn}J":goto5160
5140 ifa$="n"thenprint"{left}{left}{cyn}N":goto5160
5150 goto5120
5160 fort=1to1000:nextt:return
5170 :
5180 rem*********f1 - abfrage**********
5190 geta$
5200 ifa$=chr$(133)thenreturn
5210 goto5190
5220 :
5230 rem*******diskette einlegen*******
5240 print"{down} {yel}Zu bearbeitende Diskette einlegen!"
5250 ifa=5ora=6thenreturn
5260 fort=1to1000:nextt:return
5270 :
5280 rem*******fertig .......f1********
5290 print" {yel}Fertig {blk}........................ {yel}F1"
5300 gosub5180:return
5310 :
5320 rem****disk.-name und id lesen****
5330 sp=18:se=0:bp=144:gosub3810
5340 d$="":j=0
5350 fori=1to20:get#3,a$:ifa$=""thena$=chr$(0)
5360 ifj>0then5380
5370 ifa$=chr$(160)thenj=i-1:goto5390
5380 d$=d$+a$
5390 nexti
5400 dn$=" "+left$(d$,j)+"  ":id$=" "+right$(d$,2)
5410 return
5420 :
5430 end
 10 REM   **************************** 
 20 REM   **************************** 
 30 REM   **                        ** 
 40 REM   ** JOHANN AUER            ** 
 50 REM   ** HERMANN-HILLER-STR. 54 ** 
 60 REM   ** 8263 BURGHAUSEN        ** 
 70 REM   **                        ** 
 80 REM   **************************** 
 90 REM   **************************** 
 100 : 
 110 : 
 120 : 
 130 REM ******************************* 
 140 REM *******FILE-ORGANISATION******* 
 150 REM ******************************* 
 160 : 
 170 GOSUB 280:REM ***INITIALISIERUNG**** 
 180 : 
 190 GOSUB 460:REM ********MENUE********* 
 200 : 
 210 ON AGOTO 800,990,1380,1710,2160,2900,3460 
 220 : 
 230 REM ******************************* 
 240 REM *******FILE-ORGANISATION******* 
 250 REM ******************************* 
 260 : 
 270 : 
 280 REM ********INITIALISIERUNG******** 
 290 : 
 300 DIM FT$(3):DIM A$(7):A$(6)="{RIGHT,RVSON}K{DOWN,LEFT}K{RVOFF,SPACE,YELLOW}":A$(7)="{RVOFF,SPACE,BLACK}K{LEFT,UP}K{DOWN}" 
 310 RF=53280:HF=RF+1:A$="":NU$="00000000.......":EB=-1:N3=0:RESTORE 
 320 DI$="D"+CHR$ (105)+CHR$ (115)+CHR$ (107)+CHR$ (101)+CHR$ (116)+CHR$ (116) 
 330 DI$=DI$+CHR$ (101)+CHR$ (110)+CHR$ (110)+CHR$ (97)+CHR$ (109)++CHR$ (101)+":" 
 340 FOR I=1 TO40:READ Q:A$=A$+CHR$ (Q):NEXT 
 350 A$(0)=LEFT$ (A$,9):A$(1)=MID$ (A$,10,4):A$(2)=MID$ (A$,14,10) 
 360 A$(3)=MID$ (A$,24,5):A$(4)=MID$ (A$,29,7):A$(5)=RIGHT$ (A$,5) 
 370 DATA 70,105,108,101,110,97,109,101,58,84,121,112,58,70,105 
 380 DATA 108,101,108,123,110,103,101,58,83,112,117,114,58,83,101 
 390 DATA 107,116,111,114,58,66,121,116,101,58 
 400 FT$(0)="REL":FT$(1)="USR":FT$(2)="PRG":FT$(3)="SEQ" 
 410 LZ$="--- --- --- --- --- --- ---{10SPACE}" 
 420 PRINTCHR$ (8);:POKE 788,52 
 430 RETURN 
 440 : 
 450 : 
 460 REM *************MENUE************* 
 470 : 
 480 POKE RF,0:POKE HF,11:PRINTCHR$ (14)"{CLR,DOWN}"TAB( 11); 
 490 PRINT"{CYAN}FILE-ORGANISATION":PRINTTAB( 11)"{BLACK}UUUUUUUUUUUUUUUUU" 
 500 PRINT"{RIGHT}DIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIF" 
 510 PRINTA$(6)"GANZES FILE{SPACE,BLACK}....................{SPACE,YELLOW,RVSON}1"A$(7) 
 520 PRINTA$(6)"EINZELNE BLOECKE{SPACE,BLACK}...............{SPACE,YELLOW,RVSON}2"A$(7) 
 530 PRINTA$(6)"BYTEREIHEN{SPACE,BLACK}.....................{SPACE,YELLOW,RVSON}3"A$(7) 
 540 PRINTA$(6)"BLOCKBELEGUNG VON FILES{SPACE,BLACK}........{SPACE,YELLOW,RVSON}4"A$(7) 
 550 PRINTA$(6)"DIREKTORY{SPACE,BLACK}......................{SPACE,YELLOW,RVSON}5"A$(7) 
 560 PRINTA$(6)"BAM{SPACE,BLACK}............................{SPACE,YELLOW,RVSON}6"A$(7) 
 570 PRINTA$(6)"ENDE{SPACE,BLACK}...........................{SPACE,YELLOW,RVSON}7"A$(7) 
 580 PRINT"{RIGHT,RVSON}K{DOWN,LEFT,RVOFF}C{RVSON}IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII{RVOFF}V{UP,LEFT}K{DOWN}" 
 590 PRINT"{DOWN,3SPACE,CYAN}IHRE WAHL?{YELLOW,SPACE}"; 
 600 GET EI$:IF EI$<>"" THEN620 
 610 PRINT"{SPACE,LEFT}";:FOR T=1 TO150:NEXT :PRINT"P{LEFT}";:FOR T=1 TO150:NEXT :GOTO 600 
 620 A=VAL (EI$)::IF A<1OR A>7 THEN600 
 630 PRINTEI$:FOR T=1 TO1000:NEXT 
 640 IF A=7OR SP>0 THENRETURN 
 650 PRINT"{UP,3SPACE,YELLOW}AUSGABE AUF{SPACE,BLACK}EPSON{YELLOW}-DRUCKER{SPACE,BLACK}RX-80{YELLOW}" 
 660 PRINT"{3SPACE}MIT{SPACE,BLACK}DATA-BECKER{YELLOW,SPACE}INTERFACE!":FOR T=1 TO2500:NEXT 
 670 PRINT"{2UP,3SPACE,BLACK}DRUCKER EINSCHALTEN UND PAPIER{4SPACE}" 
 680 PRINT"{3SPACE}POSITIONIEREN!!!{12SPACE}" 
 690 PRINT"{3SPACE,YELLOW}FERTIG{SPACE,BLACK}....................{SPACE,YELLOW,RVSON}F1" 
 700 GOSUB 5180 
 710 OPEN 1,4,1:POKE 768,61 
 720 PRINT#1,CHR$ (7);:CLOSE 1 
 730 POKE 768,139 
 740 IF ST<>-128 THEN760 
 750 GOTO 700 
 760 OPEN 4,4,1:GOSUB 3960 
 770 RETURN 
 780 : 
 790 : 
 800 REM **********GANZES FILE*********** 
 810 : 
 820 PRINT"{CLR,DOWN,11SPACE,BLACK}OOOOOOOOOOOOOOOOO" 
 830 PRINT"{11SPACE}>>>{WHITE}GANZES FILE{BLACK}<<<" 
 840 PRINT"{11SPACE}UUUUUUUUUUUUUUUUU" 
 850 GOSUB 5230 
 860 AB=0:N=0:BN=1:GOTO 4770 
 870 GOSUB 4050 
 880 AN=0:EN=255 
 890 BP=0:GOSUB 3830:GOSUB 3870 
 900 IF S1=0 THENN=1:EN=S2 
 910 GOSUB 4390:PRINT#4:PRINT#4:GOSUB 4910 
 920 IF N=1 THENN=0:GOTO 940 
 930 SP=S1:SE=S2:BN=BN+1:GOSUB 4100:GOTO 890 
 940 GOSUB 3930:PRINT#4:PRINT#4 
 950 IF AB=1 THENGOSUB 5060 
 960 BN=0:GOTO 190 
 970 : 
 980 : 
 990 REM ********EINZELNE BLOECKE******** 
 1000 : 
 1010 PRINT"{CLR,9SPACE,BLACK}OOOOOOOOOOOOOOOOOOOOOO" 
 1020 PRINT"{9SPACE}>>>{WHITE}EINZELNE BLOECKE{BLACK}<<<"        " 
 1030 PRINT"{9SPACE}UUUUUUUUUUUUUUUUUUUUUU" 
 1040 GOSUB 5230 
 1050 PRINT"{DOWN,SPACE,BLACK}EINGABE:":PRINT"{DOWN,SPACE,CYAN}SPUR/SEKTOR{SPACE,BLACK}...........{SPACE,CYAN}1" 
 1060 PRINT" FILENAME/BLOCKNR.{SPACE,BLACK}.....{SPACE,CYAN}2" 
 1070 INPUT"{DOWN,SPACE,BLACK}>>>{SPACE,YELLOW}";E$ 
 1080 E=INT (VAL (E$)):IF E<1OR E>2 THEN1100 
 1090 ON EGOTO 1110,1190 
 1100 PRINT"{UP,6RIGHT,10SPACE,2UP}":GOTO 1070 
 1110 INPUT"{DOWN,SPACE,BLACK}SPUR/SEKTOR:{SPACE,YELLOW}";SP$,SE$ 
 1120 SP=INT (VAL (SP$)):SE=INT (VAL (SE$)):I=SP:GOSUB 3390 
 1130 IF (SP=>1AND SP<=35)AND (SE=>0AND SE<=MSE) THEN1160 
 1140 PRINT"{UP}";:FOR T=1 TO38:PRINT" ";:FOR T1=1 TO5:NEXT T1:NEXT T 
 1150 PRINT"{2UP}":GOTO 1110 
 1160 GOSUB 3780:BP=0:GOSUB 3810:BN=0 
 1170 IF A=3 THEN1460 
 1180 N2=1:GOTO 1220 
 1190 N2=0:GOTO 4770 
 1200 GOTO 4970 
 1210 SP=S1:SE=S2 
 1220 GOSUB 3830:GOSUB 3870:AN=0:EN=255:IF S1=0 THENEN=S2 
 1230 IF N2=1 THENGOSUB 4100:GOTO 1250 
 1240 GOSUB 4050 
 1250 N2=0:GOSUB 4390:PRINT#4:PRINT#4:PRINT#4 
 1260 GOSUB 5060 
 1270 PRINT"{DOWN,SPACE,BLACK}WEITERER BLOCK{3SPACE,YELLOW}J/N?";:GOSUB 5110 
 1280 IF A$="J" THEN1300 
 1290 GOSUB 3930:BN=0:GOTO 190 
 1300 IF E=1 THEN1330 
 1310 PRINT"{DOWN,SPACE,BLACK}GLEICHES FILE{4SPACE,YELLOW}J/N?";:GOSUB 5110 
 1320 IF A$="J" THEN1340 
 1330 N2=0:GOSUB 3930:GOTO 990 
 1340 N2=1:S1=E1:S2=E2 
 1350 PRINT"{CLR,2DOWN}";:GOTO 1200 
 1360 : 
 1370 : 
 1380 REM ***********BYTEREIHEN********** 
 1390 : 
 1400 PRINT"{CLR,12SPACE,BLACK}OOOOOOOOOOOOOOOO" 
 1410 PRINT"{12SPACE}>>>{WHITE}BYTEREIHEN{BLACK}<<<" 
 1420 PRINT"{12SPACE}UUUUUUUUUUUUUUUU" 
 1430 GOSUB 5230 
 1440 N3=0:GOTO 1050 
 1450 SP=S1:SE=S2:GOSUB 3830 
 1460 INPUT"{DOWN,RIGHT,BLACK}ERSTES BYTE:{2SPACE,YELLOW}";EB 
 1470 IF EB<0OR EB>255 THENGOSUB 1510:GOTO 1460 
 1480 INPUT"{DOWN,RIGHT,BLACK}LETZTES BYTE:{SPACE,YELLOW}";LB 
 1490 IF LB<0OR LB>255OR LB<EB THENGOSUB 1510:GOTO 1480 
 1500 GOTO 1520 
 1510 PRINT"{UP}";TAB( 14);"{SPACE,9SPACE,2UP}":RETURN 
 1520 IF N3<>0 THENGOTO 1670 
 1530 IF E=1 THENGOSUB 4100:GOTO 1550 
 1540 GOSUB 4050 
 1550 AN=EB:EN=LB:GOSUB 4390 
 1560 PRINT"{CLR,DOWN}";:GOSUB 5060 
 1570 PRINT"{DOWN,RIGHT,BLACK}WEITERE REIHE{4SPACE,YELLOW}J/N?";:GOSUB 5110 
 1580 IF A$="J" THEN1600 
 1590 GOSUB 3930:PRINT#4:PRINT#4:PRINT#4:EB=-1:N3=0:GOTO 190 
 1600 PRINT"{DOWN,RIGHT,BLACK}GLEICHER BLOCK{3SPACE,YELLOW}J/N?";:GOSUB 5110 
 1610 IF A$="J" THENN3=1:PRINT"{DOWN}";:GOTO 1460 
 1620 PRINT#4:PRINT#4 
 1630 IF E=1 THEN1660 
 1640 PRINT"{DOWN,RIGHT,BLACK}GLEICHES FILE{4SPACE,YELLOW}J/N?";:GOSUB 5110 
 1650 IF A$="J" THENN3=2:S1=E1:S2=E2:PRINT"{DOWN}";:GOTO 4970 
 1660 GOSUB 3930:PRINT#4:GOTO 1380 
 1670 IF N3=1 THEN1550 
 1680 GOSUB 4100:GOTO 1550 
 1690 : 
 1700 : 
 1710 REM *********BLOCKBELEGUNG********* 
 1720 : 
 1730 PRINT"{CLR,10SPACE,BLACK}OOOOOOOOOOOOOOOOOOO" 
 1740 PRINT"{10SPACE}>>>{WHITE}BLOCKBELEGUNG{BLACK}<<<" 
 1750 PRINT"{10SPACE}UUUUUUUUUUUUUUUUUUU" 
 1760 GOSUB 5230:GOTO 4770 
 1770 PRINT"{2DOWN,RIGHT}FORMAT:{2SPACE,WHITE}BLOCKNUMMER":PRINT"{SPACE,BLACK}YYYYYY{3SPACE}***********" 
 1780 PRINT"{10SPACE,WHITE}SPUR/SEKTOR" 
 1790 GOSUB 4050:PRINT#4:RE=10:RD=295:X1=39:X2=1 
 1800 AR=INT (FL/10+0.95):GOSUB 4300 
 1810 FOR I=1 TOAR:PRINT#4,"{6SPACE}"; 
 1820 IF FL/10=INT (FL/10) THEN1840 
 1830 IF I=AR THENGOSUB 2120 
 1840 J=0 
 1850 J=J+1:SU=(I-1)*10+J:BN$=STR$ (SU) 
 1860 L3=LEN (BN$)-1:BN$=" "+LEFT$ (NU$,3-L3)+RIGHT$ (BN$,L3)+" " 
 1870 PRINT#4,BN$; 
 1880 IF J+0.5=>RE THEN1920 
 1890 PRINT#4,CHR$ (27);"K";CHR$ (5);CHR$ (0);:A(3)=254 
 1900 FOR IJ=1 TO5:PRINT#4,CHR$ (A(IJ));:NEXT IJ 
 1910 GOTO 1850 
 1920 C$="3":C3=20:GOSUB 4030:PRINT#4 
 1930 PRINT#4,"{6SPACE}";:PRINT#4,CHR$ (27);"K";CHR$ (X1);CHR$ (X2); 
 1940 FOR IJ=1 TORD:PRINT#4,CHR$ (64);:NEXT IJ:C3=8:GOSUB 4030:PRINT#4 
 1950 C3=40:GOSUB 4030:PRINT#4,"{6SPACE}"; 
 1960 J=0:SS=0 
 1970 J=J+1:SP$=STR$ (S1):SE$=STR$ (S2):IF S1=0 THENSS$=" SSB ":SS=SS+1:GOTO 2000 
 1980 L4=LEN (SP$)-1:L5=LEN (SE$)-1 
 1990 SS$=LEFT$ (NU$,2-L4)+RIGHT$ (SP$,L4)+"/"+LEFT$ (NU$,2-L5)+RIGHT$ (SE$,L5) 
 2000 PRINT#4,SS$; 
 2010 IF J+0.5=>RE THEN2040 
 2020 PRINT#4,CHR$ (27);"K";CHR$ (5);CHR$ (0);:A(3)=255 
 2030 FOR IJ=1 TO5:PRINT#4,CHR$ (A(IJ));:NEXT IJ:IF S1=0 THEN1970 
 2040 IF S1=0 THEN2060 
 2050 SP=S1:SE=S2:BP=0:GOSUB 3830:GOSUB 3870:IF J<RE THEN1970 
 2060 PRINT#4:NEXT I:PRINT#4:GOSUB 4320:GOSUB 3930 
 2070 GOSUB 4220:PRINT#4,"GESAMTL"CHR$ (91)"NGE:";:GOSUB 4270 
 2080 PRINT#4,(FL-1-SS)*254+S2"BYTES":PRINT#4:PRINT#4:PRINT#4:PRINT#4 
 2090 PRINT"{DOWN}";:GOSUB 5060:PRINT"{DOWN,RIGHT,BLACK}WEITERES FILE{4SPACE,YELLOW}J/N?";:GOSUB 5110 
 2100 IF A$="J" THEN1710 
 2110 GOTO 190 
 2120 RE=10*(FL/10-INT (FL/10)):RD=INT (RE*29.5+0.5) 
 2130 X1=RD-INT (RD/256)*256:X2=INT (RD/256):RETURN 
 2140 : 
 2150 : 
 2160 REM ***********DIREKTORY*********** 
 2170 : 
 2180 PRINT"{CLR,12SPACE,BLACK}OOOOOOOOOOOOOOO" 
 2190 PRINT"{12SPACE}>>>{WHITE}DIREKTORY{BLACK}<<<" 
 2200 PRINT"{12SPACE}UUUUUUUUUUUUUUU":GOSUB 5230:GOSUB 5280 
 2210 PRINT"{DOWN,SPACE,BLACK}ABKUERZUNGEN:":PRINT"{SPACE,YELLOW}BL.{3SPACE,BLACK}-{SPACE,CYAN}FILELAENGE IN BLOECKEN;" 
 2220 PRINT"{SPACE,YELLOW}BYTES{SPACE,BLACK}-{SPACE,CYAN}UNGEFAEHRE FILELAENGE IN{16SPACE}BYTES "; 
 2230 PRINT"(BL*254);":PRINT"{SPACE,YELLOW}1.DB.{SPACE,BLACK}-{SPACE,CYAN}1. DATENBLOCK DES FILES;" 
 2240 PRINT"{SPACE,YELLOW}TYP{3SPACE,BLACK}-{SPACE,CYAN}FILETYP.":PRINT"{DOWN,SPACE,BLACK}NUR BEI RELATIVEN DATEIEN:" 
 2250 PRINT"{SPACE,YELLOW}1.SSB{SPACE,BLACK}-{SPACE,CYAN}1.SIDE-SEKTOR-BLOCK;" 
 2260 PRINT"{SPACE,YELLOW}RL{4SPACE,BLACK}-{SPACE,CYAN}RECORDLAENGE." 
 2270 GOSUB 3780:PRINT#4,"{5SPACE}"; 
 2280 GOSUB 4240:C$="W":C3=1:GOSUB 4030 
 2290 PRINT#4,"DIREKTORY":PRINT#4:C3=0:GOSUB 4030:GOSUB 4270 
 2300 GOSUB 4300:PRINT#4,"{6SPACE}GN{2SPACE}AUFZ.-DICHTE{5SPACE}DOS{3SPACE}"; 
 2310 PRINT#4,"ANZAHL BL"CHR$ (92)"CKE{3SPACE}SPUR{2SPACE}SEKT." 
 2320 PRINT#4,"{6SPACE}08{2SPACE}256 BYTES/SEKT.{2SPACE}V2.6{2SPACE}683 (664 FREI){2SPACE}0018{2SPACE}01-18" 
 2330 PRINT#4 
 2340 GOSUB 5320:GOSUB 3930:GOSUB 4320 
 2350 PRINT#4,"{5SPACE}";:GOSUB 4240:PRINT#4,DI$;:GOSUB 4270:PRINT#4,DN$; 
 2360 GOSUB 4240:PRINT#4,"ID:";:GOSUB 4270 
 2370 PRINT#4,ID$:PRINT#4 
 2380 PRINT#4,"{5SPACE}NR.{2SPACE}FILENAME{10SPACE}BL.{2SPACE}BYTES"; 
 2390 PRINT#4,"{2SPACE}1.DB.{3SPACE}TYP":GOSUB 4340:PRINT#4,"{5SPACE}"; 
 2400 FOR I=1 TO46:PRINT#4,"-";:NEXT I:PRINT#4 
 2410 ET$="":I=0:FB=0:SP=18:SE=1:BP=0:GOSUB 3810 
 2420 GOSUB 3870:BP=2:GOSUB 3840 
 2430 FOR J=1 TO8:I=I+1 
 2440 FOR J1=1 TO32:GET #3,A$:IF A$="" THENA$=CHR$ (0) 
 2450 ET$=ET$+A$:NEXT J1:ET$=LEFT$ (ET$,30) 
 2460 FT=ASC (LEFT$ (ET$,1)):F1=FT:IF FT=0 THENI=I-1:GOTO 2650 
 2470 EN$=LEFT$ (NU$,4-LEN (STR$ (I)))+RIGHT$ (STR$ (I),LEN (STR$ (I))-1) 
 2480 IF FT<128 THENOF$="*" 
 2490 OF$=" " 
 2500 FT=(F1OR 128)AND 135:FT$=OF$+FT$(132-FT) 
 2510 AS=ASC (MID$ (ET$,2,1)):SP$=LEFT$ (NU$,3-LEN (STR$ (AS))) 
 2520 SP$=SP$+RIGHT$ (STR$ (AS),LEN (STR$ (AS))-1) 
 2530 AS=ASC (MID$ (ET$,3,1)):SE$=LEFT$ (NU$,3-LEN (STR$ (AS))) 
 2540 SE$=SE$+RIGHT$ (STR$ (AS),LEN (STR$ (AS))-1) 
 2550 DB$=SP$+"/"+SE$ 
 2560 F$=MID$ (ET$,4,16) 
 2570 AS=ASC (RIGHT$ (ET$,1))*256+ASC (MID$ (ET$,29,1)):FB=FB+AS 
 2580 LA$=LEFT$ (NU$,4-LEN (STR$ (AS)))+RIGHT$ (STR$ (AS),LEN (STR$ (AS))-1) 
 2590 AS=(AS*256)-(AS*2)-127 
 2600 BY$=LEFT$ (NU$,6-LEN (STR$ (AS)))+RIGHT$ (STR$ (AS),LEN (STR$ (AS))-1) 
 2610 PRINT#4,"{5SPACE}"EN$"{2SPACE}"F$"{2SPACE}"LA$; 
 2620 PRINT#4,"{2SPACE}"BY$"{2SPACE}"DB$"{2SPACE}"FT$; 
 2630 IF RIGHT$ (FT$,3)="REL" THENGOSUB 2780 
 2640 PRINT#4 
 2650 ET$="":NEXT J 
 2660 IF S1=0 THEN2680 
 2670 SP=S1:SE=S2:BP=0:GOSUB 3830:GOTO 2420 
 2680 FB=664-FB:GOSUB 4360 
 2690 PRINT#4:GOSUB 4300:PRINT#4,"{6SPACE}"; 
 2700 PRINT#4,"FREIE BL"CHR$ (92)"CKE:"FB"{2SPACE}IN BYTES:"(FB*254); 
 2710 PRINT#4,"{2SPACE}FREIE EINTR"CHR$ (91)"GE:"144-I:PRINT#4:PRINT#4:PRINT#4:PRINT#4 
 2720 GOSUB 4320:GOSUB 3930 
 2730 GOSUB 5060 
 2740 PRINT"{DOWN,RIGHT,BLACK}WEITERE DISKETTE{SPACE,YELLOW}J/N?"; 
 2750 GOSUB 5110 
 2760 IF A$="J" THEN2160 
 2770 GOTO 190 
 2780 AS=ASC (MID$ (ET$,20,1)):SP$=LEFT$ (NU$,3-LEN (STR$ (AS))) 
 2790 SP$=SP$+RIGHT$ (STR$ (AS),LEN (STR$ (AS))-1) 
 2800 AS=ASC (MID$ (ET$,21,1)):SE$=LEFT$ (NU$,3-LEN (STR$ (AS))) 
 2810 SE$=SE$+RIGHT$ (STR$ (AS),LEN (STR$ (AS))-1) 
 2820 DB$=" "+SP$+"/"+SE$ 
 2830 AS=ASC (MID$ (ET$,22,1)):RL$=LEFT$ (NU$,4-LEN (STR$ (AS))) 
 2840 RL$=" "+RL$+RIGHT$ (STR$ (AS),LEN (STR$ (AS))-1) 
 2850 GOSUB 4300:PRINT#4,"{3SPACE}1.SSB:";:GOSUB 4320:PRINT#4,DB$; 
 2860 GOSUB 4300:PRINT#4,"{3SPACE}R"CHR$ (108)":";:GOSUB 4320:PRINT#4,RL$; 
 2870 RETURN 
 2880 : 
 2890 : 
 2900 REM **************BAM************** 
 2910 : 
 2920 PRINT"{CLR,14SPACE,BLACK}OOOOOOOOOOO" 
 2930 PRINT"{14SPACE}>>>{WHITE}B A M{BLACK}<<<":PRINT"{SPACE,13SPACE}UUUUUUUUUUU" 
 2940 PRINT"{9SPACE,YELLOW}({BLACK}B{YELLOW}LOCK{SPACE,BLACK}A{YELLOW}VAILABLE{SPACE,BLACK}M{YELLOW}AP)" 
 2950 PRINT"{2DOWN,SPACE,BLACK}FORMAT:{SPACE,CYAN}HORIZONTAL{SPACE,BLACK}-{SPACE,CYAN}SEKTOREN" 
 2960 PRINT"{9SPACE}VERTIKAL{3SPACE,BLACK}-{SPACE,CYAN}SPUREN" 
 2970 PRINT"{DOWN,RIGHT,BLACK}ZEICHENBEDEUTUNG:{SPACE,CYAN}'*'{BLACK}={CYAN}BLOCK BELEGT;" 
 2980 PRINTTAB( 19)"{CYAN}'-'{BLACK}={CYAN}BLOCK FREI;" 
 2990 PRINTTAB( 19)"{CYAN}'/'{BLACK}={CYAN}BLOCK NICHT VOR-":PRINTTAB( 23)"HANDEN." 
 3000 GOSUB 5230:GOSUB 5280 
 3010 T1$="":L$="":GOSUB 3780:GOSUB 5320:PRINT#4,"{5SPACE}"; 
 3020 GOSUB 4240:C$="W":C3=1:GOSUB 4030 
 3030 PRINT#4,"BLOCKBELEGUNGSPLAN":PRINT#4:C3=0:GOSUB 4030:GOSUB 4270 
 3040 C$="3":C3=24:GOSUB 4030:PRINT#4,"{5SPACE}";:GOSUB 4240:PRINT#4,DI$; 
 3050 GOSUB 4270:PRINT#4,DN$;:GOSUB 4240:PRINT#4,"ID:";:GOSUB 4270 
 3060 PRINT#4,ID$ 
 3070 PRINT#4:PRINT#4,"{5SPACE}S"CHR$ (101)CHR$ (107)CHR$ (116)CHR$ (111)CHR$ (114); 
 3080 PRINT#4,"{17SPACE}1 1 1 1 1 1 1 1 1 1 2{3SPACE}FREIE" 
 3090 PRINT#4,"{5SPACE}"CHR$ (112)"{2SPACE}0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0{3SPACE}"; 
 3100 PRINT#4,"BL"CHR$ (92)"CKE":PRINT#4,"{5SPACE}"CHR$ (117) 
 3110 GF=0:BP=4:GOSUB 3840 
 3120 FOR I=1 TO35:IF I=1 THEN3380 
 3130 GOSUB 3390:IF I<10 THENPRINT#4,"{5SPACE}"I;:GOTO 3150 
 3140 PRINT#4,"{4SPACE}"I; 
 3150 FOR J=1 TO4:GET #3,A$:IF A$="" THENA$=CHR$ (0) 
 3160 AC=ASC (A$):IF J=1 THENFB=AC:GF=GF+FB:GOTO 3210 
 3170 T1=2*(AC/2-INT (AC/2)):T1$=RIGHT$ (STR$ (T1),1) 
 3180 L$=L$+T1$:AC=INT (AC/2):IF AC=0 THEN3200 
 3190 GOTO 3170 
 3200 L$=L$+LEFT$ (NU$,8-(LEN (L$)-(J-2)*8)):GOTO 3220 
 3210 IF I=18 THENGF=GF-FB 
 3220 NEXT J 
 3230 FOR J=1 TO21:IF J<=MSE THEN3250 
 3240 PRINT#4,"/ ";:GOTO 3270 
 3250 IF MID$ (L$,J,1)="0" THENPRINT#4,"* ";:GOTO 3270 
 3260 PRINT#4,"- "; 
 3270 NEXT J:IF FB<10 THENPRINT#4,"{2SPACE}0"RIGHT$ (STR$ (FB),1):GOTO 3290 
 3280 PRINT#4," "FB 
 3290 L$="":NEXT I 
 3300 FOR I=1 TO51:PRINT#4," ";:NEXT I:IF GF>99 THENPRINT#4,"---":GOTO 3320 
 3310 PRINT#4," --" 
 3320 FOR I=1 TO54-LEN (STR$ (GF)):PRINT#4," ";:NEXT I:PRINT#4,GF:GF=0 
 3330 GOSUB 4360:PRINT#4:PRINT#4:PRINT#4 
 3340 GOSUB 3930:GOSUB 5060 
 3350 PRINT"{DOWN,RIGHT,BLACK}WEITERE DISKETTE{SPACE,YELLOW}J/N?";:GOSUB 5110 
 3360 IF A$="J" THEN2900 
 3370 GOTO 190 
 3380 MSE=21:PRINT#4,"{5SPACE}"CHR$ (114)"1 ";:GOTO 3150 
 3390 IF I=>1AND I<=17 THENMSE=21:GOTO 3430 
 3400 IF I=>18AND I<=24 THENMSE=19:GOTO 3430 
 3410 IF I=>25AND I<=30 THENMSE=18:GOTO 3430 
 3420 IF I=>31AND I<=35 THENMSE=17 
 3430 RETURN 
 3440 : 
 3450 : 
 3460 REM *************ENDE************** 
 3470 : 
 3480 PRINT"{CLR,GREEN}"CHR$ (9);:CLOSE 4:POKE HF,0 
 3490 POKE 788,49:CLR :GOTO 5430 
 3500 : 
 3510 : 
 3520 REM *******UP FILE VORHANDEN******* 
 3530 SP=18:SE=1:BP=0:P$="" 
 3540 GOSUB 3780 
 3550 GOSUB 3810:GOSUB 3870 
 3560 BP=2:GOSUB 3840 
 3570 GET #3,A$:IF A$="" THENA$=CHR$ (0) 
 3580 IF ASC (A$)=0 THEN3660 
 3590 GET #3,A$,A$ 
 3600 FOR I=1 TO16 
 3610 GET #3,A$:IF A$="" THENA$=CHR$ (0) 
 3620 IF A$=CHR$ (160) THEN3640 
 3630 P$=P$+A$:NEXT 
 3640 PRINT"{UP,11RIGHT,18SPACE}":PRINT"{UP,11RIGHT}"P$ 
 3650 IF F$=P$ THENP$="":GOTO 3700 
 3660 BP=BP+32:IF BP>226 THENP$="":GOTO 3680 
 3670 GOSUB 3840:P$="":GOTO 3570 
 3680 IF S1=0 THENGOSUB 3930:GOTO 4840 
 3690 GOSUB 3930:SP=S1:SE=S2:BP=0:GOTO 3550 
 3700 BP=BP+1:GOSUB 3840 
 3710 GOSUB 3870:SP=S1:SE=S2 
 3720 BP=BP-1:GOSUB 3840:GOSUB 3870:FT=(S1OR 128)AND 135 
 3730 FT$=FT$(132-FT) 
 3740 BP=BP+28:GOSUB 3840:GOSUB 3870:FL=S1+256*S2 
 3750 FL$="CA."+STR$ (FL)+" BLOCKS":S1=SP:S2=SE 
 3760 RETURN 
 3770 : 
 3780 REM *****FLOPPY INITIALISIEREN***** 
 3790 OPEN 1,8,15,"I":CLOSE 1:RETURN 
 3800 : 
 3810 REM ************B-R/B-P************ 
 3820 OPEN 2,8,15:OPEN 3,8,2,"#" 
 3830 PRINT#2,"U1 2 0 ";SP;SE 
 3840 PRINT#2,"B-P 2 ";BP 
 3850 RETURN 
 3860 : 
 3870 REM *********2 BYTES HOLEN********* 
 3880 GET #3,A1$,A2$:IF A1$="" THENA1$=CHR$ (0) 
 3890 IF A2$="" THENA2$=CHR$ (0) 
 3900 S1=ASC (A1$):S2=ASC (A2$):ND=S1*S2 
 3910 RETURN 
 3920 : 
 3930 REM ******KANAELE SCHLIESSEN******* 
 3940 CLOSE 3:CLOSE 2:RETURN 
 3950 : 
 3960 REM ****DRUCKER INITIALISIEREN***** 
 3970 PRINT#4,CHR$ (27);CHR$ (64); 
 3980 PRINT#4,CHR$ (27);CHR$ (115);CHR$ (1); 
 3990 RETURN 
 4000 : 
 4010 REM *******SCHRIFTART SENDEN******* 
 4020 PRINT#4,CHR$ (C1);CHR$ (C2);CHR$ (C3);:RETURN 
 4030 PRINT#4,CHR$ (27);C$;CHR$ (C3);:RETURN 
 4040 : 
 4050 REM *********KOPF DRUCKEN********** 
 4060 GOSUB 4220:PRINT#4,A$(0);:GOSUB 4270:PRINT#4,"{3SPACE}";F$ 
 4070 GOSUB 4220:PRINT#4,A$(1);:GOSUB 4270:PRINT#4,"{8SPACE}";FT$ 
 4080 GOSUB 4220:PRINT#4,A$(2);:GOSUB 4270:PRINT#4,"{2SPACE}";FL$ 
 4090 IF A=4 THEN4190 
 4100 GOSUB 4220:PRINT#4,A$(3);:GOSUB 4270:PRINT#4,SP; 
 4110 IF SP<10 THENPRINT#4," "; 
 4120 PRINT#4,"{3SPACE}";:GOSUB 4240:PRINT#4,A$(4);:GOSUB 4270:PRINT#4,SE; 
 4130 IF BN>0 THENPRINT#4,"{3SPACE}";:GOTO 4150 
 4140 PRINT#4," ":GOTO 4180 
 4150 IF SE<10 THENPRINT#4," "; 
 4160 GOSUB 4240:PRINT#4,"B"CHR$ (108)CHR$ (111)CHR$ (99)CHR$ (107)":"; 
 4170 GOSUB 4270:PRINT#4,BN 
 4180 GOSUB 4250:PRINT#4:PRINT#4,"{5SPACE}";A$(5) 
 4190 GOSUB 4280 
 4200 RETURN 
 4210 : 
 4220 REM *****SCHRIFTART AUSWAEHLEN***** 
 4230 PRINT#4,"{5SPACE}"; 
 4240 C$="-":C3=1:GOSUB 4030 
 4250 C$="E":C3=0:GOSUB 4030 
 4260 RETURN 
 4270 C$="-":GOSUB 4030 
 4280 C$="F":GOSUB 4030 
 4290 RETURN 
 4300 C$="M":C3=0:GOSUB 4030 
 4310 RETURN 
 4320 C$="P":C3=0:GOSUB 4030 
 4330 RETURN 
 4340 C$="0":C3=0:GOSUB 4030 
 4350 RETURN 
 4360 C$="2":C3=0:GOSUB 4030 
 4370 RETURN 
 4380 : 
 4390 REM *******BYTES AUSDRUCKEN******** 
 4400 GOSUB 4340 
 4410 LZ=32*(AN/8-INT (AN/8)):L1$=LEFT$ (LZ$,LZ):IF EB=>0 THENAN=INT (EB/8)*8 
 4420 LZ=32-32*((EN+1)/8-INT ((EN+1)/8)):IF LZ=32 THENLZ=0 
 4430 L2$=LEFT$ (LZ$,LZ) 
 4440 BP=AN:GOSUB 3840 
 4450 FOR J=AN TOENSTEP 8:H$=STR$ (J):L1=LEN (H$) 
 4460 H$="{6SPACE}"+LEFT$ (NU$,4-L1)+RIGHT$ (H$,L1-1)+CHR$ (62)+"{3SPACE}" 
 4470 GOSUB 4300 
 4480 PRINT#4,H$;L1$;:L1$="":I1$="" 
 4490 FOR I=0 TO7 
 4500 GET #3,A$:IF A$="" THENA$=CHR$ (0) 
 4510 IF EB=>0AND J+I<EB THENA$=".":GOSUB 4730:GOTO 4560 
 4520 AS=ASC (A$):I$=STR$ (AS):L2=LEN (I$) 
 4530 I$=LEFT$ (NU$,4-L2)+RIGHT$ (I$,L2-1)+" ":I1$=I1$+I$ 
 4540 GOSUB 4650 
 4550 IF J+I=EN THEN4570 
 4560 NEXT I:I=I-1 
 4570 IF J+I=EN THENI1$=I1$+L2$:J=EN:L2$="" 
 4580 I1$=I1$+"{2SPACE}" 
 4590 PRINT#4,I1$;:GOSUB 4320 
 4600 B$=LEFT$ (B$,LEN (B$))+RIGHT$ (NU$,8-LEN (B$)) 
 4610 PRINT#4,B$:B$="" 
 4620 NEXT J 
 4630 GOSUB 4360:PRINT#4:RETURN 
 4640 : 
 4650 REM ***OPERAT.IN ZEICHEN UMWAND.*** 
 4660 IF AS<32OR AS>90 THENA$=".":GOTO 4750 
 4670 IF AS=170 THENA$="+":GOTO 4750 
 4680 IF AS=171 THENA$="-":GOTO 4750 
 4690 IF AS=173 THENA$="/":GOTO 4750 
 4700 IF AS=172 THENA$="*":GOTO 4750 
 4710 IF AS=173 THENA$="/":GOTO 4750 
 4720 IF AS=177 THENA$=">":GOTO 4750 
 4730 IF AS=178 THENA$="=":GOTO 4750 
 4740 IF AS=179 THENA$="<" 
 4750 B$=B$+A$:RETURN 
 4760 : 
 4770 REM *******EINGABE FILENAME******** 
 4780 INPUT"{DOWN,SPACE,BLACK}FILENAME:{SPACE,YELLOW}";F$ 
 4790 IF LEN (F$)<=16 THEN4820 
 4800 PRINT"{UP,13SPACE}"; 
 4810 FOR T=1 TOLEN (F$):PRINT" ";:NEXT T:PRINT"{2UP}":GOTO 4780 
 4820 GOSUB 3520:E1=S1:E2=S2 
 4830 ON AGOTO 870,1200,1200,1770 
 4840 PRINT"{2DOWN,SPACE,WHITE}FILE{SHIFT-SPACE}NICHT{SHIFT-SPACE}VORHANDEN!" 
 4850 PRINT"{DOWN,SPACE}F1{BLACK}=NEUE EINGABE{SPACE,SPACE,WHITE}F3{BLACK}=MENUE" 
 4860 GET A$ 
 4870 IF A$=CHR$ (133) THEN210 
 4880 IF A$=CHR$ (134) THEN190 
 4890 GOTO 4860 
 4900 : 
 4910 REM ******2 BLOCKS PRO SEITE******* 
 4920 AB=AB+1:IF AB=2 THEN4940 
 4930 RETURN 
 4940 AB=0:PRINT#4,CHR$ (12):GOSUB 3960 
 4950 RETURN 
 4960 : 
 4970 REM ******EINGABE BLOCKNUMMER****** 
 4980 PRINT"{DOWN,RIGHT,WHITE}FILE BELEGT";FL" BLOECKE!" 
 4990 INPUT"{DOWN,RIGHT,BLACK}BLOCKNUMMER:{2SPACE,YELLOW}";BN:IF BN<1OR BN>FL THENGOSUB 3930:GOTO 210 
 5000 N1=1 
 5010 IF N1=BN THEN5040 
 5020 SP=S1:SE=S2:BP=0:GOSUB 3830:GOSUB 3870 
 5030 N1=N1+1:GOTO 5010 
 5040 ON AGOTO 0,1210,1450 
 5050 : 
 5060 REM ******SEITENVORSCHUB J/N******* 
 5070 PRINT"{DOWN,RIGHT,BLACK}SEITENVORSCHUB{3SPACE,YELLOW}J/N?";:GOSUB 5110 
 5080 IF A$="J" THENGOSUB 4940 
 5090 RETURN 
 5100 : 
 5110 REM ********TASTATURABFRAGE******** 
 5120 GET A$ 
 5130 IF A$="J" THENPRINT"{4LEFT,CYAN}J":GOTO 5160 
 5140 IF A$="N" THENPRINT"{2LEFT,CYAN}N":GOTO 5160 
 5150 GOTO 5120 
 5160 FOR T=1 TO1000:NEXT T:RETURN 
 5170 : 
 5180 REM *********F1 - ABFRAGE********** 
 5190 GET A$ 
 5200 IF A$=CHR$ (133) THENRETURN 
 5210 GOTO 5190 
 5220 : 
 5230 REM *******DISKETTE EINLEGEN******* 
 5240 PRINT"{DOWN,SPACE,YELLOW}ZU BEARBEITENDE DISKETTE EINLEGEN!" 
 5250 IF A=5OR A=6 THENRETURN 
 5260 FOR T=1 TO1000:NEXT T:RETURN 
 5270 : 
 5280 REM *******FERTIG .......F1******** 
 5290 PRINT"{SPACE,YELLOW}FERTIG{SPACE,BLACK}........................{SPACE,YELLOW}F1" 
 5300 GOSUB 5180:RETURN 
 5310 : 
 5320 REM ****DISK.-NAME UND ID LESEN**** 
 5330 SP=18:SE=0:BP=144:GOSUB 3810 
 5340 D$="":J=0 
 5350 FOR I=1 TO20:GET #3,A$:IF A$="" THENA$=CHR$ (0) 
 5360 IF J>0 THEN5380 
 5370 IF A$=CHR$ (160) THENJ=I-1:GOTO 5390 
 5380 D$=D$+A$ 
 5390 NEXT I 
 5400 DN$=" "+LEFT$ (D$,J)+"{2SPACE}":ID$=" "+RIGHT$ (D$,2) 
 5410 RETURN 
 5420 : 
 5430 END 
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →