Хрестоматия по программированию на Си в Unix



Текстовая обработка. Хрестоматия по программированию на Си в Unix


Напишите программу, печатающую тексты Си-программ на принтере. Выделяйте ключевые слова языка жирным шрифтом, строки "строка", символы 'c' и комментарии - курсивом. Шрифты для EPSON-FX совместимых принтеров (например EP-2424) переключаются такими управляющими последовательностями (ESC означает символ '\033'):

ВКЛЮЧЕНИЕ ВЫКЛЮЧЕНИЕ жирный шрифт (bold) ESC G ESC H

утолщенный шрифт (emphasized) ESC E ESC F

курсив (italics) ESC 4 ESC 5

подчеркивание (underline) ESC - 1 ESC - 0

повышенное качество печати ESC x 1 ESC x 0

(near letter quality) nlq draft

верхние индексы (superscript) ESC S 0 ESC T

нижние индексы (subscript) ESC S 1 ESC T

сжатый шрифт (17 букв/дюйм) '\017' '\022'

(condensed) двойная ширина букв ESC W 1 ESC W 0

(expanded) пропорциональная печать ESC p 1 ESC p 0

(proportional spacing)

Можно включить одновременно несколько из перечисленных выше режимов. В каждой из следующих двух групп надо выбрать одно из трех:

pitch (плотность печати) pica (10 букв/дюйм) ESC P

elite (12 букв/дюйм) ESC M

micron (15 букв/дюйм) ESC g

font (шрифт) черновик (draft (Roman)) ESC k '\0'

текст (text (Sans Serif)) ESC k '\1'

курьер (courier) ESC k '\2'

Всюду выше 0 означает либо '0' либо '\0'; 1 означает либо '1' либо '\1'. Пример:

printf( "This is \033Gboldface\033H word\n");

Составьте программу вывода набора файлов на печать, начинающую каждый очередной файл с новой страницы и печатающую перед каждым файлом заголовок и номер текущей страницы. Используйте символ '\f' (form feed) для перевода листа принтера.

Напишите программу печати текста в две колонки. Используйте буфер для формирования листа: файл читается построчно (слишком длинные строки обрубать), сначала заполняется левая половина листа (буфера), затем правая. Когда лист полностью заполнен или файл кончился - выдать лист построчно, расписать буфер пробелами (очистить лист) и повторить заполнение очередного листа. Указание: размеры листа должны передаваться как аргументы main(), для буфера используйте двумерный массив букв, память для него заказывайте динамически. Усложнение: не обрубайте, а переносите слишком длинные строки (строка может потребовать даже переноса с листа на лист).




Содержание  Назад  Вперед