узнать алгоритм

Тема в разделе "WASM.ASSEMBLER", создана пользователем Esbolov, 28 фев 2008.

  1. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    я имел виду упростить распаковшик а так чтото не поиму
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    А что там еще упрощать? Зачем? Ты же хочешь упаковщик написать. И ты не ответил на вопросы моего предыдущего поста.
     
  3. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    1 фаил есть 2 пробовал 3 распоковало на фаилы типа RE.01 и т д
     
  4. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    можеш подсказать с началои запаковшика примерно так можно
    Код (Text):
    1. begin
    2.  
    3. Assign(fOut,main.img);
    4. ReWrite(fOut);
    5. Writeln('Введите число файлов:');
    6. Read(n);
    7. for i:=1 to n do
    8.   begin
    9.    str(i,s);
    10.    s:='re.0+s;
    11.    Assign(fInf,s);
    12.    ReSet(fInf);
    13.    seek(fInf, dword_233C); { чита конкретную запись из файла}
    14.    Read(fInf,byte_243C);
    15.   sub_2E4(fInf, fOut)
    16.   Close(fInf);
    17.   end;
    18. Close(fOut);
    19.  
    20. end.
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    Можно. Только вместо sub_2E4 должно быть что-то вроде Pack(fInf, fOut). И, насколько я понимаю, результирующие файлы должны склеиваться (append) в один.
     
  6. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    ты хочеш сказать что здесь должен
    Код (Text):
    1. ReWrite(fOut);
    вот так
    Код (Text):
    1. Append (fOut);
    да но это помоему для текстовых фаилов
    ну процедуру можна и так

    Код (Text):
    1. begin
    2. Assign(fOut,main.img);
    3. Append (fOut);
    4. Writeln('Введите число файлов:');
    5. Read(n);
    6. for i:=1 to n do
    7.   begin
    8.    str(i,s);
    9.    s:='re.0+s;
    10.    Assign(fInf,s);
    11.    ReSet(fInf);
    12.    seek(fInf, dword_233C); { чита конкретную запись из файла}
    13.    Read(fInf,byte_243C);
    14.    Pack(fInf, fOut);
    15.    Close(fInf);
    16.   end;
    17. Close(fOut);
    18. end
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    Не совсем правильно. Нужно упаковывать каждый из составляющих файлов (или не упаковывать, все зависит видимо от эффективности сжатия, небольшие фрагменты упаковывать не эффективно, их проще хранить в неизменном виде). Информацию о фрагментах (начало твоего упакованного файла) тоже нужно сохранить в файле. Это можно сделать, например, записав "пустышку" подходящего размера, и заполнив ее окончательно после упаковки всех фрагментов и определения смещений и размеров необходимой информацией.
    Главное - упаковщик, общую обвязку сделать несложно.
     
  8. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    crypto
    да но некоторыие фаилы при упаковке смешаются между собои тоесть к примеру в загаловке фаила такои вывод есть размер фаила RE.03 больше всех и кпримеру фаил RE.04 смешается по данному фаилу
     
  9. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    При "сборке" упакованных (неупакованных) фрагментов нужно будет запоминать общую длину полученного файла (т.е. текущее смещение), чтобы потом запомнить эту информацию в заголовке. Короче, процесс сборки будет "инверсией" процесса разборки.
     
  10. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    ну можно и так или можно просто прочесть загаловок main.img и записывать как выходнои фаил другои к примеру main.bin
     
  11. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    Заголовок наверняка изменится, ты же собираешься править данные.
     
  12. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    да насчет сегмента разность двух сегмента дает размер фаила помолему
     
  13. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    да только размер фаила изменится, а смешение нет тоесть начало смешени также остается
     
  14. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    Кроме размеров в заголовке насколько я помню есть еще и смещение.
    ЗЫ
    Понимаю тебя с трудом, постарайся все-таки по-русски излагать.
     
  15. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    смешение в фаиле остается тоесть как и при распаковке так же и при запаковке фаила смешении одинаковы
     
  16. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    Повторюсь: ты же собираешься менять фрагменты, значит размеры упакованных файлов наверняка окажутся другими, значит и смещения изменятся. И потом, это все относится к сборке, а тебе нужно упаковщик писать. Стоит уже этим заняться.
     
  17. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    с упаковшиком уменя идут затруднееия может подскажеш. а смешшение остается постояным ты наверное думаеш что каждыи блок идет за ним нет там так не происходит
     
  18. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    crypto
    подскажи может знаеш почему считывают и записывают в одну и тоу файл записывают например
    Код (Text):
    1.                     Seek(fO, dword_2394);
    2.                     Read(fO, Buf[1]);
    3.                     dword_2364 := Buf[1];
    4.  
    5.                     Seek(fO, dword_2390);
    6.                     Buf[1]:= dword_2364;
    7.                     Write(fO, Buf[1]);
     
  19. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Esbolov
    Попробуй сам разобраться, я уже устал быть пастырем.
     
  20. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    я так и ничего не понял процедура sub_0 считывает из фаила main.img а зачем тут в процедуре sub_2Е4 считывать там ведь пуста тоесть фаилы только созданны и они пустыие