Index of /ukdwk_archive/ukncbtlwebcomplekt/Other/FCU_Shurick_inc

[ICO]NameSizeDescription
[PARENTDIR]Parent Directory -  
[   ]FCU_Shurick_inc.rar 51K 

(:: П р и м е р ы и с п о л ь з о в а н и я а р х и в а т о р а. ::? $ $ $ Заархивировать ВСЕ с MZ0: 7 $ $ в архив "ARCHIVE" на 7 FCU MZ0:*.* MZ1:ARCIVE/A $ $ устройстве MZ1: 7 $ $ 7 $ $ Архивировать ВСЕ с 7 FCU MZ0:*.* MZ1:ARCHIVE/A/Q $ $ подтверждением. 7 $ $ 7 $ $ Aрхивировать только 7 FCU MZ0:%%.SYS MZ1:ARCHIVE/A $ $ драйверы 7 $ $ 7 $ $ Архивировать ВСЕ, кроме 7 FCU MZ0:*.SYS MZ1:ARCHIVE/A/X $ $ системных файлов 7 $ $ 7 $ "55555555555555555555555555555555555055555555555555555555555555555555555 $ 7 $ $ Раскрыть ВЕСЬ архив на 7 FCU MZ1:ARCHIVE MZ0:*.* $ $ устройство MZ0: 7 $ $ 7 $ $ Раскрыть ВЕСЬ архив с 7 FCU MZ1:ARCIVE MZ0:*.*/Q $ $ подтверждением 7 $ $ 7 $ $ Выделить из архива лишь 7 FCU MZ1:ARCHIVE MZ0:*.LST $ $ текстовые файлы 7 $ $ 7 $ $ Извлечь из архива ВСЕ 7 FCU MZ1:ARCHIVE MZ0:*.SYS/X $ $ файлы, кроме системных 7 $ $ 7 $ "55555555555555555555555555555555555055555555555555555555555555555555555 $ 7 $ $ Проверить архив на 7 FCU MZ1:ARCHIVE/T $ $ корректность 7 $ $ 7 $ "55555555555555555555555555555555555055555555555555555555555555555555555 $ 7 $ $ Вывести каталог архива на 7 FCU MZ1:ARCHIVE/L $ $ системный терминал 7 $ $ 7 $ $ Вывести каталог архива в 7 FCU MZ1:ARCHIVE ARCCAT/L $ $ файл "ARCCAT" на DK: 7 $ $ 7 $ $ Распечатать каталог архива 7 FCU MZ1:ARCHIVE LP:/L $ $ 7 $ 6:::::::::::::::::::::::::::::::::::4:::::::::::::::::::::::::::::::::::< О п и с а н и е а р х и в а т о р а FCU.SAV v2.00. Sep 11 1994. Shurick inc. Данный продукт является архиватором общего назначения. Фактически, он являет собой адаптированую копию архиватора lzhuf, написанную на языке C. Однако, в отличие от оригинала, данная адаптированная копия является полным архиватором, т.е. он не просто сжимает и разжимает один файл, он создает архив, в который может входить более одного файла. Размер архива и число входящих в него файлов, вообще говоря, неограничено, хотя, безусловно, Вам будет сложно создать архив размер которого больше размера диска. Скорость архивации примерно блок в секунду. Текстовые файлы архивируются примерно на 60%, а двоичные - на 40%. Лучше всего архивируются файлы после POLYSS'а - 94%. Архиватор поддерживает следующие функции: - Добавление к уже имеющемуся архиву файлов или создание нового архива. - Извлечение файлов из архива. - Удаление файлов из архива. - Обновление файлов в архиве. - Тестирование архива. - Вывод каталог архива на экран и в файл. - Изготовление самораскрывающегося архива из как уже готового архива, так и при его создании или добавлении к нему файлов. - Удаление разархиватора из самораскрывающегося архива. Каждая из функций допускает наличие ключей-атрибутов, наличие ко- торых слегка изменяет порядок или содержание перечисленных функций. Вызов архиватора и выбор режима работы осуществляется посредством командной строки, формат которой мы и обсудим ниже. [A] В случае создания нового архива или добавления файлов к старому архиву используется командная строка в виде: FCU idev:infile[,Header/H][,...,infile] odev:archive/A[,dev:oldarchive] Здесь idev - имя устройства, на котором расположены ВСЕ архивиру- емые файлы, аргумент(ы) infile задают маски этих архивируемых файлов. Таких масок может быть не более шести одновременно. Здесь стоит отметить то обстоятельство, что все маски файлов относятся ко входному устройству и, поэтому, нельзя, например, взять одни файлы, скажем, с MZ0:, другие с MZ1: и т.д. Входное устройство одно, а с него берутся файлы по маске по условию "или" (этот, вот этот и еще этот). odev - имя устройства на котором находится старый архив (если он есть) и на котором будет находиться тот архив, который получится после архивирования. archive - имя архива (уже имеющегося или который будет создан). Если старый архив находится на другом устройстве (не на odev) или имеет другое имя (не archive) то в командную строку может быть добавлено: dev:oldarchive, где dev - устройство, на котором находится старый архив, а oldarchive - его имя. Это нововведение по сравнению с версией 1.00 призвано заменить ключ /V. Header - имя Хедера. Его назначение и использование объясняется ниже. При этом алгоритм работы архиватора следующий: если архив с именем archive уже существует на устройстве odev, то он переписы- вается и к нему добавляются те файлы с устройства idev, которые подпадают под маску (хотя бы под одну) и которых нет в старом архиве, иначе на устройстве odev создается новый архив с именем archive и расширением .FCU и в него архивируются все те файлы с устройства idev имена которых подходят под маски. В данном режиме работы архиватора допустимы следующие ключи- атрибуты: - /B [Beep] подать звуковой сигнал по окончании архивации. Своего рода будильник, его рекомендуется применять в случае, когда процесс архивации обещает быть долгим. - /C [Create] открыть новый архив несмотря на возможное наличие на устройстве odev старого архива. - /H [Header] указывает, что файл, при котором стоит этот ключ, будет добавлен в архив (в его начало) в качестве заголовка. Это, обычно, текстовый файл, который при разархивации архива, если не было указано другое (см. ниже) просто выводится на терминал. - /М [Move] после успешного завершения операции удалить заархи- вированные файлы, если только они не защищены от удаления. - /N [New] если в архиве уже имеется файл, который должен быть заархивирован, то он удаляется (не переписывается), а заново архивируется. - /Q [Query] пепеписывать файлы из старого архива в новый с подтверждением, а затем добавляет к архиву файлы также с под- тверждением. При этом, кстати, он не проверяет есть ли файл уже в архиве или нет т.к. считается что человек умнее машины и если он хочет чтобы в архиве было два одинаковых файла, то значит так тому и быть. - /X [eXclude] заархивировать все файлы, кроме всех, указанных в масках. - /. [Top Secret switch] создать самораскравающийся архив (доба- вить перед собственно архивом разархиватор. При этом сздается файл с расширением .SAV. В новой версии архиватора присутствует возможность вводить список файлов для архивации из файла. В том случае, если шестью масками невозможно охватить все многообразие файлов, которое Вы хотели бы заархивировать, Вы имеете возможность все же добится желаемого посредством чтения списка файлов из файла! Командная строка в этом случае будет иметь следующий вид: FCU idev:Dirfile/I odev:archive/A Здесь idev - имя входного устройства, на нем ДОЛЖНЫ располагаться как сам Dirfile (файл, содержащий список файлов для архивации) так и те файлы, которые будут архивироваться. Смысл остальной части заклинания (я полагаю) ясен всем читателям данного мануала. Теперь оговорим содержание файла Dirfile. Это текстовый файл, в котором содержаться имена файлов (желательно прописными буквами). Причем, на одной строке содержится не более одного имени файла. Строка должна начинаться либо с имени файла, либо с пробелов и (или) табуляций. Первый символ в строке, отличный от пробела и табуляции воспринимается как начало имени файла. Следущие девять символов читаются из потока и интерпретируются как имя файла. Остальная часть строки (до символов перевода каретки 15,12) игнорируется. Если полученное путем такой экстракции "имя" вдруг не окажется допустимым (для тех, кто понимает: CSISPC установит бит C) то оно игнорируется. В следствии этого допускаются строки, не содержащие в начале имени файла, но этим злоупотреблять нерекомендуется. Если при этом вдруг что-то вылетит, то во всем будет виноват пользователь! Я его предупредил. Вообще вся эта идеология хорошо работает, если Dirfile был получен путем заклинания DIR'а: DIR/FAST/OUT:Dirfile/COL:1. [D] В случае удаления файлов из имеющегося архива командая строка принимает вид: FCU dev:archive [file,...,file]/D Здесь dev - имя устройства, на котором расположен архив, archive - имя архива, file - маски (не более трех) файлов, которые требуется удалить из архива. Данный режим работы архиватора допускает ключи: - /B [Beep] подать звуковой сигнал по окончании операции. - /Q [Query] удалять с подтверждением те файлы, которые отмечены в маске. - /X [eXclude] удалять ВСЕ файлы, кроме отмеченных масками. [E] Извлечение файлов из архива. Здесь формат командной строки такой же как и в случае удаления: FCU adev:archive odev:[file,...,file][/E] adev - имя устройства, на кором расположен архив, file - маски разархивируемых файлов (не более трех), odev - имя устройства на которое будут разархивированы указанные файлы. Замечания: Ключ используется по умолчанию. Маска файлов по умол- чанию: *.* (т.е ВСЕ). При разархивировании на устройства нефай- ловой структуры (типа SL: или LP:) маска по умолчанию *.*, иначе приходится указывать *.* т.к. ругается CSISPC. Замечание к замечаниям: если замечания не понятны - не читайте их, пишите всегда маски файлов и ни о чем не думайте. Допустимые в режиме ключи: - /B [Beep] подать звуковой сигнал по окончании операции. - /Q [Query] разархивировать указанные файлы с подтверждением. - /X [eXclude] разархивировать ВСЕ, кроме указанных файлов. - /. Запрещает вывод хедеров на терминал, разархивирует их как обычный файл. [F] Освежить [freshen] существующие файлы в архиве. Переархивирует указанные в масках файлы имеющиеся в архиве если дата их созда- ния не позже чем тех, что есть на устройстве. Формат командной строки: FCU idev:file[,file,...,file] adev:archive/F Где idev - имя устройства на котором находятся файлы для обнов- ления архива, file - маски файлов для обновления (не более 6) adev - имя устройства, на котором расположен архив, archive - имя этого архива. Допустимые ключи: - /B [Beep] подать звуковой сигнал по окончании операции. - /Q [Query] спрашивает относительно ВСЕХ файлов указанных в маске (не взирая на дату). - /X [eXclude] Освежить файлы из архива, исключая выбранные. [L] Показать каталог архива. Формат командной строки: FCU adev:archive [odev:outfile]/L Пишет каталог архива archive в выходной файл outfile на устрой- стве odev (если он указан) и, так же, пишет каталог на терминал. Ключей данный режим не имеет. Хедеры в список файлов не включаются. Коротко о той информации, которая при этом выводится. Во-первых, выводится системная дата, имя архиватора и имя архива, чтобы потом, при просмотре файла через некоторое время, не возникало недоразумений по поводу того что это за архив за такой и откуда он взялся. Во-вторых, по поводу каждого файла выводится его имя, значек "P" (Protected), если файл при архивации был защищен. Это означает, что и после разархивации на диск этот файл также будет защищен от удаления, т.к. этот атрибут файла архиватор сохраняет. Также указывается дата создания или последнего копирования этого файла (та самая, которую он имел в момент архивации), длина файла в блоках, число блоков и тысячных долей блока, занимаемых файлом в архиве и процент, показывающий отношение размера файла в архиве к исходному размеру файла на диске. [R] Удалить из самораскрывающегося архива собственно разархиватор. Все дело в том, что самораскрывающийся архив архивом в чистом виде не является и с ним можно сделать лишь две вещи: либо пол- ностью раскрыть его, либо удалить. Чтобы иметь возможность проделать с ним все те действия, которые допускается проделывать с архивами нужно сделать из него архив. Формат командной строки: FCU dev:extr [adev:archive]/R Здесь, ясное дело, dev:extr - имя устройства и имя самораскры- вающегося архива на нем, adev:archive - имя устройства и имя архива на нем, который будет создан. По умолчанию имя архива совпадает с именем самораскрывающегося архива. Ключей нет. [S] Сделать из архива самораскрывающийся архив. Добавляет в начало архива разархиватор. Полученное чудище называется Self extractor. Формат командной строки: FCU adev:archive [dev:extr]/S Расширение выходного файла .SAV. При запуске его на выполнение в ответ на "Extract to (device) >" следует указать имя устройства на которое будет раскрыт ВЕСЬ архив. Архив самораскроется, т.е. на указанном устройстве возникнут файлы, к оторые были в архиве. Если во время создания Self Extractor'а не указан второй аргу- мент (extr), то имя выходного файла будет точно такое же как и имя входного (archive) (расширение, естественно, будет .SAV). Ключей в данном режиме работы архиватор не поддерживает. [T] Проверяет архив на корректность. Проверяет формат архива и кон- трольные суммы файлов в архиве. Выводит на терминал результаты тестирования. Формат командной строки: FCU adev:archive/T Сообщение CRC error означает ошибку в контрольной сумме указан- ного файла, при этом файл возможно и разархивируется, сообщение Format archive error означает, что начиная с данного места архив потерян. Ключей нет. [U] Об'единить архивы. Об'единяет не более шести архивов в один. При этом наличие одинаковых файлов в разных архивах не проверяется. Командная строка в этом случае имеет вид: FCU arc1[,arc2,...,arc6] [archive]/U Где arc1..6 - имена архивов, которые об'единяются (естественно с устройствами, на которых они расположены), archive - имя архива, который явится об'единением указанных архивов (ясное дело тоже с именем устройства). По умолчанию имя выходного архива совпадает с именем arc1. Ключи: - /B [Beep] подать звуковой сигнал по окончании операции. - /Q [Query] спрашивает отдельно о каждом файле нужно ли его включать в операцию. ЗАМЕЧАНИЕ: При обработке ключа "/Q" архиватор спрашивает пользователя, выводя на экран сообщение "do it?" (делать ЭТО?). По умолчанию, ответ считается отрицательным (нет) и слева от имени файла пишется "No". Если пользователь дал утвердительный ответ, нажав 'Y', то слева пишется Yes. Размер хедера не должен привышать 9 блоков. После того как описаны режимы работы архиватора хотелось бы оста- новиться на понятии маски файла. Те, кто знаком с этим понятием могут не останавливаться на данном пункте. Известно, что в системе RT11 имя файла задается посредством девяти символов: шесть символов имени и три - расширения имени. При этом используются большие английские буквы и цифры. Файл определяется однозначно по своему имени и расширению. Маски файлов были введены для того, чтобы можно было бы проделывать над файлами групповые перации. Для этого, помимо тех символов, которые разрешены для использования в именах файлов, были введены еще два символа: "*" и "%". "*" обозначает, что далее сравнивать имена файлов не надо (они уже попали под маску), а "%" означает любую букву. Например: *.* - все файлы *.SAV - файлы с расширением .SAV AL*.* - все файлы, имена которых начинаются на "AL" *.S* - файлы, расширения имен которых начинается на "S" M%.* - файлы, имена которых имеют лишь две буквы и начина- ются на "M" *.%% - файлы, расширения которых содержат лишь две буквы %%.SYS - это будут лишь драйверы Я думаю, что приведенные выше примеры помогут разобраться в понятии масок файлов. В заключении лишь отмечу, что это не мое изобретение, маски прекрасно работают в системных утилитах таких как PIP и DIR, например. Поэксперементируйте с ними, я думаю, после этого они понравятся Вам еще больше. Чтобы избежать недоразумений, оговорюсь сразу, проценты, которые пишет архиватор означают часть от файла, которая осталось в архиве, т.е. отношение длины заархивированного файла к исходному размеру файла на диске в пройентах, а не на сколько ужалось. Обработка ошибок. Архиватор распознает два типа ошибок при своей работе: фатальные и не фатальные. В первом случае, как правило, все заканчивается сообщением типа "?FCU-F-" и программа выход в монитор. Таким способом программа ведет себя в случае если происходит ошибка чтения/записи файла (I/O error) или какая-либо другая ошибка, связанная с вводом/выводом. Во втором случае всего лишь выводится предупреждение (Warning) вида "?FCU-W-" и программа продолжает свою работу. Стоит отдельно отметить обработку фатальных ошибок при архивации файлов. В этом случае, если происходит ошибка чтения архивируемого файла, который зачитывается поблочно, на экран выводится сообщение об ошибке и спрашивается о дальнейших действиях. Отрабатываются три альтернативы: Retry - повторить чтение данного блока еще раз, Ignore - игнорировать ошибку, при этом архивирование файла продолжается так как если бы ошибка не возникала вовсе просто вместо того блока, что должен был бы быть зажат, архивируется блок случайной информации, которая была неудачнг считана с диска. Abort - прекратить процесс архивации и выйти в монитор. В случае возникновения подобных ошибок Вы можете выбрать устраивающцю Вас альтернативу введя ее первую букву. Оверлейность программы. Использование ключа /W. Данный продукт является оверлейным т.к. деревья и таблицы, используемые при архивации файла, настолько велики, что с трудом помещаются в памяти. В силу того, что при архивации такие блоки как, например, разархиватор, об'единитель архивов и т.д. не нужны, они портятся в памяти т.к. буфера открываются на их месте. Поэтому, если использовать архиватор только один раз (с выходом в монитор после каждой отдельной операции как описывалось до сих пор) никаких проблем быть не может, а вот если архиватор вызвать командой RU FCU, он выдаст приглашение как сразу после входа, так и по завершении операции, однако, тогда часть программы в памяти будет испорчена, поэтому, перед повторным выходом в командную строку архиватор перечитывается с диска еще раз. Попробую об'яснить это еще раз другими словами. Архиватор может быть вызван двумя путями: либо так, как это было описано выше,- строкой типа "FCU *.* ar/A" при этом в данной строке,как видно, содержится как вызов архиватора "FCU", так и командная строка для его работы: "*.* ar/A". Монитор при подачи такой команды поступает так: Сначала вызывает архиватор FCU.SAV с системного диска, затем преобразует вторую часть командной строки к виду: "ar/A=*.*" и передает ее в программу. После окончания архивации программа передает управление в монитор и тот факт, что она частично испортила буферами саму себя никакой роли не играет, т.к. она в памяти больше уже и не нужна. Другой способ вызвать архиватор состоит в следущем. Сначала Вы командой "RU FCU" грузите архиватор в память и запускаете его там. После этого, он выдает подсказку "FCU v1.00 >". Теперь, Вы можете написать командную строку вида "ar/A=*.*". При этом архиватор начнет свою работу в ходе которой часть архиватора в памяти будет испорчена буферами и деревьями. После окончания работы архиватор долвен опять выдать такое же приглашение, но, в силу того, что часть кодов испорчена, он предварительно перечитывает себя с диска, а лишь потом выдает исходное приглашение. Если при работе с архиватором, диск, на котором он находится, остается в дисководе, то этот факт (подчитывание самого себя с диска) никак себя не проявит особенно. Другое дело если Вы работаете всего с одним дисководом. В этом случае Вы можете смело запустить FCU с диска, затем вынуть его, вставить тот, на котором хранятся те файлы, над которыми Вы хотите провернуть операцию архивирования, или диск НА который Вы хотите раскрыть архив и подать архиватору соответствующую команду, приписав к ней ключ "/W" (Wait) (подождать). При этом архиватор выполнит требуемую функцию и захочет перечитать себя с диска, но увидев ключ попросит Вас вставить обратно диск с FCU ("Mount back the device with FCU). На вопрос о продолжении операции (Continue?) следует ответить либо 'Y', либо просто нажать ввод в случае, если Вы хототе продолжить работу с архиватором, либо ответить 'N', если Вы хотите выйти в монитор. Архиватор перечитывается с диска в случае, если был дан положительный ответ, и выдает приглашение. Вероятно, некоторые захотят знать а зачем вообще нужно то, чтобы архиватор снова возвращался в начало, да еще и себя перечитывал. Пусть он выходит себе в монитор и не мучается. Ответ, на самом деле, прост. Это нужно для того, чтобы можно было управлять архиватором из командного файла и при этом не нужно было бы каждуй раз его запускать снова. И Во-вторых, при смене диска в дисководе, этот способ более удобен. Ну представьте, что Вам нужно расжать два архива на другом диске. Не будь этого режима, Вам пришлось бы дважды вызывать архиватор, и после своей работы он выходил бы в пульт, а не в монитор т.к. системный диск Вы заменили бы на диск с архивами. Так работает ARC и ЭТО мне ОЧЕНЬ не нравиться. К тому же, именно так работают все системные утилиты. Информация для программистов. Итак, как было сказано в начале, данный продукт являет собой, по сути, lzhuf. Если кому-то интересно как построен его алгоритм, пусть он обратится в F-Bit и попросит исходные тексты архиватора, написанного Hurahiko Okumura и попробует в них разобраться. Я знаю лишь как работает lz. Есть, в принципе, из той же серии архиватор lzarm, который тоже основан на lz, но архивирует лучше. Я побоялся его адаптировать, хотя он был бы и короче, потому, что он работал бы он раза в два медленнее, а выгадывал бы не более 5%. Вполне возможно, что я напишу и его, но это будет уже другой архиватор. Кроме того, алгоритм, реализованный здесь, имеет два неоценимых качества: он достаточно быстр и архивирует лучше чем PACK, LZSS и ARC. Других архиваторов у меня нет и с ними сравнить я не могу. В сравнении с ARJ на убогой машине фирмы IBM (один ВЭ ЭМ ЭР ЭС) он проигрывает где-то 3% при архивации, но зато, он может работать в 56 Кб памяти!!! В архиве имеется каталог файлов, которые в нем есть. Этот каталог "размазан" по всему архиву. Перед началом файла в архиве имеется заголовок из 7 слов: 3 слова имени (в коде RADIX-50), изначальная длина файла в блоках, системная дата (старший бит даты означает что файл был защищенным и при разархивации он защищается от удаления) далее следуют два слова, которые имеют смысл длины файла в архиве (с точностью до слова). В младшем байте первого слова хранится количество слов, старший байт имеет специальный вид это служит ключом того, что это заголовок. И последнее, 7-е слово содержит число бло- ков, которое файл занимает в архиве. Два последних слова заголовка имеют важное значение т.к. во время разархивации именно на них делается основной опор. Если эти слова испочены, то восстановит файл из архива становится невозможным, поэтому предусмотрен ключ /., котоный в режиме List выводит содержимое этих двух слов. Если Вы хотите обезопасить свой архив,- после архивации сохраните значения этих слов в каталоге архива на диске и в случае необходимости Вы сможете с помощью DESS'а восстановить их. В след за заголовком архива расположен собственно архив. Он заканчивается двумя специальными словами: первое из них - контрольная сумма файла (исходного), второе - контрольная сумма файла в архиве. Длина файла в архиве дается без учета этих двух слов. Во время тестирования проверяется: - Первые три слова. Они должны быть допустимы в радиксе. Если первое слово имени файла ноль, архиватор считает это концом архива. - Длина исходного файла. Она должна быть отлична от нуля. - Ключефой байт в первом слове длины файла в архиве. Если хотя бы одно из перечисленных условий не соблюдено выводится сообщение Format archive error. Также проверяется контрольная сумма файла в архиве. При разархивации проверяется контрольная сумма исходного файла. В завершении отмечу, что под словом "адаптирован" имеется в виду не просто тупо переперт на ассемблер и странслирован, но и ускорен в части алгоритма lz, поэтому если отрезать от него доархиватор хаффмана, он будет работать быстрее, чем написанный до него LZSS, в то время как архивироваать он будет также. Чтобы понять полностью пролетарскую сущность архиватора проделайте следущий эксперемент. Возьмите декусовский Си (или другой файл размером от 90 до 120 блоков. Длинее не берите т.к. умрете от тоски) и ПОПРОБУЙТЕ заархивировать его с помощью великого ARC. Где-то минут через сорок, он напишет, что файл заархивирован и Вы сможете порадоваться. Теперь, возьмите FCU и зажмите им данный файл. Минуты через две файл будет зажат и архив будет слегка короче, чем в первом случае. Чудеса-а-а... Очень весело попробовать заархивировать архив после ARC. Попробуйте. Наверняка он станет короче. Количество подобных эксперементов может быть неограничено и я надеюсь, они убедят Вас, каким именно архиватором нужно пользоваться. Покупайте наших слонов...