Проблема с реализацией чтения файла.

Тема в разделе "WASM.WIN32", создана пользователем Abrikos, 18 май 2009.

  1. Abrikos

    Abrikos New Member

    Публикаций:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    2
    Уважаемые, дао-воины. Помогите, пожалуйста, начинающему.

    Цель: Необходимо сделать консольное приложение, которое кодирует/декодирует файл с помощью алгоритма RLE. Имя файла и режим задается ключами.

    Есть исходник программы и алгоритм RLE на си
    (В Compress proc планируется код кодирования, а в Decompress proc соответственно декодирование).

    Реализовано: Программа уже умеет с помощью ключей выбирать файл, задавать режим кодирования\декодирования

    Проблема: Не имею понятия, как работать по байтам с выбранным файлом в win32. Всю ночь просидел, глаза уже болят, мозги не варят. Прошу помочь с бедой. Если есть подобные исходники или статья по похожей теме, подкиньте, пожалуйста. Заранее спасибо.

    Код (Text):
    1. option casemap:none
    2. include masm32rt.inc
    3. includelib kernel32.lib
    4.  
    5. Compress    PROTO :DWORD,:DWORD
    6. Decompress    PROTO :DWORD,:DWORD
    7. SetConsoleTitleA PROTO :DWORD
    8. GetStdHandle PROTO     :DWORD
    9. WriteConsoleA PROTO    :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    10. ExitProcess PROTO      :DWORD
    11. Sleep PROTO            :DWORD
    12.  
    13.  .const
    14.  
    15. sConsoleTitle  db 'RLE. Kursovaya.',0
    16.  .code
    17.  
    18. Main PROC
    19.  LOCAL buffer1[260]:BYTE
    20.  LOCAL buffer2[16]:BYTE
    21.  LOCAL file :DWORD
    22.  LOCAL mode :DWORD
    23.  LOCAL pSrc  :DWORD
    24.  LOCAL pDst  :DWORD
    25.  LOCAL flen  :DWORD
    26.  LOCAL hFile :DWORD
    27.  LOCAL hStdout :DWORD
    28.  
    29.   ;титл консоли
    30. invoke SetConsoleTitle, offset sConsoleTitle
    31.  
    32.   ;получаем хэндл вывода
    33.   push -11 
    34.   call GetStdHandle
    35.   mov hStdout,EAX
    36.  
    37.   ;Загрузка файла
    38.   mov file, ptr$(buffer1)
    39.   mov mode, ptr$(buffer2)
    40.  
    41.   invoke GetCL,1,file
    42.     .if eax != 1
    43.       print "Missing command line argument",13,10,13,10
    44.       call help             ;Если нет аргумента с именем файла, то вызываем help
    45.       ret
    46.    .endif
    47.    
    48.  mov pSrc, InputFile(file)      ; загрузка файла
    49.  mov flen, ecx              ; сохраняем размер файла
    50.  mov pDst, alloc(flen)
    51.  print "Source file length: "
    52.  print str$(flen)," bytes",13,10,13,10  ;Вывод размера файла
    53.  
    54.  print "Mode: "
    55.  invoke GetCL,2,mode
    56.     switch$ mode
    57.       case$ "/c"
    58.       print "Compress",13,10
    59.       invoke Compress,pSrc,flen
    60.       case$ "/d"
    61.       print "Decompress",13,10
    62.       invoke Decompress,pSrc,flen
    63.     endsw$
    64.  
    65. invoke Sleep, 2000d
    66. invoke ExitProcess, NULL
    67.  
    68.  
    69. Main ENDP
    70.  
    71. Compress proc psrc:DWORD,flen:DWORD
    72. ;код для архива
    73.     Ret
    74. Compress EndP
    75.  
    76. Decompress proc psrc:DWORD,flen:DWORD
    77. ;код для разархивирования
    78.     Ret
    79. Decompress EndP
    80.  
    81.  
    82. help proc
    83.  
    84.     print "Term Work.",13,10,"Discipline: Low Level Languages. ",13,10
    85.     print "by Fomenko C.S. & Fomenko E.S.",13,10,13,10
    86.     print "SYNTAX: kurs srcfile [/c]|[/d]",13,10
    87.     print "srcfile      : Source file ",13,10
    88.     print "/c       : The target file for the result",13,10
    89.     print "/d       : Optional sort order reversal",13,10
    90.     invoke Sleep, 2000d
    91.    ret
    92.  
    93. help endp
    94.  
    95. end Main.
    Код на google code
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    http://www.wasm.ru/print.php?article=1001013
     
  3. Abrikos

    Abrikos New Member

    Публикаций:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    2
    onSide
    О спасибо большое, долго искал мануал про MapViewOfFile. Спасиб большущее