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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > загрузка DOS прог через LISP

загрузка DOS прог через LISP

Ответ
Поиск в этой теме
Непрочитано 10.08.2005, 12:35 #1
загрузка DOS прог через LISP
Gaa
 
сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140

Спрашиваю без надежды на ответ, а для очистки совести перед собой. Проблема такая:
Есть прога (*.EXE) писаная в DOSe язык CLIPPER на рубеже 80-90 гг прошлого века, и через описание в ACAD.PGP она запускалась в процессе работы LISP проги, ес-но последовательно выполнялись LISP -> *.exe -> LISP. И все было хорошо до появления AcadWINа тут с точки загрузки ЕХЕ проги они заработали паралельно, а это разрушало весь алгоритм:
1. LISP -> подготовка параметров для расчета и запись в файл,
2. *.exe -> читала файл, вычисляла что-то и выгружала это в файл в виде списков
3. LISP -> загружал список и чертил или не чертил "табуретку".

Ничего легче не придумал, чем остановить прогу перед 3. и продолжить после 2.

Код:
[Выделить все]
 
........
  (setq Path_Pro (getvar "DWGPREFIX")) ;14 
   (setq F1 (open "c:\\PRG_14\\TEMP\\Path.tmp" "w")) ;14  
   (write-line Path_Pro F1) ;14  
   (close F1) ;14

 ;** ENTER NAME OF FILE                                     ;14
   (setq FILE "C:\\prg_14\\TEMP\\PRO_TEMP.PRF") ;14

   (COMMAND (strcat "PRO_" Param1))   ; запуск ЕХЕ файла 

   (getstring "\nPress any key....") ;14

   (if (findfile FILE)
.........

Для прояснения - Если кто помнит, в то время был просто LISP без всяких V.. и т.д. поэтому оптимизации и итерации всякие через него сделать и отладить было слабо, а комп был PC XT с 86 проц и даже сопроцессор не сильно усилял вычисления которые могли длиться до обеда и дальше поэтому сделал такой симбиоз. Все эти годы проще было подправить исходники и юзить дальше чем все переписывать на VBA или VL, просто лень, тем более, что ВСЕ РАБОТАЛО и продолжает работать.

М.Б. кто ни-дь что ни-дь посоветует как избавиться от (getstring "\nPress any key....")

или м.б. оставить - есть не просит?
__________________
Спасибо
Просмотров: 13522
 
Непрочитано 10.08.2005, 13:21
#2
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


В подобных случаях я использую такой алгоритм:

1. Лисп-прога сохраняет некие данные в файле на диске.
2. Лисп запускает ДОС-прогу, которая перые доли секунды работает параллельно с Лиспом.
3. Работа Лисп-проги приостанавливается посредством функции (alert ...).
4. ДОС-прога считывает данные из файла и обрабатывает их (возможно, интерактивно).
5. ДОС-прога записывает результаты своей бурной деятельности в файл и закрывается.
6. Юзер кликает на Ок в окошке функции (alert ...) - и Лисп продолжает свою работу: считывает данные из файла и делает с ними то что нужно.
Pilot вне форума  
 
Автор темы   Непрочитано 10.08.2005, 15:32
#3
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


>>Pilot

Это элегантней,
Спасибо, попробую.
__________________
Спасибо
Gaa вне форума  
 
Автор темы   Непрочитано 11.08.2005, 08:22
#4
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


>>Pilot

Попробовал, но оставил СВОЙ вариант, т.к. (alert ...) закрывает доступ и к другим чертежам.
__________________
Спасибо
Gaa вне форума  
 
Непрочитано 11.08.2005, 09:19
#5
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


Цитата:
Сообщение от Gaa
[b](alert ...) закрывает доступ и к другим чертежам.
Естественно.
Pilot вне форума  
 
Непрочитано 11.08.2005, 12:02
#6
Fogel

люблю мастерить
 
Регистрация: 21.01.2005
Челябинск
Сообщений: 9,864


Можно высказать непродуманое предложение? Если ДОС программа в конце своих вычислений впишет некую строчку типа "FIN" а в лиспе завязать в цикле проверку наличия этой строчки...
Fogel вне форума  
 
Автор темы   Непрочитано 11.08.2005, 13:52
#7
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


>>Fogel

что-то типа:

Код:
[Выделить все]
(while (not(findfile FIN)) (setq a 1))
так?
Спасибо ,земляк, попробую.
__________________
Спасибо
Gaa вне форума  
 
Автор темы   Непрочитано 11.08.2005, 19:01
#8
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


>>Fogel

поставил такую штуку в лисп прогу
Код:
[Выделить все]
(while (not(findfile "C:\\fin.txt")) (setq a 1))
смотрел в отладчике - на этой фуне циклит все нормально, ДОС работает, и после записи ДОС прогой файла fin.txt, ЛИСП продолжает работать дальше.
А в это время на экране происходит следующее:
АКАД плотно зависает и не реагирует даже на мат, белеет рабочее поле, потом исчезают тулбары и строка команд, и это продолжается до момента записи ДОС прогой файла fin.txt, потом АКАД продолжает работать как будто ничего не было!

Во как!
__________________
Спасибо
Gaa вне форума  
 
Непрочитано 12.08.2005, 08:04
#9
Fogel

люблю мастерить
 
Регистрация: 21.01.2005
Челябинск
Сообщений: 9,864


Но главное работает ведь! Впрочем картина знакомая. Может соорудить задержку чтобы диск не терроризировать? Допустим проверять каждую секунду...
Fogel вне форума  
 
Непрочитано 12.08.2005, 09:50
#10
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,260


А если в цикл (while ... внедрить (command "delay" ... - может так жестко виснуть перестанет? Или будет подвисать, но меньше?
Pilot вне форума  
 
Автор темы   Непрочитано 12.08.2005, 13:25
#11
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


Цитата:
Может соорудить задержку чтобы диск не терроризировать?
А если в цикл (while ... внедрить (command "delay" ... -?
Террора меньше, а картина та-же.... [/quote]
__________________
Спасибо
Gaa вне форума  
 
Непрочитано 12.08.2005, 13:29
#12
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


В Doslib есть dos_exewait, подходит, если конечно exe после выполненной работы самозакрывается...
BigBrother вне форума  
 
Непрочитано 12.08.2005, 13:30
#13
Кулик Алексей aka kpblc
Moderator

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


> Gaa : http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19678iP - там ничего интересного нет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.08.2005, 14:05
#14
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


Цитата:
Doslib
а где она находится?
__________________
Спасибо
Gaa вне форума  
 
Непрочитано 12.08.2005, 14:11
#15
Кулик Алексей aka kpblc
Moderator

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


http://www.mcneel.com/doslib.htm
И посмотри дополнительно: http://www.kurganobl.ru/cad/book.jsp...id=205&tn=main
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.08.2005, 19:19
#16
Gaa

сан-техник на пенсии
 
Регистрация: 23.05.2005
Сообщений: 140


Спасибо Всем.

Поиграл все предложенные варианты, но пока оставил свой старый, он хоть и корявый, однако до окончания ДОС проги не блокирует АКАД. Мне это важно, т.к. в этот период возникает потребность погулять по листам и посмотреть кое что.

м.б. еще что-нидь подкинут?
__________________
Спасибо
Gaa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > загрузка DOS прог через LISP

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

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