More Questions again!

Area:    Quik_Bas
  Msg:    #184
 Date:    04-26-92 00:40 (Public) 
 From:    Rick Cooper              
 To:      Scott Wunsch             
 Subject: More Questions again!    
Hello Scott!

Thursday April 23 1992, Scott Wunsch writes to All:

 SW>     to find them all.
 SW>  3) I would like to copy files by reading as many as possible into memory
 SW>     before writing them (like XCOPY does).  If possible, I would like
 SW>     EMS/XMS support so I don't have to do that either.
 SW>  4) Is there any way to determine if a program is being run from a batch
 SW>     file?  If so, can you tell what batch file?




DECLARE FUNCTION GetHandle& (FileName$)
DECLARE SUB CloseHandle (Handle&)
DECLARE SUB GetSetTimeDate (Which%, Handle&, Time&, Date&)
'$INCLUDE: 'Qb.Bi'
DECLARE SUB fcopy (First$, Second$)



First$ = ""
Second$ = ""


FOR i = 1 TO LEN(COMMAND$)
        IF MID$(COMMAND$, i, 1) <> " " THEN
                First$ = First$ + MID$(COMMAND$, i, 1)
        ELSE
                i = i + 1
                EXIT FOR
        END IF

NEXT i

FOR j = i TO LEN(COMMAND$)

        IF MID$(COMMAND$, j, 1) <> " " THEN
                Second$ = Second$ + MID$(COMMAND$, j, 1)
        ELSE
                j = j + 1
                EXIT FOR
        END IF



NEXT j


CALL fcopy(First$, Second$)

SUB CloseHandle (Handle&)
'***************************************************************************
' This Function Closes the Handle Assigned by Dos... DO NOT try to use the
' QuickBasic Close Function... Must Be Closed By Dos Or The File Will
' Remain Open... Can Be Sticky
'***************************************************************************

DIM InRegs AS RegTypeX, OutRegs AS RegTypeX
InRegs.Ax = &H3E00
InRegs.Bx = Handle&
CALL InterruptX(&H21, InRegs, OutRegs)

END SUB

SUB fcopy (First$, Second$)
'====================================================================
'The Buffer Size Is Determined By Checking Availible String Space
'If The Availible Space Is <= File Size Or the Quick Basic Limitation
'On Strings Then The Largest Applicable buffer Is Used Resulting In
'The Fastest Possible Copy
'====================================================================

DIM buffer AS STRING

OPEN First$ FOR BINARY AS #1
OPEN Second$ FOR BINARY AS #2
place# = 0
famount# = FRE(buffer)
        buffer = ""
        maxrecord# = 32767
        IF maxrecord# > famount# THEN maxrecord# = famount#
        bestrecord# = LOF(1)

FOR i = 1 TO bestrecord#

        min# = LOF(1) - place#
        IF min# >= maxrecord# THEN              'Determine Best
                length# = maxrecord#            'Buffer Length
                buffer = SPACE$(length#)        'And Redimension
                GET #1, , buffer                'Buffer Accordingly
                PUT #2, , buffer                'And Increment The
                place# = place# + length#       'Location Pointer
                buffer = ""
        ELSEIF min# <= maxrecord# THEN          'Can We Get The
                length# = min#                  'Rest Of The File
                buffer = SPACE$(length#)        'All At Once?
                GET #1, , buffer                'If So Do It
                PUT #2, , buffer
                place# = place# + length#
                buffer = ""
        ELSE
        END IF
        IF place# >= bestrecord# THEN EXIT FOR  'If We Are At The
NEXT i                                          'End Leave

CLOSE
'**************************************************************************
' Now, Thanks To Tom Handlin's Suggestion, We Rest The New File's Time
' And Date Stamp To The Old File's Time And Date
'**************************************************************************
handle1& = GetHandle&(First$)
Handle2& = GetHandle&(Second$)

CALL GetSetTimeDate(0, handle1&, Time&, Date&)
CALL GetSetTimeDate(1, Handle2&, Time&, Date&)
CALL CloseHandle(handle1&)
CALL CloseHandle(Handle2&)
END SUB

FUNCTION GetHandle& (FileName$)
'***************************************************************************
' This routine simply gets a Dos file handle to pass to the function
' which sets the time and date of the destination file. DO NOT attempt
' to pass a QuickBasic File Number. it must be assigned and recognized by
' Dos for the function to succed
'***************************************************************************

DIM InRegs AS RegTypeX, OutRegs AS RegTypeX
OpenFile$ = FileName$ + CHR$(0)

InRegs.Ax = (256 * &H3D) + &H0
InRegs.Ds = VARSEG(OpenFile$)
InRegs.Dx = SADD(OpenFile$)
CALL InterruptX(&H21, InRegs, OutRegs)
GetHandle& = OutRegs.Ax

END FUNCTION

SUB GetSetTimeDate (Which%, Handle&, Time&, Date&)
'***************************************************************************
' This is the function Which actually gets and sets a file's Date Time stamp.
' Notice the handle& variable... this is ABSOULTLY essential for this
' function to succeed. I won't go into the time/date field encoding
' here... I will, however, demonstrait these later in a function to set the
' time or date or both to what ever you wish.
'****************************************************************************

DIM InRegs AS RegTypeX, OutRegs AS RegTypeX
IF Which% <> 1 THEN
        InRegs.Ax = (256 * &H57) + &H0
ELSE
        InRegs.Ax = (256 * &H57) + &H1
        InRegs.Cx = Time&
        InRegs.Dx = Date&
END IF

InRegs.Bx = Handle&
CALL InterruptX(&H21, InRegs, OutRegs)

IF Which% <> 1 THEN
        Time& = OutRegs.Cx
        Date& = OutRegs.Dx
END IF

END SUB

Just got back from a rather.. obnoxious batchlor's party.. 
this is the copy function you requested... I have the dir 
funtions later.


Rick

--- GoldED 2.40
 * Origin: Just For The Heck Of It II -=(Fort Wayne In)=- (FidoNet 1:236/16)

Outer Court
Echo Basic Postings

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