Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
AleXp 25.09.2005 15:49
Чего соорудил-то:@GetDirIndex[pathToDir][_tableIndex;_flagZero] ################################## # Возвращает имя индексного файла каталога. # # string # GetDirIndex[ # string pathToDir; # ] $pathToDir[^pathToDir.trim[end;/]] $_tableIndex[^table:create{path index.htm index.php index.phtml index.shtml default.html default.htm index.html default.php default.phtml default.shtml main.html main.htm main.php main.shtml main.phtml} # Флаг для принудительного вызова ошибки "деление на ноль" $_flagZero(0) ^try{ ^_tableIndex.menu{ ^try{ $_flagZero(1) ^file::load[binary;$pathToDir/$_tableIndex.path] }{ # Данный блок срабатывает при возникновении ошибки file.access или file.missing $exception.handled(1) $_flagZero(0) } # Если индексный файл найден, то принудительно вызываем ошибку для выхода из метода .menu ^eval(1/($_flagZero-1)) } }{ # Обработка ошибки number.zerodivision и присвоение выходного значения оператору @GetDirIndex[] $exception.handled(1) $result[$_tableIndex.path] } #end @GetDirIndex[]Как ни странно, но всё работает :) Фишка в том, что производится аварийный выход из метода ^table.menu{}, но в $_tableIndex.path сохраняется указатель на "правильный" индексный файл директории, который и используется в качестве результаты работы всего оператора.