159 lines
3.9 KiB
VB.net
159 lines
3.9 KiB
VB.net
Imports System
|
|
Imports System.IO
|
|
|
|
Public Class ISOTools
|
|
|
|
Public Function getCDfile(ByVal ISOname As String, ByVal StartSector As Integer, ByVal FileSize As Integer)
|
|
|
|
|
|
Dim fileArr = New List(Of Byte)
|
|
Dim fs As New FileStream(ISOname, FileMode.Open, FileAccess.Read)
|
|
Dim br As New BinaryReader(fs)
|
|
|
|
|
|
If Not Form1.Mode2352.Checked Then
|
|
|
|
|
|
Dim SectorsToRead As Integer = FileSize \ 2048
|
|
If FileSize Mod 2048 > 0 Then SectorsToRead += 1
|
|
|
|
Dim bytesToread = 2048
|
|
|
|
For a = StartSector To SectorsToRead + StartSector - 1
|
|
|
|
Dim bytepos = a * &H930 + 24
|
|
br.BaseStream.Position = bytepos
|
|
fileArr.AddRange(br.ReadBytes(2048))
|
|
|
|
Next
|
|
|
|
|
|
|
|
Else
|
|
|
|
''''''''''READ RAW FILE WITH 2352 MODE!
|
|
|
|
br.BaseStream.Position = StartSector * &H930
|
|
fileArr.AddRange(br.ReadBytes(FileSize))
|
|
|
|
|
|
End If
|
|
|
|
br.Dispose()
|
|
fs.Dispose()
|
|
|
|
Return fileArr
|
|
|
|
End Function
|
|
|
|
|
|
Public Function saveCDfile(ByVal ISOname As String, ByVal StartSector As Integer, ByVal FileSize As Integer, ByRef bytes As Byte())
|
|
Try
|
|
|
|
|
|
Dim fs As New FileStream(ISOname, FileMode.Open, FileAccess.Write)
|
|
Dim br As New BinaryWriter(fs)
|
|
|
|
If Not Form1.Mode2352.Checked Then
|
|
|
|
|
|
|
|
Dim SectorsToWrite As Integer = FileSize \ 2048
|
|
If FileSize Mod 2048 > 0 Then
|
|
SectorsToWrite += 1
|
|
ReDim Preserve bytes(FileSize + (2048 - (FileSize Mod 2048)))
|
|
End If
|
|
|
|
Dim bytecounter = 0
|
|
|
|
For a = StartSector To SectorsToWrite + StartSector - 1
|
|
|
|
Dim bytepos = a * &H930 + 24
|
|
|
|
br.BaseStream.Position = bytepos
|
|
|
|
br.Write(bytes, bytecounter, 2048)
|
|
bytecounter += 2048
|
|
|
|
Next
|
|
|
|
|
|
|
|
Else ''''''''''READ RAW FILE WITH 2352 MODE!
|
|
|
|
|
|
|
|
|
|
br.BaseStream.Position = StartSector * &H930
|
|
br.Write(bytes, 0, FileSize)
|
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
br.Dispose()
|
|
fs.Dispose()
|
|
|
|
|
|
Catch ex As Exception
|
|
MsgBox("Error! Exception: " & vbCrLf & ex.ToString, MsgBoxStyle.Critical)
|
|
End Try
|
|
End Function
|
|
|
|
Public Sub UpdateFileListTable(ByVal ISOname As String, ByRef fileInf As List(Of fileInfo))
|
|
|
|
Dim tab = New List(Of Byte)
|
|
|
|
For Each fil In fileInf
|
|
tab.AddRange(BitConverter.GetBytes(fil.Sector).ToList)
|
|
tab.AddRange(BitConverter.GetBytes(fil.Sizw).ToList)
|
|
Next
|
|
saveCDfile(ISOname, &H17, &H1B88, tab.ToArray)
|
|
|
|
|
|
End Sub
|
|
|
|
Public Function makeFileList(ByVal ISOname As String)
|
|
Dim a = New List(Of fileInfo)
|
|
Dim maxFiles = 880
|
|
Dim FilesSectors = getCDfile(ISOname, &H17, &H4000).ToArray
|
|
If ISOname.Contains("KUDOS") Then FilesSectors = getCDfile(ISOname, &H31, &H1B88).ToArray
|
|
If ISOname.Contains("Sumaru TV") Then maxFiles = 1124
|
|
|
|
For x = 0 To maxFiles
|
|
a.Add(New fileInfo With {.FileID = x, .Sector = Form1.Read32bitNum(FilesSectors, x * 8), .Sizw = Form1.Read32bitNum(FilesSectors, x * 8 + 4)})
|
|
Next
|
|
|
|
Return a
|
|
End Function
|
|
|
|
|
|
Public Sub ReallocateDown(ByVal ISOname As String, ByRef fileInf As List(Of fileInfo), ByVal StartFile As Integer, ByVal BySectors As Integer)
|
|
|
|
|
|
|
|
|
|
'Dim lastSector = fileInf.Last.Sector + (fileInf.Last.Sizw \ 2048)
|
|
'If fileInf.Last.Sizw Mod 2048 > 0 Then lastSector += 1
|
|
|
|
|
|
'For a = lastSector To fileInf(StartFile).Sector Step -1
|
|
|
|
|
|
|
|
|
|
'Next
|
|
|
|
|
|
''Reading eachFile from end and Save it +Bysectors
|
|
'For a = 1143 To StartFile Step -1
|
|
' fileInf(a).Sector += BySectors
|
|
'Next
|
|
''UpdateFileListTable(ISOname, fileInf)
|
|
|
|
End Sub
|
|
|
|
|
|
End Class
|