Обнаружилось, что иногда HostFiles.Locator.path содержит абсолютный путь, а иногда — относительный (от корня ББ). Воспроизвести это можно так:
Код: "OBERON"
PROCEDURE Do* ;
VAR
t: TextModels.Model; w: Windows.Window; loc: Files.Locator;
BEGIN
(* Try to find exact file name of current opened document: *)
t := TextViews.FocusText();
IF t # NIL THEN
w := Windows.dir.Focus(Controllers.targetPath);
IF (w # NIL) & (w.loc # NIL) & (w.name # "") THEN (* File name found. *)
loc := w.loc;
WITH loc: HostFiles.Locator DO
StdLog.String(loc.path);
END;
END;
ELSE
Dialog.ShowMsg("#XDev:NoTextViewFound")
END;
END Do;
1. Абсолютный путь. Запустим любой .odc документ, ассоциированный с ББ. Do выдаст полный путь к нему:
d:\Archive\Projects\XDev\ZXDev\Lib\Mod
2. Относительный путь. Откроем из уже запущенного ББ любой документ, например, из подсистемы Dev/Docu, Do выдаст:
Dev\Docu
В связи с таким хитрым поведением локатора возникает вопрос: поскольку при вызове процедур StartAt/OpenAt мы полагаемся на абсолютный путь в локаторе, не может ли возникнуть ситуации, когда относительный путь приведёт к неудаче при запуске? Может для надёжности проверять, является ли путь относительным, и если да, то прибавлять к нему спереди Files.dir.This("")(HostFiles.Locator).path$ + "\" ? Ах да, а ведь ещё же остаются кавычки "", в которые юзер может взять путь, содержащий пробелы. Как быть?