Язык процедур 2-REXX для OS-2


LINEOUT


Функция LINEOUT в качестве результата возвращает количество строк, оставшихся после попытки записать строку в выводной поток символов с указанным именем. Значение результата может быть равно 0 (если строка была записана успешно) или 1 (если в процессе записи строки произошла какая-либо ошибка). В качестве строки может быть указана пустая строка, в этом случае будут выполнены только те действия, которые связаны с завершением строки. Функция LINEOUT добавляет в конец строки символы конца строки и возврата каретки.

Форма имени зависит от среды применения. Если имя опущено, то строка записывается в выводной поток, принимаемый по умолчанию. В операционной системе OS/2 это STDOUT: (обычно экран дисплея).

В устойчивых потоках позиция записи ведется для каждого потока. В операционной системе OS/2 эта позиция та же, что и позиция чтения. По умолчанию любая запись в выводной поток начинается с текущей позиции записи. Символы, записанные с помощью обращения к функции LINEOUT, могут быть добавлены к частичной строке. Функция LINEOUT концептуально завершает строку в конце каждого обращения к ней. После завершения записи позиция записи устанавливается на начало строки, непосредственно следующей за записанной. Исходной позицией записи является конец потока, т.е. обычно обращение к функции LINEOUT приводит к добавлению строк в конец выводного потока.

Вы можете установить позицию записи на первый символ устойчивого потока, указав для режима линия значение 1 (единственное действительное значение).

Прим.   В некоторых средах перезапись потока с помощью функций CHAROUT или LINEOUT может удалить (разрушить) все существующие данные в потоке. Однако это не относится к среде OS/2.

Для устойчивых потоков значение режима строка может быть опущено. Если Вы указываете режим линия, то позиция записи устанавливается на начало потока, но в выводной поток ничего не записывается и в качестве результата возвращается 0. Если же ни линия, ни строка не указаны, то позиция записи устанавливается на конец потока.
Подобное использование функции LINEOUT имеет дополнительный эффект закрытия потока в средах (таких как OS/2), поддерживающих данную концепцию.

Выполнение программы обычно временно приостанавливается до тех пор, пока не завершится операция вывода. Однако если строка не может быть записана, то формируется условие NOTREADY, и функция LINEOUT в качестве результата возвращает значение 1 (что свидетельствует о наличии остаточного счетчика при записи строк).

Ниже приведено несколько примеров: LINEOUT(,'Display this') /* Записывает строку в выходной */ /* поток,принимаемый по умолчанию */ /* (обычно, это дисплей); возвра- */ /* щает 0, если действие успешно. */

myfile = 'ANYFILE.TXT' LINEOUT(myfile,'A new line') /* Открывает файл ANYFILE.TXT и */ /* добавляет строку в конец файла.*/ /* Если файл уже открыт, строка */ /* записывается в текущую позицию */ /* записи. Возвращает 0, если */ /* действие прошло успешно. */

LINEOUT(myfile,'A new start',1)/* Открывает файл (если он еще не */ /* открыт); записывает новую стро-*/ /* ку на место первой. Возвращает */ /* 0, если действие прошло успешно*/

LINEOUT(myfile,,1) /* Открывает файл (если он еще не открыт); */ /* запись не выполняется. Позиция записи */ /* устанавливается на первый символ. */

LINEOUT(myfile) /* Закрывает файл ANYFILE.TXT */

Функцию LINEOUT полезно вызывать как подпрограмму. В этом случае результат ее выполнения доступен в качестве значения переменной RESULT. Например: Call LINEOUT 'A:rexx.bat','Shell',1 Call LINEOUT ,'Hello'

Прим.    Если строки должны быть записаны в выводной поток символов, принимаемый по умолчанию, без возможности возникновения ошибки, то вместо функции LINEOUT используйте инструкцию SAY.



Содержание раздела