document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. Imports System.IO
  2. Imports System.Text
  3.  
  4. Module Main
  5.     Private Const AppVer As String = "0.5b"
  6.     Private ReadOnly OPS() As String = {
  7.         "NOP", _
  8.         "ASSIGN", _
  9.         "ADD", _
  10.         "SUB", _
  11.         "MUL", _
  12.         "DIV", _
  13.         "MOD", _
  14.         "TO_NUMBER", _
  15.         "CSIGN", _
  16.         "NOT", _
  17.         "INC", _
  18.         "DEC", _
  19.         "POST_INC", _
  20.         "POST_DEC", _
  21.         "CMPEQ", _
  22.         "CMPNEQ", _
  23.         "CMPSEQ", _
  24.         "CMPSNEQ", _
  25.         "CMPLT", _
  26.         "CMPLE", _
  27.         "CMPGE", _
  28.         "CMPGT", _
  29.         "INSTANCEOF", _
  30.         "IN", _
  31.         "TYPEOF", _
  32.         "BIT_AND", _
  33.         "BIT_XOR", _
  34.         "BIT_OR", _
  35.         "BIT_NOT", _
  36.         "LSHIFT", _
  37.         "S_RSHIFT", _
  38.         "U_RSHIFT", _
  39.         "COPY", _
  40.         "SWAP", _
  41.         "REMOVE", _
  42.         "PUSH_UNDEFINED", _
  43.         "PUSH_NULL", _
  44.         "PUSH_BOOL", _
  45.         "PUSH_INT", _
  46.         "PUSH_FLOAT", _
  47.         "PUSH_STRING", _
  48.         "PUSH_OBJECT", _
  49.         "PUSH_FUNC", _
  50.         "PUSH_ARRAY", _
  51.         "PUSH_THIS", _
  52.         "PUSH_LOCAL", _
  53.         "PUSH_GLOBAL", _
  54.         "GETATTR", _
  55.         "GETATTR_KEEPOBJ", _
  56.         "SETATTR", _
  57.         "DELATTR", _
  58.         "APPEND_ATTR", _
  59.         "GETITEM", _
  60.         "GETITEM_KEEPOBJ", _
  61.         "SETITEM", _
  62.         "DELITEM", _
  63.         "APPEND_ITEM", _
  64.         "JUMP", _
  65.         "JUMPT", _
  66.         "JUMPF", _
  67.         "CALL_FUNC", _
  68.         "CALL_METHOD", _
  69.         "CALL_CONSTRUCTOR", _
  70.         "RET", _
  71.         "Throw", _
  72.         "TRYBLK_IN", _
  73.         "TRYBLK_OUT", _
  74.         "CATCH_FINALLYBLK_IN", _
  75.         "CATCH_FINALLYBLK_OUT", _
  76.         "HALT", _
  77.         "DEBUG_FILE", _
  78.         "DEBUG_LINE", _
  79.         "GETITEM_KEEPOBJNAME", _
  80.         "PUSH_VECTOR", _
  81.         "GET_VECTOR_ELEMENT", _
  82.         "GET_VECTOR_ELEMENT_KEEPVECTOR", _
  83.         "ASSGN_VECTOR_ELEMENT", _
  84.         "SETATTR_VECTOR_ELEMENT", _
  85.         "SETITEM_VECTOR_ELEMENT"}
  86.  
  87.     Private ReadOnly _MAGIC() As Byte = New Byte() {86, 83, 77, 88}
  88.     Private VarLevel As Integer = 0
  89.     Private Variables As New List(Of Var)
  90.     Private CrntFileStream As FileStream
  91.     Private TYPE As String
  92.     Private VERSION As String
  93.     Private HEADER As String
  94.     Private Decomped As Boolean
  95.  
  96.     Private ARG_SCRPJS As Boolean
  97.     Private ARG_HDRTXT As Boolean
  98.     Private ARG_OPSTXT As Boolean
  99.     Private ARG_STRTXT As Boolean
  100.     Private ARG_ATTTXT As Boolean
  101.     Private ARG_GLBTXT As Boolean
  102.  
  103.     Private ARG_HDRBIN As Boolean
  104.     Private ARG_OPSBIN As Boolean
  105.     Private ARG_STRBIN As Boolean
  106.     Private ARG_ATTBIN As Boolean
  107.     Private ARG_GLBBIN As Boolean
  108.  
  109.     Private ARG_SOURCE As String
  110.     Private ARG_DESTIN As String
  111.  
  112.     Private ARG_OUTHDR As Boolean
  113.     Private ARG_HLTOUT As Boolean
  114.  
  115.     Private OPCODESInfo(1) As Integer
  116.     Private STRINGSInfo(1) As Integer
  117.     Private ATTRIBSInfo(1) As Integer
  118.     Private GLOBALSInfo(1) As Integer
  119.  
  120.     Private HEADERByte(51) As Byte
  121.     Private OPCODESByte() As Byte
  122.     Private STRINGSByte() As Byte
  123.     Private ATTRIBSByte() As Byte
  124.     Private GLOBALSByte() As Byte
  125.  
  126.     Private OPCODES() As OPcode
  127.     Private STRINGS() As String
  128.     Private ATTRIBS() As String
  129.     Private GLOBALS() As String
  130.  
  131.     Private Structure Var
  132.         Dim _Value As String
  133.         Dim _Lvl As Integer
  134.         Public ReadOnly Property Value() As String
  135.             Get
  136.                 Return _Value
  137.             End Get
  138.         End Property
  139.         Public ReadOnly Property Level() As String
  140.             Get
  141.                 Return _Lvl
  142.             End Get
  143.         End Property
  144.         Public Sub New(ByVal Name As String, ByVal Lvl As Integer)
  145.             _Value = Name
  146.             _Lvl = Lvl
  147.         End Sub
  148.     End Structure
  149.  
  150.     Private Structure OPcode
  151.         Dim ACTIVE As Boolean
  152.         Dim OPNBR As Integer
  153.         Dim OPNAME As String
  154.         Dim ARG As Byte
  155.         Dim UNK As Byte
  156.         Dim VAR As Byte
  157.         Dim VAL() As Byte
  158.         Dim CODE As String
  159.         Dim PRECODE As String
  160.         Dim PROCODE As String
  161.         Dim DONE As Boolean
  162.         Public Sub New(ByVal Bytes() As Byte)
  163.             ACTIVE = True
  164.             DONE = False
  165.             OPNBR = Bytes2Int({0, 0, 0, Bytes(0)})
  166.             OPNAME = OPS(OPNBR)
  167.             ARG = Bytes(1)
  168.             UNK = Bytes(2)
  169.             VAR = Bytes(3)
  170.             VAL = {Bytes(4), Bytes(5), Bytes(6), Bytes(7)}
  171.             PRECODE = ""
  172.             CODE = ""
  173.             PROCODE = ""
  174.         End Sub
  175.         Public Sub Resolve(ByVal Line As Integer)
  176.             Select Case OPNBR
  177.                 Case 0 \'NOP
  178.  
  179.                 Case 1 \'ASSIGN
  180.                     Dim num As Integer = 0
  181.                     Dim text(1) As String
  182.                     For i = Line - 1 To 0 Step -1
  183.                         If OPCODES(i).ACTIVE Then
  184.                             text(num) = OPCODES(i).CODE
  185.                             OPCODES(i).ACTIVE = False
  186.                             num += 1
  187.                             If num = 2 Then Exit For
  188.                         End If
  189.                     Next
  190.                     If AddVariable(text(1)) Then
  191.                         CODE = text(1) & " = " & text(0)
  192.                     Else
  193.                         CODE = "var " & text(1) & " = " & text(0)
  194.                     End If
  195.                     \'DONE = True
  196.                 Case 2 \'ADD
  197.                     Dim num As Integer = 0
  198.                     Dim text(1) As String
  199.                     For i = Line - 1 To 0 Step -1
  200.                         If OPCODES(i).ACTIVE Then
  201.                             text(num) = OPCODES(i).CODE
  202.                             OPCODES(i).ACTIVE = False
  203.                             num += 1
  204.                             If num = 2 Then Exit For
  205.                         End If
  206.                     Next
  207.                     CODE = text(1) & " + " & text(0)
  208.                     \'DONE = True
  209.                 Case 3 \'SUB
  210.                     Dim num As Integer = 0
  211.                     Dim text(1) As String
  212.                     For i = Line - 1 To 0 Step -1
  213.                         If OPCODES(i).ACTIVE Then
  214.                             text(num) = OPCODES(i).CODE
  215.                             OPCODES(i).ACTIVE = False
  216.                             num += 1
  217.                             If num = 2 Then Exit For
  218.                         End If
  219.                     Next
  220.                     CODE = text(1) & " - " & text(0)
  221.                     \'DONE = True
  222.                 Case 4 \'MUL
  223.                     Dim num As Integer = 0
  224.                     Dim text(1) As String
  225.                     For i = Line - 1 To 0 Step -1
  226.                         If OPCODES(i).ACTIVE Then
  227.                             text(num) = OPCODES(i).CODE
  228.                             OPCODES(i).ACTIVE = False
  229.                             num += 1
  230.                             If num = 2 Then Exit For
  231.                         End If
  232.                     Next
  233.                     CODE = text(1) & " * " & text(0)
  234.                     \'DONE = True
  235.                 Case 5 \'DIV
  236.                     Dim num As Integer = 0
  237.                     Dim text(1) As String
  238.                     For i = Line - 1 To 0 Step -1
  239.                         If OPCODES(i).ACTIVE Then
  240.                             text(num) = OPCODES(i).CODE
  241.                             OPCODES(i).ACTIVE = False
  242.                             num += 1
  243.                             If num = 2 Then Exit For
  244.                         End If
  245.                     Next
  246.                     CODE = text(1) & " / " & text(0)
  247.                     \'DONE = True
  248.                 Case 6 \'MOD
  249.                     Dim num As Integer = 0
  250.                     Dim text(1) As String
  251.                     For i = Line - 1 To 0 Step -1
  252.                         If OPCODES(i).ACTIVE Then
  253.                             text(num) = OPCODES(i).CODE
  254.                             OPCODES(i).ACTIVE = False
  255.                             num += 1
  256.                             If num = 2 Then Exit For
  257.                         End If
  258.                     Next
  259.                     CODE = text(1) & " % " & text(0)
  260.                     \'DONE = True
  261.                 Case 7 \'TO_NUMBER
  262.  
  263.                 Case 8 \'CSIGN
  264.                     For num7 As Integer = Line - 1 To 0 Step -1
  265.                         If OPCODES(num7).ACTIVE Then
  266.                             CODE = "-" + OPCODES(num7).CODE
  267.                             OPCODES(num7).ACTIVE = False
  268.                             Exit For
  269.                         End If
  270.                     Next
  271.                     \'DONE = True
  272.                 Case 9 \'NOT
  273.  
  274.                 Case 10 \'INC
  275.                     For i = Line - 1 To 0 Step -1
  276.                         If OPCODES(i).ACTIVE Then
  277.                             OPCODES(i).ACTIVE = False
  278.                             CODE = "++" & OPCODES(i).CODE
  279.                             Exit For
  280.                         End If
  281.                     Next
  282.                 Case 11 \'DEC
  283.                     For i = Line - 1 To 0 Step -1
  284.                         If OPCODES(i).ACTIVE Then
  285.                             OPCODES(i).ACTIVE = False
  286.                             CODE = "--" & OPCODES(i).CODE
  287.                             Exit For
  288.                         End If
  289.                     Next
  290.                 Case 12 \'POST_INC
  291.                     For i = Line - 1 To 0 Step -1
  292.                         If OPCODES(i).ACTIVE Then
  293.                             OPCODES(i).ACTIVE = False
  294.                             CODE = OPCODES(i).CODE & "++"
  295.                             Exit For
  296.                         End If
  297.                     Next
  298.                 Case 13 \'POST_DEC
  299.                     For i = Line - 1 To 0 Step -1
  300.                         If OPCODES(i).ACTIVE Then
  301.                             OPCODES(i).ACTIVE = False
  302.                             CODE = OPCODES(i).CODE & "--"
  303.                             Exit For
  304.                         End If
  305.                     Next
  306.                 Case 14 \'CMPEQ
  307.                     Dim num As Integer = 0
  308.                     Dim text(1) As String
  309.                     For i = Line - 1 To 0 Step -1
  310.                         If OPCODES(i).ACTIVE Then
  311.                             text(num) = OPCODES(i).CODE
  312.                             OPCODES(i).ACTIVE = False
  313.                             num += 1
  314.                             If num = 2 Then Exit For
  315.                         End If
  316.                     Next
  317.                     CODE = text(1) & " == " & text(0)
  318.                     \'DONE = True
  319.                 Case 15 \'CMPNEQ
  320.                     Dim num As Integer = 0
  321.                     Dim text(1) As String
  322.                     For i = Line - 1 To 0 Step -1
  323.                         If OPCODES(i).ACTIVE Then
  324.                             text(num) = OPCODES(i).CODE
  325.                             OPCODES(i).ACTIVE = False
  326.                             num += 1
  327.                             If num = 2 Then Exit For
  328.                         End If
  329.                     Next
  330.                     CODE = text(1) & " != " & text(0)
  331.                     \'DONE = True
  332.                 Case 16 \'CMPSEQ
  333.                     Dim num As Integer = 0
  334.                     Dim text(1) As String
  335.                     For i = Line - 1 To 0 Step -1
  336.                         If OPCODES(i).ACTIVE Then
  337.                             text(num) = OPCODES(i).CODE
  338.                             OPCODES(i).ACTIVE = False
  339.                             num += 1
  340.                             If num = 2 Then Exit For
  341.                         End If
  342.                     Next
  343.                     CODE = text(1) & " === " & text(0)
  344.                     \'DONE = True
  345.                 Case 17 \'CMPSNEQ
  346.                     Dim num As Integer = 0
  347.                     Dim text(1) As String
  348.                     For i = Line - 1 To 0 Step -1
  349.                         If OPCODES(i).ACTIVE Then
  350.                             text(num) = OPCODES(i).CODE
  351.                             OPCODES(i).ACTIVE = False
  352.                             num += 1
  353.                             If num = 2 Then Exit For
  354.                         End If
  355.                     Next
  356.                     CODE = text(1) & " !== " & text(0)
  357.                     \'DONE = True
  358.                 Case 18 \'CMPLT
  359.                     Dim num As Integer = 0
  360.                     Dim text(1) As String
  361.                     For i = Line - 1 To 0 Step -1
  362.                         If OPCODES(i).ACTIVE Then
  363.                             text(num) = OPCODES(i).CODE
  364.                             OPCODES(i).ACTIVE = False
  365.                             num += 1
  366.                             If num = 2 Then Exit For
  367.                         End If
  368.                     Next
  369.                     CODE = text(1) & " < " & text(0)
  370.                     \'DONE = True
  371.                 Case 19 \'CMPLE
  372.                     Dim num As Integer = 0
  373.                     Dim text(1) As String
  374.                     For i = Line - 1 To 0 Step -1
  375.                         If OPCODES(i).ACTIVE Then
  376.                             text(num) = OPCODES(i).CODE
  377.                             OPCODES(i).ACTIVE = False
  378.                             num += 1
  379.                             If num = 2 Then Exit For
  380.                         End If
  381.                     Next
  382.                     CODE = text(1) & " <= " & text(0)
  383.                     \'DONE = True
  384.                 Case 20 \'CMPGE
  385.                     Dim num As Integer = 0
  386.                     Dim text(1) As String
  387.                     For i = Line - 1 To 0 Step -1
  388.                         If OPCODES(i).ACTIVE Then
  389.                             text(num) = OPCODES(i).CODE
  390.                             OPCODES(i).ACTIVE = False
  391.                             num += 1
  392.                             If num = 2 Then Exit For
  393.                         End If
  394.                     Next
  395.                     CODE = text(1) & " >= " & text(0)
  396.                     \'DONE = True
  397.                 Case 21 \'CMPGT
  398.                     Dim num As Integer = 0
  399.                     Dim text(1) As String
  400.                     For i = Line - 1 To 0 Step -1
  401.                         If OPCODES(i).ACTIVE Then
  402.                             text(num) = OPCODES(i).CODE
  403.                             OPCODES(i).ACTIVE = False
  404.                             num += 1
  405.                             If num = 2 Then Exit For
  406.                         End If
  407.                     Next
  408.                     CODE = text(1) & " > " & text(0)
  409.                     \'DONE = True
  410.                 Case 22 \'INSTANCEOF
  411.  
  412.                 Case 23 \'IN
  413.  
  414.                 Case 24 \'TYPEOF
  415.  
  416.                 Case 25 \'BIT_AND
  417.  
  418.                 Case 26 \'BIT_XOR
  419.  
  420.                 Case 27 \'BIT_OR
  421.  
  422.                 Case 28 \'BIT_NOT
  423.  
  424.                 Case 29 \'LSHIFT
  425.  
  426.                 Case 30 \'S_RSHIFT
  427.  
  428.                 Case 31 \'U_RSHIFT
  429.  
  430.                 Case 32 \'COPY
  431.  
  432.                 Case 33 \'SWAP
  433.  
  434.                 Case 34 \'REMOVE
  435.                     For i = Line - 1 To 0 Step -1
  436.                         If OPCODES(i).ACTIVE Then
  437.                             OPCODES(i).ACTIVE = False
  438.                             CODE = OPCODES(i).CODE & ";"
  439.                             Exit For
  440.                         End If
  441.                     Next
  442.                     DONE = True
  443.                     ACTIVE = False
  444.                 Case 35 \'PUSH_UNDEFINED
  445.                     Dim num30 As Integer = Line - 1
  446.                     While num30 >= 0 AndAlso OPCODES(num30).OPNBR <> 42
  447.                         If OPCODES(num30).OPNBR = 34 Then
  448.                             \'OPCODES(num30).ACTIVE = False
  449.                             CODE = OPCODES(num30).CODE + vbCrLf + CODE
  450.                         End If
  451.                         num30 -= 1
  452.                     End While
  453.                     CODE = CODE.Trim
  454.                     \'DONE = True
  455.                 Case 36 \'PUSH_NULL
  456.                     CODE = "null"
  457.                     \'DONE = True
  458.                 Case 37 \'PUSH_BOOL
  459.                     If VAL(3) = 0 Then CODE = "false" Else CODE = "true"
  460.                     \'DONE = True
  461.                 Case 38 \'PUSH_INT
  462.                     CODE = Bytes2Int(VAL)
  463.                     \'DONE = True
  464.                 Case 39 \'PUSH_FLOAT
  465.                     CODE = Bytes2Sng(VAL).ToString("0.0###########").Replace(",", ".")
  466.                     \'DONE = True
  467.                 Case 40 \'PUSH_STRING
  468.                     CODE = """" & STRINGS(Bytes2Int(VAL)) & """"
  469.                     \'DONE = True
  470.                 Case 41 \'PUSH_OBJECT
  471.  
  472.                 Case 42 \'PUSH_FUNC
  473.                     CODE = "function(){}"
  474.                     ACTIVE = False
  475.                 Case 43 \'PUSH_ARRAY
  476.                     CODE = "[]"
  477.                 Case 44 \'PUSH_THIS
  478.  
  479.                 Case 45 \'PUSH_LOCAL
  480.                     CODE = "localVar_" & Bytes2Int(VAL)
  481.                     \'DONE = True
  482.                 Case 46 \'PUSH_GLOBAL
  483.                     CODE = GLOBALS(Bytes2Int(VAL))
  484.                     \'DONE = True
  485.                 Case 47 \'GETATTR
  486.                     For num32 As Integer = Line - 1 To 0 Step -1
  487.                         If OPCODES(num32).ACTIVE Then
  488.                             CODE = OPCODES(num32).CODE + "." + ATTRIBS(Bytes2Int(VAL))
  489.                             OPCODES(num32).ACTIVE = False
  490.                             Exit For
  491.                         End If
  492.                     Next
  493.                     ACTIVE = True
  494.                     \'DONE = True
  495.                 Case 48 \'GETATTR_KEEPOBJ
  496.                     For num33 As Integer = Line - 1 To 0 Step -1
  497.                         If OPCODES(num33).ACTIVE Then
  498.                             CODE = OPCODES(num33).CODE + "." + ATTRIBS(Bytes2Int(VAL))
  499.                             Exit For
  500.                         End If
  501.                     Next
  502.                     \'DONE = True
  503.                 Case 49 \'SETATTR
  504.                     Dim num As Integer = 0
  505.                     Dim text(1) As String
  506.                     For i = Line - 1 To 0 Step -1
  507.                         If OPCODES(i).ACTIVE Then
  508.                             text(num) = OPCODES(i).CODE
  509.                             OPCODES(i).ACTIVE = False
  510.                             num += 1
  511.                             If num = 2 Then Exit For
  512.                         End If
  513.                     Next
  514.                     CODE = text(1) & "." & ATTRIBS(Bytes2Int(VAL)) & " = " & text(0)
  515.                     \'DONE = True
  516.                 Case 50 \'DELATTR
  517.  
  518.                 Case 51 \'APPEND_ATTR
  519.  
  520.                 Case 52 \'GETITEM
  521.                     Dim num As Integer = 0
  522.                     Dim text(1) As String
  523.                     For i = Line - 1 To 0 Step -1
  524.                         If OPCODES(i).ACTIVE Then
  525.                             text(num) = OPCODES(i).CODE
  526.                             OPCODES(i).ACTIVE = False
  527.                             num += 1
  528.                             If num = 2 Then Exit For
  529.                         End If
  530.                     Next
  531.                     CODE = text(1) + "[" + text(0) + "]"
  532.                     \'DONE = True
  533.                 Case 53 \'GETITEM_KEEPOBJ
  534.                     Dim num As Integer = 0
  535.                     Dim text(1) As String
  536.                     For i = Line - 1 To 0 Step -1
  537.                         If OPCODES(i).ACTIVE Then
  538.                             text(num) = OPCODES(i).CODE
  539.                             num += 1
  540.                             If num = 2 Then Exit For
  541.                         End If
  542.                     Next
  543.                     CODE = text(1) + "[" + text(0) + "]"
  544.                     \'DONE = True
  545.                 Case 54 \'SETITEM \'Cnp
  546.                     Dim num38 As Integer = 0
  547.                     Dim text31 As String = ""
  548.                     Dim text32 As String = ""
  549.                     Dim text33 As String = ""
  550.                     For num39 As Integer = Line - 1 To 0 Step -1
  551.                         If OPCODES(num39).ACTIVE Then
  552.                             num38 += 1
  553.                             If num38 = 1 Then
  554.                                 text31 = OPCODES(num39).CODE
  555.                                 OPCODES(num39).ACTIVE = False
  556.                             Else
  557.                                 If num38 = 2 Then
  558.                                     text32 = OPCODES(num39).CODE
  559.                                     OPCODES(num39).ACTIVE = False
  560.                                 Else
  561.                                     If num38 = 3 Then
  562.                                         text33 = OPCODES(num39).CODE
  563.                                         OPCODES(num39).ACTIVE = False
  564.                                         Exit For
  565.                                     End If
  566.                                 End If
  567.                             End If
  568.                         End If
  569.                     Next
  570.                     Me.CODE = text33 & "[" & text32 & "] = " & text31
  571.                     \'Me.DONE = True
  572.                 Case 55 \'DELITEM
  573.  
  574.                 Case 56 \'APPEND_ITEM
  575.                     Dim elementIndex As Integer = Line - 1
  576.                     Dim element As String = OPCODES(elementIndex).CODE
  577.                     OPCODES(elementIndex).ACTIVE = False
  578.                     For i = Line - 1 To 0 Step -1
  579.                         If OPCODES(i).ACTIVE AndAlso OPCODES(i).OPNBR = 43 Then
  580.                             Dim openArray As String = OPCODES(i).CODE.Substring(0, OPCODES(i).CODE.Length - 1)
  581.                             If openArray.EndsWith("[") Then
  582.                                 openArray &= element & "]"
  583.                             Else
  584.                                 openArray &= ", " & element & "]"
  585.                             End If
  586.                             CODE = openArray
  587.                             OPCODES(i).CODE = openArray
  588.                             Exit For
  589.                         End If
  590.                     Next
  591.                     ACTIVE = False
  592.                 Case 57 \'JUMP \'Cnp
  593.                     Me.CODE = "GoTo 0x" + Bytes2Int(VAL).ToString("X4")
  594.                     Me.ACTIVE = False
  595.                     Me.DONE = True
  596.                 Case 58 \'JUMPT \'Cnp
  597.                     For num42 As Integer = Line - 1 To 0 Step -1
  598.                         If OPCODES(num42).ACTIVE Then
  599.                             If OPCODES(num42).CODE.StartsWith("(") _
  600.                                 AndAlso OPCODES(num42).CODE.EndsWith(")") Then
  601.                                 Me.CODE = "if (!" + OPCODES(num42).CODE + ")" & vbCrLf & "{"
  602.                             Else
  603.                                 Me.CODE = "if (!(" + OPCODES(num42).CODE + "))" & vbCrLf & "{"
  604.                             End If
  605.                             OPCODES(num42).ACTIVE = False
  606.                             Exit For
  607.                         End If
  608.                     Next
  609.                     Me.DONE = True
  610.                 Case 59 \'JUMPF \'Cnp
  611.                     For num41 As Integer = Line - 1 To 0 Step -1
  612.                         If OPCODES(num41).ACTIVE Then
  613.                             Dim closing As Integer = Bytes2Int(VAL)
  614.                             If OPCODES(num41).CODE.StartsWith("(") AndAlso OPCODES(num41).CODE.EndsWith(")") Then
  615.                                 CODE = "if " + OPCODES(num41).CODE & vbCrLf & "{"
  616.                                 OPCODES(num41).ACTIVE = False
  617.                                 For i = closing To Line Step -1
  618.                                     If OPCODES(i).ACTIVE AndAlso OPCODES(i).OPNBR = 34 Then
  619.                                         Dim closing2 As Integer = Bytes2Int(OPCODES(closing - 1).VAL)
  620.                                         If OPCODES(closing - 1).OPNBR = 57 Then
  621.                                             OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "} else {"
  622.                                             For y = closing2 To Line Step -1
  623.                                                 If OPCODES(y).ACTIVE AndAlso OPCODES(y).OPNBR = 34 Then
  624.                                                     OPCODES(y).PROCODE = OPCODES(y).PROCODE & vbCrLf & "}"
  625.                                                     Exit For
  626.                                                 End If
  627.                                             Next
  628.                                             Exit For
  629.                                         Else
  630.                                             OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "}"
  631.                                             Exit For
  632.                                         End If
  633.                                     End If
  634.                                 Next
  635.                                 Exit For
  636.                             Else
  637.                                 CODE = "if (" + OPCODES(num41).CODE + ")" & vbCrLf & "{"
  638.                                 OPCODES(num41).ACTIVE = False
  639.                                 For i = closing To Line Step -1
  640.                                     If OPCODES(i).ACTIVE AndAlso OPCODES(i).OPNBR = 34 Then
  641.                                         Dim closing2 As Integer = Bytes2Int(OPCODES(closing - 1).VAL)
  642.                                         If OPCODES(closing - 1).OPNBR = 57 Then
  643.                                             OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "} else {"
  644.                                             For y = closing2 To Line Step -1
  645.                                                 If OPCODES(y).ACTIVE AndAlso OPCODES(y).OPNBR = 34 Then
  646.                                                     OPCODES(y).PROCODE = OPCODES(y).PROCODE & vbCrLf & "}"
  647.                                                     Exit For
  648.                                                 End If
  649.                                             Next
  650.                                             Exit For
  651.                                         Else
  652.                                             OPCODES(i).PROCODE = OPCODES(i).PROCODE & vbCrLf & "}"
  653.                                             Exit For
  654.                                         End If
  655.                                     End If
  656.                                 Next
  657.                                 Exit For
  658.                             End If
  659.                         End If
  660.                     Next
  661.                     VarLevel += 1
  662.                     Me.DONE = True
  663.                 Case 60 \'CALL_FUNC \'Cnp
  664.                     For num43 As Integer = Line - 1 To 0 Step -1
  665.                         If OPCODES(num43).ACTIVE Then
  666.                             Me.CODE = OPCODES(num43).CODE + "()"
  667.                             OPCODES(num43).ACTIVE = False
  668.                             Exit For
  669.                         End If
  670.                     Next
  671.                     Me.DONE = True
  672.                 Case 61 \'CALL_METHOD \'Cnp
  673.                     Dim array As String() = New String(Bytes2Int(VAL)) {}
  674.                     Dim num44 As Integer = array.Length - 1
  675.                     For num45 As Integer = Line - 1 To 0 Step -1
  676.                         If OPCODES(num45).ACTIVE Then
  677.                             array(num44) = OPCODES(num45).CODE
  678.                             OPCODES(num45).ACTIVE = False
  679.                             num44 -= 1
  680.                             If num44 = -1 Then
  681.                                 Exit For
  682.                             End If
  683.                         End If
  684.                     Next
  685.                     Select Case array.Length
  686.                         Case 1
  687.                             Me.CODE = array(0) + "()"
  688.                         Case 2
  689.                             Me.CODE = array(0) + "(" + array(1) + ")"
  690.                             Me.DONE = True
  691.                         Case Else
  692.                             Me.CODE = array(0) + "(" + array(1)
  693.                             Dim array2 As String() = array
  694.                             Dim arg_19FA_0 As String() = array2
  695.                             Dim num46 As Integer = array.Length - 1
  696.                             arg_19FA_0(num46) = array2(num46) + ")"
  697.                             Dim arg_1A04_0 As Integer = 2
  698.                             Dim num47 As Integer = array.Length - 1
  699.                             For num48 As Integer = arg_1A04_0 To num47
  700.                                 Me.CODE = Me.CODE + ", " + array(num48)
  701.                             Next
  702.                     End Select
  703.                     \'DONE = True
  704.                 Case 62 \'CALL_CONSTRUCTOR \'Cnp
  705.                     Dim array3 As String() = New String(Bytes2Int(VAL)) {}
  706.                     Dim num49 As Integer = array3.Length - 1
  707.                     For num50 As Integer = Line - 1 To 0 Step -1
  708.                         If OPCODES(num50).ACTIVE Then
  709.                             array3(num49) = OPCODES(num50).CODE
  710.                             OPCODES(num50).ACTIVE = False
  711.                             num49 -= 1
  712.                             If num49 = -1 Then
  713.                                 Exit For
  714.                             End If
  715.                         End If
  716.                     Next
  717.                     Select Case array3.Length
  718.                         Case 1
  719.                             Me.CODE = "new " + array3(0) + "()"
  720.                         Case 2
  721.                             Me.CODE = "new " & array3(0) & "(" & array3(1) & ")"
  722.                             \'Me.DONE = True
  723.                         Case Else
  724.                             Me.CODE = "new " + array3(0) + "(" + array3(1)
  725.                             Dim array2 As String() = array3
  726.                             Dim arg_1B70_0 As String() = array2
  727.                             Dim num46 As Integer = array3.Length - 1
  728.                             arg_1B70_0(num46) = array2(num46) + ")"
  729.                             Dim arg_1B7A_0 As Integer = 2
  730.                             Dim num51 As Integer = array3.Length - 1
  731.                             For num52 As Integer = arg_1B7A_0 To num51
  732.                                 Me.CODE = Me.CODE + ", " + array3(num52)
  733.                             Next
  734.                     End Select
  735.                     \'CODE = CODE.Replace(";", ";" & vbCrLf)
  736.                     \'Me.DONE = True
  737.                 Case 63 \'RET
  738.                     For num54 As Integer = Line - 1 To 0 Step -1
  739.                         If OPCODES(num54).OPNBR = 42 Then
  740.                             Exit For
  741.                         Else
  742.                             OPCODES(num54).ACTIVE = False
  743.                             OPCODES(num54).DONE = False
  744.                         End If
  745.                     Next
  746.                     CODE = "function()" & vbCrLf & "{" & vbCrLf & OPCODES(Line - 1).CODE & vbCrLf & "}"
  747.                     \'Me.DONE = True
  748.                 Case 64 \'THROW
  749.  
  750.                 Case 65 \'TRYBLK_IN \'Cnp
  751.                     Me.CODE = "try {"
  752.                     Me.DONE = True
  753.                 Case 66 \'TRYBLK_OUT \'Cnp
  754.                     Me.CODE = "}"
  755.                     Me.DONE = True
  756.                 Case 67 \'CATCH_FINALLYBLK_IN \'Cnp
  757.                     Me.CODE = "catch(exception) {"
  758.                     Me.DONE = True
  759.                 Case 68 \'CATCH_FINALLYBLK_OUT \'Cnp
  760.                     Me.CODE = "}"
  761.                     Me.DONE = True
  762.                 Case 69 \'HALT
  763.                     CODE = "/* Decompiled by JSXviewer " & AppVer & " */"
  764.                     DONE = True
  765.                 Case 70 \'DEBUG_FILE
  766.  
  767.                 Case 71 \'DEBUG_LINE
  768.  
  769.                 Case 72 \'GETITEM_KEEPOBJNAME
  770.  
  771.                 Case 73 \'PUSH_VECTOR \'Cnp
  772.                     Dim num55 As Integer = 0
  773.                     Dim text34 As String = ""
  774.                     Dim Value = Bytes2Int(VAL)
  775.                     Me.CODE = "<"
  776.                     For num56 As Integer = Line - 1 To 0 Step -1
  777.                         If OPCODES(num56).ACTIVE Then
  778.                             num55 += 1
  779.                             If num55 = 1 Then
  780.                                 text34 = OPCODES(num56).CODE
  781.                             Else
  782.                                 text34 = OPCODES(num56).CODE + ", " + text34
  783.                             End If
  784.                             OPCODES(num56).ACTIVE = False
  785.                             If CSng(num55) >= Value Then
  786.                                 Exit For
  787.                             End If
  788.                         End If
  789.                     Next
  790.                     Me.CODE = Me.CODE + text34.Trim(",") + ">"
  791.                     \'Me.DONE = True
  792.                 Case 74 \'GET_VECTOR_ELEMENT
  793.                     For num57 As Integer = Line - 1 To 0 Step -1
  794.                         If OPCODES(num57).ACTIVE Then
  795.                             Me.CODE = OPCODES(num57).CODE & "->" & Bytes2Int(VAL).ToString
  796.                             OPCODES(num57).ACTIVE = False
  797.                             Exit For
  798.                         End If
  799.                     Next
  800.                     \'Me.DONE = True
  801.                 Case 75 \'GET_VECTOR_ELEMENT_KEEPVECTOR
  802.                     For num57 As Integer = Line - 1 To 0 Step -1
  803.                         If OPCODES(num57).ACTIVE Then
  804.                             Me.CODE = OPCODES(num57).CODE & "->" & Bytes2Int(VAL).ToString
  805.                             \'OPCODES(num57).ACTIVE = False
  806.                             Exit For
  807.                         End If
  808.                     Next
  809.                     \'Me.DONE = True
  810.                 Case 76 \'ASSGN_VECTOR_ELEMENT
  811.  
  812.                 Case 77 \'SETATTR_VECTOR_ELEMENT
  813.                     Dim top As String = OPCODES(Line - 2).CODE
  814.                     OPCODES(Line - 2).ACTIVE = False
  815.                     Dim bottom As String = OPCODES(Line - 1).CODE
  816.                     OPCODES(Line - 1).ACTIVE = False
  817.                     Dim index As Integer = Bytes2Int(VAL)
  818.                     CODE = top & "." & ATTRIBS(index) & "->" & VAR & " = " & bottom
  819.                 Case 78 \'SETITEM_VECTOR_ELEMENT \'Cnp
  820.                     Dim num58 As Integer = 0
  821.                     Dim text35 As String = ""
  822.                     Dim text36 As String = ""
  823.                     For num59 As Integer = Line - 1 To 0 Step -1
  824.                         num58 += 1
  825.                         If num58 = 1 Then
  826.                             text35 = OPCODES(num59).CODE
  827.                             OPCODES(num59).ACTIVE = False
  828.                         Else
  829.                             If num58 = 2 Then
  830.                                 text36 = OPCODES(num59).CODE
  831.                                 OPCODES(num59).ACTIVE = False
  832.                                 Exit For
  833.                             End If
  834.                         End If
  835.                     Next
  836.                     Me.CODE = text36 & "." & ATTRIBS(Bytes2Int(VAL)) & "->" & VAR & " = " & text35
  837.                     \'Me.DONE = True
  838.             End Select
  839.             Dim cnt As Integer = 0
  840.             For Each ch As Char In PROCODE
  841.                 If ch = "}" Then cnt += 1
  842.             Next
  843.             If cnt > 0 Then
  844.                 For i = 1 To cnt
  845.                     RemoveLevel()
  846.                 Next
  847.             End If
  848.         End Sub
  849.     End Structure
  850.  
  851.     Public Function AddVariable(ByVal Name) As Boolean
  852.         If Variables.Count > 0 Then
  853.             For i = 0 To Variables.Count - 1
  854.                 If Variables(i).Value = Name Then Return True
  855.             Next
  856.         End If
  857.         Variables.Add(New Var(Name, VarLevel))
  858.         Return False
  859.     End Function
  860.  
  861.     Public Sub RemoveLevel()
  862.         If Variables.Count > 0 Then
  863.             For i = Variables.Count - 1 To 0 Step -1
  864.                 If Variables(i).Level = VarLevel Then Variables.RemoveAt(i)
  865.             Next
  866.         End If
  867.         If VarLevel > 0 Then VarLevel -= 1
  868.     End Sub
  869.  
  870.     Sub Main()
  871.         Console.Clear()
  872.         Console.WriteLine(vbCrLf & " JSXviewer " & AppVer & " by TizzyT with help from Sandungas")
  873.         \'Dim Args() As String = {"2bc", "C:\\Users\\Thien\\Desktop\\local_vars\\local_vars.jsx"}
  874.         Dim Args() As String = My.Application.CommandLineArgs.ToArray
  875.         If Args.Length > 1 Then
  876.             For Each arg As Char In Args(0)
  877.                 Select Case arg.ToString.ToLower
  878.                     Case "0" : ARG_SCRPJS = True
  879.                     Case "1" : ARG_HDRTXT = True
  880.                     Case "2" : ARG_OPSTXT = True
  881.                     Case "3" : ARG_STRTXT = True
  882.                     Case "4" : ARG_ATTTXT = True
  883.                     Case "5" : ARG_GLBTXT = True
  884.                     Case "6" : ARG_HDRBIN = True
  885.                     Case "7" : ARG_OPSBIN = True
  886.                     Case "8" : ARG_STRBIN = True
  887.                     Case "9" : ARG_ATTBIN = True
  888.                     Case "a" : ARG_GLBBIN = True
  889.                     Case "b" : ARG_OUTHDR = True
  890.                     Case "c" : ARG_HLTOUT = True
  891.                 End Select
  892.             Next
  893.             If Args(1).Contains(":") Then ARG_SOURCE = Args(1) _
  894.                 Else ARG_SOURCE = Environment.CurrentDirectory & "\\" & Args(1)
  895.             If Args.Length = 3 Then
  896.                 If Args(2).Contains(":") Then ARG_DESTIN = Args(2).Trim("\\") & "\\" _
  897.                     Else ARG_DESTIN = Environment.CurrentDirectory & "\\" & Args(2).Trim("\\") & "\\"
  898.             ElseIf Args.Length = 2 Then
  899.                 ARG_DESTIN = Path.GetDirectoryName(ARG_SOURCE) & "\\"
  900.             End If
  901.             Select Case ProcessJSX(Args(1))
  902.                 Case -1 : Console.WriteLine(vbCrLf & " Unknown Error")
  903.                 Case 0
  904.                     If ARG_OUTHDR OrElse ARG_HDRTXT Then
  905.                         HEADER = vbCrLf & " TYPE: " & TYPE & vbCrLf & _
  906.                             " VRSN: " & VERSION & vbCrLf & _
  907.                             "                HEX                DEC" & vbCrLf & _
  908.                             " OPCODE Offset: " & HexDecOut(OPCODESInfo(0)) & vbCrLf & _
  909.                             "        Length: " & HexDecOut(OPCODESInfo(1)) & vbCrLf & _
  910.                             "         Items: " & HexDecOut(OPCODES.Length) & vbCrLf & vbCrLf & _
  911.                             " STRING Offset: " & HexDecOut(STRINGSInfo(0)) & vbCrLf & _
  912.                             "        Length: " & HexDecOut(STRINGSInfo(1)) & vbCrLf & _
  913.                             "         Items: " & HexDecOut(STRINGS.Length) & vbCrLf & vbCrLf & _
  914.                             " ATTRIB Offset: " & HexDecOut(ATTRIBSInfo(0)) & vbCrLf & _
  915.                             "        Length: " & HexDecOut(ATTRIBSInfo(1)) & vbCrLf & _
  916.                             "         Items: " & HexDecOut(ATTRIBS.Length) & vbCrLf & vbCrLf & _
  917.                             " GLOBAL Offset: " & HexDecOut(GLOBALSInfo(0)) & vbCrLf & _
  918.                             "        Length: " & HexDecOut(GLOBALSInfo(1)) & vbCrLf & _
  919.                             "         Items: " & HexDecOut(GLOBALS.Length)
  920.                     End If
  921.                     If ARG_HDRTXT Then
  922.                         Try
  923.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  924.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  925.                             IO.File.WriteAllText(ARG_DESTIN & "Header.txt", HEADER)
  926.                         Catch ex As Exception
  927.                             Console.WriteLine(ex.Message)
  928.                         End Try
  929.                     End If
  930.                     If ARG_OPSTXT OrElse ARG_SCRPJS Then
  931.                         Try
  932.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  933.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  934.                             For i = 0 To OPCODES.Length - 1
  935.                                 OPCODES(i).Resolve(i)
  936.                             Next
  937.                             Decomped = True
  938.                             Dim OPStable As New StringBuilder
  939.                             OPStable.AppendLine(" Line   || OP Name                       | " & _
  940.                                                 "OP#  | ARG  | UNK  | VAR  | VAL        | Resolve ")
  941.                             OPStable.AppendLine("".PadRight(92, "="))
  942.                             For i = 0 To OPCODES.Length - 1
  943.                                 OPStable.AppendLine(" 0x" & i.ToString("X4") & " || " & _
  944.                                                     OPCODES(i).OPNAME.PadRight(29, " ") & " | 0x" & _
  945.                                                     OPCODES(i).OPNBR.ToString("X2") & " | 0x" & _
  946.                                                     OPCODES(i).ARG.ToString("X2") & " | 0x" & _
  947.                                                     OPCODES(i).UNK.ToString("X2") & " | 0x" & _
  948.                                                     OPCODES(i).VAR.ToString("X2") & " | 0x" & _
  949.                                                     BitConverter.ToString(OPCODES(i).VAL).Replace("-", "") & _
  950.                                                     " | " & ResolveFormater(OPCODES(i).PRECODE & OPCODES(i).CODE & OPCODES(i).PROCODE))
  951.                                 OPStable.AppendLine("".PadRight(92, "-"))
  952.                             Next
  953.                             If ARG_OPSTXT Then IO.File.WriteAllText(ARG_DESTIN & "OPcode.txt", OPStable.ToString)
  954.                         Catch ex As Exception
  955.                             Console.WriteLine(ex.Message)
  956.                         End Try
  957.                     End If
  958.                     If ARG_STRTXT Then
  959.                         Try
  960.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  961.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  962.                             IO.File.WriteAllLines(ARG_DESTIN & "String.txt", STRINGS)
  963.                         Catch ex As Exception
  964.                             Console.WriteLine(ex.Message)
  965.                         End Try
  966.                     End If
  967.                     If ARG_ATTTXT Then
  968.                         Try
  969.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  970.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  971.                             IO.File.WriteAllLines(ARG_DESTIN & "Attrib.txt", ATTRIBS)
  972.                         Catch ex As Exception
  973.                             Console.WriteLine(ex.Message)
  974.                         End Try
  975.                     End If
  976.                     If ARG_GLBTXT Then
  977.                         Try
  978.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  979.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  980.                             IO.File.WriteAllLines(ARG_DESTIN & "Global.txt", GLOBALS)
  981.                         Catch ex As Exception
  982.                             Console.WriteLine(ex.Message)
  983.                         End Try
  984.                     End If
  985.                     If ARG_SCRPJS Then
  986.                         If Not Decomped Then
  987.                             For i = 0 To OPCODES.Length - 1
  988.                                 OPCODES(i).Resolve(i)
  989.                             Next
  990.                         End If
  991.                         Try
  992.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  993.                                IO.Directory.CreateDirectory(ARG_DESTIN)
  994.                             Dim CODES As New List(Of String)
  995.                             For i = 0 To OPCODES.Length - 1
  996.                                 If OPCODES(i).DONE Then
  997.                                     Select Case OPCODES(i).OPNBR
  998.                                         Case 57 \'Omit jump opcode
  999.                                         Case Else
  1000.                                             Dim parts() As String = _
  1001.                                                 (OPCODES(i).PRECODE & OPCODES(i).CODE & OPCODES(i).PROCODE). _
  1002.                                                 Split(New String() {vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
  1003.                                             For Each part As String In parts
  1004.                                                 CODES.Add(part)
  1005.                                             Next
  1006.                                     End Select
  1007.                                 End If
  1008.                             Next
  1009.                             IO.File.WriteAllText(ARG_DESTIN & "Script.js", Indentor(CODES))
  1010.                         Catch ex As Exception
  1011.                             Console.WriteLine(ex.Message)
  1012.                         End Try
  1013.                     End If
  1014.                     If ARG_HDRBIN Then
  1015.                         Try
  1016.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  1017.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  1018.                             IO.File.WriteAllBytes(ARG_DESTIN & "Header.bin", HEADERByte)
  1019.                         Catch ex As Exception
  1020.                             Console.WriteLine(ex.Message)
  1021.                         End Try
  1022.                     End If
  1023.                     If ARG_OPSBIN Then
  1024.                         Try
  1025.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  1026.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  1027.                             IO.File.WriteAllBytes(ARG_DESTIN & "OPcode.bin", OPCODESByte)
  1028.                         Catch ex As Exception
  1029.                             Console.WriteLine(ex.Message)
  1030.                         End Try
  1031.                     End If
  1032.                     If ARG_STRBIN Then
  1033.                         Try
  1034.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  1035.                                 IO.Directory.CreateDirectory(ARG_DESTIN)
  1036.                             IO.File.WriteAllBytes(ARG_DESTIN & "String.bin", STRINGSByte)
  1037.                         Catch ex As Exception
  1038.                             Console.WriteLine(ex.Message)
  1039.                         End Try
  1040.                     End If
  1041.                     If ARG_ATTBIN Then
  1042.                         Try
  1043.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  1044.                                IO.Directory.CreateDirectory(ARG_DESTIN)
  1045.                             IO.File.WriteAllBytes(ARG_DESTIN & "Attrib.bin", ATTRIBSByte)
  1046.                         Catch ex As Exception
  1047.                             Console.WriteLine(ex.Message)
  1048.                         End Try
  1049.                     End If
  1050.                     If ARG_GLBBIN Then
  1051.                         Try
  1052.                             If Not IO.Directory.Exists(ARG_DESTIN) Then _
  1053.                                IO.Directory.CreateDirectory(ARG_DESTIN)
  1054.                             IO.File.WriteAllBytes(ARG_DESTIN & "Global.bin", GLOBALSByte)
  1055.                         Catch ex As Exception
  1056.                             Console.WriteLine(ex.Message)
  1057.                         End Try
  1058.                     End If
  1059.                     If ARG_OUTHDR Then
  1060.                         Console.WriteLine(HEADER.ToString)
  1061.                         If ARG_HLTOUT Then Console.ReadKey()
  1062.                     End If
  1063.                 Case 1 : Console.WriteLine(vbCrLf & " Wrong Extension")
  1064.                 Case 2 : Console.WriteLine(vbCrLf & " Failed to open file for reading")
  1065.                 Case 3 : Console.WriteLine(vbCrLf & " File magic mismatch")
  1066.                 Case 4 : Console.WriteLine(vbCrLf & " File might be currupt")
  1067.             End Select
  1068.         Else
  1069.             Console.WriteLine(vbCrLf & _
  1070.                               " Usage: JSXviewer.exe [Options] <Input File> <Output Path>" & vbCrLf & _
  1071.                               vbCrLf & _
  1072.                               " Options: 0 Saves script.js" & vbCrLf & _
  1073.                               "          1 Saves Header.txt" & vbCrLf & _
  1074.                               "          2 Saves OPcode.txt" & vbCrLf & _
  1075.                               "          3 Saves String.txt" & vbCrLf & _
  1076.                               "          4 Saves Attrib.txt" & vbCrLf & _
  1077.                               "          5 Saves Global.txt" & vbCrLf & _
  1078.                               "          6 Saves Header.bin" & vbCrLf & _
  1079.                               "          7 Saves OPcode.bin" & vbCrLf & _
  1080.                               "          8 Saves String.bin" & vbCrLf & _
  1081.                               "          9 Saves Attrib.bin" & vbCrLf & _
  1082.                               "          a Saves Global.bin" & vbCrLf & _
  1083.                               "          b Show header info" & vbCrLf & _
  1084.                               "          c Wait at complete" & vbCrLf & _
  1085.                               vbCrLf & _
  1086.                               " Examples: JSXviewer.exe 02bc C:\\example\\test.jsx" & vbCrLf & _
  1087.                               "           JSXviewer.exe 02bc C:\\example\\test.jsx C:\\example\\")
  1088.             Console.ReadKey()
  1089.         End If
  1090.     End Sub
  1091.  
  1092.     Public Function Indentor(ByVal input As List(Of String)) As String
  1093.         Dim lvl As Integer = 0
  1094.         Dim StrArray(input.Count - 1) As String
  1095.         Indentor = ""
  1096.         For i = 0 To StrArray.Length - 1
  1097.             Dim crntEval As String = input(i).Trim
  1098.             If crntEval.StartsWith("}") Then lvl -= 1
  1099.             crntEval = "".PadLeft(lvl, vbTab) & crntEval
  1100.             If crntEval.EndsWith("{") Then lvl += 1
  1101.             Indentor &= crntEval & vbCrLf
  1102.         Next
  1103.     End Function
  1104.  
  1105.     Public Function ResolveFormater(ByVal input As String) As String
  1106.         Dim meh As New StringBuilder
  1107.         Dim lines() As String = input.Split(vbCrLf)
  1108.         meh.AppendLine(vbTab & lines(0))
  1109.         If lines.Length > 1 Then
  1110.             For i = 1 To lines.Length - 1
  1111.                 meh.AppendLine("        ||" & _
  1112.                                "                               " & _
  1113.                                "|      " & _
  1114.                                "|      " & _
  1115.                                "|      " & _
  1116.                                "|      " & _
  1117.                                "|            " & _
  1118.                                "| " & lines(i).Trim)
  1119.             Next
  1120.         End If
  1121.         Return meh.ToString.Trim
  1122.     End Function
  1123.  
  1124.     Public Function ProcessJSX(ByVal InputPath As String) As Integer
  1125.         If InputPath.ToLower.EndsWith(".jsx") Then
  1126.             Try
  1127.                 CrntFileStream = New FileStream(InputPath, FileMode.Open, FileAccess.Read, FileShare.Read)
  1128.             Catch ex As Exception
  1129.                 Return 2 \'Cannot read
  1130.             End Try
  1131.             Dim Temp(3) As Byte, offset As Integer, length As Integer
  1132.             CrntFileStream.Read(Temp, 0, 4)
  1133.             If Temp.SequenceEqual(_MAGIC) Then TYPE = "VSMX" Else Return 3
  1134.             CrntFileStream.Read(Temp, 0, 4)
  1135.             If Temp.SequenceEqual({0, 0, 1, 0}) Then : VERSION = "PSP (1.0)"
  1136.             ElseIf Temp.SequenceEqual({0, 0, 2, 0}) Then : VERSION = "PS3 (2.0)"
  1137.             Else : VERSION = "UNKN [" & BitConverter.ToString(Temp).Replace("-", " ") & "]"
  1138.             End If
  1139.             CrntFileStream.Position = 0
  1140.             CrntFileStream.Read(HEADERByte, 0, 52)
  1141.             CrntFileStream.Position = 8
  1142.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1143.             Array.Reverse(Temp)
  1144.             offset = Bytes2Int(Temp)
  1145.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1146.             Array.Reverse(Temp)
  1147.             length = Bytes2Int(Temp)
  1148.             OPCODESInfo = {offset, length}
  1149.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1150.             Array.Reverse(Temp)
  1151.             offset = Bytes2Int(Temp)
  1152.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1153.             Array.Reverse(Temp)
  1154.             length = Bytes2Int(Temp)
  1155.             CrntFileStream.Position += 4
  1156.             STRINGSInfo = {offset, length}
  1157.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1158.             Array.Reverse(Temp)
  1159.             offset = Bytes2Int(Temp)
  1160.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1161.             Array.Reverse(Temp)
  1162.             length = Bytes2Int(Temp)
  1163.             CrntFileStream.Position += 4
  1164.             ATTRIBSInfo = {offset, length}
  1165.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1166.             Array.Reverse(Temp)
  1167.             offset = Bytes2Int(Temp)
  1168.             CrntFileStream.Read(Temp, 0, Temp.Length)
  1169.             Array.Reverse(Temp)
  1170.             length = Bytes2Int(Temp)
  1171.             CrntFileStream.Position += 4
  1172.             GLOBALSInfo = {offset, length}
  1173.             CrntFileStream.Position = OPCODESInfo(0)
  1174.             OPCODESByte = New Byte(OPCODESInfo(1) - 1) {}
  1175.             CrntFileStream.Read(OPCODESByte, 0, OPCODESInfo(1))
  1176.             If OPCODESByte.Length Mod 8 > 0 Then Return 4 \'Opcodes offset mismatch
  1177.             CrntFileStream.Position = STRINGSInfo(0)
  1178.             STRINGSByte = New Byte(STRINGSInfo(1) - 1) {}
  1179.             CrntFileStream.Read(STRINGSByte, 0, STRINGSInfo(1))
  1180.             CrntFileStream.Position = ATTRIBSInfo(0)
  1181.             ATTRIBSByte = New Byte(ATTRIBSInfo(1) - 1) {}
  1182.             CrntFileStream.Read(ATTRIBSByte, 0, ATTRIBSInfo(1))
  1183.             CrntFileStream.Position = GLOBALSInfo(0)
  1184.             GLOBALSByte = New Byte(GLOBALSInfo(1) - 1) {}
  1185.             CrntFileStream.Read(GLOBALSByte, 0, GLOBALSInfo(1))
  1186.             CrntFileStream.Close()
  1187.             CrntFileStream.Dispose()
  1188.             offset = 0
  1189.             OPCODES = New OPcode(OPCODESByte.Length / 8 - 1) {}
  1190.             For i = 0 To OPCODESByte.Length - 1 Step 8
  1191.                 OPCODES(offset) = New OPcode({OPCODESByte(i), _
  1192.                                               OPCODESByte(i + 1), _
  1193.                                               OPCODESByte(i + 2), _
  1194.                                               OPCODESByte(i + 3), _
  1195.                                               OPCODESByte(i + 7), _
  1196.                                               OPCODESByte(i + 6), _
  1197.                                               OPCODESByte(i + 5), _
  1198.                                               OPCODESByte(i + 4)})
  1199.                 offset += 1
  1200.             Next
  1201.             InputPath = Text.Encoding.UTF8.GetString(STRINGSByte)
  1202.             STRINGS = InputPath.Split(New String() {vbNullChar & vbNullChar & vbNullChar}, _
  1203.                                       StringSplitOptions.RemoveEmptyEntries)
  1204.             For i = 0 To STRINGS.Length - 1
  1205.                 STRINGS(i) = STRINGS(i).Replace(vbNullChar, "")
  1206.             Next
  1207.             InputPath = Text.Encoding.UTF8.GetString(ATTRIBSByte)
  1208.             ATTRIBS = InputPath.Split(New String() {vbNullChar & vbNullChar & vbNullChar}, _
  1209.                                       StringSplitOptions.RemoveEmptyEntries)
  1210.             For i = 0 To ATTRIBS.Length - 1
  1211.                 ATTRIBS(i) = ATTRIBS(i).Replace(vbNullChar, "")
  1212.             Next
  1213.             InputPath = Text.Encoding.UTF8.GetString(GLOBALSByte)
  1214.             GLOBALS = InputPath.Split(New String() {vbNullChar}, _
  1215.                                       StringSplitOptions.RemoveEmptyEntries)
  1216.             Return 0 \'Success
  1217.         Else
  1218.             Return 1 \'Wrong Extension
  1219.         End If
  1220.         Return -1 \'Unknown Error
  1221.     End Function
  1222.  
  1223.     Public Function Bytes2Int(bytes As Byte()) As Integer
  1224.         Return BitConverter.ToInt32({bytes(3), bytes(2), bytes(1), bytes(0)}, 0)
  1225.     End Function
  1226.  
  1227.     Public Function Bytes2Sng(bytes As Byte()) As Single
  1228.         Return BitConverter.ToSingle({bytes(3), bytes(2), bytes(1), bytes(0)}, 0)
  1229.     End Function
  1230.  
  1231.     Private Function HexDecOut(ByVal Value As Integer) As String
  1232.         Dim bytes() As Byte = BitConverter.GetBytes(Value)
  1233.         Array.Reverse(bytes)
  1234.         HexDecOut = BitConverter.ToString(bytes).Replace("-", " ") & " "
  1235.         HexDecOut &= Value.ToString.PadLeft(10, " ")
  1236.     End Function
  1237. End Module
');