Окутывание и связывание
(Только в пакете Euphoria CE - Полной редакции)


Команда Shroud

Описание:

     shroud [-clear] [-list] [filename]

Команда shroud (окутать) преобразует программу Euphoria, обычно состоящую из главного файла и множества библиотечных файлов, в единственный окутанный (shrouded), т.е. зашифрованный, файл, который легко можно распространять среди других пользователей. По умолчанию после команды shroud будут выполнены следующие шаги:

1. - Ваш главный файл .ex, .exw или .exu объединяется со всеми .e-файлами, которые прямо или косвенно включены в вашу программу. В результате будет получен единственный Euphoria-файл, который не содержит операторов include.
2. - После выполнения этого первого шага (прохода) по всей вашей программе неиспользуемые вами константы и подпрограммы оказываются помеченными как подлежащие удалению. После такой пометки и другие константы и подпрограммы могут проявиться как неиспользуемые. Процесс пометки повторяется до тех пор, пока не останется констант и подпрограмм, которые могли бы быть удалены, но еще не помечены. Затем выполняется второй проход, когда все помеченные подпрограммы и константы пропускаются, т.е. не копируются в окутанный файл. Это вполне обычное дело, если программа содержит много библиотечных файлов, но использует только некоторый сокращенный набор из констант и подпрограмм, определенных в этих библиотеках.
3. - Все комментарии, пустые строки, лишние пробелы и знаки табуляции удаляются.
4. - Все ключевые слова и имена встроенных стандартных подпрограмм заменяются обнобайтными кодами для уменьшения объема программы.
5. - Все идентификаторы, определенные пользователем, преобразуются в короткие (обычно одна или две буквы) бессмысленные обозначения, присваиваемые программой окутывания.
6. - Очень компактный результирующий файл, полученный после шагов 1 - 5, еще и шифруется, так что становится полностью нечитаемым и высокоустойчивым к вмешательствам.

режимы:

-clear - Сохраняет исходный код в читабельной форме. Неиспользуемые подпрограммы и константы будут удалены, комментарии и лишние пробелы также, но в других отношениях код останется без изменений. Оригинальные идентификаторы переменных и подпрограмм будут сохранены, исключая те случаи, когда были выявлены конфликты имен в файлах программы. Используйте этот режим, если вы хотите поставлять пользователям единственный программный файл и не делаете никаких секретов из своего исходного кода. Если при прогоне такой программы пользователем произойдет ошибка, файл ex.err будет читабельным. Если же вы окутаете свою программу, файл ex.err будет содержать короткие бессмысленные имена и его очень трудно будет понять.
-list - Вырабатывает список удаленных подпрограмм и констант и выводит его в файл deleted.txt вместе со всеми идентификаторами, которые должны были быть переименованы.

Если вы просто введете:

     shroud
 
без указания режима или имени файла, вы будете приглашены ко вводу всей информации.

По команде shroud выполняется только очень поверхностная проверка синтаксиса вашей программы. Вы должны тщательно оттестировать вашу программу перед ее окутыванием или связыванием.

Вы можете распространять окутанный включаемый файл .e, так что люди смогут использовать эту библиотеку в своих программах без доступа к вашему исходному коду. Идентификаторы, объявленные как global в вашем главном файле .e, не будут переименованы или удалены, так что ваши пользователи смогут использовать подпрограммы и переменные с их осмысленными длинными именами.

Вы можете окутывать или связывать программу, которая включает окутанный файл (полученный от кого-то еще). Тем не менее, в этом случае вам не удастся воспользоваться режимом -CLEAR, чтобы не снижалась безопасность включенного окутанного файла.

Только RDS располагает сведениями, необходимыми для расшифровки программ, но у нас отсутствует инструментарий для этой работы. Даже если кто-то ухитрится расшифровать программу, ему откроется код, к которому были применены шаги 1 - 5. Комментарии и осмыссленные имена переменных и подпрограмм принципиально никогда не могут быть восстановлены. Всегда имейте резервную копию вашего оригинального исходного кода!


Команда Bind

Описание:

     bind  [-clear] [-list] [filename.ex]
     bindu [-clear] [-list] [filename.exu]
     bindw [-clear] [-list] [-icon filename.ico] [filename.exw]

По команде bind (связать) (bindw или bindu) выполняются те же самые действия, что и по команде shroud, и она имеет те же самые режимы. Но затем она объединяет (связывает) ваш окутанный (или чистый текстовый) файл с интерпретаторами редакции Public Domain ex.exe, exw.exe или exu, чтобы создать единственный самостоятельный исполняемый файл, который вы можете с удобствами использовать и распространять. Вашим пользователям в этом случае нет необходимости иметь на своей машине установленную Euphoria. Каждый раз, когда запускается такой исполняемый файл, производится быстрая проверка его целостности для обнаружения любых вмешательств или его порчи.

режимы:

-clear - То же самое, что и для shroud выше. Файл .exe будет содержать читабельный код. При возникновении ошибки файл ex.err будет читабельным.
-list - То же самое, что и для shroud выше.
-icon filename[.ico] - (только bindw) Когда вы связываете прорамму, вы можете внедрить в нее ваш собственный заказной значок, переписав тот, который уже имеется в интерпретаторе exw.exe. Интерпретатор exw.exe содержит значок 32x32 с 256 цветами. Он напоминает фигуру E). Windows будет выводить на отображение этот значок для файла exw.exe, а также для вашей связанной программы во всех списках файлов. Вы можете также загружать этот значок как ресурс, используя имя "exw" (см. euphoria\demo\win32\window.exw как пример). Когда вы связываете вашу программу, вы можете подставить ваш собственный файл объемом 2238 байт со значком 32x32x256-цветов. Другие размерности также могут работать, пока ваш файл не превышает 2238 байт. Файл должен содержать единственное изображение значка (Windows создадут меньшее или большее изображение по мере необходимости). Файл со стандартным значком E), euphoria.ico, включен в пакет редакции Complete Edition. Вы можете связывать его или распространять отдельно, с вашими изменениями или без них.

Если вы просто введете:

     bind (или bindw или bindu) 
 
без указания режима или имени файла, вас пригласят ко вводу всей необходимой информации.

Связаны могут быть только интерпретаторы редакции Public Domain. Пользователи Euphoria редакции Complete Edition для DOS32 + WIN32 будут иметь ex.exe (Complete) и pdex.exe (Public Domain), равно как и exw.exe (Complete) и pdexw.exe (Public Domain) в каталоге euphoria\bin. Программа bind (bindw) для связывания использует файлы pdex.exe (pdexw.exe). Под Linux у вас будут exu (Complete) и pdexu (Public Domain), с pdexu, используемым для связывания.

Программа Euphoria, состоящая из одной-единственной строчки кода, но связанная с интерпретатором, приобретает размеры этого интерпретатора, но в дальнейшем общий размер возрастает крайне медленно, если вы добавляете код в свой файл. Будучи связанным, целый редактор Euphoria добавляет только 18K к размеру интерпретатора. Все три интерпретатора подвергнуты компрессии для уменьшения их размера. exw.exe и exu сжаты с использованием компрессора UPX (см. http://upx.tsx.org). ex.exe сжат с помощью инструментария, поставляемого с расширителем DOS CauseWay. ex.exe является наиболее крупным файлом, так как он содержит большое число подпрограмм пиксельной графики, которые не входят в состав exw.exe или exu. Примечание: В некоторых весьма редких случаях сжатые исполняемые файлы могут вызывать срабатывание предупредительного сигнала антивирусных программ. Это происходит по той причине, что такой исполняемый файл выглядит не вполне обычно для антивирусного сканера. Если программа demo\sanity.ex исполняется правильно, вы можете спокойно игнорировать эти предупредительные сигналы. В противном случае свяжитесь с RDS.

Первые два аргумента, выдаваемые библиотечной функцией command_line(), будут слегка другими, когда ваша программа связана. Прочтите libraryr.doc для уяснения деталей.

Связанный исполняемый файл может обрабатывать перенаправления стандартных входа и выхода, т.е.

        myprog.exe < file.in > file.out
Если же вы написали маленький .bat файл для DOS myprog.bat, который содержит строку "ex myprog.ex", вы не сможете перенаправить вход и выход в такой же манере:
        myprog.bat < file.in > file.out     (под DOS не работает!)
Тем не менее, вы сможете использовать перенаправление в отдельных строках внутри файла .bat.