BBS: Inland Empire Archive Date: 07-26-92 (18:15) Number: 100 From: MATT HART Refer#: NONE To: DEREK LYONS Recvd: NO Subj: FILECOPY FROM PDS Conf: (2) Quik_Bas
DL> Does anyone have a working filecopy routine for PDS that retains DL> the time/date stamp? I've been fiddling with the QB version that Set the time/date when finished: ' FILEDATE.BAS by Matt Hart ' ' Gets or sets a file date/time ' ' GetFileDateTime returns the Date in MM-DD-YYYY format ' and the Time in HH:MM:SS ' SetFileDateTime expects the Date and Time in the same formats '$INCLUDE:'\BC71\QBX.BI' ' Use your path to QB or QBX.BI DEFINT A-Z ' ------------------------- Sample code F$ = LTRIM$(RTRIM$(COMMAND$)) CALL GetFileDateTime(F$,Dat$,Tim$,Ecode) IF NOT Ecode THEN PRINT F$;" date is ";Dat$ PRINT F$;" time is ";Tim$ ELSE PRINT "1 Error = ";Ecode END ENDIF NewTim$ = "01:01:02" NewDat$ = "02-02-1980" CALL SetFileDateTime(F$,NewDat$,NewTim$,Ecode) IF Ecode THEN PRINT "2 Error = ";Ecode END ENDIF CALL GetFileDateTime(F$,Dat$,Tim$,Ecode) IF Ecode THEN PRINT "3 Error = ";Ecode END ENDIF PRINT F$;" new date is ";Dat$ PRINT F$;" new time is ";Tim$ CALL SetFileDateTime(F$,Dat$,Tim$,Ecode) IF Ecode THEN PRINT "4 Error = ";Ecode END ENDIF END ' ------------------------------------ SUB GetFileDateTime(F$,Dat$,Tim$,Ecode) Ecode = 0 DIM InRegs AS RegTypeX DIM OutRegs AS RegTypeX InRegs.AX = &H3D00 ' Open file function DIM FileName AS STRING * 128 ' Use fixed length FileName = F$+CHR$(0) ' Must be ASCIIZ string InRegs.DS = VARSEG(FileName) ' Fixed length makes these InRegs.DX = VARPTR(FileName) ' come out right CALL InterruptX(&H21, InRegs, OutRegs) ' Open the file IF NOT OutRegs.Flags THEN ' No error Handle = OutRegs.AX ' Save DOS file handle InRegs.AX = &H5700 ' Get date/time function InRegs.BX = Handle CALL InterruptX(&H21, InRegs, OutRegs) HMS& = OutRegs.CX ' Use long integer for IF HMS& < 0& THEN HMS& = 65536& + HMS& ' positive numbers Hours = HMS& \ 2048& ' Hours is first 5 bits Minutes = (HMS& AND 2047&) \ 31& ' Minutes is next 6 bits Seconds = HMS& AND 31& ' Seconds is last 5 bits H$ = LTRIM$(STR$(Hours)) M$ = LTRIM$(STR$(Minutes)) : IF LEN(M$)=1 THEN M$="0"+M$ S$ = LTRIM$(STR$(Seconds)) : IF LEN(S$)=1 THEN S$="0"+S$ Tim$ = H$+":"+M$+":"+S$ YMD& = OutRegs.DX ' Long int here too IF YMD& < 0 THEN YMD& = 65536& + YMD& ' Convert to + if needed Year = 1980& + YMD& \ 512& ' Year is first 7 bits Month = (YMD& AND 511&) \ 31& ' Month is next 4 bits Day = YMD& AND 31& ' Day is last 5 bits Y$ = LTRIM$(STR$(Year)) M$ = LTRIM$(STR$(Month)) D$ = LTRIM$(STR$(Day)) : IF LEN(D$)=1 THEN D$="0"+D$ Dat$ = M$+"-"+D$+"-"+Y$ InRegs.AX = &H3E00 ' Close file function InRegs.BX = Handle CALL InterruptX(&H21, InRegs, OutRegs) ' Close it ELSE Ecode = OutRegs.Flags ' Otherwise return error flags ENDIF END SUB SUB SetFileDateTime(F$,Dat$,Tim$,Ecode) Ecode = 0 DIM InRegs AS RegTypeX DIM OutRegs AS RegTypeX InRegs.AX = &H3D00 DIM FileName AS STRING * 128 FileName = F$+CHR$(0) InRegs.DS = VARSEG(FileName) InRegs.DX = VARPTR(FileName) CALL InterruptX(&H21, InRegs, OutRegs) IF NOT OutRegs.Flags THEN Handle = OutRegs.AX InRegs.AX = &H5701 InRegs.BX = Handle Hours& = VAL(LEFT$(Tim$,2)) * 2048& Minutes& = VAL(MID$(Tim$,4,2)) * 32& Seconds& = VAL(RIGHT$(Tim$,2))\2 HMS& = Hours& + Minutes& + Seconds& IF HMS& > 65536& THEN InRegs.CX = 65536 - HMS& ELSE InRegs.CX = HMS& ENDIF Year& = (VAL(RIGHT$(Dat$,4))-1980&) * 512& Month& = VAL(LEFT$(Dat$,2)) * 32& Day& = VAL(MID$(Dat$,4,2)) YMD& = Year& + Month& + Day& IF YMD& > 65536& THEN InRegs.DX = 65536 - YMD& ELSE InRegs.DX = YMD& ENDIF CALL InterruptX(&H21, InRegs, OutRegs) InRegs.AX = &H3E00 InRegs.BX = Handle CALL InterruptX(&H21, InRegs, OutRegs) ELSE Ecode = OutRegs.Flags ENDIF END SUB --- * Origin: Midnight Micro! V.32/REL (918)451-3306 (1:170/600)
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