VERSION 5.00
Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "FlashConverter U Series"
   ClientHeight    =   3360
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   6210
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   3360
   ScaleWidth      =   6210
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton cmdSF 
      Caption         =   "Sea > Fuj"
      Height          =   375
      Left            =   4320
      TabIndex        =   4
      Top             =   3000
      Width           =   1935
   End
   Begin VB.CommandButton cmdFS 
      Caption         =   "Fuj > Sea"
      Height          =   375
      Left            =   2520
      TabIndex        =   3
      Top             =   3000
      Width           =   1815
   End
   Begin VB.FileListBox File1 
      Height          =   3015
      Left            =   2520
      TabIndex        =   2
      Top             =   0
      Width           =   3690
   End
   Begin VB.DirListBox Dir1 
      Height          =   3015
      Left            =   0
      MousePointer    =   1  'Arrow
      TabIndex        =   1
      Top             =   360
      Width           =   2520
   End
   Begin VB.DriveListBox Drive1 
      Height          =   315
      Left            =   0
      TabIndex        =   0
      Top             =   0
      Width           =   2520
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'Это програмка для конвертирования прошивок от HDD Seagate U Series
'Автор, не особо грамотный в програмировании - Andrey A Kireev
  
Private Sub Drive1_Change()
'выбираем диск
  Dir1.Path = Drive1.Drive
End Sub

Private Sub Dir1_Change()
'выбираем путь
  File1.Path = Dir1.Path
End Sub

Private Sub File1_Click()
  ChDir File1.Path
End Sub

Private Sub cmdFS_Click()
  Dim FileSize As Long
  Dim PageSize As Long
  Dim Buff() As Byte
  Dim BuffTmp() As Byte
  Dim Code() As Byte
  Dim NewFile As String
  Dim TmpA As String
  Dim TmpB As String
  Dim NumTmpA As Long
  Dim NumTmpB As Long
  Dim Letter As String
  Dim Byte1 As Byte
  Dim Byte2 As Byte
'тут задается шаблон подмены
'-------------------0123456789ABCDEF
  Code() = StrConv("084C2A6E195D3B7F", vbFromUnicode)

'задаем имя новому файлу
  NewFile = File1.FileName & ".Sea"
'открываем выбраный файл
  Open File1.FileName For Binary Access Read As #1
  FileSize = LOF(1)
'проверка на четность и размер файла
  If FileSize / 2 <> Int(FileSize / 2) Then GoTo EndSub
  If FileSize = 0 Then GoTo EndSub

'приступаем к обработке
    ReDim Buff(1 To FileSize) 'переопределим массив размером с файл
    Get #1, , Buff() 'считаем в буфер

'алгоритм переворота половинок
      PageSize = FileSize / 2
      'делаем копию масива
      BuffTmp() = Buff()
      'обрабатываем первую половинку
      For Position = 1 To PageSize
        Byte1 = BuffTmp(Position)
        Buff(Position + PageSize) = Byte1
      Next Position
      'теперь вторую половинку
      For Position = PageSize + 1 To FileSize
        Byte1 = BuffTmp(Position)
        Buff(Position - PageSize) = Byte1
      Next Position
      
'тут происходит переворот террад каждого второго байта
    For Position = 1 To FileSize Step 2
      Letter = Hex(Buff(Position))
      If Len(Letter) = 1 Then Letter = &O0 & Letter
      TmpA = Left(Letter, 1)
      TmpB = Right(Letter, 1)
      NumTmpA = Val("&h" & TmpA)
      NumTmpB = Val("&h" & TmpB)
      TmpA$ = Chr(Code(NumTmpA))
      TmpB$ = Chr(Code(NumTmpB))
      'Print Chr(Code(Position)); Val("&h" & Chr(Code(Position)))
      Letter = Val("&h" & TmpB & TmpA)
      Buff(Position) = Letter
    Next Position

'перестановка двух байт местами
    For Position = 1 To FileSize Step 2
      Byte1 = Buff(Position)
      Byte2 = Buff(Position + 1)
      Buff(Position) = Byte2
      Buff(Position + 1) = Byte1
    Next Position
    
'сохраняем результаты работы
    Open NewFile For Binary As #2
    Put #2, , Buff()
    Close #2
    
'выход из процедур если размер не правильный
EndSub:
  Close #1
  File1.Refresh

End Sub

Private Sub cmdSF_Click()
  Dim FileSize As Long
  Dim PageSize As Long
  Dim Buff() As Byte
  Dim BuffTmp() As Byte
  Dim Code() As Byte
  Dim NewFile As String
  Dim TmpA As String
  Dim TmpB As String
  Dim NumTmpA As Long
  Dim NumTmpB As Long
  Dim Letter As String
  Dim Byte1 As Byte
  Dim Byte2 As Byte
'тут задается шаблон подмены
'-------------------0123456789ABCDEF
  Code() = StrConv("084C2A6E195D3B7F", vbFromUnicode)

'задаем имя новому файлу
  NewFile = File1.FileName & ".Fuj"
'открываем выбраный файл
  Open File1.FileName For Binary Access Read As #1
  FileSize = LOF(1)
'проверка на четность и размер файла
  If FileSize / 2 <> Int(FileSize / 2) Then GoTo EndSub
  If FileSize = 0 Then GoTo EndSub

'приступаем к обработке
    ReDim Buff(1 To FileSize) 'переопределим массив размером с файл
    Get #1, , Buff() 'считаем в буфер

'алгоритм переворота половинок
      PageSize = FileSize / 2
      'делаем копию масива
      BuffTmp() = Buff()
      'обрабатываем первую половинку
      For Position = 1 To PageSize
        Byte1 = BuffTmp(Position)
        Buff(Position + PageSize) = Byte1
      Next Position
      'теперь вторую половинку
      For Position = PageSize + 1 To FileSize
        Byte1 = BuffTmp(Position)
        Buff(Position - PageSize) = Byte1
      Next Position
      
'тут происходит переворот террад каждого второго байта
    For Position = 2 To FileSize - 1 Step 2
      Letter = Hex(Buff(Position))
      If Len(Letter) = 1 Then Letter = &O0 & Letter
      TmpA = Left(Letter, 1)
      TmpB = Right(Letter, 1)
      NumTmpA = Val("&h" & TmpA)
      NumTmpB = Val("&h" & TmpB)
      TmpA$ = Chr(Code(NumTmpA))
      TmpB$ = Chr(Code(NumTmpB))
      'Print Chr(Code(Position)); Val("&h" & Chr(Code(Position)))
      Letter = Val("&h" & TmpB & TmpA)
      Buff(Position) = Letter
    Next Position

'перестановка двух байт местами
    For Position = 1 To FileSize Step 2
      Byte1 = Buff(Position)
      Byte2 = Buff(Position + 1)
      Buff(Position) = Byte2
      Buff(Position + 1) = Byte1
    Next Position
    
'сохраняем результаты работы
    Open NewFile For Binary As #2
    Put #2, , Buff()
    Close #2
    
'выход из процедур если размер не правильный
EndSub:
  Close #1
  File1.Refresh

End Sub


