Иван, А почему вам не подходит консольный компилятор КП?
И к тому же, у вас есть где-то утилита, которая делает odc из плоского текста. Ну вот совместить консольный компилятор с этой утилитой, и будет вам компиляция .cp файлов. Unix way. Скрипт на баше.

В приведенном вами примере заложена мина.
f := Files.dir.Old(..., Files.shared);
...
f.Close

Если вдруг окажется, что кто-то где-то до вас открыл этот же файл, а вы его закрыли, то сильновероятно тот кто-то придет к авосту. Выяснить причину будет крайне затруднительно, и прожить такая "закладка" может очень долго.

Не стоит проверять существование файла таким образом. Стоит писать процедуру FileExists и пользоваться File.dir.FileList.

А можно предложить включить FileExists (loc: Files.Locator; IN fname: Files.Name): BOOLEAN в модуль Files как вспомогательную процедуру. Но можно и ручками писать, везде где она нужна.