Евгений Калашников
Просьба описать вкратце формат лисповских защищенных файлов в AutoCAD
В начале идет текст "AutoCAD PROTECTED LISP file", после него CR/LF, дальше EOF. Следом идет однобайтовый ключ, с помощью которого и осуществяется кодирование.
См. програмку декодирования на REXX. Она не совсем корректно работает в общем случае, но идея думаю будет понятна. Hепонятные для меня места отмечены ???
/**/
arg file tofile
lin= linein(file)
call charin(file) /* skip '1a'x */
key= charin(file)
say "key=" c2x(key)
signal on notready name eof
do i=1 by 1
ch= charin(file)
if ch='1A'x then leave
if ch='20'x then iterate /* ??? */
out= bitxor(ch, key)
key= shl(c2x(ch))
if out='1A'x then out= ch
if out='0D'x then out= ch
if out='10'x then say d2x(i-1)
call charout tofile, out
end
eof:
call stream file, 'c', 'close'
call stream tofile, 'c', 'close'
exit
shl: arg hex
bit= x2b(hex)
if left(bit,1) then
res= substr(bit,2)'1'
else
res= substr(bit,2)'0'
return x2c(b2x(res))
Serg Shikov, 2:5020/52, (RU.ACAD)
Как создавать анонимные блоки в AutoCAD.
Большинство программ AutoLISP, результатом работы которых является отрисовка объектов, состоящих из нескольких примитивов (например кокой-нибудь спецзнак), обладают одним общим недостатком - отрисованный элемент состоит из нескольких объектов и поэтому, если возникнет необходимость удалить, переместить, повернуть и т. п. весь объект, то выделить его целиком не всегда удобно. Иногда для решения этой проблемы все объекты спецзнака отрисовываются в отдельном слое. Другим способом является создание таких объектов как анонимные блоки. В этом случае объект представляет из себя единое целое и оперировать с ним гораздо легче. При этом сам блок в, отличие от обычного, для пользователя не видим и его имя не появляется в списке имен блоков при использовании команды insert. В случае удаления отрисованного спецзнака из чертежа, анонимный блок, на который ссылался этот элемент автоматически удаляется из базы данных чертежа при закрытии файла.
Процедура называется (UnBlock pt ss) , где
pt - точка вставки объекта
ss - набор объектов, которые надо превратить в анонимный блок.
ss можно создать с помощью команды ssget или ssadd.
Количество объектов в наборе ss ограничено только возможностями AutoCAD'а. Как мне кажется, это процедуру можно без каких либо проблем использовать в любой версии AutoCAD начиная с v10, т. к. используемые в ней команды AutoLISP не претерпели за последнее время никаких изменений. Так-же она не зависит и от языка используемого AutoCAD'а. При создании этой процедуры я пользовался документацией от AutoCAD'а v10, использую же я ее в AutoCAD'е 2000 (15) .
Процедура UnBlock содержится в файле UnBlock.zip
В файле SpSign.zip содержится пример использования этой процедуры (маленький набор программ отрисовки таких спецзнаков как "Разрез" и "Вид").
Евгений Калашников
Технологическое бюро цеха металлоконструкций
Ссылки по теме