Отмечу, что здесь по сравнению с другими языками нет почти ничего нового. В PostScript файл определяется как конечная последовательность символов, заканчивающаяся маркером "конец файла". Нет разницы между файлом, хранящимся на диске, и файлом, получаемым по линии связи или генерируемым "на лету" каким-либо приложением. Различаются входные (input) и выходные (output) файлы. Входные файлы служат для интерпретатора PostScript источником исполняемых программ и они могут им читаться как последовательность символов. При этом входной файл может быть закрыт явно с помощью оператора closefile, либо неявно – при достижении маркера конца файла. Файл – это один из объектов языка. Объект такого типа создаётся с помощью оператора file. По существу это обычное открытие файла. Кстати, существует ограничение на число одновременно открытых файлов (зависит от ОС).
Синтаксис: имя_файла тип_доступа file à файл
Аргумент имя_файла должен соответствовать соглашениям операционной системы, в которой работает интерпретатор. В PostScript существуют предопределённые имена файлов, такие как %stdin и %stdout. Тип_доступа задаётся одной из букв:
'r' – входной файл (только чтение);
'w' – выходной файл (только запись).
Для удобства в языке есть несколько операторов чтения: read, readstring, readhexstring и readline.
Оператор read проверяет есть ли в файле ещё непрочитанные символы. Если нет (конец файла), закрывает файл и возвращает в стеке false. В противном случае читает из файла следующий символ, помещает его в стек, а затем, как признак успешной операции, помещает в стек true.
Синтаксис: файл read à байт true 'if not EOF
à false 'if EOF
Оператор readline читает из файла последовательность символов, ограниченную символом конца строки, и сохраняет их в аргументе строка (при этом сам терминатор строки туда не записывается). Если строка заполнена раньше, чем встретился символ новой строки, возникает ошибка, которая называется rangecheck. При успешном завершении операции чтения в стеке возвращается также true, иначе – false.
Синтаксис: файл строка readline à подстрока true 'if not EOF
à false 'if EOF
Так как изображение в PostScript часто кодируется как массив 16-ричных чисел и, если оно достаточно большое, его неудобно держать внутри программы, то считать его из файла поможет специальный оператор – readhexstring.
Он последовательно считывает 16-ричные цифры из файла проверяя их на диапазон 0-9, A-F. Происходит последовательное формирование из двух цифр одного байта и запоминание его в строке. При этом все символы типа пробелов, табуляций и возвратов каретки игнорируются. Чтение заканчивается, когда достигается конец файла. Ограничения на максимальную длину строки накладываются операционной системой. Синтаксис как и у оператора readline.
Такой же синтаксис имеет и оператор readstring. От readline он отличается только тем, что считанные символы рассматриваются как целые числа в диапазоне от 0 до 255. Особо рассматривается только символ новой строки.
Информация о числе байтов, доступных для чтения в файле, возвращается оператором bytesavaiable. Если результат равен -1, достигнут конец файла.
Синтаксис: файл bytesavaiable à число_байтов
Оператор currentfile возвращает объект типа file, из которого интерпретатор PostScript читал наиболее недавно.
Синтаксис: - currentfile à файл
Обычно возвращается стандартный файл ввода. Если не было чтения из какого-либо файла, то оно производится из файла программы. При этом указатель текущей позиции устанавливается после последнего считанного интерпретатором слова (оператора или элемента данных). Данное свойство используется для того, чтобы поместить в переменные текст или рисунок, находящиеся непосредственно в программе. Это демонстрирует пример, взятый из описания оператора:
/str 128 string def
currentfile str readline
строка, помещаемая в переменную текст
pop /text exch def
Оператор closefile разрывает связь между объектом типа file и соответствующим ему реальным файлом.
Синтаксис: файл closefile à -
Наконец, среди операторов ввода-вывода есть ещё ряд вспомогательных и очевидных операторов типа status, flush.