| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало

Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало

Ответ
Поиск в этой теме
Непрочитано 04.03.2019, 17:29 #1
Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало
Чигинский Дмитрий
 
ГИП
 
Тула
Регистрация: 09.09.2006
Сообщений: 112

Здравствуйте, помогите, пожалуйста скрестить ежа с ужом, а именно, решить задачу удаления конкретного слоя (имеющегося во всех файлах) и очистки файлов в рамках иерархической структурой папок.

Исходные данные.
1. Имеется работающая функциональность удаления слоя "_Подписи" и очистки файла командой "SuperPurge" посредством кнопки на панели быстрого доступа в AutoCAD 2018 к которой привязан следующий макрос:
Код:
[Выделить все]
^C^C^R_laydel;_name;_Подписи;^C^C_-Purge;_All;;_No;^C^C_.audit;_y;_-Purge;_All;;_No;_-Purge;_All;;_No;
2. Всё устраивает пока файлов до 10 шт., но когда файлов кратно больше и они разложены по подпапкам хотелось бы процесс автоматизировать, пусть и под контролем человека.

3. Поиском были обнаружены следующие части мозайки:

3.1. Лисп, работающий, найдены здесь на форуме http://forum.dwg.ru/showpost.php?p=569996&postcount=13 и/или http://forum.dwg.ru/showpost.php?p=54725&postcount=3,
посредством которого происходит обход и очистка файлов, в том числе, по иерархической структуре папок.
Код:
[Выделить все]
 
;;;CADALYST 03/05 Tip2023: PurgeFiles.lsp	Directory Clean Up	(c) Andrzej Gumula


;;; [c]2004 Andrzej Gumula, Katowice, Poland
;;; e-mail: a.gumula@wp.pl
;;; This routine purge dwg files from selected folder


(vl-load-com)

(defun c:PurgeFiles (/ FilesList DwgPath SubDir Files File)

(defun GetFolder (/ Dir Item Path)
 (cond
  ((setq Dir (vlax-invoke (vlax-get-or-create-object "Shell.Application") 'browseforfolder 0 "Выберите папку с DWG файлами:" 1 ""))
   (cond
    ((not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list Dir 'Items))))
     (setq Item (vlax-invoke-method (vlax-invoke-method Dir 'Items) 'Item))
     (setq Path (vla-get-path Item))
     (if (not (member (substr Path (strlen Path) 1) (list "/" "\\")))
      (setq Path (strcat Path "\\"))
     );end if
    )
   );end cond
  )
 );end cond
 Path
);end GetFolder


(defun vl-findfile (Location / DirList Path AllPath)
 (MakeDirList Location)
 (setq DirList (cons Location DirList))
 (foreach Elem DirList 
  (if (setq Path (vl-directory-files Elem "*.dwg"))
   (foreach Item Path (setq AllPath (cons (strcat Elem "/" Item)  AllPath)))
  );end if
 )
 (reverse AllPath)
);end vl-findfile

(defun MakeDirList (Arg / TmpList)
 (setq TmpList (cddr (vl-directory-files Arg nil -1)))
 (cond
  (TmpList
   (setq DirList (append DirList (mapcar '(lambda (z) (strcat Arg "/" z)) TmpList)))
   (foreach Item TmpList (MakeDirList (strcat Arg "/" Item)))
  )
 );end cond
);end MakeDirList

(if (not FileSystemObject)
  (setq FileSystemObject (vla-getInterfaceObject (vlax-get-acad-object) "Scripting.FileSystemObject"))
);end if

(cond
((= (getvar "SDI") 0)
(cond
 ((setq DwgPath (GetFolder))
  (initget "Yes No")
  (setq Subdir (cond ((getkword "\nИскать во вложенных папках? No,[Yes]: "))
		     (T "Yes")))
  (if (equal SubDir "Yes")
   (setq Files (vl-findfile (substr DwgPath 1 (1- (strlen DwgPath)))))
   (setq Files (mapcar '(lambda (x) (strcat dwgpath x))(vl-directory-files DwgPath "*.dwg" 1)))
  );end if
  (setq Files (mapcar 'strcase Files))
  (cond
    (Files
     (vlax-for & (vla-get-documents (vlax-get-acad-object )) (setq FilesList (cons (strcase (vla-get-fullname &)) FilesList)))
     (foreach & Files
      (cond
	((not (member & FilesList ))
         (cond
	  ((/= (logand (vlax-get-property (vlax-invoke-method FileSystemObject 'getfile &) 'Attributes) 1) 1)
	   (cond
	     ((setq File (vla-open (vla-get-documents (vlax-get-acad-object)) &))
	      (prompt (strcat "\nPurge " & ". Please wait..."))
              (vla-purgeall File)
	      (prompt (strcat "\nSave and close " &))
	      (vla-save File)
	      (vla-close File)
	      (vlax-release-object File)
	     )
	     (T (prompt (strcat "\nCannot open " & "\nDrawing file was created by an incompatible version. ")))
	   );end cond
	  )
	  (T (prompt (strcat & " is read-only. Purge canceled. ")))
	 );end cond
	)
	(T (prompt (strcat & " is open now. Purge canceled. ")))
      );end cond

     );end foreach
    )
    (T (prompt "\nNothing files found to purge. "))
  );end cond
 )
 (T (prompt "\nNothing selected. "))
);end cond
)
(T (prompt "\nThe routine is not available in SDI mode. "))
);end cond
(princ)
);end c:PurgeFile

(prompt "\nLoaded new command PurgeFiles. ")
(prompt "\n[c]2004 Andrzej Gumula. ")
(princ)
3.2. Команда на лисп http://www.arch-pub.com/Laydel-in-Lisp_10744991.html для удаления слоёв и всего, что в них содержится:
Код:
[Выделить все]
(command "_.laydel" "n" "_Подписи" "" "y")
Прошу подсказать каким образом можно совместить одно с другим, чтобы реализовать указанную выше задачу.

Заранее благодарю.
__________________
С уважением, Чигинский Дмитрий.
Просмотров: 2557
 
Непрочитано 04.03.2019, 21:06
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,749


Насколько я помню, подобный код должен работать, так сказать, не очень. Аудит-то точно работает только на текущем файле (кстати, vla-purgeall фактически тоже в некоторых версиях работал только в текущем). Открытие документа через vla-open может запросто привести к активации загруженного документа - и выполнение лиспа тупо прервется.
Я бы писал scr-файл и запускал консольный acad, подсовывая ему dwg и соответствующий скрипт. Возможно, это будет самым простым решением.

----- добавлено через 46 сек. -----
P.S. В магазине приложений Autodesk есть отличная утилита пакетной очистки (что-то типа BatchPurge, если не ошибаюсь). Работает - на ура!
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.03.2019, 07:41
#3
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,544
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Чигинский Дмитрий Посмотреть сообщение
когда файлов кратно больше и они разложены по подпапкам хотелось бы процесс автоматизировать, пусть и под контролем человека.
автоматизируй
Код:
[Выделить все]
FOR /r %%A IN (*.DWG) DO ( 
"c:\Program Files\Autodesk\AutoCAD 2018\accoreconsole.exe" /i "%%A" /s "z:\clean_DWG\cleanConsole.scr" /l "en-US"
)
z:\clean_DWG\cleanConsole.scr путь к твоему файлу скрипта, в котором можешь прописать либо просто команды либо подгружать лиспы, нет сборки и запускать их.
ключ /r рекурсия (поиск во вложенных папках)
сохраняешь код в текстовом фале с расширением *.bat кидаешь в папку которую чистить запускаешь...дальше оно само все сделается (по щучьему велению)
ЗЫ я тут потестил, консольная версия где-то раз в десять пошустрее обрабатывает, но конечно может не все.
---------
upd
и про подчеркивания не забывай
ну и итоговый scr может выглядеть как-то так
Код:
[Выделить все]
_layon
_laythw
(vl-cmdf "_.laydel" "_n" "Слой1" "" "_y")
_qsave
(vl-cmdf "FILEDIA" "1")
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 05.03.2019 в 08:21. Причина: vla- не работает в консоли
doctorraz на форуме  
 
Непрочитано 05.03.2019, 08:03
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,749


Только стоит помнить, что консольный acad сильно урезан по возможностям - так, поддержки vla- нет, загрузить arx, по-моему, тоже невозможно. Как насчет .NET-сборок - не в курсе.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.03.2019, 08:14
#5
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,544
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Как насчет .NET-сборок - не в курсе.
ExplodeProxy работаетupd не совсем
это то же (repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
упсс ты прав, работало за счет

Код:
[Выделить все]
(defun C:WBOUT(/ dn pa pawbdn)
(setq dn (getvar "dwgname"))
(setq pa (getenv "TEMP"))
;(setq pa (getvar "dwgprefix"))
(setq pawbdn (strcat pa "\\" dn))
(command "_.WBLOCK" pawbdn "*")
)
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 07.03.2019 в 06:06.
doctorraz на форуме  
 
Автор темы   Непрочитано 05.03.2019, 20:13
#6
Чигинский Дмитрий

ГИП
 
Регистрация: 09.09.2006
Тула
Сообщений: 112
<phrase 1= Отправить сообщение для Чигинский Дмитрий с помощью Yahoo Отправить сообщение для Чигинский Дмитрий с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я бы писал scr-файл и запускал консольный acad, подсовывая ему dwg и соответствующий скрипт. Возможно, это будет самым простым решением.
P.S. В магазине приложений Autodesk есть отличная утилита пакетной очистки (что-то типа BatchPurge, если не ошибаюсь). Работает - на ура!
Благодарю за оперативный ответ. Идею понял.
BatchPurge, так понимаю, чистит, но слой не удаляет.
То что doctorraz написал, похоже в нужном направлении.

Цитата:
Сообщение от doctorraz Посмотреть сообщение
сохраняешь код в текстовом фале с расширением *.bat кидаешь в папку которую чистить запускаешь...дальше оно само все сделается (по щучьему велению)
Однако, почему-то работает, но без результата.
Что-то делает, но не сохраняет.

Ниже лог командной строки (папка "1" с bat'ником и File.dwg; папка "2" содержит cleanConsole.scr):
Код:
[Выделить все]
d:\1>D:\1\PurgeFilesPlus.bat

d:\1>FOR %A IN (*.DWG) DO ("c:\Program Files\Autodesk\AutoCAD 2018\accoreconsole.exe" /i "%A" /s "d:\2\cleanConsole.scr" /l "en-US" )

d:\1>("c:\Program Files\Autodesk\AutoCAD 2018\accoreconsole.exe" /i "File.dwg" /s "d:\2\cleanConsole.scr" /l "en-US" )
Redirect stdout (file: C:\Users\User1\AppData\Local\Temp\accc127322).
AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto
AutoCAD Core Engine Console - Copyright 2017 Autodesk, Inc.  All rights reserved. (O.161.0.0)

Execution Path:
c:\Program Files\Autodesk\AutoCAD 2018\accoreconsole.exe

Version Number: O.161.0.0 (UNICODE)
Regenerating model.

Loading Modeler DLLs.
**** System Variable Changed ****
1 of the monitored system variables has changed from the preferred value. Use SYSVARMONITOR command to view changes.
Command:
Command:
Command:
Command: _layon
All layers have been turned on.
Command: _laythw
All layers have been thawed.
Command: (vl-cmdf "_.laydel" "_n" "_Подписи" "" "_y")

d:\1>
Файлы как из поста выше:

Содержание файла PurgeFilesPlus.bat:
Код:
[Выделить все]
FOR /r %%A IN (*.DWG) DO ( 
"c:\Program Files\Autodesk\AutoCAD 2018\accoreconsole.exe" /i "%%A" /s "d:\2\cleanConsole.scr" /l "en-US"
)
Содержание файла cleanConsole.scr:
Код:
[Выделить все]
 
_layon
_laythw
(vl-cmdf "_.laydel" "_n" "_Подписи" "" "_y")
_qsave
(vl-cmdf "FILEDIA" "1")
Чувствую что-то делаю не так. Помогите, пожалуйста, понять.
__________________
С уважением, Чигинский Дмитрий.
Чигинский Дмитрий вне форума  
 
Непрочитано 05.03.2019, 20:20
#7
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,544
Отправить сообщение для doctorraz с помощью Skype™


есть такой слой _Подписи?
и в скрипте последняя строка должна быть.. но пустая
__________________
Мастерская СПДС
doctorraz на форуме  
 
Автор темы   Непрочитано 05.03.2019, 20:24
#8
Чигинский Дмитрий

ГИП
 
Регистрация: 09.09.2006
Тула
Сообщений: 112
<phrase 1= Отправить сообщение для Чигинский Дмитрий с помощью Yahoo Отправить сообщение для Чигинский Дмитрий с помощью Skype™


Цитата:
Сообщение от doctorraz Посмотреть сообщение
есть такой слой _Подписи?
и в скрипте последняя строка должна быть.. но пустая
Слой есть, пустую строку добавил. Результат тот же. Файл *.dwg остаётся без изменения (не пересохраняется).
__________________
С уважением, Чигинский Дмитрий.
Чигинский Дмитрий вне форума  
 
Непрочитано 05.03.2019, 21:44
#9
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,544
Отправить сообщение для doctorraz с помощью Skype™


дай файл чертежа с которым не получается
__________________
Мастерская СПДС
doctorraz на форуме  
 
Непрочитано 06.03.2019, 08:28
1 | #10
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,544
Отправить сообщение для doctorraz с помощью Skype™


хех, консольный АК чет валится на _.laydel
поэтому будет медленно но верно))) (но быстрее чем руками)
батник
Код:
[Выделить все]
@chcp 1251
FOR /r %%A IN (*dwg) DO ( 
echo Processing %%A
"c:\Program Files\Autodesk\AutoCAD 2018\acad.exe" "%%A" /language "ru-RU" /product "ACAD" /nologo /b "d:\2\cleanАК.scr"
)
pause
скрипт cleanАК.scr последняя строка есть, и она пустая
Код:
[Выделить все]
(vl-cmdf "_-LAYER" "_u" "_Подписи" "")
(vl-cmdf "CLAYER" "0")
(command "_.laydel" "_n" "_Подписи" "" "_y")
_qsave
_QUIT
Вложения
Тип файла: zip D.zip (636 байт, 5 просмотров)
__________________
Мастерская СПДС
doctorraz на форуме  
 
Автор темы   Непрочитано 06.03.2019, 10:10
#11
Чигинский Дмитрий

ГИП
 
Регистрация: 09.09.2006
Тула
Сообщений: 112
<phrase 1= Отправить сообщение для Чигинский Дмитрий с помощью Yahoo Отправить сообщение для Чигинский Дмитрий с помощью Skype™


Цитата:
Сообщение от doctorraz Посмотреть сообщение
хех, консольный АК чет валится на _.laydel
поэтому будет медленно но верно))) (но быстрее чем руками)
Работает и скорость устраивает. Спасибо большое.
Проверил также когда удаляемый слой отсутствует, нужно просто закрыть AutoCAD. Хотя возникает желание перед удалением слоя поставить условие-проверку о его наличии в файле)
Можно ли это организовать?

Также ещё вопрос, корректно ли будет в скрипт после после удаления слоя добавить Audit и Purge:
Код:
[Выделить все]
(vl-cmdf "_-LAYER" "_u" "_Подписи" "")
(vl-cmdf "CLAYER" "0")
(command "_.laydel" "_n" "_Подписи" "" "_y")
(command "_.AUDIT" "_y")
(command "_.-PURGE" "_a" "" "_n")
_qsave
_QUIT
То есть, конечно, попробовал так сделать.
Однако, после такой очистки остаются служебные блоки, типа *D1354, *D1355 и т.д. Отсюда и вопрос.
__________________
С уважением, Чигинский Дмитрий.
Чигинский Дмитрий вне форума  
 
Непрочитано 06.03.2019, 11:00
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,749


Блоки *D, *T - это соответственно блоки размеров и таблиц.
Если хочешь, повтори три раза строку с очисткой - уйдут.
P.S. А вот про очистку зарегистрированных приложений забыл
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.03.2019, 11:18
#13
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,544
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Чигинский Дмитрий Посмотреть сообщение
Хотя возникает желание перед удалением слоя поставить условие-проверку о его наличии в файле)
Можно ли это организовать?
думаю, что можно, но лисп я совсем не умею
Цитата:
Сообщение от Чигинский Дмитрий Посмотреть сообщение
Также ещё вопрос, корректно ли будет в скрипт после после удаления слоя добавить Audit и Purge:
ну коль консольный АК не взлетел....
Код:
[Выделить все]
(vl-cmdf "_-LAYER" "_u" "_Подписи" "")
(vl-cmdf "CLAYER" "0")
(command "_.laydel" "_n" "_Подписи" "" "_y")
(vl-cmdf "_-scalelistedit" "_r" "_y" "_e")
(vl-cmdf "_delconstraint" "_all" "")
(setvar "LAYEREVAL" 0)(setvar "LAYEREVALCTL" 0)(setvar "LAYERNOTIFY" 0)
(command "_.AUDIT" "_y")
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
_qsave
_QUIT
а так же не помешает очистка словарей, удаление прокси, но многое из этого заменяет WBOUT из #5 ( в АК 2018 по крайней мере по wblock мусор в новый файл не перемещается)
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 06.03.2019 в 11:24.
doctorraz на форуме  
 
Непрочитано 06.03.2019, 19:36
3 | #14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,274
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
загрузить arx, по-моему, тоже невозможно. Как насчет .NET-сборок - не в курсе.
arx-файл нельзя, но можно crx-файл. Поэтому ExplodeProxyXXX.arx не будет загружаться в accoreconsole, а если его переименовать в ExplodeProxyXXX.crx то загружается и работает.
Если arx-файл зависит от acad.exe, то он не загружается в accoreconsole даже если его переименовать в crx-файл.
.NET-сборки загружаются и работают если не используют acmgd.dll (accoremgd.dll и acdbmgd.dll использовать можно).
Александр Ривилис вне форума  
 
Непрочитано 07.03.2019, 11:02
#15
koMon


 
Регистрация: 26.09.2017
Сообщений: 407


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Насколько я помню, подобный код должен работать, так сказать, не очень.
я думаю, что код будет работать и скорее всего даже быстрее, чем пакетник.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Аудит-то точно работает только на текущем файле (кстати, vla-purgeall фактически тоже в некоторых версиях работал только в текущем).
для обоих методов аргументом является объект document, который в mdi может отличаться от текущего документа.

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Открытие документа через vla-open может запросто привести к активации загруженного документа - и выполнение лиспа тупо прервется.
как-то звучит сомнительно.
koMon вне форума  
 
Непрочитано 07.03.2019, 11:23
#16
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,749


koMon, я много раз пробовал провести аудит на нетекущем документе (вплоть до 2018 версии; на 2019 не проверял) - не работало. Как и vla-purgeall. Может, у меня руки кривые, не знаю.

Цитата:
Сообщение от koMon Посмотреть сообщение
как-то звучит сомнительно.
Что именно сомнительно? Тот факт, что лисп выполняется только в текущем документе? Или тот факт, что если в процессе выполнения лиспа сменить документ, то выполнение прервется?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.03.2019, 11:28
#17
koMon


 
Регистрация: 26.09.2017
Сообщений: 407


сомнительно, что может запросто. ну то есть само. но ты же понимаешь, что само не может. только если программер пожелает.
koMon вне форума  
 
Непрочитано 07.03.2019, 11:33
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,749


Насколько я понимаю, если в автозагрузке стоят какие-либо приложения, вносящие изменения в БД документа, то файл активируется. В любом случае - если будет выбор между vla-open и ObjectDBX, я выберу второе.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.03.2019, 11:49
#19
koMon


 
Регистрация: 26.09.2017
Сообщений: 407


я тоже, но не в этом случае(
koMon вне форума  
 
Непрочитано 07.03.2019, 12:48
#20
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,990


Еще в 2005 году было обсуждение на другом форуме (caduser.ru) про скорость и особенности работы лиспа на неактивном документе.
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы ключевые слова отображались в менюшке? -mavlin- Программирование 3 06.05.2009 15:32
Задумал лисп для layout Red Nova LISP 40 05.06.2008 17:59
Нужен маленький лисп - для текста maksimys LISP 2 28.11.2007 08:51
Нужен лисп (пронизыватель лайаутов) dextron3 LISP 91 25.07.2007 07:37
Из лиспа в команду. Pave1 LISP 4 25.07.2005 16:08