C 64
Kopieren von relativen
7/84, S. 132-134

Kopierprogramm für relative Files

Nicht jedes Kopierprogramm ist in der Lage, relative Dateien zu kopieren. Diese Arbeit übernimmt das folgende Programm. Aus Geschwindigkeitsgründen wurde es vollständig in Maschinensprache geschrieben.

Nach dem Starten des Programms erfolgen zunächst einige Abfragen:

  1. Sind alle Erweiterungen ausgeschaltet? Damit ist zum Beispiel DOS 5.1 oder Simons Basic gemeint. Wird die Frage mit ja beantwortet, so steht der gesamte freie RAM (zirka 60 KByte) als Puffer zum Kopieren zur Verfügung. Andernfalls wird die Pufferobergrenze auf $ 8000 (32768) gesetzt, so daß zirka 28 KByte zur Verfügung stehen. In beiden Fällen können jedoch beliebig große Files kopiert werden.

  2. Angabe der Gerätenummer und der Drivenummer von Ausgangslaufwerk und Ziellaufwerk. Zulässig sind die Gerätenummern 8 und 9 sowie die Drivenummern 0 und 1, bei anderen Nummern erscheint eine Fehlermeldung. Es wird die Gerätenummer 8 und die Drivenummer 0 auf dem Bildschirm vorgegeben, so daß bei Verwendung eines VC-1541-Laufwerks nur vier mal RETURN gedrückt werden muß.

  3. Angabe des Filenamen der zu kopierenden relativen Datei. Beim Filenamen für das neue File wird der alte Filenamen vorgegeben, er kann natürlich mit den üblichen Tasten geändert werden.

  4. Eingabe der maximalen Satzlänge des neuen Files. (Zulässig ist 1 bis 254). Sie muß nicht notwendigerweise mit der Satzlänge des alten Files übereinstimmen, sollte aber so lang sein wie der längste Satz im alten File. Andernfalls kommt es zu Datenverlust. Aus Geschwindigkeitsgründen wird übrigens der Fehlerkanal während des Kopierens nicht abgefragt, so daß der Fehler »overflow in record« nicht erkannt wird!

Nachdem alle Eingaben erledigt sind, beginnt das Kopieren. Das Programm gibt jeweils auf dem Bildschirm an, welche Diskette einzulegen ist, bei Diskettenwechsel und am Programmende wird zusätzlich ein Tonsignal erzeugt. Ist der Diskettenwechsel durchgeführt, so muß die SHIFT-Taste gedrückt werden, damit es weitergeht. Beim Arbeiten mit zwei Laufwerken oder einem Doppellaufwerk sowie beim Kopieren auf die gleiche Diskette kann die SHIFT-LOCK-Taste eingerastet werden, sobald alle benötigten Disketten im richtigen Laufwerk liegen. Es wird dann ohne Pause kopiert.

Ist das Kopieren beendet, startet das Programm von vorn. Es kann abgebrochen werden, indem als Gerätenummer »q« eingegeben wird. Der Rechner meldet sich dann wieder mit »READY« im Basic-Modus. Übrigens ist während des gesamten Kopierens (ab Eingabe der ersten Gerätenummer) die Stoptaste funktionsfähig. Wird sie gedrückt, so werden die offenen Files geschlossen und das Programm startet von vorn. Da während des Kopierens der augenblicklich kopierte Satz auf dem Bildschirm angezeigt wird, ist es damit auch möglich, ein File nur teilweise zu kopieren. Es ist normal, daß beim Schreiben die erste Satznummer erst nach längerer Zeit erscheint, da die Floppy das File zuerst einmal einrichten muß.

Folgende Fehlermeldungen werden vom Programm ausgegeben: ?? falsches Laufwerk oder Drive ??: Gerätenummer ungleich 8 oder 9 beziehungsweise Drivenummer ungleich 0 oder 1 ?? Unzulässige Satzlänge ??: Satzlänge größer 254 oder kleiner 1
?? Gerät nicht bereit ??: Das angesprochene Laufwerk ist nicht eingeschaltet oder angeschlossen.
Abbruch !: Die Stoptaste wurde gedrückt.
Zusätzlich werden Fehlermeldungen der Floppy ausgegeben, falls sie auftreten (Außer RECORD NOT PRESENT). FILE TOO LARGE bedeutet, daß kein Platz mehr auf der Diskette ist.

Arbeitsweise des Programms:

Die Abfrage der Stoptaste geschieht mit Hilfe der Interruptroutine des Rechners, die 60 mal pro Sekunde durchlaufen wird und automatisch die Tastatur abfragt. In diese Interruptroutine wird eine zusätzliche Routine eingebunden, welche die Stoptaste abfragt. Ist die Stoptaste gedrückt, so wird zuerst ein eventuelles Tonsignal ausgeschaltet und alle Files werden geschlossen. Außerdem wird der Stackpointer zurückgesetzt, da der Abbruch ja in jeder Unterprogrammebene erfolgen kann. Danach erfolgt ein Neustart. Als Zwischenspeicher für die Filenamen wird der Kassettenpuffer, als Arbeitsbereich der Speicher für Sprite 11 (ab Adresse 704) verwendet. Die Sätze des Files werden in kompakter, sequentieller Form im RAM des Rechners untergebracht. Es wird zunächst die aktuelle Satzlänge +1 gespeichert und danach die Bytes des Satzes. Dadurch nehmen kurze Sätze auch nur wenig Platz im RAM ein während sie auf der Diskette den gesamten Platz entsprechend der maximalen Satzlänge des Files belegen).

Eingabe des Programms:

Der Basic-Lader bildet nach jeweils fünf DATA-Zeilen eine Prüfsumme, so daß nahezu alle Eingabefehler erkannt werden. Nicht erkannt werden vergessene Nullen und überschüssige Kommata. Wenn alle Prüfsummen korrekt sind, fordert der Lader zum Einlegen einer Diskette auf. Das Programmfile »rel kopierer« wird dann direkt auf Diskette erzeugt. Das erzeugte Programm kann dann wie ein Basicprogramm geladen, kopiert und mit RUN gestartet werden.

(Bernward Bretthauer)
0 rem ladeprogramm fuer relativ-kopierer
1 rem erzeugt maschinenprogramm auf diskette
2 rem bernward bretthauer
3 rem baurat-gerber-str. 22
4 rem 3400 goettingen
5 rem tel. 0551/58484
6 rem
10 rem test auf  richtige pruefsummen
20 reada:if a>1000 then 100
30 if a>=0 then s=s+a:goto20
35 b=b+1
40 if s<>-a then print"pruefsummenfehler in block "b:f=1:s=0:goto20
50 print"block "b"ok !":s=0:goto20
99 rem erzeugung des maschinenprogramms
100 if f then print"datas fehlerhaft!":end
110 print"diskette einlegen und <@> druecken"
120 geta$:if a$<>"@" then 120
130 print"programm wird erzeugt !"
140 open2,8,2,"rel kopierer,p,w":restore
150 print#2,chr$(1)chr$(8);:rem ladeadresse
160 read a:if a<0 then160
170 if a<1000 then print#2,chr$(a);:goto160
180 close2:end
1000 data11,8,10,0,158,50,48,54,49,0,0,0,165,1,133,57,169,255,141,199,2,169
1010 data126,160,12,32,252,11,32,228,255,201,74,240,9,201,78,208,245,169,127
1020 data141,199,2,169,178,160,12,32,174,11,141,192,2,120,173,20,3,201,13
1030 data240,3,141,200,2,173,21,3,201,12,240,3,141,201,2,169,13,141,20,3,169
1040 data12,141,21,3,88,169,12,160,13,32,222,11,141,52,3,169,21,160,13,32
1050 data174,11,141,194,2,169,39,160,13,32,222,11,141,134,3,169,58,141,53
1051 data-11722:rem pruefsumme block 1
1060 data3,141,135,3,169,48,160,13,32,252,11,160,2,32,207,255,201,13,240,6
1070 data153,52,3,200,208,243,192,2,240,239,169,44,153,52,3,200,169,76,153
1080 data52,3,200,140,193,2,169,79,160,13,32,252,11,160,4,204,193,2,240,9
1090 data185,50,3,32,12,225,200,208,242,136,136,136,136,169,157,32,12,225
1100 data136,208,250,160,2,32,207,255,201,13,240,6,153,134,3,200,208,243,192
1101 data-11891:rem pruefsumme block 2
1110 data2,240,239,169,44,153,134,3,200,169,76,153,134,3,200,169,44,153,134
1120 data3,200,140,195,2,169,110,160,13,32,252,11,169,0,133,2,32,207,255,201
1130 data13,240,24,56,233,48,48,29,201,10,176,25,160,10,24,101,2,176,18,136
1140 data208,249,133,2,76,252,8,165,2,240,11,201,255,208,17,240,5,169,0,32
1150 data242,11,169,224,160,13,32,252,11,76,241,8,172,195,2,153,134,3,238
1151 data-11244:rem pruefsumme block 3
1160 data195,2,169,0,133,2,133,66,133,68,169,1,133,65,133,67,169,1,160,14
1170 data32,252,11,173,141,2,201,1,208,249,169,0,141,4,212,32,143,9,32,54
1180 data11,169,56,160,14,32,252,11,173,141,2,201,1,208,249,169,0,141,4,212
1190 data32,77,10,32,54,11,165,2,240,202,169,108,160,14,32,252,11,169,179
1200 data160,12,76,49,8,32,64,12,169,2,174,192,2,160,2,32,186,255,173,193
1201 data-9957:rem pruefsumme block 4
1210 data2,162,52,160,3,32,189,255,32,192,255,32,80,11,240,8,104,104,32,53
1220 data12,76,136,9,165,64,205,199,2,208,4,32,53,12,96,162,15,32,201,255
1230 data169,80,32,12,225,169,2,32,12,225,165,65,32,12,225,165,66,32,12,225
1240 data32,204,255,32,80,11,240,8,169,255,133,2,32,53,12,96,169,32,32,12
1250 data225,165,66,166,65,32,205,189,169,13,32,12,225,169,145,32,12,225,162
1251 data-10061:rem pruefsumme block 5
1260 data2,32,198,255,169,0,133,144,160,0,200,32,207,255,162,52,120,134,1
1270 data145,63,166,57,134,1,88,165,144,240,236,200,162,52,120,134,1,152,160
1280 data0,145,63,166,57,134,1,88,24,101,63,133,63,169,0,101,64,133,64,32
1290 data204,255,169,1,24,101,65,133,65,169,0,101,66,133,66,76,182,9,32,64
1300 data12,169,2,174,194,2,160,2,32,186,255,173,195,2,162,134,160,3,32,189
1301 data-10430:rem pruefsumme block 6
1310 data255,32,192,255,32,80,11,240,3,76,174,9,162,15,32,201,255,169,80,32
1320 data12,225,169,2,32,12,225,165,65,56,233,1,8,32,12,225,165,66,40,233
1330 data0,32,12,225,32,204,255,32,80,11,162,2,32,201,255,169,255,32,12,225
1340 data32,204,255,32,80,11,240,3,76,174,9,165,68,197,66,208,10,165,67,197
1350 data65,208,4,32,53,12,96,162,15,32,201,255,169,80,32,12,225,169,2,32
1351 data-10626:rem pruefsumme block 7
1360 data12,225,165,67,32,12,225,165,68,32,12,225,32,204,255,169,32,32,12
1370 data225,165,68,166,67,32,205,189,169,13,32,12,225,169,145,32,12,225,160
1380 data0,162,52,120,134,1,177,63,166,57,134,1,88,133,69,162,2,32,201,255
1390 data160,1,162,52,120,134,1,177,63,166,57,134,1,88,32,12,225,200,196,69
1400 data208,236,24,152,101,63,133,63,169,0,101,64,133,64,32,204,255,169,1
1401 data-10518:rem pruefsumme block 8
1410 data24,101,67,133,67,169,0,101,68,133,68,76,170,10,169,40,141,1,212,169
1420 data15,141,5,212,169,0,141,6,212,169,15,141,24,212,169,17,141,4,212,96
1430 data162,15,32,198,255,32,207,255,141,197,2,201,48,240,53,32,207,255,141
1440 data198,2,201,48,208,16,173,197,2,201,53,208,9,32,207,255,201,13,208
1450 data249,240,27,169,13,32,12,225,173,197,2,32,12,225,173,198,2,32,12,225
1451 data-11375:rem pruefsumme block 9
1460 data32,207,255,32,12,225,201,13,208,246,32,204,255,173,197,2,201,48,96
1470 data120,173,200,2,141,20,3,173,201,2,141,21,3,88,108,2,160,32,252,11
1480 data32,207,255,72,169,0,141,4,212,32,242,11,104,201,81,240,219,201,56
1490 data240,20,201,57,240,16,104,104,169,142,160,13,32,252,11,169,251,160
1500 data12,76,49,8,56,233,48,96,32,252,11,32,207,255,72,32,242,11,104,201
1501 data-11341:rem pruefsumme block 10
1510 data48,240,4,201,49,208,217,96,201,13,240,251,32,207,255,76,242,11,133
1520 data34,132,35,160,0,177,34,240,6,32,12,225,200,208,246,96,32,225,255
1530 data240,3,76,49,234,169,49,141,20,3,169,234,141,21,3,88,169,0,141,4,212
1540 data32,53,12,162,248,154,169,210,160,13,32,252,11,76,211,11,169,2,32
1550 data195,255,169,15,32,195,255,96,169,15,174,192,2,160,15,32,186,255,169
1551 data-11829:rem pruefsumme block 11
1560 data0,32,189,255,32,192,255,162,15,32,201,255,176,24,169,73,32,12,225
1570 data32,204,255,169,148,133,63,169,14,133,64,169,136,160,14,32,252,11
1580 data96,32,204,255,169,181,160,13,32,252,11,76,21,12,8,14,147,13,83,73
1590 data78,68,32,65,76,76,69,32,197,82,87,69,73,84,69,82,85,78,71,69,78,32
1600 data65,85,83,45,13,71,69,83,67,72,65,76,84,69,84,32,40,74,47,78,41,63
1601 data-9399:rem pruefsumme block 12
1610 data13,0,147,13,203,79,80,73,69,82,69,78,32,86,79,78,32,82,69,76,65,84
1620 data73,86,69,78,32,198,73,76,69,83,13,13,40,67,41,32,194,69,82,78,87
1630 data65,82,68,32,194,82,69,84,84,72,65,85,69,82,13,13,32,32,32,32,32,32
1640 data32,32,32,49,57,56,52,13,13,13,86,79,78,32,32,204,65,85,70,87,69,82
1650 data75,32,56,157,0,196,82,73,86,69,32,48,157,0,13,78,65,67,72,32,204
1651 data-7405:rem pruefsumme block 13
1660 data65,85,70,87,69,82,75,32,56,157,0,196,82,73,86,69,32,48,157,0,13,13
1670 data198,73,76,69,78,65,77,69,78,32,68,69,83,13,65,76,84,69,78,32,198
1680 data73,76,69,83,32,63,32,0,13,13,198,73,76,69,78,65,77,69,78,32,68,69
1690 data83,13,78,69,85,69,78,32,198,73,76,69,83,32,63,32,0,13,13,211,65,84
1700 data90,76,65,69,78,71,69,32,68,69,83,32,78,69,85,69,78,32,198,73,76,69
1701 data-7751:rem pruefsumme block 14
1710 data83,32,63,32,0,17,17,13,63,63,32,70,65,76,83,67,72,69,83,32,204,65
1720 data85,70,87,69,82,75,32,79,68,69,82,32,196,82,73,86,69,32,63,63,13,0
1730 data13,13,63,63,32,199,69,82,65,69,84,32,78,73,67,72,84,32,66,69,82,69
1740 data73,84,32,63,63,13,0,13,13,193,66,66,82,85,67,72,32,33,13,13,0,13
1750 data13,63,63,32,213,78,90,85,76,65,69,83,83,73,71,69,32,211,65,84,90
1751 data-7081:rem pruefsumme block 15
1760 data76,65,69,78,71,69,32,63,63,13,0,13,13,194,73,84,84,69,32,207,82,71
1770 data73,78,65,76,68,73,83,75,69,84,84,69,32,69,73,78,76,69,71,69,78,13
1780 data85,78,68,32,211,200,201,198,212,32,68,82,85,69,67,75,69,78,32,33
1790 data13,0,13,13,194,73,84,84,69,32,218,73,69,76,68,73,83,75,69,84,84,69
1800 data32,69,73,78,76,69,71,69,78,13,85,78,68,32,211,200,201,198,212,32
1801 data-8582:rem pruefsumme block 16
1810 data68,82,85,69,67,75,69,78,32,33,13,0,13,13,13,196,65,83,32,198,73,76
1820 data69,32,73,83,84,32,75,79,80,73,69,82,84,32,33,13,13,0,147,211,65,84
1830 data90,32,206,82,46,13,13
1851 data-3428:rem pruefsumme block 17
19000 data 10000:rem endekennzeichen
Listing. Kopieren von relativen Files
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →