home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Hex_Editor207856872007.psc / API_Functions.bas < prev    next >
BASIC Source File  |  2006-12-01  |  4KB  |  113 lines

  1. Attribute VB_Name = "API_Functions"
  2. Option Explicit
  3.  
  4. Const MOVEFILE_REPLACE_EXISTING = &H1
  5. Const FILE_ATTRIBUTE_TEMPORARY = &H100
  6. Const FILE_BEGIN = 0
  7. Const FILE_SHARE_READ = &H1
  8. Const FILE_SHARE_WRITE = &H2
  9. Const CREATE_NEW = 1
  10. Const OPEN_EXISTING = 3
  11. Const GENERIC_READ = &H80000000
  12. Const GENERIC_WRITE = &H40000000
  13.  
  14. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  15.  
  16. Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
  17. Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
  18. Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
  19. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  20. Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
  21. Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
  22. Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long
  23.  
  24. Public Sub API_OpenFile(ByVal FileName As String, ByRef FileNumber As Long, ByRef FileSize As Currency)
  25. Dim FileH As Long
  26. Dim Ret As Long
  27. On Error Resume Next
  28. FileH = CreateFile(FileName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0, 0)
  29. If Err.Number > 0 Then
  30.     Err.Clear
  31.     FileNumber = -1
  32. Else
  33.     FileNumber = FileH
  34.     Ret = SetFilePointer(FileH, 0, 0, FILE_BEGIN)
  35.     API_FileSize FileH, FileSize
  36. End If
  37. On Error GoTo 0
  38. End Sub
  39. Public Sub API_FileSize(ByVal FileNumber As Long, ByRef FileSize As Currency)
  40.     Dim FileSizeL As Long
  41.     Dim FileSizeH As Long
  42.     FileSizeH = 0
  43.     FileSizeL = GetFileSize(FileNumber, FileSizeH)
  44.     Long2Size FileSizeL, FileSizeH, FileSize
  45. End Sub
  46.  
  47. Public Sub API_ReadFile(ByVal FileNumber As Long, ByVal Position As Currency, ByRef BlockSize As Long, ByRef Data() As Byte)
  48. Dim PosL As Long
  49. Dim PosH As Long
  50. Dim SizeRead As Long
  51. Dim Ret As Long
  52. Size2Long Position, PosL, PosH
  53. Ret = SetFilePointer(FileNumber, PosL, PosH, FILE_BEGIN)
  54. Ret = ReadFile(FileNumber, Data(0), BlockSize, SizeRead, 0&)
  55. BlockSize = SizeRead
  56. End Sub
  57.  
  58. Public Sub API_CloseFile(ByVal FileNumber As Long)
  59. Dim Ret As Long
  60. Ret = CloseHandle(FileNumber)
  61. End Sub
  62.  
  63. Public Sub API_WriteFile(ByVal FileNumber As Long, ByVal Position As Currency, ByRef BlockSize As Long, ByRef Data() As Byte)
  64. Dim PosL As Long
  65. Dim PosH As Long
  66. Dim SizeWrit As Long
  67. Dim Ret As Long
  68. Size2Long Position, PosL, PosH
  69. Ret = SetFilePointer(FileNumber, PosL, PosH, FILE_BEGIN)
  70. Ret = WriteFile(FileNumber, Data(0), BlockSize, SizeWrit, 0&)
  71. BlockSize = SizeWrit
  72. End Sub
  73.  
  74. Private Sub Size2Long(ByVal FileSize As Currency, ByRef LongLow As Long, ByRef LongHigh As Long)
  75. '&HFFFFFFFF unsigned = 4294967295
  76. Dim Cutoff As Currency
  77. Cutoff = 2147483647
  78. Cutoff = Cutoff + 2147483647
  79. Cutoff = Cutoff + 1 ' now we hold the value of 4294967295 and not -1
  80. LongHigh = 0
  81. Do Until FileSize < Cutoff
  82.     LongHigh = LongHigh + 1
  83.     FileSize = FileSize - Cutoff
  84. Loop
  85. If FileSize > 2147483647 Then
  86.     LongLow = -CLng(Cutoff - (FileSize - 1))
  87. Else
  88.     LongLow = CLng(FileSize)
  89. End If
  90. End Sub
  91.  
  92. Private Sub Long2Size(ByVal LongLow As Long, ByVal LongHigh As Long, ByRef FileSize As Currency)
  93. Dim Cutoff As Currency
  94. Cutoff = 2147483647
  95. Cutoff = Cutoff + 2147483647
  96. Cutoff = Cutoff + 1
  97. FileSize = Cutoff * LongHigh
  98. If LongLow < 0 Then
  99.     FileSize = FileSize + (Cutoff + (LongLow + 1))
  100. Else
  101.     FileSize = FileSize + LongLow
  102. End If
  103. End Sub
  104.  
  105. Public Sub API_SetEndOfFile(ByVal FileNumber As Long, ByVal Position As Currency)
  106. Dim PosL As Long
  107. Dim PosH As Long
  108. Dim Ret As Long
  109. Size2Long Position, PosL, PosH
  110. Ret = SetFilePointer(FileNumber, PosL, PosH, FILE_BEGIN)
  111. Ret = SetEndOfFile(FileNumber)
  112. End Sub
  113.