From: Yury Y. Vasilenko <postmaster@igilik.semsk.su>
Organization: Firm Quest (private venture). Site - Kazakhstan (xUSSR), Semipalatinsk.
Пишет: gpb@class.isrir.msk.su (Павел)
>>> под Windows определение Share работает некорректно. Прерывание всегда
>>>возвращает Share detect, независимо от действительного состояния.
>>>Для грамотной работы этой функции под Windows необходимо открыть два раза один
>>>файл, и в случае возникновения ошибки - Share есть.
>>
>>Ну что же, дописана функцию и под винды в соответствии с предложением Павла.
>>Но все это как-то странно выглядит, согласитесь. Может быть, кто-то знает
>>более "мягкую" методу определения установки SHARE в памяти для работы по
>>Windows, чем открытие tmp-файла дважды?
>
>Я решил покопать литературу по этому вопросу. И вот нашел в журнале Borland
>Language Express, выпуск 1, 1992г.
>
>Идея такая:
>
>function IsShare : boolean;
> { true, если Share загружена }
>var
> ShareNotInst : byte;
> f : file;
>begin
> assign(f,'delete.me');
> rewrite(f);
> ShareNotInst:=1;
> asm
> mov bx, FileRec(f).Handle
> mov cx, $0000
> mov dx, $0000
> mov si, $0000
> mov di, $0001
> mov ax, $5C00
> int $21
> jnc @@NoError
> dec ShareNotInst
> @@NoError
> end;
> IsShare:= ShareNotInst=0;
> close(f);
> erase(f);
>end;
>
>Несколько слов о этой функции: используется мультиплексорное прерывание,
>которое устанавливает флаг: С=1, если файл заблокирован и C=0 если нет. Более
>"мягкого" метода не знаю.
>
>>Хочу также сообщит, что процедура определения сетевого драйва может
>>(при мелкой переделки) попутно опредедить и наличие CDROM-устройства (но это
>>уже не сети :-))
>
>Ну и что. Модуль можно и переименовать. =:)
>
>Кстати о Windows: могу привести пример как определить, что программа запущена
>из под Окон.
> Все тот же,
> Павел
Нет, однако! Живут же люди! А у нас [censored] с маком - даже МИР ПК
не найти :-)), не то что серьезные издания
ОК! Спасибо, прямо вот так и попользуем :-))
Насчет определения Windows - cие уже добавлено.
Я сейчас "рожаю" определение наличия протоколов
ipx-spx (точнее, spx) по Б.Нансу - кое-что надо
отсмотреть-вспомнить-отладить, ибо вызвать функцию по ее точке входа
Паскаль не допускает (6.0 - про 7.0 не знаю, он ко мне еще едет), а
Ассемблер мы все (это моя точка зрения) юзаем от случая к случаю =>
надо бы кое-что вспомнить, уточнить. После этого будет интересовать
и тестирование на наличие IP/TCP-протокола, естественно.
Итак, Более свежий вариант модуля NetTest.
(определяет присутствие сетевой среды)
Буду весьма признателен за отзывы и пожелания.
--
Yury Y. Vasilenko
<postmaster@igilik.semsk.su>
|