'**************************************************************************** ' ' FileCopy direkt in PowerBASIC 2.1/3.0/3.2 ' ' entwickelt von / developed by : Thomas Gohel ' Fido : Thomas Gohel@2:2410/330.1 ' InterNet: author@pbsound.snafu.de ' Homepage: http://www.snafu.de/~pbsound/ ' ' Žnderungen: 1.3.97 by : Marvin C. Stahl ' Internet: mcs@tbx.berlinet.de ' ' 1. Die Routine kopiert jetzt ERHEBLICH schneller! ' 2. Das Kopieren erfolgt jetzt Byte-genau ' 3. Fortschrittanzeige durch Prozentanzeige + Fortschrittbalken ' 4. Warnung/Abbruch falls die Quelldatei nicht vorhanden ist ' 5. Leere Quelldateien werden nicht kopiert (mit Meldung) ' 6. Warnung falls die Zieldatei bereits existiert und M”glichkeit ' das Kopieren abzubrechen oder fortzufahren (per Tastendruck) ' 7. Dokumentation der Routine ' '**************************************************************************** CLS CALL BCopy("C:\COMMAND.COM","C:\COMMAND.NEW") PRINT "Fertig" END ' SUB BCopy(Quelldatei$, ZielDatei$) IF LEN(DIR$(QuellDatei$))=0 THEN ' Abbruch wenn die Quelldatei PRINT "Quelldatei unbekannt!" ' nicht vorhanden ist! EXIT SUB END IF ' QuellHandle%=FREEFILE OPEN "B", QuellHandle%, QuellDatei$ ' Quelldatei ”ffnen IF LOF(QuellHandle%)=0 THEN ' Abbruch wenn die Quelldatei CLOSE QuellHandle% ' leer ist (0 Bytes L„nge) PRINT "Quelldatei ist leer!" EXIT SUB END IF ' IF LEN(DIR$(Zieldatei$))>0 THEN ' Zieldatei bereits vorhanden? PRINT "Zieldatei existiert! (A)bbruch oder (W)eiter? "; LOCATE ,,1 ' Cursor anschalten Taste$="" WHILE Taste$<>"A" AND Taste$<>"W" ' Warten bis 'A' oder 'W' gedrckt Taste$=UCASE$(INKEY$) ' wird WEND LOCATE ,,0 ' Cursor ausschalten PRINT Taste$ ' Gedrckte Taste ausgeben PRINT IF Taste$="A" THEN ' Quelldatei schlieáen und Abbruch CLOSE QuellHandle% ' falls 'A' gefrckt wurde EXIT SUB END IF END IF ZielHandle%=FREEFILE OPEN "B", ZielHandle%, ZielDatei$ ' Zieldatei ”ffnen ' PRINT "Quelldatei : ";Quelldatei$ ' Infomaske ausgeben PRINT "Zieldatei : ";Zieldatei$ ' " PRINT "Status : "; ' " Position%=POS(0) ' Schreibposition fr Balkenanzeige PRINT STRING$(25,176); ' 'Grauen' Balken anzeigen ' Zeiger& = 0 ' Z„hler fr kopierte Byteanzahl Teile%=FIX(LOF(QuellHandle%)/32000) ' Quelle hat Teile%*32000 Bytes Rest%=LOF(QuellHandle%) MOD 32000 ' plus Rest% Bytes = Gesamtl„nge Prozent&=LOF(QuellHandle%)/100 ' Wieviel Bytes entsprechen 1% Chunk&=Prozent&*4 ' 1 Balkenzeichen entspricht 4% ' IF Teile%>0 THEN ' Datei gr”áer als 31999 Bytes? FOR Copy%=1 TO Teile% ' Dann Teile% Mal 32000 Bytes kopieren GET$ QuellHandle%, 32000, Copy$ ' 32000 Bytes aus Quelldatei lesen PUT$ ZielHandle%, Copy$ ' 32000 Bytes in Zieldatei schreiben INCR Zeiger&, 32000 ' Kopierte Bytes um 32000 erh”hen LOCATE ,Position%-9 ' Kopierte Prozente anzeigen PRINT USING"(###%)";Zeiger&/Prozent&; LOCATE ,Position% ' Fortschrittsbalken anzeigen PRINT STRING$(Zeiger&/Chunk&,219); NEXT Copy% END IF ' IF Rest%>0 THEN ' Restliche Bytes vorhanden? GET$ QuellHandle%, Rest%, Copy$ ' Dann Rest% Bytes von Quelle lesen PUT$ ZielHandle%,Copy$ ' und in die Zieldatei kopieren INCR Zeiger&, Rest% ' Kopierte Bytes um Rest% erh”hen LOCATE ,Position%-9 ' Kopierte Prozente anzeigen PRINT USING"(###%)";Zeiger&/Prozent&; LOCATE ,Position% ' Fortschrittsbalken anzeigen PRINT STRING$(Zeiger&/Chunk&,219); END IF ' PRINT CLOSE QuellHandle% ' Quelldatei schlieáen CLOSE ZielHandle% ' Zieldatei schlieáen END SUB