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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ввод данных по умолчанию

Ввод данных по умолчанию

Ответ
Поиск в этой теме
Непрочитано 27.06.2010, 17:59 #1
Ввод данных по умолчанию
swkx
 
Регистрация: 22.01.2010
Сообщений: 311

День добрый.
Подскажите, возможно ли в лиспе организовать ввод данных по умолчанию таким образом, чтобы значение по умолчанию соответствовало введённому ранее в текущем сеансе работы ?
Можно ли введённые значения хранить до следующего запуска Автокада ?
Просмотров: 8743
 
Непрочитано 27.06.2010, 18:02
#2
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от swkx Посмотреть сообщение
возможно ли в лиспе организовать ввод данных по умолчанию таким образом, чтобы значение по умолчанию соответствовало введённому ранее в текущем сеансе работы ?
Можно. Организовывай глобальную переменную (или вообще внедокументную) и к ней обращайся.
Цитата:
Сообщение от swkx Посмотреть сообщение
Можно ли введённые значения хранить до следующего запуска Автокада ?
Можно. Например, в специальном файле настроек, или в реестре.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.06.2010, 18:59
#3
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно. Например, в специальном файле настроек, или в реестре.
А можно по-подробнее...
Т.е. в общем про файл, представляю как писать, как считывать, а вот где его лучше хранить? И про реестр даже и представления нет.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 27.06.2010, 19:27
#4
swkx


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


Алексей,

я хотел выяснить, есть ли у лиспа встроенные функции сохранения значений по умолчанию.
Реализация этого с помощью глоб. переменных или внешнего файла не составит, наверное, труда, просто для начала хотел выяснить, нет ли чего-нибудь стандартного.
swkx вне форума  
 
Непрочитано 28.06.2010, 02:26
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


getcfg и setcfg не подойдет?
gomer вне форума  
 
Непрочитано 28.06.2010, 06:20
#6
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от gomer Посмотреть сообщение
getcfg и setcfg не подойдет?
Это штатные функции, но пользоваться ими я не рекомендую.

Это запись и чтение в acadxxxx.cfg, т.е. в INI-файл. Вроде бы хорошо, но беда в том, что это запись в файл самого AutoCAD, да ещё конкретной версии. А приличные приложения никак не должны ничего трогать в файлах и папках AutoCAD.

Для Autodesk ничего не стоило в этих функциях ввести ещё один аргумент - полное имя файла. Тогда бы были предоставлены большие возможности. В том числе по обмену данными с любыми другими программами. Но они хотят привязывать всё к своему продукту.

Цитата:
в общем про файл, представляю как писать, как считывать, а вот где его лучше хранить?
Файл может быть любой, только текстового формата. Любого. Можно даже просто сохранять LISP-список в виде текста, а потом его восстанавливать функцией read сразу присваивая значения переменным.

Хранить все пользовательские файлы нужно только там, где допускается в Windows, т.е. где-то в

c:\Documents and Settings\<%user_name%>\Local Settings\Application Data\<%firm_name%>\<%app_name%>\

или подобных местах в соответствующем месте разных версий Windows. Конкретное имя "соответствующего места" выяснять во время работы, конечно программно, так как оно может быть разным. Не умея этого делать с файлами лучше не связываться.

Цитата:
И про реестр даже и представления нет.
Так надо не только представление иметь, но и хорошо разбираться.

Для работы с реестром в LISP есть все необходимые функции из серии vl-registry-xxxx.

Работать с ними можно сразу, но тут надо подумать, как именно хранить данные, например как сохранять список. Главное - тоже хранить не где попало, а в правильной ветке, т.е. в

HKEY_CURRENT_USER
\\<%firm_name%>\\<%app_name%>
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 28.06.2010, 07:08
#7
swkx


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


gomer и ShaggyDoc,

спасибо за информацию. В моём случае не пригодится, но на будущее учту
swkx вне форума  
 
Непрочитано 29.06.2010, 01:44
#8
Кулик Алексей aka kpblc
Moderator

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


Как говорится, сугубо и трегубо ИМХО...

Разве файл обязательно должен быть именно текстовый? На данный момент средств обработки (хоть mdb, хоть xml) в лиспе достаточно. Но, учитывая распространение 64-разрядных систем, эти средства надо тщательно тестировать, поэтому использование текстовых файлов наиболее удобно.
Все-таки, я думаю, реестр не самое лучшее место для хранения данных. Особенно таких, которые часто меняются. Кроме того, в реестре, по-моему, невозможно сохранить число типа 12.98. Да и с булевыми переменными там не все гладко.
При хранении данных в файлах путь типа
Цитата:
c:\Documents and Settings\<%user_name%>\Local Settings\Application Data
можно (в лиспе, конечно) получить как
Код:
[Выделить все]
(getenv "APPDATA")
И последнее. Я бы не стал при хранении данных в реестре использовать именно
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
HKEY_CURRENT_USER\\<%firm_name%>\\<%app_name%>
ИМХО - лучше закидывать в HKCU\Software\FirmName\AppName. ShaggyDoc никогда не допускает таких промахов, поэтому мне интересно - почему не используется подключ Software?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.06.2010, 06:39
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
ИМХО - лучше закидывать в HKCU\Software\FirmName\AppName. ShaggyDoc никогда не допускает таких промахов, поэтому мне интересно - почему не используется подключ Software?
Да конечно, в Software. Просто пропустил

Файл, конечно может быть и не текстовый. Тогда сложностей будет на порядок больше, а зачем - если речь всего лишь про данные по умолчанию. А вот другие, важные данные, например прова пользователей, можно и в БД хранить.

Реестр или файл - обычный спор. Реестр я привел в пример потому, что есть штатные функции. А для INI их надо поискать или сочинить. В реестр можно и любой тип данных сохранить, но работая с ним из LISP лучше преобразовывать в строку.

Главное преимущество реестра - то, что его продвигает Microsoft. Именно за это чаще всего реестр не любят, а делают файлы - "назло мамке шею мыть не буду". Соответственно и функциональная поддержка, ведь никто низкоуровневыми функциями туда не лезет. Изменится система хранения - в программах ничего не надо менять.

С файлами тоже проблемы могут быть при неправильном использовании - права доступа, владельцы и прочее. Это все надо учитывать.

Но автор ветки правильно задумался о сохранении данных по умолчанию в принципе.

В ruCAD сделано так:

1. Есть две функции - для записи и для чтения любых данных.

2. В начале любой программы (функции) восстанавливаются сохраненные данные.

3. В конце программы сохраняются данные.

4. В момент любого ввода всегда есть значение по умолчанию. Это значительно облегчает работу.

Сами функции:
Код:
[Выделить все]
(defun ru-user-read-last-param (name default)
(cond
    ((vl-registry-read
       (strcat (ru-reg-hkcu-storage-key) "\\" (ru-user-login)) name
     ) ;_ end of vl-registry-read
    )
    (t default)
  ) ;_ end of cond
)

(defun ru-user-write-last-param	(name value)
  (vl-registry-write
    (strcat (ru-reg-hkcu-storage-key) "\\" (ru-user-login) "\\" "")
    name
    value
  ) ;_ end of vl-registry-write
)
Здесь использовались функции (ru-reg-hkcu-storage-key) - вычисляющая ключ реестра и (ru-user-login) - возвращающая имя пользователя ruCAD.

Если завтра я захочу хранить данные не в реестре, а в XML, то перепишу эти функции, не трогая сотни других функций и программ.

Пример использования в программе рисования ряда колонн блоками условных обозначений:

Цитата:
(defun start (block_lib block_name x_size_mm y_size_mm / result)
(ru-app-begin)
(if
(ru-block-lib-insert block_lib block_name)
(progn
(setq
result (ru-trass-draw-block-count
block_name
(ru-conv-millimeter-to-unit x_size_mm)
(ru-conv-millimeter-to-unit y_size_mm)
(ru-conv-millimeter-to-unit
;; Здесь восстанавливаем ранее использовавшийся шаг колонн
;; или принимаем значение по умолчанию
(atof (ru-user-read-last-param
(strcat "ColumnDistForBlock" block_name)
"6000"
) ;_ end of ru-user-read-last-param
) ;_ end of atof
) ;_ end of ru-conv-millimeter-to-unit
;; Здесь восстанавливаем ранее использовавшееся количество колонн
;; или принимаем значение по умолчанию
(atoi (ru-user-read-last-param
(strcat "ColumnCountForBlock" block_name)
"1"
) ;_ end of ru-user-read-last-param
) ;_ end of atoi
) ;_ end of ru-trass-draw-block-count
) ;_ end of setq
;; Сохраняем введенные данные
(ru-user-write-last-param
(strcat "ColumnDistForBlock" block_name)
(rtos (ru-conv-unit-to-millimeter (car result)))
) ;_ end of ru-user-write-last-param
(ru-user-write-last-param
(strcat "ColumnCountForBlock" block_name)
(rtos (cadr result))
) ;_ end of ru-user-write-last-param
) ;_ end of progn
) ;_ end of if
(ru-app-end)
(princ)
)
В момент работы программа спрашивает:

Пролет=6.00, Количество=1. Точка начала ряда [Пролет/Количество]<Выход>:П

Выбираем опцию Пролет и вводим другое значение:
Пролет <6.0>:9

Снова запрос:
Пролет=9.00, Количество=1. Точка начала ряда [Пролет/Количество]<Выход>:К

Выбираем опцию Количество:

Количество [Указать]<1.00>:6

И снова запрос:

Пролет=9.00, Количество=6. Точка начала ряда [Пролет/Количество]<Выход>:
Указываем точку начала ряда и получаем запрос:

Направление ряда:
После указания точки направления рисуется заданное количество колонн с заданным шагом. И, до пустого ввода, повторяется запрос уже с новыми значениями по умолчанию:


Пролет=9.00, Количество=6. Точка начала ряда [Пролет/Количество]<Выход>:

При запуске этой программы в другом сеансе работы будут использоваться значения 9.0 и 6. Причем, если посмотреть внимательно, то при единицах чертежа "мм" пролет будет 9000.0, а при единицах "м" - 9.0
ShaggyDoc вне форума  
 
Непрочитано 21.09.2010, 11:01
#10
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295


сохраняется в файле
(setvar "userr1")
(getvar "userr1")
userr1-5
useri1-5

Последний раз редактировалось Victor, 21.09.2010 в 11:15.
Victor вне форума  
 
Непрочитано 21.09.2010, 13:56
#11
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Victor Посмотреть сообщение
сохраняется в файле
(setvar "userr1")
(getvar "userr1")
userr1-5
useri1-5
Это самое простое, но и самое ненадежное. В эти системные переменные любая программа может что-то свое написать. Да и действие только в пределах одного чертежа.

Впрочем, если жить на необитаемом острове, то можно и во всех user* что-то сохранять.
ShaggyDoc вне форума  
 
Непрочитано 21.09.2010, 16:24
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от swkx Посмотреть сообщение
День добрый.
Подскажите, возможно ли в лиспе организовать ввод данных по умолчанию таким образом, чтобы значение по умолчанию соответствовало введённому ранее в текущем сеансе работы ?
Можно ли введённые значения хранить до следующего запуска Автокада ?
Рядом топик с таким же вопросом. Здесь пост 8 - на эту тему дан ответ.

п.с. подправил линк (не туда сначала указал).

вдогонку:

Цитата:
Сообщение от ShaggyDoc
Для Autodesk ничего не стоило в этих функциях ввести ещё один аргумент - полное имя файла. Тогда бы были предоставлены большие возможности. В том числе по обмену данными с любыми другими программами. Но они хотят привязывать всё к своему продукту.
Из Lisp можно совершенно свободно работать с xml-файлами (при желании).
Далее простенький пример:
Некоторый xml-файл (структура абсолютно любая):



Из указанного выше xml-файла извлечём, к примеру, значение атрибута Value такого элемента MyVariable, атрибуту Name которого присвоено значение var2 (т.е. грубо говоря - реализуем фильтрацию нужного нам контента):



Всё до безобразия просто.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 21.09.2010 в 18:39.
hwd вне форума  
 
Непрочитано 22.09.2010, 21:06
#13
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от hwd Посмотреть сообщение
Некоторый xml-файл (структура абсолютно любая):
примерно то же, но на лиспе
Код:
[Выделить все]
;;; Файл настроек Settings.lsp
'(("var1" 123) ("var2" 555) ("var3" 456))
Код:
[Выделить все]
;;; Извлекаем данные
(cdr (assoc "var2" (load "Settings.lsp")))
Цитата:
Сообщение от hwd Посмотреть сообщение
Всё до безобразия просто.
gomer вне форума  
 
Непрочитано 22.09.2010, 21:59
#14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


> gomer
Интересное решение, правда оно не очень удобно, если нужно, чтобы с этим файлом настроек работало иное внешнее приложение - для него придётся писать свой парсер. Так же не удобно, если в текстовый файл нужно записать какую-то информацию (не путать с настройками), которую должно будет затем обрабатывать всё то же внешнее приложение - те же грабли. Если бы это был xml, то такие парсеры уже написаны, и можно было бы сразу использовать уже существующий.
Однако если такое взаимодействие не требуется, то для Lisp-программистов предложенный вариант c "Settings.lsp" возможно предпочтительней, чем использование xml.
Нужно смотреть по ситуации.

p.s.2 Помимо чтения нужно ведь ещё и модификацию значений выполнять - насколько удобно средствами lisp поменять значение 555 на 777? Что если структура данных должна быть более сложной (глубокая иерархическая структура) - насколько удобно средствами lisp вносить изменения в такие файлы (пусть даже это содержимое оформлено в виде сложного списка)?
Как насчёт автоматической проверки структуры содержимого "Settings.lsp" на корректность (с точки зрения lisp содержимое может быть правильным, но с точки зрения структуры могут быть нарушения, если к примеру, кто-то подправлял их вручную)? В своём примере я могу добавить ещё один параметр, в котором укажу XSD-схему, по которой будет производиться проверка структуры файла на корректность, а вот как быть с этим в случае использования "Settings.lsp"?

p.s.3 Возможно кого-нибудь заинтересует: В интернете можно найти информацию подобную этой и этой. Т.о. опытный Lisp-программист при желании с помощью всё того же Lisp'а сможет использовать в своей работе всё то, что предоставляет .net - т.е. доступ к самым передовым технологиям в любой сфере, имеющимся на сей день. Знание лишь одного, прикладного языка ограничивает возможности программиста. Если при этом использовать независимый от приложения язык, то в арсенале появляется "мощное оружие". Поскольку синтаксис AutoLisp и .Net-реализации Lisp схожи - освоение нового материала будет проходить значительно быстрее, чем если изучать язык с незнакомым синтаксисом (имхо).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 22.09.2010 в 23:05.
hwd вне форума  
 
Непрочитано 23.09.2010, 06:43
#15
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Из Lisp можно совершенно свободно работать с xml-файлами (при желании).
Это действительно так. Но с оговорками:
1. При желании
2. При умении написать дополнительное приложение.
Вот у тебя как раз и показано использование своего приложения.
У меня есть десяток LISP-функций для работы с XML, включая диалоговые - на них построено 90% интерфейса ruCAD. Для хранения и восстановления данных также есть функции:

Код:
[Выделить все]
(defun _ru-xml-storage ()
;;; Создание COM-сервера
  (vlax-get-or-create-object "ruXmlStorage.ruXmlReg")
)
(defun ru-xml-storage-read-string (xml_name relative_path attrib_name default / srv)
;;;  xml_name - полное имя xml-файла
;;;  relative_path - относительный от root путь элемента в виде
;;;  level1/level2/level3  
;;;  attrib_name - имя атрибута в последнем элементе
;;;  value  - строковое значение атрибута
;;;
  ;|
Пример:
(ru-xml-storage-read-string (ru-file-acad "rucad.cui" nil)  "Header/WorkspaceRoot/WorkspaceConfigRoot/WorkspaceConfig"  "UID"  "")
|;
  (if (setq srv (_ru-xml-storage))
    (vlax-invoke-method srv "ReadString" xml_name relative_path attrib_name default)
    (alert "Не удалось запустить ruXmlStorage.ruXmlReg")
  ) ;_ end of if

)
(defun ru-xml-storage-write-string (xml_name relative_path attrib_name value / srv)
;;;  xml_name - полное имя xml-файла
;;;  relative_path - относительный от root путь элемента в виде
;;;  level1/level2/level3  
;;;  attrib_name - имя атрибута в последнем элементе
;;;  value  - строковое значение атрибута
;;;  (ru-xml-storage-write-string (ru-file-ini "test_storage.xml") "level1/level2/level3" "test" "123")
  (if (setq srv (_ru-xml-storage))
    (vlax-invoke-method srv "WriteString" xml_name relative_path attrib_name value)
    (alert "Не удалось запустить ruXmlStorage.ruXmlReg")
  ) ;_ end of if
)
Ничего сложного. Весь "секрет" - как написать ruXmlStorage.ruXmlReg. Для программиста это задача на полчаса работы.

Хотя ничего не мешает Аутодеск включить подобные штатные функции. Ну, да ладно, шайтан с ними... "Ума-то нету" (С)

Показанное gomer использование lisp-файла для хранения чего-то известно с самого начала существования LISP. Это часто используют. Недостатки указал hwd. Да и попробуйте динамически в такие файлы что-то писать. Да ещё чтобы было понятно и другим программам и человеку.

Цитата:
Знание лишь одного, прикладного языка ограничивает возможности программиста. Если при этом использовать независимый от приложения язык, то в арсенале появляется "мощное оружие".
Полностью согласен. При этом и необязательно быть именно программистом (им-то, само собой, надо много языков знать). Это пригодится и "простому инженеру", делающему свои небольшие прикладные программы.

Что касается места хранения всяких настроек, в том числе значений по умолчанию, то мне нравится подход реализованный в некоторых библиотеках. Там можно в одном месте выбрать опцию хранения (реестр, xml, ini) и все будет сохраняться там, где нравится, но в правильных местах, а не где попало. Ничто не мешает включить такой переключатель и в конечное приложение.
ShaggyDoc вне форума  
 
Непрочитано 23.09.2010, 08:13
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Хотя ничего не мешает Аутодеск включить подобные штатные функции.
А вообще, от версии к версии, Autodesk добавляет в Lisp функционал? Например: библиотеки Auto\VisualLisp для 2009 и 2011 AutoCAD сильно отличаются друг от друга по составу?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 23.09.2010, 09:54
#17
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от hwd Посмотреть сообщение
А вообще, от версии к версии, Autodesk добавляет в Lisp функционал? Например: библиотеки Auto\VisualLisp для 2009 и 2011 AutoCAD сильно отличаются друг от друга по составу?
Конкретно про эти я ничего не знаю, не использую эти версии AutoCAD. Скорее всего ничего не добавляется, в виде дополнительных LISP-функций. Последнее добавление было в виде vl-функций уж забыл когда - то ли в 2000, то ли в 2002.

Изменения и добавления связаны с изменениями в объектной модели AutoCAD. Но бездельники, "ответственные" за LISP в AutoCAD тут не при чем. Не их заслуга.

А ведь добавить кое-что штатного и нужно, и просто. Тут и та же работа с XML (внутри-то AutoCAD она есть), и с INI. Или вызов функций из "обычных" DLL. Это же уровень курсовой работы для студента. Да хотя бы то, что в DOSLib уже 20 лет, как есть реализовано не могут включить. Жаба давит купить у автора.
Про ублюдочные DCL-диалоги уж молчу. А обещали XAML... Уроды.
ShaggyDoc вне форума  
 
Непрочитано 23.09.2010, 10:14
#18
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Про ублюдочные DCL-диалоги уж молчу. А обещали XAML... Уроды.
Жестко Вы с ними, но что правда то прада - ИХМО лисп давно заброшен, к сожалению.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 23.09.2010, 11:05 Любопытствую
#19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


>ShaggyDoc
Вопрос такой: как вы у себя в ru-CAD организовываете хранение программных библиотек и их документирование?
Исхожу из предположения, что всё собрано в одном месте (на сервере), а на локальных машинах - копии, периодически синхронизирующиеся с серверным содержимым. Далее у меня вариантов предположений три:
1. Библиотеки (dll/arx/lsp/fas/vla/ e.t.c.) разнесены по своим подкаталогам - в каждом каталоге своя библиотека + файл настроек (если нужно, т.е. файл ini/xml или др.) + доп. библиотеки, необходимые для работы основной (если нужно) + файл, документирующий библиотеку (в одном из форматов: xml/txt/doc или др.). Общий файл справки (по всем библиотекам в целом) создаётся либо вручную (сливанием всех doc/txt-файлов в один), либо генерируется автоматически, на основании тех xml-файлов справки, которые имеются в каталогах библиотек.
2. Всё указанное в п.1 размещается непосредственно в одном каталоге, не разнося содержимое по подкаталогам.
3. Иная реализация.

Как вы отслеживаете такую ситуацию, когда после загрузки lisp-библиотеки "А", в составе которой определена некая функция "WWW", пользователь загружает lisp-библиотеку "Б", в составе которой определена одноимённая функция. После загрузки библиотеки "Б", её вариант одноимённой функции перезапишет тот, что был определён библиотекой "А" (если мне не изменяет память). У моих пользователей полно lisp-кода (от разных авторов), который они уже привыкли годами использовать, но если их не проверяя добавить в общий блок корпоративных библиотек, предназначенных для всеобщего использования, то могут возникнуть проблемы...

По поводу отслеживания предполагаю следующие варианты:
1. Имеется некий текстовый файл (предположительно xml), в котором перечислены все lisp-функции, используемые в ru-CAD (с указанием файла, в котором она определена). Если получена новая библиотека, то вызывается команда, которая программно считывает из lsp-файла все определения функций (строки, начинающиеся с "(defun ", выполняет парсинг и сравнивает полученные имена с теми, список которых имеется в xml-файле, выводя результат работы в виде отчёта. Правда как быть с fas/vla - тут у меня предположений пока нет (можно в автокаде получить список имён лисп-функций до загрузки библиотеки и запросить его заново после оной, однако это поможет выявить лишь новые функции, а те, которые были переопределены не будут получены).
2. СмОтрите исходники и анализируете определения вручную.
3. Иное решение.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 23.09.2010, 14:39
#20
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Вопрос такой: как вы у себя в ru-CAD организовываете хранение программных библиотек и их документирование?
Отвечая на это мне надо здесь пару глав книги "САПР не базе AutoCAD переписать..."
Поэтому кратко:

1. "Все учтено велики ураганом" (С).
Все файлы лежат на своих местах, где полагается.

2. Никаких конфликтов имен и переопределения функций нет. Потому что есть система имен. Нетути у меня фукций с именами наподобие "dtr".
Не будет даже конфликтов имен с любыми посторонними приложениями (хотя я и не регистрировал в Autodesck свои префиксы) - обойдутся.

3. Никаких фокусов с проверкой имен функций, а скорее имен команд (вот тут, теоретически, могут быть совпадения имен, хотя ни разу не встретилось) и делать не надо. Потому что каждая C:КОМАНДА состоит только из загрузки файла с уникальным именем функции или из вызова библиотечной функции с уникальным именем из памяти. Сами команды спрятаны в иллюстрированных XML-меню. В атрибутах его элементов и сидит LISP-код.

ruCAD запускается из программы-стартера, которая делает нужные настройки. Никаких "левых" приложений там и не будет. Но, если они действительно нужны (бывает редко), в настройки ruCAD можно добавить и их загрузку.

4. "Документирование" заключается в том, что каждая отдельная функция лежит в отдельном файле, в соответствующей веточке каталога. Сборка файлов в одну откомпилированную fas-библиотеку осуществляется с помощью файла проекта. Перекомпилирование редко выполняется, года два уже не делал.

Для работы с ними используется специальная программа ruSourceExplorer (лежит где-то в Download). Любой исходник в этой программе, помимо внутренних комментариев, может иметь внешние описания и иллюстрации - что эта функция или программа делает. И изо всего этого можно сделать HTML-файлы. И по каждой отдельной функции, и на библиотеку в целом. Если приспичит.

А пользователь даже может во время выполнения команды и справку к ней "на лету" написать. Но это для любителей...
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ввод данных по умолчанию



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA. Многократный ввод данных и изменение положения объектов Markiza-2010 Программирование 6 28.06.2010 02:30
Ввод данных в АВТОЛИСПе vovkam LISP 3 19.06.2009 19:41
Почему выполненяется только 1 sql запрос к ADODB без использования базы данных по умолчанию? Дима_ Программирование 8 26.02.2009 08:50
LISP - ввод данных Torino LISP 4 02.08.2004 12:33