mabu

Remove unnecessary lines in asm files of FreeBASIC-compilerd

Apr 10th, 2015
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2. ' Прочитать файл построчно. Если встретим строку балигн 16, то будем настороже
  3. ' Читаем следующую строку, если она попадает в список запрещённых слов
  4. ' то ставим флаг, чтобы строку в файл не писать
  5. ' далее не пишем строки в файл, пока не встретится ret что?нибудь
  6. Dim objFSO
  7. Dim strParam
  8. Dim objArgs
  9. Set objFSO = CreateObject("Scripting.FileSystemObject")
  10. ' Получить параметр программы
  11. Set objArgs = WScript.Arguments
  12. For Each strParam In objArgs
  13.     REM WScript.Echo strParam
  14.     ' Открыть файл на чтение, прочитать до конца, закрыть
  15.     Dim objTS
  16.     Set objTS = objFSO.OpenTextFile(strParam)
  17.     Dim strLines
  18.     strLines = objTS.ReadAll
  19.     objTS.Close
  20.     Set objTS = Nothing
  21.     ' Открыть снова на запись
  22.     Set objTS = objFSO.CreateTextFile(strParam)
  23.     ' Разбить строку на массив
  24.     ' Пройтись по массиву
  25.     Dim blnSkipLines
  26.     blnSkipLines = False
  27.     Dim astrLines
  28.     astrLines = Split(strLines, vbCrLf)
  29.     Dim i
  30.     For i = 0 To UBound(astrLines)
  31.         Select Case astrLines(i)
  32.             Case ".balign 16"
  33.                 ' Начало, нужно быть готовым
  34.                 Select Case astrLines(i + 1)
  35.                     Case "_GetCurrentFiber:"
  36.                         ' Ставим флаг, что строку нужно пропустить
  37.                         blnSkipLines = True
  38.                     Case "_InterlockedCompareExchange64@20:"
  39.                         ' Ставим флаг, что строку нужно пропустить
  40.                         blnSkipLines = True
  41.                     Case "_IN6_IS_ADDR_UNSPECIFIED:"
  42.                         ' Ставим флаг, что строку нужно пропустить
  43.                         blnSkipLines = True
  44.                     Case "_IN6_IS_ADDR_LOOPBACK:"
  45.                         ' Ставим флаг, что строку нужно пропустить
  46.                         blnSkipLines = True
  47.                     Case "_IN6_IS_ADDR_MULTICAST:"
  48.                         ' Ставим флаг, что строку нужно пропустить
  49.                         blnSkipLines = True
  50.                     Case "_IN6_SET_ADDR_UNSPECIFIED:"
  51.                         ' Ставим флаг, что строку нужно пропустить
  52.                         blnSkipLines = True
  53.                     Case "_IN6_SET_ADDR_LOOPBACK:"
  54.                         ' Ставим флаг, что строку нужно пропустить
  55.                         blnSkipLines = True
  56.                     Case Else
  57.                         ' Записываем
  58.                         objTS.WriteLine(astrLines(i))
  59.                 End Select
  60.             Case "ret", "ret 20"
  61.                 If blnSkipLines Then
  62.                     '  Снимаем флаг и пропускаем эту строку
  63.                     blnSkipLines = False
  64.                 Else
  65.                     objTS.WriteLine(astrLines(i))
  66.                 End If
  67.             Case Else
  68.                 ' Пишем строку, только если разрешено
  69.                 If Not blnSkipLines Then
  70.                     objTS.WriteLine(astrLines(i))
  71.                 End If
  72.         End Select
  73.     Next
  74.     ' Закрыть файл
  75.     objTS.Close
  76.     Set objTS = Nothing
  77. Next
  78. Set objArgs = Nothing
  79. Set objFSO = Nothing
Add Comment
Please, Sign In to add comment