ЛР4. Утилиты с обработкой параметров и ошибок.
(до 120 баллов)
Утилита paint позволяет вносить изменения в изображение формата PPM P3
(https://ru.wikipedia.org/wiki/Portable_anymap, https://netpbm.sourceforge.net/doc/ppm.html).
Использование:
paint [опции] [файл]
Утилита обрабатывает файл в формате PPM P3 в соответствии с переданными опциями
и возвращает результат на стандартный вывод.
Опции:
-
конец списка опций
-n W H R G B
Формирует холст размером WxH, заполненный цветом RGB
-c R G B
Устанавливает текущий цвет (по умолчанию 0 0 0)
* -t T
* Устанавливает текущий размер точки (по умолчанию 1)
-p x y
Рисует точку (x,y) текущими цветом и *толщиной
-r x1 y1 x2 y2
Рисует прямоугольник (x1,y1)-(x2,y2) текущими цветом и *толщиной
-f x1 y1 x2 y2
Рисует закрашенный текущим цветом прямоугольник (x1,y1)-(x2,y2)
* -l x1 y1 x2 y2
* Рисует отрезок (x1,y1)-(x2,y2) текущими цветом и *толщиной
Требования:
1. Опция -n может быть только первой в списке опций.
Если используется опция -n, то имя файла игнорируется.
Если имя файла и опция -n отсутствуют, то изображение считывается со стандартного ввода.
2. Именем файла считается очередной параметр, при обработке слева направо,
который не может быть распознан как корректная опция, либо параметр за концом сиписка опций.
Данные справа от имени файла игнорируются
3. 3начения R G B должны находиться в целочисленном диапазоне [0,255]
4. Значения W и H должны находиться в целочисленном диапазоне [1,4096]
5. Значения x, y, x1, y1, x2, y2 находятся в дипазоне двухбайтового целочисленного типа,
рисунок за пределами холста не отображается. Левый верхний угол холста соответствует
точке (0,0), ось X направлена вправо, ось Y - вниз.
* 6. Значение T должно быть нечетным и находиться в диапазоне [1..9]
7. Холст должен хранится в динамическом двумерном массиве, каждый элемент которого представляет
собой структуру вида struct { unsigned char R,G,B; }
8. Опции (кроме -n) могут повторяться произвольное количество раз.
Опции применяются последовательно, слева направо.
Результат:
1. В случае корректного завершения утилита возвращает значение 0.
2. В случае ошибки утилита прекращает обработку файла, возвращает код ошибки и выводит
текст ошибки в поток ошибок. На стандартный вывод ничего не выводится.
Коды и текст ошибок:
1. Некорректная опция -X
2. Неверное количество параметров в опции -X
3. Некорректные значения параметров в опции -X
4. Формат файла N неверен
5. Файл N слишком велик (более 4096*4096 байт)
В текст ошибок вместо X подставляется название опции, в которой найдена ошибка,
вместо N подставляется название файла
Рекомендации:
Файл формата PPM P3 является текстовым. Длина строк файла может быть произвольной, любая строка
может предваряться занком #, что делает ее комментарием.
Для чтения строк произвольной длины из текстового файла или со стандартного потока ввода
рекомендуется использовать функцию getline. Пример использования данной функции
опубликован в ее мануале.
Оценки:
1. 20 баллов
Исходный файл может игнорироваться
Ошибки могут не обрабатываться
Поддержка опций: -n -c -p
Поддержка требований: 7,8
2. 40 баллов
Ошибки могут не обрабатываться
Поддержка всех опций и параметров
Поддержка требований: 7,8
3. 80-100 баллов
Полное решение, без заданий повышенной сложности (*)
4. +20 баллов
Полное решение
Решение заданий повышенной сложности (*)