Переменные окружения и работа с ними
Я уже несколько раз ссылался на такую функцию, как getenv. Достаточно простая функция, но у нее есть свои особенности.
Все, что написано ниже, касается AutoCAD для Windows (т.к. у меня нет MacOS ни в каком виде, то проверить состояние дел для этой ОС я не могу).
Если мы работаем внутри AutoCAD, то все переменные окружения (т.н. Environment Variables) можно поделить на 2 класса: переменные для Windows и переменные для AutoCAD.
Перечень переменных для Windows получить достаточно просто: вызываем окно cmd (Win+R, cmd) и в ней вбиваем строку set, жмем Enter. Получим перечень вида (приведен пример для Windows 7 Prof x64):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | ALLUSERSPROFILE AMDAPPSDKROOT APPDATA CommonProgramFiles CommonProgramFiles(x86) CommonProgramW6432 COMPUTERNAME ComSpec DXROOT FP_NO_HOST_CHECK HOMEDRIVE HOMEPATH ILBDIR LOCALAPPDATA LOGONSERVER NUMBER_OF_PROCESSORS OS Path PATHEXT PROCESSOR_ARCHITECTURE PROCESSOR_IDENTIFIER PROCESSOR_LEVEL PROCESSOR_REVISION ProgramData ProgramFiles ProgramFiles(x86) ProgramW6432 PSModulePath PUBLIC SESSIONNAME SystemDrive SystemRoot TEMP TMP USERDNSDOMAIN USERDOMAIN USERNAME USERPROFILE windir |
В любой момент из-под лиспа мы можем обратиться к любой из этих переменных. При этом регистр имени переменной никакой роли не играет: (getenv "TEMP") вернет то же самое, что (getenv "temp").
Что каждая из этих строк означает - расписывать не буду, все есть и в справке по Windows, и так углядеть можно.
Но есть и вторая, более интересная часть переменных окружения - переменные для AutoCAD. Их перечень можно посмотреть в реестре, в ветке HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\Profiles\ИмяПрофиля\General. И тут уже надо будет учитывать регистр символов.
Например, есть в указанной ветке реестра ключ ACAD (хранит пути поиска для AutoCAD). Так вот, (getenv "ACAD") вернет вполне нормальное значение, а (getenv "acad") - пустое значение (nil).
При работе приходится это постоянно учитывать...
Вот уж не думал, что развернутся такие баталии...