BBS: Inland Empire Archive Date: 11-02-92 (19:59) Number: 373 From: ERIC B. FORD Refer#: NONE To: DICK DENNISON Recvd: NO Subj: Credits in a program! Conf: (2) Quik_Bas
> EBF>FastCopy (copies files ten times faster than shell) > JG> I don't know who wrote that one, but I would be *really* interested in > JG> getting a copy of it! Is there a BBS I can download it from? > > 'Don't know if this is the one Eric is talking about, > but it's real > fast: > 'Don't know where this originally came from > 'but I modified it 9/92 - Dick Dennison > 'COPYFILE.bas - public domain - might be Mike Welch's > code > DECLARE FUNCTION GetHandle& (FileName$) > DECLARE SUB CloseHandle (Handle&) > DECLARE SUB GetSetTimeDate (Which%, Handle&, Time&, > Date&) Well, I don't think so, is that any better than this? '$INCLUDE: 'qb.bi' 'needed for interrupt/x '$DYNAMIC DEFINT A-Z DECLARE FUNCTION FastCopy& (sourcefile$, destfile$, DateFlag%) CONST FALSE = 0 CONST TRUE = NOT FALSE CLS LINE INPUT "File to be copied >", infile$ LINE INPUT "Destination name >", outfile$ IF infile$ = "" OR outfile$ = "" THEN END result& = FastCopy(infile$, outfile$, TRUE) 'get any error code IF result& < 0 THEN PRINT "Error code is:"; result& ELSE PRINT "Bytes Copied:"; result& END IF ' Far String Version FUNCTION FastCopy& (sourcefile$, destfile$, DateFlag AS INTEGER) REDIM buffer(0 TO 16383) AS LONG 'far data 64k bytes long DIM reg AS RegType 'our regs for interrupt call DIM regx AS RegTypeX 'ditto for interruptx DIM inhandle AS INTEGER DIM outhandle AS INTEGER DIM intime AS INTEGER 'source file time/date stamp DIM outtime AS INTEGER infile$ = sourcefile$ + CHR$(0) 'append a null to filenames outfile$ = destfile$ + CHR$(0) BytesRead& = 0 regx.ax = &H3D00 'open file regx.dx = SADD(infile$) 'filename regx.ds = VARSEG(infile$) CALL INTERRUPTX(&H21, regx, regx) IF regx.flags AND 1 THEN 'check carry flag 'PRINT "error opening "; infile$ 'for debugging FastCopy& = -1 'error code -1 = open infile error EXIT FUNCTION 'bail out END IF inhandle = regx.ax 'save handle reg.bx = inhandle 'put into bx reg.ax = &H5700 'get date stamp info CALL INTERRUPT(&H21, reg, reg) intime = reg.cx 'save em indate = reg.dx regx.ax = &H3C00 'creat output file regx.dx = SADD(outfile$) 'filename regx.ds = VARSEG(outfile$) regx.cx = 0 CALL INTERRUPTX(&H21, regx, regx) IF regx.flags AND 1 THEN 'check carry flag 'PRINT "error opening "; outfile$ 'for debugging GOSUB CloseInfile FastCopy& = -2 'error opening outfile = -2 EXIT FUNCTION END IF outhandle = regx.ax 'save handle DO regx.ax = &H3F00 regx.bx = inhandle regx.cx = &HFFFF 'do up to 65535 at a time regx.dx = &H0 'starting offset assume at 0 regx.ds = VARSEG(buffer(0)) 'segment of buffer CALL INTERRUPTX(&H21, regx, regx) IF regx.flags AND 1 THEN 'PRINT "error reading input file" 'for debugging GOSUB CloseInfile GOSUB CloseOutfile FastCopy& = -3 'read error = -3 EXIT DO ELSE IF regx.ax <> 0 THEN 'something to write ? '-------------------------------------------------------- 'this area keeps a running total of bytes copied IF regx.ax < 0 THEN BytesRead& = BytesRead& + regx.ax + &H10000 ELSE BytesRead& = BytesRead& + regx.ax END IF '--------------------------------------------------------- regx.cx = regx.ax 'number of bytes to write regx.dx = 0 'start of buffer regx.bx = outhandle regx.ax = &H4000 ' CALL INTERRUPTX(&H21, regx, regx) IF (regx.flags AND 1) OR (regx.ax <> regx.cx) THEN 'PRINT "error writing outfile" 'for debugging GOSUB CloseInfile GOSUB CloseOutfile FastCopy& = -4 'error writing file = -4 EXIT DO END IF ELSE IF DateFlag THEN reg.ax = &H5701 reg.bx = outhandle reg.cx = intime reg.dx = indate CALL INTERRUPT(&H21, reg, reg) END IF GOSUB CloseInfile GOSUB CloseOutfile FastCopy& = BytesRead& 'no hits, no runs, no errors EXIT DO END IF END IF LOOP EXIT FUNCTION CloseInfile: reg.ax = &H3E00 'close file reg.bx = inhandle 'input file CALL INTERRUPT(&H21, reg, reg) RETURN CloseOutfile: reg.ax = &H3E00 'close file reg.bx = outhandle 'output file CALL INTERRUPT(&H21, reg, reg) RETURN END FUNCTION --- * Origin: Eric Ford (1:3632/1.6)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET