home *** CD-ROM | disk | FTP | other *** search
/ ftp.sberbank.sumy.ua / 2014.11.ftp.sberbank.sumy.ua.tar / ftp.sberbank.sumy.ua / incoming / 1 / FileSplitter.ASM < prev    next >
Assembly Source File  |  2014-02-08  |  14KB  |  512 lines

  1. ;File splitter
  2. ;The code below was written exclusively by
  3. ;Evgeney Victorovich Kupin Copyright (c) 11.06.2013
  4. ;www.kupin.net46.net
  5. ;It's free for any including commercial purposes
  6. ;You are absolutely free to do whatever you like
  7. ;with the code below
  8.  
  9.  
  10. format PE GUI 4.0
  11. entry start
  12.  
  13. include 'win32w.inc'
  14.  
  15.  
  16. MAX_DIVIDED_FILE_VALUE    =  268435456
  17.  
  18.  
  19. IDR_MENU        =  10
  20. IDR_ICON_DATA        =  11
  21. IDR_ICON        =  12
  22. IDR_ABOUT_DIALOG    =  13
  23.  
  24. IDM_SPLIT        =  40
  25. IDM_MERGE        =  41
  26. IDM_EXIT        =  42
  27. IDM_ABOUT        =  43
  28.  
  29. IDD_ABOUT_OK        =  50
  30.  
  31. ID_DIV_NUMBER_EDIT    = 100
  32. ID_DIV_NUMBER_UP_DOWN = 101
  33. ID_DIV_NUMBER_STATIC  = 102
  34. ID_SPLIT_PUSH_BUTTON  = 103
  35. ID_MERGE_PUSH_BUTTON  = 104
  36.  
  37.  
  38. section '.idata' import data readable writeable
  39.  
  40.   library kernel32,'KERNEL32.DLL',\
  41.       user32,'USER32.DLL',\
  42.       comdlg32, 'comdlg32.dll',\
  43.       comctl32, 'comctl32.dll'
  44.  
  45.   include 'api\kernel32.inc'
  46.   include 'api\user32.inc'
  47.   include 'api\comdlg32.inc'
  48.   include 'api\comctl32.inc'
  49.  
  50. section '.data' data readable writeable
  51.  
  52.    WindowClass          TCHAR 'Win32FileSplitter',0
  53.    WindowTitle          TCHAR 'File splitter',0
  54.    EditClass          TCHAR 'EDIT',0
  55.    StaticClass          TCHAR 'STATIC',0
  56.    PushButtonClass    TCHAR 'BUTTON',0
  57.    UpDownClass          TCHAR 'msctls_updown32',0
  58.  
  59.    FilterString       TCHAR 'All',0,'*.*;',0,'Splited',0,'*.sld;',0,0
  60.  
  61.    FormatString       TCHAR '%s%02d',0
  62.    MergeFormatString  TCHAR '%02d',0
  63.    FileExtension      TCHAR '-zip-',0
  64.    AppendString       TCHAR '000000000',0
  65.    ExtensionString    TCHAR '.sld',0
  66.  
  67.    DividerValueString TCHAR 'Divider value:',0
  68.    SplitButtonString  TCHAR 'Split',0
  69.    MergeButtonString  TCHAR 'Merge',0
  70.  
  71.    WindWidth   dd  226
  72.    WindHeight  dd  130
  73.  
  74.    wc WNDCLASSEX 0, CS_VREDRAW + CS_HREDRAW, WindowProc,0,0,\
  75.          NULL,NULL,NULL,COLOR_BTNFACE+1, NULL, WindowClass, 0
  76.    msg MSG
  77.  
  78. section '.bss' readable writeable
  79.  
  80.    hWnd         dd ?
  81.    hDivNumberEditWnd    dd ?
  82.    hDivNumberUpDownWnd    dd ?
  83.    hDivNumberStatic    dd ?
  84.    hSplitPushButton    dd ?
  85.    hMergePushButton    dd ?
  86.  
  87.    PosX dd ?
  88.    PosY dd ?
  89.  
  90.    strOpenFile         OPENFILENAME     ?
  91.    cFileNameToBeSplited  TCHAR    256  dup(?)
  92.    cFileNameSplited     TCHAR    256  dup(?)
  93.    MergedFileName     TCHAR    256  dup(?)
  94.    cDedugOutput      TCHAR    256  dup(?)
  95.  
  96. section '.text' code readable executable
  97.  
  98. proc MergeFile
  99.  local hInputFile:DWORD, dwOutputFile:DWORD, dwBytesRead:DWORD,\
  100.        dwBytesWritten:DWORD, hFindFile:DWORD, dwFileNumber:DWORD,\
  101.        dwInputFileSize:DWORD, hGlobMem:DWORD, lpGlobMemPointer:DWORD,\
  102.        strFindData:WIN32_FIND_DATA
  103.  
  104.     push    ebx esi edi
  105.  
  106.     mov    [dwFileNumber], 0
  107.     lea    eax, [strFindData]
  108.     invoke    RtlZeroMemory, eax, 40
  109.  
  110.     invoke    lstrcpy, MergedFileName, cFileNameToBeSplited
  111.     invoke    lstrlen, MergedFileName
  112.     shl    eax, 1
  113.     add    eax, MergedFileName
  114.     sub    eax, 22
  115.     mov    WORD[eax], '.'
  116.     mov    WORD[eax+8], 0
  117.  
  118.     invoke    CreateFile, MergedFileName, GENERIC_WRITE,\
  119.               0, NULL, CREATE_ALWAYS,\
  120.               FILE_ATTRIBUTE_NORMAL, NULL
  121.     mov    [dwOutputFile], eax
  122.  
  123.     invoke    lstrlen, cFileNameToBeSplited
  124.     shl    eax, 1
  125.     add    eax, cFileNameToBeSplited
  126.     sub    eax, 12
  127.     mov    WORD[eax],0
  128.  
  129.     invoke    wsprintf, AppendString, MergeFormatString, [dwFileNumber]
  130.     invoke    lstrcat, cFileNameToBeSplited, AppendString
  131.     invoke    lstrcat, cFileNameToBeSplited, ExtensionString
  132.  
  133. MERGE_FILE_PROC_LOOP:
  134.     lea    eax, [strFindData]
  135.     invoke    FindFirstFile, cFileNameToBeSplited, eax
  136.     mov    [hFindFile], eax
  137.     cmp    eax, INVALID_HANDLE_VALUE
  138.     je    MERGE_FILE_PROC_LOOP_EXIT
  139.        ; invoke  MessageBox, 0, cFileNameToBeSplited, 0, MB_OK
  140.  
  141.     invoke    CreateFile, cFileNameToBeSplited, GENERIC_READ,\
  142.               0, NULL, OPEN_EXISTING,\
  143.               FILE_ATTRIBUTE_NORMAL, NULL
  144.     mov    [hInputFile], eax
  145.  
  146.     invoke    GetFileSize, [hInputFile], NULL
  147.     mov    [dwInputFileSize], eax
  148.  
  149.     invoke    GlobalAlloc, GMEM_MOVEABLE+GMEM_ZEROINIT, [dwInputFileSize]
  150.     mov    [hGlobMem], eax
  151.     invoke    GlobalLock, [hGlobMem]
  152.     mov    [lpGlobMemPointer], eax
  153.  
  154.     lea    eax, [dwBytesRead]
  155.     invoke    ReadFile, [hInputFile], [lpGlobMemPointer], [dwInputFileSize],\
  156.             eax, NULL
  157.  
  158.     lea    eax, [dwBytesWritten]
  159.     invoke    WriteFile, [dwOutputFile], [lpGlobMemPointer], [dwBytesRead],\
  160.              eax, NULL
  161.  
  162.     invoke    lstrlen, cFileNameToBeSplited
  163.     shl    eax, 1
  164.     add    eax, cFileNameToBeSplited
  165.     sub    eax, 12
  166.     mov    WORD[eax],0
  167.  
  168.     inc    [dwFileNumber]
  169.     invoke    wsprintf, AppendString, MergeFormatString, [dwFileNumber]
  170.     invoke    lstrcat, cFileNameToBeSplited, AppendString
  171.     invoke    lstrcat, cFileNameToBeSplited, ExtensionString
  172.  
  173.     invoke    GlobalUnlock, [hGlobMem]
  174.     invoke    GlobalFree, [hGlobMem]
  175.     invoke    CloseHandle, [hInputFile]
  176.  
  177.     invoke    FindClose, [hFindFile]
  178.     jmp    MERGE_FILE_PROC_LOOP
  179.  
  180. MERGE_FILE_PROC_LOOP_EXIT:
  181.     invoke    CloseHandle, [dwOutputFile]
  182.     pop    edi esi ebx
  183.     ret
  184. endp
  185.  
  186. proc SplitFile
  187.  local hInputFile:DWORD, dwOutputFile:DWORD, dwBytesToCopy:DWORD,\
  188.        hGlobMem:DWORD, lpGlobMemPointer:DWORD, dwBytesRead:DWORD,\
  189.        dwBytesWritten:DWORD, dwDivNumber:DWORD, dwCutNumber:DWORD
  190.  
  191.     push    ebx esi edi
  192.  
  193.     invoke    lstrlen, cFileNameToBeSplited
  194.     shl    eax, 1
  195.     add    eax, cFileNameToBeSplited
  196.     sub    eax, 6
  197.     invoke    lstrcpy, FileExtension+2, eax
  198.     mov    WORD[FileExtension+8], '-'
  199.     mov    WORD[FileExtension+10], 0
  200.  
  201.     invoke    CreateFile, cFileNameToBeSplited, GENERIC_READ,\
  202.               0, NULL, OPEN_EXISTING,\
  203.               FILE_ATTRIBUTE_NORMAL, NULL
  204.     mov    [hInputFile], eax
  205.  
  206.     invoke    SendMessage, [hDivNumberUpDownWnd], UDM_GETPOS ,0 ,0
  207.     mov    [dwDivNumber], eax
  208.  
  209.     invoke    GetFileSize, [hInputFile], NULL
  210.     cmp    eax, MAX_DIVIDED_FILE_VALUE
  211.     ja    SPLIT_FILE_PROC_MAX_INPUT_SIZE_EXCEEDED
  212.  
  213.     xor    edx,edx
  214.     div    [dwDivNumber]
  215.     mov    [dwBytesToCopy], eax
  216.  
  217.     invoke    GlobalAlloc, GMEM_MOVEABLE+GMEM_ZEROINIT, [dwBytesToCopy]
  218.     mov    [hGlobMem], eax
  219.     invoke    GlobalLock, [hGlobMem]
  220.     mov    [lpGlobMemPointer], eax
  221.  
  222.     mov    [dwDivNumber], 0
  223.     mov    [dwCutNumber], 8
  224. SPLIT_FILE_PROC_WRITE_LOOP:
  225.     lea    eax, [dwBytesRead]
  226.     invoke    ReadFile, [hInputFile], [lpGlobMemPointer], [dwBytesToCopy],\
  227.             eax, NULL
  228.     cmp    [dwBytesRead], 0
  229.     je    SPLIT_FILE_PROC_WRITE_LOOP_EXIT
  230.  
  231.     invoke    lstrlen, cFileNameToBeSplited
  232.     shl    eax, 1
  233.     add    eax, cFileNameToBeSplited
  234.     sub    eax, [dwCutNumber]
  235.     mov    WORD[eax],0
  236.     mov    [dwCutNumber], 22
  237.  
  238.     invoke    wsprintf, AppendString, FormatString, FileExtension, [dwDivNumber]
  239.     inc    [dwDivNumber]
  240.     invoke    lstrcat, cFileNameToBeSplited, AppendString
  241.     invoke    lstrcat, cFileNameToBeSplited, ExtensionString
  242.       ;  invoke  MessageBox, 0, cFileNameToBeSplited, 0, MB_OK
  243.  
  244.     invoke    CreateFile, cFileNameToBeSplited, GENERIC_WRITE,\
  245.               0, NULL, CREATE_ALWAYS,\
  246.               FILE_ATTRIBUTE_NORMAL, NULL
  247.     mov    [dwOutputFile], eax
  248.  
  249.     lea    eax, [dwBytesWritten]
  250.     invoke    WriteFile, [dwOutputFile], [lpGlobMemPointer], [dwBytesRead],\
  251.              eax, NULL
  252.  
  253.     invoke    CloseHandle, [dwOutputFile]
  254.  
  255.     mov    eax, [dwBytesToCopy]
  256.     cmp    [dwBytesWritten], eax
  257.     je    SPLIT_FILE_PROC_WRITE_LOOP
  258.  
  259. SPLIT_FILE_PROC_WRITE_LOOP_EXIT:
  260.  
  261.       ;  invoke  wsprintf, cDedugOutput, FormatString, [dwBytesRead]
  262.       ;  invoke  MessageBox, 0, cDedugOutput, 0, MB_OK
  263.  
  264.     invoke    GlobalUnlock, [hGlobMem]
  265.     invoke    GlobalFree, [hGlobMem]
  266.  
  267. SPLIT_FILE_PROC_MAX_INPUT_SIZE_EXCEEDED:
  268.     invoke    CloseHandle, [hInputFile]
  269.     pop    edi esi ebx
  270.     ret
  271. endp
  272.  
  273. proc AboutDialogProc hwnddlg,msg,wparam,lparam
  274.     push    ebx esi edi
  275.     cmp    [msg],WM_INITDIALOG
  276.     je    ABOUT_DIALOG_PROC_INIT
  277.     cmp    [msg],WM_COMMAND
  278.     je    ABOUT_DIALOG_PROC_COMMAND
  279.     cmp    [msg],WM_CLOSE
  280.     je    ABOUT_DIALOG_PROC_CLOSE
  281.     xor    eax,eax
  282.     jmp    ABOUT_DIALOG_PROC_FINISH
  283.  
  284.   ABOUT_DIALOG_PROC_INIT:
  285.  
  286.     jmp    ABOUT_DIALOG_PROC_PROCESSED
  287.  
  288.   ABOUT_DIALOG_PROC_COMMAND:
  289.     cmp    [wparam],BN_CLICKED shl 16 + IDD_ABOUT_OK
  290.     je    ABOUT_DIALOG_PROC_CLOSE
  291.     invoke    EndDialog,[hwnddlg],1
  292.     jmp    ABOUT_DIALOG_PROC_PROCESSED
  293.  
  294.   ABOUT_DIALOG_PROC_CLOSE:
  295.     invoke    EndDialog,[hwnddlg],0
  296.  
  297.   ABOUT_DIALOG_PROC_PROCESSED:
  298.     mov    eax,1
  299.  
  300.   ABOUT_DIALOG_PROC_FINISH:
  301.     pop    edi esi ebx
  302.     ret
  303. endp
  304.  
  305. start:
  306.     invoke    InitCommonControls
  307.  
  308.     invoke    GetModuleHandle,0
  309.     mov    [wc.hInstance],eax
  310.     mov    [wc.cbSize], 12*4
  311.     invoke    LoadIcon, [wc.hInstance], IDR_ICON
  312.     mov    [wc.hIcon],eax
  313.     invoke    LoadCursor,0,IDC_ARROW
  314.     mov    [wc.hCursor],eax
  315.     invoke    RegisterClassEx,wc
  316.     test    eax,eax
  317.     jz    START_END_LOOP
  318.  
  319.     invoke    GetSystemMetrics, SM_CXSCREEN
  320.     sub    eax, [WindWidth]
  321.     shr    eax, 1
  322.     mov    [PosX], eax
  323.  
  324.     invoke    GetSystemMetrics, SM_CYSCREEN
  325.     sub    eax, [WindHeight]
  326.     shr    eax, 1
  327.     mov    [PosY], eax
  328.  
  329.     invoke    LoadMenu, [wc.hInstance], IDR_MENU
  330.     invoke    CreateWindowEx, 0, WindowClass, WindowTitle,\
  331.         WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,\
  332.         [PosX], [PosY], [WindWidth], [WindHeight],\
  333.         NULL, eax, [wc.hInstance], NULL
  334.     test    eax,eax
  335.     jz    START_END_LOOP
  336.  
  337.     mov    [hWnd], eax
  338.     invoke    ShowWindow, [hWnd], SW_SHOWNORMAL
  339.     invoke    UpdateWindow, [hWnd]
  340.  
  341.   START_MSG_LOOP:
  342.     invoke    GetMessage ,msg, NULL,0,0
  343.     cmp    eax,1
  344.     jb    START_END_LOOP
  345.     jne    START_MSG_LOOP
  346.     invoke    TranslateMessage,msg
  347.     invoke    DispatchMessage,msg
  348.     jmp    START_MSG_LOOP
  349.  
  350.   START_END_LOOP:
  351.     invoke    ExitProcess,[msg.wParam]
  352.  
  353. proc WindowProc uses ebx esi edi, hwnd, wmsg, wparam, lparam
  354.  
  355.     cmp    [wmsg],WM_COMMAND
  356.     je    WIN_PROC_COMMAND
  357.     cmp    [wmsg],WM_DESTROY
  358.     je    WIN_PROC_DESTROY
  359.     cmp    [wmsg],WM_CREATE
  360.     je    WIN_PROC_CREATE
  361.  
  362.   WIN_PROC_DEFAULT:
  363.     invoke    DefWindowProc, [hwnd], [wmsg], [wparam], [lparam]
  364.     jmp    WIN_PROC_FINISH
  365.  
  366.   WIN_PROC_CREATE:
  367.     mov    [strOpenFile.lStructSize], sizeof.OPENFILENAME
  368.     push    [hwnd]
  369.     pop    [strOpenFile.hwndOwner]
  370.     mov    [strOpenFile.lpstrFilter], FilterString
  371.     mov    [strOpenFile.nFilterIndex], 1
  372.     mov    [strOpenFile.lpstrFile], cFileNameToBeSplited
  373.     mov    [strOpenFile.nMaxFile], 256
  374.     mov    [strOpenFile.Flags], OFN_EXPLORER+OFN_PATHMUSTEXIST+\
  375.             OFN_LONGNAMES+OFN_FILEMUSTEXIST+OFN_CREATEPROMPT
  376.  
  377.     invoke    CreateWindowEx, WS_EX_CLIENTEDGE, EditClass, 0,\
  378.               WS_VISIBLE + WS_CHILD + ES_NUMBER, 145, 10,\
  379.               50, 25, [hwnd], ID_DIV_NUMBER_EDIT,\
  380.               [wc.hInstance], NULL
  381.     mov    [hDivNumberEditWnd], eax
  382.  
  383.     invoke    CreateWindowEx, 0, UpDownClass, 0,\
  384.               WS_VISIBLE + WS_CHILD + UDS_SETBUDDYINT,\
  385.               195, 10, 30, 25, [hwnd], ID_DIV_NUMBER_UP_DOWN,\
  386.               [wc.hInstance], NULL
  387.     mov    [hDivNumberUpDownWnd], eax
  388.     invoke    SendMessage, [hDivNumberUpDownWnd], UDM_SETBUDDY,\
  389.             [hDivNumberEditWnd], 0
  390.     invoke    SendMessage, [hDivNumberUpDownWnd], UDM_SETRANGE, 0, 020080h
  391.     invoke    SendMessage, [hDivNumberUpDownWnd], UDM_SETPOS, 0, 00002h
  392.  
  393.     invoke    CreateWindowEx, WS_EX_STATICEDGE, StaticClass,\
  394.               DividerValueString,\
  395.               WS_VISIBLE + WS_CHILD + SS_SIMPLE, 10, 10,\
  396.               130, 25, [hwnd], ID_DIV_NUMBER_STATIC,\
  397.               [wc.hInstance], NULL
  398.     mov    [hDivNumberStatic], eax
  399.  
  400.     invoke    CreateWindowEx, 0, PushButtonClass, SplitButtonString,\
  401.               WS_VISIBLE + WS_CHILD + BS_DEFPUSHBUTTON, 10, 45,\
  402.               98, 30, [hwnd], ID_SPLIT_PUSH_BUTTON,\
  403.               [wc.hInstance], NULL
  404.     mov    [hSplitPushButton], eax
  405.  
  406.     invoke    CreateWindowEx, 0, PushButtonClass, MergeButtonString,\
  407.               WS_VISIBLE + WS_CHILD + BS_DEFPUSHBUTTON, 113, 45,\
  408.               98, 30, [hwnd], ID_MERGE_PUSH_BUTTON,\
  409.               [wc.hInstance], NULL
  410.     mov    [hMergePushButton], eax
  411.  
  412.     xor    eax, eax
  413.     jmp    WIN_PROC_FINISH
  414.  
  415.   WIN_PROC_COMMAND:
  416.     mov    eax, [wparam]
  417.     and    eax, 0ffffh
  418.     cmp    eax, ID_SPLIT_PUSH_BUTTON
  419.     je    WIN_PROC_SPLIT
  420.     cmp    eax, IDM_SPLIT
  421.     je    WIN_PROC_SPLIT
  422.     cmp    eax, ID_MERGE_PUSH_BUTTON
  423.     je    WIN_PROC_MERGE
  424.     cmp    eax, IDM_MERGE
  425.     je    WIN_PROC_MERGE
  426.     cmp    eax, IDM_ABOUT
  427.     je    WIN_PROC_ABOUT
  428.     cmp    eax, IDM_EXIT
  429.     je    WIN_PROC_DESTROY
  430.     jmp    WIN_PROC_DEFAULT
  431.  
  432.   WIN_PROC_SPLIT:
  433.     invoke    GetOpenFileName, strOpenFile
  434.     test    eax, eax
  435.     jz    WIN_PROC_FINISH
  436.     stdcall SplitFile
  437.     jmp    WIN_PROC_FINISH
  438.  
  439.   WIN_PROC_MERGE:
  440.     invoke    GetOpenFileName, strOpenFile
  441.     test    eax, eax
  442.     jz    WIN_PROC_FINISH
  443.     stdcall MergeFile
  444.     jmp    WIN_PROC_FINISH
  445.  
  446.   WIN_PROC_ABOUT:
  447.     invoke    DialogBoxParam, [wc.hInstance], IDR_ABOUT_DIALOG,\
  448.               [hwnd], AboutDialogProc, 0
  449.     jmp    WIN_PROC_FINISH
  450.  
  451.   WIN_PROC_DESTROY:
  452.     invoke    PostQuitMessage, 0
  453.     xor    eax,eax
  454.  
  455.   WIN_PROC_FINISH:
  456.     ret
  457. endp
  458.  
  459. section '.rsrc' resource data readable
  460.  
  461.   ; resource directory
  462.  
  463.   directory RT_MENU,menus,\
  464.         RT_ICON,icons,\
  465.         RT_GROUP_ICON,group_icons,\
  466.         RT_DIALOG,dialogs,\
  467.         RT_VERSION,versions
  468.  
  469.   ; resource subdirectories
  470.  
  471.   resource menus,\
  472.        IDR_MENU ,LANG_ENGLISH+SUBLANG_DEFAULT,main_menu
  473.  
  474.   resource icons,\
  475.        IDR_ICON_DATA ,LANG_NEUTRAL,icon_data
  476.  
  477.   resource group_icons,\
  478.        IDR_ICON ,LANG_NEUTRAL,main_icon
  479.  
  480.   resource dialogs,\
  481.        IDR_ABOUT_DIALOG ,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
  482.  
  483.   resource versions,\
  484.        1,LANG_NEUTRAL,version
  485.  
  486.   menu main_menu
  487.        menuitem '&File',0,MFR_POPUP
  488.         menuitem '&Split', IDM_SPLIT
  489.         menuitem 'Merge', IDM_MERGE
  490.         menuseparator
  491.         menuitem 'E&xit', IDM_EXIT,MFR_END
  492.        menuitem '&Help',0,MFR_POPUP + MFR_END
  493.         menuitem '&About...', IDM_ABOUT,MFR_END
  494.  
  495.   icon main_icon,icon_data,'Splitter.ico'
  496.  
  497.   dialog demonstration,'About',5,5,170,50,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
  498.     dialogitem 'STATIC',IDR_ICON, -1, 5,5,70,8,WS_VISIBLE+SS_ICON
  499.     dialogitem 'STATIC','File split and merge utility',-1,35,5,90,8,WS_VISIBLE
  500.     dialogitem 'STATIC','File splitter 1.0.0',-1,48,15,70,8,WS_VISIBLE
  501.     dialogitem 'STATIC','Copyright (C) 11.06.2013',-1,35,25,100,8,WS_VISIBLE
  502.     dialogitem 'STATIC','Evgeney Kupin',-1,50,35,70,8,WS_VISIBLE
  503.     dialogitem 'BUTTON','OK',IDD_ABOUT_OK,120,30,45,15,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON
  504.   enddialog
  505.  
  506.   versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\
  507.           'FileDescription','File splitter 1.0.0',\
  508.           'LegalCopyright','It is free from www.net46.net, Evgeney Kupin',\
  509.           'FileVersion','1.0.0',\
  510.           'ProductVersion','1.0.0',\
  511.           'OriginalFilename','FileSplitter.exe'
  512.