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 / Frm_Hex_Edit2.frm < prev    next >
Text File  |  2007-07-20  |  46KB  |  1,433 lines

  1. VERSION 5.00
  2. Object = "{3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0"; "RICHTX32.OCX"
  3. Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
  4. Begin VB.Form Frm_Hex_Edit 
  5.    BorderStyle     =   1  'Fixed Single
  6.    Caption         =   "Hex Editor"
  7.    ClientHeight    =   1935
  8.    ClientLeft      =   150
  9.    ClientTop       =   435
  10.    ClientWidth     =   7080
  11.    LinkTopic       =   "Form1"
  12.    MaxButton       =   0   'False
  13.    MinButton       =   0   'False
  14.    ScaleHeight     =   1935
  15.    ScaleWidth      =   7080
  16.    StartUpPosition =   2  'CenterScreen
  17.    Begin VB.VScrollBar Scroll_Pos 
  18.       Height          =   1575
  19.       Left            =   6600
  20.       TabIndex        =   7
  21.       Top             =   240
  22.       Width           =   255
  23.    End
  24.    Begin RichTextLib.RichTextBox Hex_Pos 
  25.       CausesValidation=   0   'False
  26.       Height          =   255
  27.       Left            =   120
  28.       TabIndex        =   5
  29.       Top             =   240
  30.       Width           =   975
  31.       _ExtentX        =   1720
  32.       _ExtentY        =   450
  33.       _Version        =   393217
  34.       BorderStyle     =   0
  35.       Enabled         =   -1  'True
  36.       ReadOnly        =   -1  'True
  37.       Appearance      =   0
  38.       TextRTF         =   $"Frm_Hex_Edit2.frx":0000
  39.       BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
  40.          Name            =   "Courier New"
  41.          Size            =   8.25
  42.          Charset         =   0
  43.          Weight          =   400
  44.          Underline       =   0   'False
  45.          Italic          =   0   'False
  46.          Strikethrough   =   0   'False
  47.       EndProperty
  48.    End
  49.    Begin RichTextLib.RichTextBox Hex_Val 
  50.       CausesValidation=   0   'False
  51.       Height          =   255
  52.       Left            =   720
  53.       TabIndex        =   4
  54.       Top             =   720
  55.       Width           =   2175
  56.       _ExtentX        =   3836
  57.       _ExtentY        =   450
  58.       _Version        =   393217
  59.       BackColor       =   65535
  60.       BorderStyle     =   0
  61.       Enabled         =   -1  'True
  62.       HideSelection   =   0   'False
  63.       Appearance      =   0
  64.       OLEDragMode     =   0
  65.       OLEDropMode     =   0
  66.       TextRTF         =   $"Frm_Hex_Edit2.frx":0080
  67.       BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
  68.          Name            =   "Courier New"
  69.          Size            =   8.25
  70.          Charset         =   0
  71.          Weight          =   400
  72.          Underline       =   0   'False
  73.          Italic          =   0   'False
  74.          Strikethrough   =   0   'False
  75.       EndProperty
  76.    End
  77.    Begin VB.PictureBox Text_Function 
  78.       Height          =   255
  79.       Left            =   1200
  80.       ScaleHeight     =   195
  81.       ScaleWidth      =   1395
  82.       TabIndex        =   3
  83.       Top             =   1200
  84.       Visible         =   0   'False
  85.       Width           =   1455
  86.    End
  87.    Begin RichTextLib.RichTextBox HexD 
  88.       CausesValidation=   0   'False
  89.       Height          =   255
  90.       Left            =   1200
  91.       TabIndex        =   0
  92.       Top             =   240
  93.       Width           =   5295
  94.       _ExtentX        =   9340
  95.       _ExtentY        =   450
  96.       _Version        =   393217
  97.       BackColor       =   65535
  98.       BorderStyle     =   0
  99.       Enabled         =   -1  'True
  100.       HideSelection   =   0   'False
  101.       Appearance      =   0
  102.       OLEDragMode     =   0
  103.       OLEDropMode     =   0
  104.       TextRTF         =   $"Frm_Hex_Edit2.frx":0100
  105.       BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
  106.          Name            =   "Courier New"
  107.          Size            =   8.25
  108.          Charset         =   0
  109.          Weight          =   400
  110.          Underline       =   0   'False
  111.          Italic          =   0   'False
  112.          Strikethrough   =   0   'False
  113.       EndProperty
  114.    End
  115.    Begin MSComDlg.CommonDialog CD 
  116.       Left            =   600
  117.       Top             =   1080
  118.       _ExtentX        =   847
  119.       _ExtentY        =   847
  120.       _Version        =   393216
  121.    End
  122.    Begin VB.Label Type_Lbl 
  123.       Height          =   255
  124.       Left            =   3600
  125.       TabIndex        =   6
  126.       Top             =   0
  127.       Width           =   2775
  128.    End
  129.    Begin VB.Label Pos 
  130.       Caption         =   "Pos - "
  131.       Height          =   255
  132.       Left            =   1920
  133.       TabIndex        =   2
  134.       Top             =   0
  135.       Width           =   1455
  136.    End
  137.    Begin VB.Label Offset 
  138.       Caption         =   "Offset - "
  139.       Height          =   255
  140.       Left            =   120
  141.       TabIndex        =   1
  142.       Top             =   0
  143.       Width           =   1695
  144.    End
  145.    Begin VB.Menu Mnu_File 
  146.       Caption         =   "File"
  147.       Begin VB.Menu Mnu_F_Open 
  148.          Caption         =   "Open"
  149.       End
  150.       Begin VB.Menu Mnu_F_Close 
  151.          Caption         =   "Close"
  152.          Visible         =   0   'False
  153.       End
  154.       Begin VB.Menu Split_File_1 
  155.          Caption         =   "-"
  156.       End
  157.       Begin VB.Menu Mnu_F_Exit 
  158.          Caption         =   "Exit"
  159.       End
  160.    End
  161.    Begin VB.Menu Mnu_Functions 
  162.       Caption         =   "Functions"
  163.       Begin VB.Menu Mnu_F_Write 
  164.          Caption         =   "Write To File"
  165.          Shortcut        =   ^W
  166.       End
  167.       Begin VB.Menu Mnu_F_Clear 
  168.          Caption         =   "Clear Changes"
  169.          Shortcut        =   ^C
  170.       End
  171.    End
  172.    Begin VB.Menu Mnu_Tools 
  173.       Caption         =   "Tools"
  174.       Begin VB.Menu Mnu_Tool_File 
  175.          Caption         =   "File Tools"
  176.          Begin VB.Menu Mnu_F_Find 
  177.             Caption         =   "Find in file"
  178.             Shortcut        =   ^F
  179.          End
  180.          Begin VB.Menu Mnu_F_Find_A 
  181.             Caption         =   "Find Again"
  182.             Shortcut        =   ^G
  183.          End
  184.          Begin VB.Menu Mnu_F_BlCpy 
  185.             Caption         =   "Block Copy"
  186.             Shortcut        =   ^B
  187.          End
  188.          Begin VB.Menu Mnu_F_EOF 
  189.             Caption         =   "Set As EOF"
  190.          End
  191.       End
  192.       Begin VB.Menu PopUp_Menu 
  193.          Caption         =   "PopUp_Menu"
  194.          Begin VB.Menu Popup_Copy 
  195.             Caption         =   "Copy"
  196.          End
  197.          Begin VB.Menu Popup_Paste 
  198.             Caption         =   "Paste"
  199.          End
  200.          Begin VB.Menu Popup_delete 
  201.             Caption         =   "Delete"
  202.          End
  203.          Begin VB.Menu Popup_Fill 
  204.             Caption         =   "Fill With"
  205.          End
  206.          Begin VB.Menu Popup_Clear 
  207.             Caption         =   "Clear Changes"
  208.          End
  209.          Begin VB.Menu Popup_Logics 
  210.             Caption         =   "Logics Edit"
  211.          End
  212.       End
  213.       Begin VB.Menu Mnu_Options 
  214.          Caption         =   "Options"
  215.          Begin VB.Menu Mnu_Opt_Wide 
  216.             Caption         =   "32 Byte Width"
  217.             Checked         =   -1  'True
  218.          End
  219.          Begin VB.Menu Mnu_Opt_Long 
  220.             Caption         =   "48 Line Length"
  221.             Checked         =   -1  'True
  222.          End
  223.          Begin VB.Menu Mnu_Opt_Fwrite 
  224.             Caption         =   "No Prompt for File Write"
  225.          End
  226.       End
  227.       Begin VB.Menu Mnu_Jump_Pos 
  228.          Caption         =   "Jump to Pos"
  229.          Enabled         =   0   'False
  230.          Shortcut        =   ^J
  231.       End
  232.    End
  233. End
  234. Attribute VB_Name = "Frm_Hex_Edit"
  235. Attribute VB_GlobalNameSpace = False
  236. Attribute VB_Creatable = False
  237. Attribute VB_PredeclaredId = True
  238. Attribute VB_Exposed = False
  239. Option Explicit
  240. Private Loop_1 As Long
  241. Private Loop_2 As Long
  242. Private Loop_3 As Long
  243. Private Skip_A_F As Boolean
  244. Private Skip_F_P As Boolean
  245. Private Skip_Read As Boolean
  246. Private File_Pos As Currency  ' See note in Public_Function
  247. Private File_Num As Long
  248. Private File_Open As Boolean
  249. Private File_Change As Boolean
  250. Private File_BLock As Long
  251. Private Hex_Array(4095) As Byte
  252. Private Hex_A_Ori(4095) As Byte
  253. Private Search_Pos As Long
  254. Private Tot_Count As Long
  255. Private Line_Count As Long
  256. Private Loop_Step As Long
  257. Private Scroll_Mul As Long
  258. Private C_S_Open As Boolean
  259. '90 % of the core code was tested and debugged by Wizbang of CG..
  260. 'Thanks to Wizbang for hanging in there and spending his time to test this stupid little app..
  261. 'There's simply too much code to mark everything Wizbang has helped me with..
  262.  
  263. Private Sub Form_Load()
  264. Change_View
  265. Hex_Enable (False)
  266. Mnu_Functions.Enabled = False
  267. PopUp_Menu.Visible = False
  268. If Command$ <> "" Then
  269.     C_S_Open = True
  270.     Call Mnu_F_Open_Click
  271. End If
  272. C_S_Open = False
  273. End Sub
  274.  
  275. Private Sub Form_Unload(Cancel As Integer)
  276. If File_Change Then Write_Data File_Pos
  277. If File_Open Then
  278.     API_CloseFile File_Num
  279. End If
  280. End Sub
  281.  
  282. Private Sub Hex_Val_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  283. If Button = 2 Then
  284.     If Hex_Val.Enabled = True Then
  285.         PopupMenu PopUp_Menu, , x + Hex_Val.Left, y + Hex_Val.Top
  286.     End If
  287. End If
  288. End Sub
  289.  
  290. Private Sub HexD_Change()
  291. Dim Tmp_Pos As Long
  292. Dim Tmp_Actual As Long
  293. Dim Char_code As Byte
  294. If Skip_Read Then ' if this is a file read triggered change.. Exit..
  295.     Exit Sub
  296. End If
  297. With HexD
  298.     Tmp_Pos = .SelStart
  299.     Tmp_Actual = Get_H_Actual(.SelStart, Mnu_Opt_Wide.Checked)
  300.     .SelStart = Set_H_Actual(Tmp_Actual, Mnu_Opt_Wide.Checked)
  301.     .SelLength = 2
  302.     Char_code = Hex_2_Byte(.SelText)
  303.     If Char_code <> Hex_A_Ori(Tmp_Actual) Then
  304.         HexD.SelColor = vbRed
  305.     Else
  306.         If Tmp_Actual + File_Pos + 1 <= File_Len Then
  307.             HexD.SelColor = vbBlack
  308.         Else
  309.             HexD.SelColor = RGB(&HD0, &HD0, &HD0)
  310.         End If
  311.     End If
  312.     If Skip_A_F Then ' if this is a code triggered change.. Exit..
  313.         Exit Sub
  314.     End If
  315.     Hex_Array(Tmp_Actual) = Char_code
  316.     If Not File_Change Then
  317.         File_Change = True
  318.         Mnu_Functions.Enabled = True
  319.     End If
  320.     Skip_A_F = True
  321.     Update_Hex_Val Tmp_Actual, Char_code
  322.     Skip_A_F = False
  323.     .SelStart = Tmp_Pos
  324.     .SelLength = 1
  325.     If .SelText = "" Then
  326.         HexD_KeyDown vbKeyRight, 0
  327.     End If
  328.     If .SelText = " " Then
  329.         .SelStart = .SelStart + 1
  330.         .SelLength = 1
  331.         Hex_Val.SelStart = Set_Actual(Get_H_Actual(.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked)
  332.         Hex_Val.SelLength = 1
  333.     End If
  334. End With
  335. End Sub
  336.  
  337. Private Sub HexD_Click()
  338. HexD.SelLength = 1
  339. If HexD.SelText = " " Then
  340.     HexD.SelStart = HexD.SelStart + 1
  341.     HexD.SelLength = 1
  342. End If
  343. Hex_Val.SelStart = Set_Actual(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked)
  344. Hex_Val.SelLength = 1
  345. Pos.Caption = "Pos - " & Str(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked) + File_Pos)
  346. End Sub
  347.  
  348. Private Sub HexD_GotFocus()
  349. HexD.BackColor = vbWhite
  350. Pos.Caption = "Pos - " & Str(File_Pos + Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked))
  351. HexD.SelLength = 1
  352. End Sub
  353.  
  354. Private Sub HexD_KeyDown(KeyCode As Integer, Shift As Integer)
  355. Dim Tmp_Sel_Start As Long
  356. Tmp_Sel_Start = Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked)
  357. If Shift And vbCtrlMask Then
  358.     If KeyCode = vbKeyV Then
  359.         KeyCode = 0
  360.     End If
  361. End If
  362.     
  363. If KeyCode = vbKeyBack Then ' Change backspace to left arrow and replace with original data
  364.     Skip_A_F = True
  365.     Hex_Array(Tmp_Sel_Start) = Hex_A_Ori(Tmp_Sel_Start)
  366.     Update_Hex_Val Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  367.     Update_HexD Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  368.     Call HexD_KeyDown(vbKeyLeft, 0) ' Call to goto previous pos
  369.     Skip_A_F = False
  370.     KeyCode = 0
  371. End If
  372. If KeyCode = vbKeyDelete Then ' replace contents with original data
  373.     Skip_A_F = True
  374.     Hex_Array(Tmp_Sel_Start) = Hex_A_Ori(Tmp_Sel_Start)
  375.     Update_Hex_Val Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  376.     Update_HexD Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  377.     Skip_A_F = False
  378.     KeyCode = 0
  379. End If
  380. If KeyCode = vbKeyHome Then ' Move to the first box
  381.     If Shift And vbCtrlMask Then
  382.         Home_Block
  383.     End If
  384.     HexD.SetFocus
  385.     HexD.SelStart = 0
  386.     HexD.SelLength = 1
  387.     KeyCode = 0
  388. End If
  389. If KeyCode = vbKeyEnd Then ' Move to the last box
  390.     If Shift And vbCtrlMask Then
  391.         End_Block
  392.     End If
  393.     HexD.SetFocus
  394.     If Shift And vbCtrlMask Then
  395.         Hex_Val.SelStart = Set_Actual(Tot_Count / 2, Mnu_Opt_Wide.Checked)
  396.     Else
  397.         Hex_Val.SelStart = Set_Actual(Tot_Count - 1, Mnu_Opt_Wide.Checked)
  398.     End If
  399.     HexD.SelLength = 1
  400.     KeyCode = 0
  401. End If
  402. If KeyCode = vbKeyLeft Then ' Move to the next box
  403.     Select Case Tmp_Sel_Start
  404.         Case 1 To (Tot_Count - 1)
  405.             HexD.SelStart = Set_H_Actual(Tmp_Sel_Start - 1, Mnu_Opt_Wide.Checked)
  406.             HexD.SelLength = 1
  407.         Case 0
  408.             If Prev_Line Then
  409.                 HexD.SetFocus
  410.                 HexD.SelStart = Set_H_Actual(Tmp_Sel_Start + Loop_Step - 1, Mnu_Opt_Wide.Checked)
  411.                 HexD.SelLength = 1
  412.             End If
  413.     End Select
  414.     KeyCode = 0
  415. End If
  416. If KeyCode = vbKeyRight Then ' move to prev. box
  417.     Select Case Tmp_Sel_Start
  418.         Case 0 To (Tot_Count - 2)
  419.             HexD.SelStart = Set_H_Actual(Tmp_Sel_Start + 1, Mnu_Opt_Wide.Checked)
  420.             HexD.SelLength = 1
  421.         Case (Tot_Count - 1)
  422.             If Next_Line Then
  423.                 HexD.SetFocus
  424.                 HexD.SelStart = Set_H_Actual(Tmp_Sel_Start - Loop_Step + 1, Mnu_Opt_Wide.Checked)
  425.                 HexD.SelLength = 1
  426.             End If
  427.     End Select
  428.     KeyCode = 0
  429. End If
  430. If KeyCode = vbKeyDown Then ' move down 1 line
  431.     Select Case Tmp_Sel_Start
  432.         Case 0 To Line_Count - 1
  433.             HexD.SelStart = Set_H_Actual(Tmp_Sel_Start + Loop_Step, Mnu_Opt_Wide.Checked)
  434.             HexD.SelLength = 1
  435.         Case Line_Count To (Tot_Count - 1)
  436.             If Next_Line Then
  437.                 HexD.SetFocus
  438.                 HexD.SelStart = Set_H_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  439.                 HexD.SelLength = 1
  440.             End If
  441.     End Select
  442.     KeyCode = 0
  443. End If
  444. If KeyCode = vbKeyUp Then ' Move up 1 line
  445.     Select Case Tmp_Sel_Start
  446.         Case Loop_Step To (Tot_Count - 1)
  447.             HexD.SelStart = Set_H_Actual(Tmp_Sel_Start - Loop_Step, Mnu_Opt_Wide.Checked)
  448.             HexD.SelLength = 1
  449.         Case 0 To (Loop_Step - 1)
  450.             If Prev_Line Then
  451.                 HexD.SetFocus
  452.                 HexD.SelStart = Set_H_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  453.                 HexD.SelLength = 1
  454.             End If
  455.     End Select
  456.     KeyCode = 0
  457. End If
  458. If KeyCode = vbKeyPageUp Then ' Move up 1 Page
  459.     If Shift And vbCtrlMask Then
  460.         If Shift And vbShiftMask Then
  461.             Prev_Block (100)
  462.         Else
  463.             Prev_Block (10)
  464.         End If
  465.     Else
  466.         Prev_Block (1)
  467.     End If
  468.     HexD.SetFocus
  469.     HexD.SelStart = Set_H_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  470.     HexD.SelLength = 1
  471.     KeyCode = 0
  472. End If
  473. If KeyCode = vbKeyPageDown Then ' Move down 1 Page
  474.     If Shift And vbCtrlMask Then
  475.         If Shift And vbShiftMask Then
  476.             Next_Block (100)
  477.         Else
  478.             Next_Block (10)
  479.         End If
  480.     Else
  481.         Next_Block (1)
  482.     End If
  483.     HexD.SetFocus
  484.     HexD.SelStart = Set_H_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  485.     HexD.SelLength = 1
  486.     KeyCode = 0
  487. End If
  488. Hex_Val.SelStart = Set_Actual(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked)
  489. Hex_Val.SelLength = 1
  490. Pos.Caption = "Pos - " & Str(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked) + File_Pos)
  491. End Sub
  492.  
  493. Private Sub HexD_KeyPress(KeyAscii As Integer)
  494. Dim Tmp_Actual As Long
  495. HexD.SelLength = 1
  496. If HexD.SelText = "" Then
  497.     HexD.SelStart = Set_H_Actual(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked) + 1, Mnu_Opt_Wide.Checked)
  498.     HexD.SelLength = 1
  499.     Hex_Val.SelStart = Set_Actual(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked)
  500.     Hex_Val.SelLength = 1
  501. End If
  502. If HexD.SelText = " " Then
  503.     HexD.SelStart = HexD.SelStart + 1
  504.     HexD.SelLength = 1
  505. End If
  506. Select Case KeyAscii 'Filter inputs.. (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
  507.     Case 1 To 7
  508.         KeyAscii = 0
  509.     'Case 8  ' No trap for backspace... Done in Keydown above..
  510.     Case 9 To 47
  511.         KeyAscii = 0
  512.     Case 58 To 64
  513.         KeyAscii = 0
  514.     Case 71 To 96
  515.         KeyAscii = 0
  516.     Case 97 To 102
  517.         KeyAscii = KeyAscii - 32 ' Change to upper case code..
  518.     Case 103 To 255
  519.         KeyAscii = 0
  520. End Select
  521. End Sub
  522.  
  523. Private Sub HexD_LostFocus()
  524. HexD.BackColor = vbYellow
  525. End Sub
  526.  
  527. Private Sub Hex_Val_Change()
  528. Dim Tmp_Pos As Long
  529. Dim Pre_Actual As Long
  530. Dim Tmp_Actual As Long
  531. Dim Char_code As Byte
  532. If Skip_Read Then ' if this is a file read triggered change.. Exit..
  533.     Exit Sub
  534. End If
  535. With Hex_Val
  536.     Tmp_Pos = .SelStart
  537.     Pre_Actual = Get_Actual(.SelStart, Mnu_Opt_Wide.Checked)
  538.     If .SelStart <> 0 Then
  539.         .SelStart = .SelStart - 1
  540.     End If
  541.     Tmp_Actual = Get_Actual(.SelStart, Mnu_Opt_Wide.Checked)
  542.     .SelLength = 1
  543.     Char_code = Asc(.SelText)
  544.     If .SelText <> Valid_Char(Hex_A_Ori(Tmp_Actual)) Then
  545.         Hex_Val.SelColor = vbRed
  546.     Else
  547.         If Tmp_Actual + File_Pos + 1 <= File_Len Then
  548.             Hex_Val.SelColor = vbBlack
  549.         Else
  550.             Hex_Val.SelColor = RGB(&HD0, &HD0, &HD0)
  551.         End If
  552.     End If
  553.     If Skip_A_F Then ' if this is a code triggered change.. Exit..
  554.         Exit Sub
  555.     End If
  556.     Hex_Array(Tmp_Actual) = Char_code
  557.     If Not File_Change Then
  558.         File_Change = True
  559.         Mnu_Functions.Enabled = True
  560.     End If
  561.     Skip_A_F = True
  562.     Update_HexD Tmp_Actual, Char_code
  563.     Skip_A_F = False
  564.     If Tmp_Actual = Tot_Count - 1 Then
  565.         Hex_Val_KeyDown vbKeyRight, 0
  566.         Exit Sub
  567.     End If
  568. End With
  569. HexD.SelStart = Set_H_Actual(Pre_Actual, Mnu_Opt_Wide.Checked)
  570. HexD.SelLength = 1
  571. Hex_Val.SelStart = Set_Actual(Pre_Actual, Mnu_Opt_Wide.Checked)
  572. Hex_Val.SelLength = 1
  573. Pos.Caption = "Pos - " & Str(File_Pos + Pre_Actual)
  574. End Sub
  575.  
  576. Private Sub Hex_Val_Click()
  577. HexD.SelStart = Set_H_Actual(Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked)
  578. HexD.SelLength = 2
  579. Pos.Caption = "Pos - " & Str(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked) + File_Pos)
  580. End Sub
  581.  
  582. Private Sub Hex_Val_GotFocus()
  583. Hex_Val.BackColor = vbWhite
  584. End Sub
  585.  
  586. Private Sub Hex_Val_KeyDown(KeyCode As Integer, Shift As Integer)
  587. Dim Tmp_Sel_Start As Long
  588. Tmp_Sel_Start = Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked)
  589. If Shift And vbCtrlMask Then
  590.     If KeyCode = vbKeyV Then
  591.         Popup_Paste_Click
  592.         KeyCode = 0
  593.     End If
  594. End If
  595. Hex_Val.SelLength = 1
  596. If Hex_Val.SelText = "" Then
  597.     Hex_Val.SelStart = Set_Actual(Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked)
  598.     Hex_Val.SelLength = 1
  599.     HexD.SelStart = Set_H_Actual(Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked)
  600.     HexD.SelLength = 1
  601. End If
  602. Tmp_Sel_Start = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked)
  603. If KeyCode = vbKeyBack Then ' Change backspace to left arrow and replace with original data
  604.     Skip_A_F = True
  605.     Hex_Array(Tmp_Sel_Start) = Hex_A_Ori(Tmp_Sel_Start)
  606.     Update_Hex_Val Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  607.     Update_HexD Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  608.     Call Hex_Val_KeyDown(vbKeyLeft, 0)
  609.     Skip_A_F = False
  610.     KeyCode = 0
  611. End If
  612. If KeyCode = vbKeyDelete Then ' replace contents with original data
  613.     Skip_A_F = True
  614.     Hex_Array(Tmp_Sel_Start) = Hex_A_Ori(Tmp_Sel_Start)
  615.     Update_Hex_Val Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  616.     Update_HexD Tmp_Sel_Start, Hex_A_Ori(Tmp_Sel_Start)
  617.     Skip_A_F = False
  618.     KeyCode = 0
  619. End If
  620. If KeyCode = vbKeyHome Then ' Move to the first box
  621.     If Shift And vbCtrlMask Then
  622.         Home_Block
  623.     End If
  624.     Hex_Val.SetFocus
  625.     Hex_Val.SelStart = 0
  626.     Hex_Val.SelLength = 1
  627.     KeyCode = 0
  628. End If
  629. If KeyCode = vbKeyEnd Then ' Move to the first box
  630.     If Shift And vbCtrlMask Then
  631.         End_Block
  632.     End If
  633.     Hex_Val.SetFocus
  634.     If Shift And vbCtrlMask Then
  635.         Hex_Val.SelStart = Set_Actual(Tot_Count / 2, Mnu_Opt_Wide.Checked)
  636.     Else
  637.         Hex_Val.SelStart = Set_Actual(Tot_Count - 1, Mnu_Opt_Wide.Checked)
  638.     End If
  639.     Hex_Val.SelLength = 1
  640.     KeyCode = 0
  641. End If
  642. If KeyCode = vbKeyLeft Then ' Move to the Prev Char
  643.     Select Case Tmp_Sel_Start
  644.         Case 1 To Tot_Count - 1
  645.             Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start - 1, Mnu_Opt_Wide.Checked)
  646.             Hex_Val.SelLength = 1
  647.         Case 0
  648.             If Prev_Line Then
  649.                 Hex_Val.SetFocus
  650.                 Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start + Loop_Step - 1, Mnu_Opt_Wide.Checked)
  651.                 Hex_Val.SelLength = 1
  652.             End If
  653.     End Select
  654.     KeyCode = 0
  655. End If
  656. If KeyCode = vbKeyRight Then ' move to Next. Char
  657.     Select Case Tmp_Sel_Start
  658.         Case 0 To Tot_Count - 2
  659.             Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start + 1, Mnu_Opt_Wide.Checked)
  660.             Hex_Val.SelLength = 1
  661.         Case Tot_Count - 1 To Tot_Count
  662.             If Next_Line Then
  663.                 Hex_Val.SetFocus
  664.                 Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start - Loop_Step + 1, Mnu_Opt_Wide.Checked)
  665.                 Hex_Val.SelLength = 1
  666.             End If
  667.     End Select
  668.     KeyCode = 0
  669. End If
  670. If KeyCode = vbKeyDown Then ' move down 1 line
  671.     Select Case Tmp_Sel_Start
  672.         Case 0 To Line_Count - 1
  673.             Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start + Loop_Step, Mnu_Opt_Wide.Checked)
  674.             Hex_Val.SelLength = 1
  675.         Case Line_Count To Tot_Count - 1
  676.             If Next_Line Then
  677.                 Hex_Val.SetFocus
  678.                 Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  679.                 Hex_Val.SelLength = 1
  680.             End If
  681.     End Select
  682.     KeyCode = 0
  683. End If
  684. If KeyCode = vbKeyUp Then ' Move up 1 line
  685.     Select Case Tmp_Sel_Start
  686.         Case Loop_Step To Tot_Count - 1
  687.             Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start - Loop_Step, Mnu_Opt_Wide.Checked)
  688.             Hex_Val.SelLength = 1
  689.         Case 0 To Loop_Step - 1
  690.             If Prev_Line Then
  691.                 Hex_Val.SetFocus
  692.                 Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  693.                 Hex_Val.SelLength = 1
  694.             End If
  695.     End Select
  696.     KeyCode = 0
  697. End If
  698. If KeyCode = vbKeyDelete Then ' Delete key pressed. Put H00 in place
  699.     HexD_Set(Tmp_Sel_Start) = "00"
  700.     KeyCode = 0
  701. End If
  702. If KeyCode = vbKeyPageUp Then ' Move up 1 Page
  703.     Prev_Block (1)
  704.     Hex_Val.SetFocus
  705.     Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  706.     Hex_Val.SelLength = 1
  707.     KeyCode = 0
  708. End If
  709. If KeyCode = vbKeyPageDown Then ' Move down 1 Page
  710.     Next_Block (1)
  711.     Hex_Val.SetFocus
  712.     Hex_Val.SelStart = Set_Actual(Tmp_Sel_Start, Mnu_Opt_Wide.Checked)
  713.     Hex_Val.SelLength = 1
  714.     KeyCode = 0
  715. End If
  716.     HexD.SelStart = Set_H_Actual(Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked) ' Update Hex position
  717.     HexD.SelLength = 1
  718. Pos.Caption = "Pos - " & Str(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked) + File_Pos)
  719. End Sub
  720.  
  721. Private Sub Hex_Val_KeyPress(KeyAscii As Integer)
  722. Select Case KeyAscii
  723.     Case 1 To 31
  724.         KeyAscii = 0
  725.     Case 127 To 186
  726.         KeyAscii = 0
  727. End Select
  728. End Sub
  729.  
  730. Private Sub Hex_Val_LostFocus()
  731. Hex_Val.BackColor = vbYellow
  732. End Sub
  733.  
  734. Private Sub Mnu_F_BlCpy_Click()
  735. Dim Block_S As Currency
  736. Dim Block_E As Currency
  737. Dim Block_T As Currency
  738. Dim Block_L As Long
  739. Dim Data() As Byte
  740. Block_S = Val(InputBox("Please Enter Start Pos (Dec)", , "0"))
  741. Block_E = Val(InputBox("Please Enter End Pos (Dec)", , "0"))
  742. Block_T = Val(InputBox("Please Enter Target Pos (Dec)", , "0"))
  743. If Block_E < Block_S Then Exit Sub
  744. Block_L = CLng(Block_E - Block_S)
  745. ReDim Data(Block_L)
  746. API_ReadFile File_Num, Block_S, Block_L, Data()
  747. API_WriteFile File_Num, Block_T, Block_L, Data()
  748. End Sub
  749.  
  750. Private Sub Mnu_F_Clear_Click()
  751. Skip_A_F = True
  752. Read_Data File_Pos
  753. Mnu_Functions.Enabled = False
  754. End Sub
  755.  
  756. Private Sub Mnu_F_Close_Click()
  757. If File_Change Then Write_Data File_Pos
  758. API_CloseFile File_Num
  759. File_Open = False
  760. Me.Caption = "Hex Editor"
  761. Mnu_F_Close.Visible = False
  762. Hex_Enable (False)
  763. Me.Mnu_Jump_Pos.Enabled = False
  764. End Sub
  765.  
  766. Private Sub Mnu_F_EOF_Click()
  767. Dim New_EOF As Currency
  768. Dim Tmp_Msg As Long
  769. New_EOF = File_Pos + Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked) + 1
  770. Tmp_Msg = MsgBox("All Data from Position:" & New_EOF & " will be lost." & vbCrLf & "Are you Sure?", vbOKCancel)
  771. If Tmp_Msg = vbCancel Then Exit Sub
  772. If File_Change Then Write_Data File_Pos
  773. API_SetEndOfFile File_Num, New_EOF
  774. File_Len = New_EOF
  775.     Scroll_Pos.Max = IIf(File_Len - (Tot_Count / 2) > 1, ((File_Len - (Tot_Count / 2)) / Scroll_Mul), 0)
  776. Read_Data File_Pos
  777. End Sub
  778.  
  779. Private Sub Mnu_F_Exit_Click()
  780. Unload Me
  781. End Sub
  782. Private Function Search_Func(Search_Value As String, Search_Loc As Long) As Boolean
  783. Dim File_string As String
  784. Dim Tmp_F_Pos As Long
  785. Dim Find_Pos As Long
  786. Hex_Val.SetFocus
  787. Tmp_F_Pos = File_Pos
  788. Search_Func = False
  789. Do
  790. File_string = StrConv(Hex_A_Ori(), vbUnicode)
  791. File_string = Left(File_string, File_BLock)
  792. Find_Pos = InStr(Search_Loc, File_string, Search_Value, Search_Type)
  793. If Find_Pos > 0 Then
  794.     If Find_Pos < Tot_Count Then
  795.         Read_Data File_Pos, False
  796.         HexD.SelStart = Set_H_Actual(Find_Pos - 1, Mnu_Opt_Wide.Checked)
  797.         HexD.SelLength = 1
  798.         Hex_Val.SelStart = Set_Actual(Find_Pos - 1, Mnu_Opt_Wide.Checked)
  799.         Hex_Val.SelLength = Search_Len
  800.     Else
  801.         Next_Block (1)
  802.         File_string = StrConv(Hex_A_Ori(), vbUnicode)
  803.         File_string = Left(File_string, Tot_Count)
  804.         Find_Pos = InStr(1, File_string, Search_Value, Search_Type) ' find the new location of the searched item
  805.         HexD.SelStart = Set_H_Actual(Find_Pos - 1, Mnu_Opt_Wide.Checked)
  806.         HexD.SelLength = 1
  807.         Hex_Val.SelStart = Set_Actual(Find_Pos - 1, Mnu_Opt_Wide.Checked)
  808.         Hex_Val.SelLength = Search_Len
  809.     End If
  810.     Search_Func = True
  811.     Hex_Val.SetFocus
  812.     Exit Function
  813. End If
  814. Search_Loc = Tot_Count - Search_Len
  815. Loop Until Not (Next_Search_Block(True))
  816. File_Pos = Tmp_F_Pos
  817. Read_Data File_Pos, True
  818. Hex_Val.SetFocus
  819. End Function
  820.  
  821. Private Sub Mnu_F_Find_A_Click()
  822. Dim Search_string As String
  823. If Search_Len = 0 Then
  824.     Mnu_F_Find_Click
  825.     Exit Sub
  826. End If
  827. Search_Pos = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked) + 2
  828. Hex_Val.SetFocus
  829. Search_string = StrConv(Search_H(), vbUnicode)
  830. Search_string = Left(Search_string, Search_Len)
  831. If Not (Search_Func(Search_string, Search_Pos)) Then
  832.     MsgBox "No more found in File"
  833. End If
  834. End Sub
  835.  
  836. Private Sub Mnu_F_Find_Click()
  837. Dim Search_string As String
  838. Dim File_string As String
  839. Dim Tmp_F_Pos As Long
  840. Dim Find_Pos As Long
  841. Search_Pos = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked) + 1
  842. Search_Len = 0
  843. Frm_Search.Show vbModal, Me
  844. If Search_Len = 0 Then Exit Sub
  845. Search_string = StrConv(Search_H(), vbUnicode)
  846. Search_string = Left(Search_string, Search_Len)
  847. If Not (Search_Func(Search_string, Search_Pos)) Then
  848.     MsgBox "Search String Not Found in File"
  849. End If
  850. End Sub
  851.  
  852. Private Sub Mnu_F_Open_Click()
  853. Dim TmpVal1 As Currency
  854. Dim Tmp_File As String
  855. On Error Resume Next
  856. If Not (C_S_Open) Then
  857.     CD.CancelError = True
  858.     CD.ShowOpen
  859.     If Err.Number <> 0 Then
  860.         Err.Clear
  861.         Exit Sub
  862.     End If
  863. End If
  864. If File_Open Then
  865.     Call Mnu_F_Close_Click
  866. End If
  867. If C_S_Open Then
  868.     Tmp_File = Replace(Command$, Chr(34), "", 1, 2, vbBinaryCompare)
  869.     API_OpenFile Tmp_File, File_Num, File_Len
  870. Else
  871.     API_OpenFile CD.FileName, File_Num, File_Len
  872. End If
  873. If File_Num = -1 Then
  874.     MsgBox "Error Opening file - " & Command$, vbCritical
  875.     Exit Sub
  876. End If
  877. 'Scroll_Mul = 16
  878. Scroll_Mul = (Int((File_Len / &H80000)) + 1) * 16
  879. Scroll_Pos.Min = 0
  880.     Scroll_Pos.Max = IIf(File_Len - (Tot_Count / 2) > 1, ((File_Len - (Tot_Count / 2)) / Scroll_Mul), 0)
  881. File_sig = GetFileType(CD.FileName)
  882. Type_Lbl.Caption = "Type: =" & F_Type_String(File_sig)
  883. Mnu_F_Close.Visible = True
  884. Mnu_Jump_Pos.Enabled = True
  885. Hex_Enable (True)
  886. File_Open = True
  887. If C_S_Open Then
  888.     Me.Caption = "Hex Editor - " & Tmp_File
  889. Else
  890.     Me.Caption = "Hex Editor - " & CD.FileName
  891. End If
  892. File_Pos = 0
  893. Read_Data File_Pos
  894. HexD.SetFocus
  895. On Error GoTo 0
  896. End Sub
  897.  
  898. Private Sub Update_Hex_Val(Index As Long, Asc_Code As Byte)
  899. Dim Val_index As Integer
  900. Dim Tmp_Text
  901. Dim Tmp_Pos As Long
  902. With Hex_Val
  903.     .SelStart = Set_Actual(Index, Mnu_Opt_Wide.Checked)
  904.     .SelLength = 1
  905.     .SelText = Valid_Char(Asc_Code)
  906.     .SelStart = Set_Actual(Index, Mnu_Opt_Wide.Checked)
  907. '    .SelLength = 1
  908. End With
  909. End Sub
  910.  
  911. Private Sub Update_HexD(Index As Long, Asc_Code As Byte)
  912. Dim Val_index As Integer
  913. Dim Tmp_Text As String
  914. Dim Tmp_Pos As Long
  915. With HexD
  916.     .SelStart = Set_H_Actual(Index, Mnu_Opt_Wide.Checked)
  917.     .SelLength = 2
  918.     .SelText = Right("00" & Hex(Asc_Code), 2)
  919.     .SelStart = Set_H_Actual(Index, Mnu_Opt_Wide.Checked)
  920. '    .SelLength = 2
  921. End With
  922. End Sub
  923.  
  924. Private Sub Hex_Enable(State As Boolean)
  925. Hex_Pos.Enabled = False
  926. HexD.Enabled = State
  927. Hex_Val.Enabled = State
  928. Scroll_Pos.Enabled = State
  929. Mnu_Tool_File.Enabled = State
  930. End Sub
  931.  
  932. Private Sub Read_Data(Offset_val As Currency, Optional Skip_Display As Boolean = False)
  933. Dim Tmp_Count As Long
  934. Dim Tmp_Data As Byte
  935. Dim Tmp_Pos As String
  936. Dim Tmp_Val As String
  937. Dim Tmp_Text As String
  938. MousePointer = 11
  939. Offset.Caption = "Offset - " & Str(Offset_val)
  940. Tmp_Count = 0
  941. Skip_A_F = True ' Turn on Skip funtions - Speeds up reading data
  942. Skip_Read = True ' Turn on Skip funtions - Speeds up reading data
  943. File_BLock = Tot_Count * 2
  944. API_ReadFile File_Num, Offset_val, File_BLock, Hex_Array()
  945. If File_BLock < Tot_Count * 2 Then ' Fill in blank spaces with "00"
  946.     For Loop_2 = File_BLock To (Tot_Count * 2) - 1
  947.         Hex_Array(Loop_2) = 0
  948.     Next Loop_2
  949. End If
  950. ' Use copy mem API here... Set Hex_A_Ori() = Hex_Array()
  951. CopyMemory Hex_A_Ori(0), Hex_Array(0), (Tot_Count * 2) ' Quick and easy
  952. If Not (Skip_Display) Then
  953.     HexD.Visible = False
  954.     Hex_Val.Visible = False
  955.     Hex_Pos.Text = ""
  956.     HexD.Text = ""
  957.     Hex_Val.Text = ""
  958.     HexD.SelStart = 0                    ' the next 6 lines of code should take care of the color problem picked up by Wizbang.
  959.     HexD.SelLength = Len(HexD.Text)      ' RTbox does not have a explicit Text color (ForeColor) and has to be set in code..
  960.     HexD.SelColor = RGB(&H0, &H0, &H0)   ' Set default Black text...
  961.     Hex_Val.SelStart = 0
  962.     Hex_Val.SelLength = Len(Hex_Val.Text)
  963.     Hex_Val.SelColor = RGB(&H0, &H0, &H0)
  964.     For Loop_3 = 0 To (Tot_Count) - 1 Step Loop_Step
  965.         Tmp_Text = ""
  966.         Tmp_Val = ""
  967.         Tmp_Pos = Right("000000000000" & DecadeToHex(Str(Offset_val + Loop_3)), 12)
  968.         For Loop_2 = 0 To Loop_Step - 1
  969.             Tmp_Text = Tmp_Text & " " & Right("00" & Hex(Hex_Array(Loop_3 + Loop_2)), 2)
  970.             Tmp_Val = Tmp_Val & Valid_Char(Hex_Array(Loop_3 + Loop_2))
  971.         Next Loop_2
  972.         Hex_Pos.Text = Hex_Pos.Text & IIf(Hex_Pos.Text = "", "", vbCrLf) & Trim(Tmp_Pos)
  973.         HexD.Text = HexD.Text & IIf(HexD.Text = "", "", vbCrLf) & Trim(Tmp_Text)
  974.         Hex_Val.Text = Hex_Val.Text & IIf(Hex_Val.Text = "", "", vbCrLf) & Tmp_Val
  975.     Next Loop_3
  976.     ' If Hex is past file end , Use a different display color...
  977.     If File_Pos + Tot_Count > File_Len Then
  978.         HexD.SelStart = Set_H_Actual((File_Len - File_Pos), Mnu_Opt_Wide.Checked)
  979.         HexD.SelLength = Len(HexD.Text) - HexD.SelStart
  980.         HexD.SelColor = RGB(&HD0, &HD0, &HD0)
  981.         Hex_Val.SelStart = Set_Actual((File_Len - File_Pos), Mnu_Opt_Wide.Checked)
  982.         Hex_Val.SelLength = Len(Hex_Val.Text) - Hex_Val.SelStart
  983.         Hex_Val.SelColor = RGB(&HD0, &HD0, &HD0)
  984.     End If
  985.     HexD.SelLength = 2
  986.     Hex_Val.SelLength = 1
  987.     Pos.Caption = "Pos - " & Str(Get_H_Actual(HexD.SelStart, Mnu_Opt_Wide.Checked) + File_Pos)
  988.  
  989.     HexD.Visible = True
  990.     Hex_Val.Visible = True
  991. End If
  992. Tmp_Count = (File_Pos / Scroll_Mul)
  993. If Tmp_Count > Scroll_Pos.Max Then Tmp_Count = Scroll_Pos.Max
  994. Scroll_Pos.Value = Tmp_Count
  995. Skip_A_F = False
  996. Skip_Read = False
  997. File_Change = False
  998. Mnu_Functions.Enabled = False
  999. MousePointer = 0
  1000. End Sub
  1001.  
  1002. Private Sub Write_Data(Offset_val As Currency)
  1003. Dim Tmp_Count As Long
  1004. Dim Tmp_Msg As Long
  1005. If Not Skip_F_P Then
  1006.     Tmp_Msg = MsgBox("Data has Changed - Write to file", vbYesNo)
  1007.     If Tmp_Msg = vbCancel Then Exit Sub
  1008. End If
  1009. If File_BLock < Tot_Count Then
  1010.     Tmp_Count = File_BLock
  1011.     For Loop_1 = File_BLock + 1 To Tot_Count
  1012.         If Hex_Array(Loop_1 - 1) <> 0 Then
  1013.             Tmp_Count = Loop_1
  1014.         End If
  1015.     Next Loop_1
  1016.     If Tmp_Count <> File_BLock Then
  1017.         If Skip_F_P Then
  1018.             Tmp_Msg = vbOK
  1019.         Else
  1020.             Tmp_Msg = MsgBox("File Size has Changed - Write  Extended data to file", vbOKCancel)
  1021.         End If
  1022.         If Tmp_Msg = vbOK Then
  1023.             File_BLock = Tmp_Count
  1024.         End If
  1025.     End If
  1026. End If
  1027.             
  1028. API_WriteFile File_Num, Offset_val, File_BLock, Hex_Array()
  1029. API_FileSize File_Num, File_Len
  1030.     Scroll_Pos.Max = IIf(File_Len - (Tot_Count / 2) > 1, ((File_Len - (Tot_Count / 2)) / Scroll_Mul), 0)
  1031. File_Change = False
  1032. Mnu_Functions.Enabled = False
  1033. End Sub
  1034.  
  1035. Private Property Let HexD_Set(Offset As Long, Hexadecimal As String)
  1036. With HexD
  1037.     .SelStart = Set_H_Actual(Offset, Mnu_Opt_Wide.Checked)
  1038.     .SelLength = 2
  1039.     .SelColor = vbBlack
  1040.     .SelText = Right("00" & Hexadecimal, 2)
  1041. End With
  1042. End Property
  1043.  
  1044. 'Private Property Get HexA_Set(Offset As Long) As String
  1045. 'HexA_Set = (Right("00" & Hex(Hex_Array(Offset)), 2))
  1046. 'End Property
  1047.  
  1048. Private Property Let HexA_Set(Offset As Long, Hexadecimal As String)
  1049. Hex_Array(Offset) = Hex_2_Byte(Right("00" & Hexadecimal, 2))
  1050. End Property
  1051.  
  1052. Private Sub Check_Hex_Val_Col(Offset As Long)
  1053. Hex_Val.SelStart = Set_Actual(Offset, Mnu_Opt_Wide.Checked)
  1054. Hex_Val.SelLength = 1
  1055. If Hex_A_Ori(Offset) <> Hex_Array(Offset) Then
  1056.     Hex_Val.SelColor = vbRed
  1057. Else
  1058.     Hex_Val.SelColor = vbBlack
  1059. End If
  1060. End Sub
  1061.  
  1062. Private Sub Next_Block(Num_Blocks As Integer)
  1063. If File_Change Then Write_Data File_Pos
  1064. File_Pos = File_Pos + (Tot_Count * Num_Blocks)
  1065. If File_Pos > File_Len - (Tot_Count / 2) Then
  1066.     File_Pos = IIf(File_Len > (Tot_Count / 2), (File_Len - (Tot_Count / 2)), 0)
  1067. End If
  1068. Read_Data File_Pos
  1069. End Sub
  1070.  
  1071. Private Function Next_Search_Block(Optional Skip_Display As Boolean = False) As Boolean
  1072. Next_Search_Block = False
  1073. If File_Change Then Write_Data File_Pos
  1074. If File_Pos < (File_Len - (Tot_Count / 2)) Then
  1075.     File_Pos = File_Pos + Tot_Count
  1076.     Read_Data File_Pos, Skip_Display
  1077.     Next_Search_Block = True
  1078. End If
  1079. End Function
  1080.  
  1081. Private Function Next_Line() As Boolean
  1082. If File_Change Then Write_Data File_Pos
  1083. If File_Pos + Loop_Step > File_Len - (Tot_Count / 2) Then
  1084.     Next_Line = False
  1085.     Exit Function
  1086. End If
  1087. File_Pos = File_Pos + Loop_Step
  1088. Read_Data File_Pos
  1089. Next_Line = True
  1090. End Function
  1091.  
  1092. Private Sub Home_Block()
  1093. If File_Change Then Write_Data File_Pos
  1094. File_Pos = 0
  1095. Read_Data File_Pos
  1096. End Sub
  1097.  
  1098. Private Sub End_Block()
  1099. If File_Change Then Write_Data File_Pos
  1100. File_Pos = IIf(File_Len > (Tot_Count / 2), (File_Len - (Tot_Count / 2)), 0)
  1101. Read_Data File_Pos
  1102. End Sub
  1103.  
  1104. Private Sub Prev_Block(Num_Blocks As Integer)
  1105. If File_Change Then Write_Data File_Pos
  1106. File_Pos = File_Pos - (Tot_Count * Num_Blocks)
  1107. If File_Pos < 0 Then File_Pos = 0
  1108. Read_Data File_Pos
  1109. End Sub
  1110.  
  1111. Private Function Prev_Line() As Boolean
  1112. If File_Change Then Write_Data File_Pos
  1113. If File_Pos = 0 Then
  1114.     Prev_Line = False
  1115.     Exit Function
  1116. End If
  1117. File_Pos = File_Pos - Loop_Step
  1118. If File_Pos < 0 Then File_Pos = 0
  1119. Read_Data File_Pos
  1120. Prev_Line = True
  1121. End Function
  1122.  
  1123. Private Sub Mnu_F_Write_Click()
  1124. Skip_F_P = True
  1125. Write_Data File_Pos
  1126. Skip_F_P = True
  1127. Read_Data File_Pos, False
  1128. Skip_F_P = True
  1129. 'With HexD
  1130. '    .SelStart = 0
  1131. '    .SelLength = Len(.Text)
  1132. '    .SelColor = vbBlack
  1133. '    .SelLength = 1
  1134. 'End With
  1135. 'With Hex_Val
  1136. '    .SelStart = 0
  1137. '    .SelLength = Len(.Text)
  1138. '    .SelColor = vbBlack
  1139. '    .SelLength = 1
  1140. 'End With
  1141. Mnu_Functions.Enabled = False
  1142. Skip_F_P = Mnu_Opt_Fwrite.Checked
  1143. File_Change = False
  1144. End Sub
  1145.  
  1146. Private Sub Mnu_Jump_Pos_Click()
  1147. Frm_Jump.Show vbModal, Me
  1148. If Jump_Loc = -1 Then Exit Sub
  1149. If Mnu_Opt_Wide.Checked Then
  1150.     File_Pos = Jump_Loc And &HFFFFFFC0
  1151. Else
  1152.     File_Pos = Jump_Loc And &HFFFFFFE0
  1153. End If
  1154. If File_Pos > (File_Len - (Tot_Count / 2)) And &H7FFFFFF0 Then
  1155.     File_Pos = IIf(File_Len > (Tot_Count / 2), (File_Len - (Tot_Count / 2)) And &H7FFFFFF0, 0)
  1156. End If
  1157. Read_Data File_Pos
  1158. Hex_Val.SetFocus
  1159.     Hex_Val.SelStart = Set_Actual(Jump_Loc - File_Pos, Mnu_Opt_Wide.Checked)
  1160. Hex_Val.SelLength = 1
  1161. HexD.SelStart = Set_H_Actual(Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked), Mnu_Opt_Wide.Checked) ' Update Hex position
  1162. HexD.SelLength = 1
  1163. End Sub
  1164.  
  1165. Private Sub Mnu_Opt_Fwrite_Click()
  1166. Mnu_Opt_Fwrite.Checked = Not Mnu_Opt_Fwrite.Checked
  1167. Skip_F_P = Mnu_Opt_Fwrite.Checked
  1168. End Sub
  1169.  
  1170. Private Sub Mnu_Opt_Long_Click()
  1171. Mnu_Opt_Long.Checked = Not Mnu_Opt_Long.Checked
  1172. Change_View
  1173. If HexD.Enabled Then
  1174.     Read_Data File_Pos
  1175.     HexD.SetFocus
  1176. End If
  1177. End Sub
  1178.  
  1179. Private Sub Mnu_Opt_Wide_Click()
  1180. Mnu_Opt_Wide.Checked = Not Mnu_Opt_Wide.Checked
  1181. Mnu_Opt_Long.Enabled = Mnu_Opt_Wide.Checked
  1182. Change_View
  1183. If HexD.Enabled Then
  1184.     Read_Data File_Pos
  1185.     HexD.SetFocus
  1186. End If
  1187. End Sub
  1188.  
  1189. Private Sub Change_View()
  1190. Dim Tmp_Text As String
  1191. Dim MultiP As Long
  1192. Dim MultiL As Long
  1193. Text_Function.Font = HexD.Font
  1194. Tmp_Text = "123456789012"
  1195. Hex_Pos.Width = (Text_Function.TextWidth(Tmp_Text)) + 40
  1196. HexD.Left = Hex_Pos.Left + Hex_Pos.Width + 25
  1197. If Mnu_Opt_Wide.Checked Then
  1198.     MultiP = 2
  1199.     Loop_Step = 32
  1200.     If Mnu_Opt_Long.Checked Then
  1201.         Tot_Count = 1536
  1202.         Line_Count = 1504
  1203.         MultiL = 3
  1204.         Scroll_Pos.SmallChange = 2
  1205.         Scroll_Pos.LargeChange = 96
  1206.     Else
  1207.         Tot_Count = 1024
  1208.         Line_Count = 992
  1209.         MultiL = 2
  1210.         Scroll_Pos.SmallChange = 2
  1211.         Scroll_Pos.LargeChange = 64
  1212.     End If
  1213. Else
  1214.     Tot_Count = 512
  1215.     Line_Count = 496
  1216.     Loop_Step = 16
  1217.     MultiP = 1
  1218.     MultiL = 2
  1219.     Scroll_Pos.SmallChange = 1
  1220.     Scroll_Pos.LargeChange = 32
  1221. End If
  1222. Tmp_Text = "00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F "
  1223. HexD.Width = (Text_Function.TextWidth(Tmp_Text) * MultiP) + 40
  1224. Tmp_Text = "00" & vbCrLf & "00" & vbCrLf & "00" & vbCrLf & "00" & vbCrLf & "00" & vbCrLf & "00" & vbCrLf & "00" & vbCrLf & "00"
  1225. Hex_Pos.Height = Text_Function.TextHeight(Tmp_Text) * 2 * MultiL
  1226. HexD.Top = Hex_Pos.Top
  1227. HexD.Height = Hex_Pos.Height
  1228. Tmp_Text = "0123456789ABCDEF"
  1229. Hex_Val.Width = (Text_Function.TextWidth(Tmp_Text) * MultiP) + 50
  1230. Hex_Val.Height = Hex_Pos.Height
  1231. Hex_Val.Left = HexD.Left + HexD.Width + 25
  1232. Hex_Val.Top = HexD.Top
  1233. Scroll_Pos.Top = HexD.Top
  1234. Scroll_Pos.Left = Hex_Val.Left + Hex_Val.Width + 10
  1235. Scroll_Pos.Height = Hex_Pos.Height
  1236. Me.Width = Scroll_Pos.Left + Scroll_Pos.Width + 200 'Size the form to fit around the TextBoxes..
  1237. Me.Height = HexD.Top + HexD.Height + 800
  1238. If File_Open Then
  1239.     Scroll_Pos.Max = IIf(File_Len - (Tot_Count / 2) > 1, ((File_Len - (Tot_Count / 2)) / Scroll_Mul), 0)
  1240. End If
  1241. End Sub
  1242.  
  1243. Private Sub Popup_Clear_Click()
  1244. ' Custom Popup Clear changes code
  1245. Dim Tmp_Start As Long
  1246. Dim Tmp_Fin As Long
  1247. Tmp_Start = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked)
  1248. Tmp_Fin = Get_Actual(Hex_Val.SelStart + Hex_Val.SelLength, Mnu_Opt_Wide.Checked) - 1
  1249. Skip_A_F = True
  1250. For Loop_1 = Tmp_Start To Tmp_Fin
  1251.     HexD.SelStart = Set_H_Actual(Loop_1, Mnu_Opt_Wide.Checked)
  1252.     HexD.SelLength = 2
  1253.     HexD.SelText = Right("00" & Hex(Hex_A_Ori(Loop_1)), 2)
  1254.     Hex_Val.SelStart = Set_Actual(Loop_1, Mnu_Opt_Wide.Checked)
  1255.     Hex_Val.SelLength = 1
  1256.     Hex_Val.SelText = Valid_Char(Hex_A_Ori(Loop_1))
  1257. Next Loop_1
  1258. Hex_Val.SetFocus
  1259. Skip_A_F = False
  1260. End Sub
  1261.  
  1262. Private Sub Popup_Copy_Click()
  1263. ' Custom Popup copy code
  1264. Dim Tmp_Start As Long
  1265. Dim Tmp_Fin As Long
  1266. Dim Tmp_Str As String
  1267. Tmp_Start = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked)
  1268. Tmp_Fin = Get_Actual(Hex_Val.SelStart + Hex_Val.SelLength, Mnu_Opt_Wide.Checked) - 1
  1269. Tmp_Str = ""
  1270. For Loop_1 = Tmp_Start To Tmp_Fin
  1271.     Tmp_Str = Tmp_Str + Chr(Hex_Array(Loop_1))
  1272. Next Loop_1
  1273. Clipboard.Clear
  1274. Clipboard.SetText Tmp_Str
  1275. End Sub
  1276.  
  1277. Private Sub Popup_delete_Click()
  1278. Dim Tmp_Start As Long
  1279. Dim Tmp_Fin As Long
  1280. Tmp_Start = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked)
  1281. Tmp_Fin = Get_Actual(Hex_Val.SelStart + Hex_Val.SelLength, Mnu_Opt_Wide.Checked) - 1
  1282. Skip_A_F = True
  1283. For Loop_1 = Tmp_Start To Tmp_Fin
  1284.     HexD.SelStart = Set_H_Actual(Loop_1, Mnu_Opt_Wide.Checked)
  1285.     HexD.SelLength = 2
  1286.     HexD.SelText = "00"
  1287.     Hex_Val.SelStart = Set_Actual(Loop_1, Mnu_Opt_Wide.Checked)
  1288.     Hex_Val.SelLength = 1
  1289.     Hex_Val.SelText = Valid_Char(Hex_Array(Loop_1))
  1290. Next Loop_1
  1291. Skip_A_F = False
  1292. File_Change = True
  1293. Mnu_Functions.Enabled = True
  1294. End Sub
  1295.  
  1296. Private Sub Popup_Fill_Click()
  1297. ' Custom Popup Fill with ? code
  1298. Dim Tmp_Start As Long
  1299. Dim Tmp_Fin As Long
  1300. Dim Tmp_Hex As String
  1301. Frm_Fill.Show vbModal, Me
  1302. If Fill_Code = -1 Then Exit Sub
  1303. Tmp_Hex = Right("00" & Hex(Fill_Code), 2)
  1304. Tmp_Start = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked)
  1305. Tmp_Fin = Get_Actual(Hex_Val.SelStart + Hex_Val.SelLength, Mnu_Opt_Wide.Checked) - 1
  1306. For Loop_1 = Tmp_Start To Tmp_Fin
  1307.     HexD.SelStart = Set_H_Actual(Loop_1, Mnu_Opt_Wide.Checked)
  1308.     HexD.SelLength = 2
  1309.     HexD.SelText = Tmp_Hex
  1310. Next Loop_1
  1311. File_Change = True
  1312. Mnu_Functions.Enabled = True
  1313. End Sub
  1314.  
  1315. Private Sub Popup_Logics_Click()
  1316. Dim Tmp_Start As Long
  1317. Dim Tmp_Fin As Long
  1318. Dim Hex_Count As Long
  1319. Frm_Logics.Show vbModal, Me
  1320. If Logic_Val.None Then Exit Sub
  1321. Tmp_Start = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked)
  1322. Tmp_Fin = Get_Actual(Hex_Val.SelStart + Hex_Val.SelLength, Mnu_Opt_Wide.Checked) - 1
  1323. If Logic_Val.Endian = Little_Endian Then
  1324.     Hex_Count = 0
  1325. Else
  1326.     Hex_Count = Logic_Val.Count
  1327. End If
  1328. Skip_A_F = False
  1329. For Loop_1 = Tmp_Start To Tmp_Fin
  1330.     HexD.SelStart = Set_H_Actual(Loop_1, Mnu_Opt_Wide.Checked)
  1331.     HexD.SelLength = 2
  1332.     Select Case Logic_Val.Logics
  1333.         Case Logic_And
  1334.             HexD.SelText = Right("00" & Hex(Hex_Array(Loop_1) And Logic_Val.HexC(Hex_Count)), 2)
  1335.         Case logic_Nand
  1336.             HexD.SelText = Right("00" & Hex(Not (Hex_Array(Loop_1) And Logic_Val.HexC(Hex_Count))), 2)
  1337.         Case Logic_Or
  1338.             HexD.SelText = Right("00" & Hex(Hex_Array(Loop_1) Or Logic_Val.HexC(Hex_Count)), 2)
  1339.         Case Logic_Nor
  1340.             HexD.SelText = Right("00" & Hex(Not (Hex_Array(Loop_1) Or Logic_Val.HexC(Hex_Count))), 2)
  1341.         Case Logic_Xor
  1342.             HexD.SelText = Right("00" & Hex(Hex_Array(Loop_1) Xor Logic_Val.HexC(Hex_Count)), 2)
  1343.         Case Logic_XNor
  1344.             HexD.SelText = Right("00" & Hex(Not (Hex_Array(Loop_1) Xor Logic_Val.HexC(Hex_Count))), 2)
  1345.         Case Logic_Not
  1346.             HexD.SelText = Right("00" & Hex(Not (Hex_Array(Loop_1))), 2)  ' Logic 'not' has single input..
  1347.     End Select
  1348.     Select Case Logic_Val.Endian
  1349.         Case Little_Endian
  1350.             Hex_Count = Hex_Count + 1
  1351.             If Hex_Count > Logic_Val.Count Then
  1352.                 Hex_Count = 0
  1353.             End If
  1354.         Case Big_Endian
  1355.             Hex_Count = Hex_Count - 1
  1356.             If Hex_Count < 0 Then
  1357.                 Hex_Count = Logic_Val.Count
  1358.             End If
  1359.     End Select
  1360. Next Loop_1
  1361. Skip_A_F = False
  1362. File_Change = True
  1363. Mnu_Functions.Enabled = True
  1364. End Sub
  1365.  
  1366. Private Sub Popup_Paste_Click()
  1367. ' Custom Popup Paste code
  1368. Dim Char_code As Byte
  1369. Dim Tmp_Loop As Long
  1370. Dim Tmp_Start As Long
  1371. Dim Tmp_Fin As Long
  1372. Dim Tmp_Str As String
  1373. Dim Msg_ret As Long
  1374. If Not Clipboard.GetFormat(vbCFText) Then Exit Sub
  1375. Tmp_Str = Clipboard.GetText(vbCFText)
  1376. Tmp_Start = Get_Actual(Hex_Val.SelStart, Mnu_Opt_Wide.Checked)
  1377. Tmp_Fin = Len(Tmp_Str)
  1378. If Tmp_Fin + Tmp_Start > Tot_Count - 1 Then
  1379.     Msg_ret = MsgBox("Text in Clipboard is bigger than buffer size" & vbCrLf & "The Paste canot be undone" _
  1380.             & vbCrLf & " Continue anyway ?", vbOKCancel)
  1381.     If Msg_ret = vbCancel Then
  1382.         Exit Sub
  1383.     End If
  1384.     Skip_F_P = True
  1385. End If
  1386. Skip_A_F = True
  1387. For Tmp_Loop = 0 To Tmp_Fin - 1
  1388.     If (Tmp_Start + Tmp_Loop) = Tot_Count Then
  1389.         File_Change = True
  1390.         Next_Block (1)
  1391.         Tmp_Start = Tmp_Start - Tot_Count
  1392.         Skip_A_F = True
  1393.     End If
  1394.     Char_code = Asc(Mid(Tmp_Str, Tmp_Loop + 1, 1))
  1395.     Hex_Array(Tmp_Start + Tmp_Loop) = Char_code
  1396.     HexD.SelStart = Set_H_Actual(Tmp_Start + Tmp_Loop, Mnu_Opt_Wide.Checked)
  1397.     HexD.SelLength = 2
  1398.     HexD.SelText = Right("00" & Hex(Char_code), 2)
  1399.     Hex_Val.SelStart = Set_Actual(Tmp_Start + Tmp_Loop, Mnu_Opt_Wide.Checked)
  1400.     Hex_Val.SelLength = 1
  1401.     Hex_Val.SelText = Valid_Char(Char_code)
  1402. Next Tmp_Loop
  1403. Skip_F_P = Mnu_Opt_Fwrite.Checked
  1404. Skip_A_F = False
  1405. File_Change = True
  1406. Mnu_Functions.Enabled = True
  1407. End Sub
  1408.  
  1409. Private Sub Scroll_Pos_Change()
  1410. If File_Change Then Write_Data File_Pos
  1411. If Skip_Read Then
  1412.     Exit Sub
  1413. End If
  1414. File_Pos = CLng(Scroll_Pos.Value)
  1415. File_Pos = File_Pos * Scroll_Mul
  1416. If File_Pos > File_Len - (Tot_Count / 2) Then
  1417.     File_Pos = IIf(File_Len > (Tot_Count / 2), (File_Len - (Tot_Count / 2)) And &H7FFFFFF0, 0)
  1418. End If
  1419. Read_Data File_Pos
  1420. End Sub
  1421.  
  1422. Private Sub Scroll_Pos_Scroll()
  1423. If Skip_Read Then
  1424.     Exit Sub
  1425. End If
  1426. File_Pos = Scroll_Pos.Value
  1427. File_Pos = File_Pos * Scroll_Mul
  1428. If File_Pos > File_Len - (Tot_Count / 2) Then
  1429.     File_Pos = IIf(File_Len > (Tot_Count / 2), (File_Len - (Tot_Count / 2)) And &H7FFFFFF0, 0)
  1430. End If
  1431. Read_Data File_Pos
  1432. End Sub
  1433.