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:
-
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.
-
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ß.
-
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.
-
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