При этом этот язык является аппаратно-независимым. Одна и та же программа, написанная на PostScript, будет успешно работать на любом PostScript-устройстве, максимально используя возможности этого устройства, будь это лазерный принтер с разрешением в 300 dpi или фотонаборный автомат с разрешением 2540 dpi.
Полное описание этого языка выходит за рамки данной книги (краткое описание можно найти в [20]), поэтому мы ограничимся примером программы, осуществляющей копирование прямоугольной области экрана на PostScript-принтер.
21 // File ЕхатрІеЗ.срр
#include <bios.h>
#include <conio.h>
#include <graphics.h>
#include <process.h>
#include <stdio.h>
#include <stdlib.h>
int port = 0; //useLPTI:
inline int print ( char byte )
{
return biosprint ( 0, byte, port);
}
int printStr ( char * str) {
int st;
while (*str != '\0')
if (( st = print (*str++ )) & 1 ) .return st;
return 0;
}
void printScreenPS (int x1, int y1, int x2, int y2, int mode ) {
int xSize = x2 - x1 + 1;
int ySize = y2 - y1 +1;
int numCols = ( x2 - x1 + 8 ) » 3;
int byte, bit;
char str [20];
4. Работа с основными графическими устройствам
printStr ( 7bmap_wid " ); itoa ( xSize, str, 10 ); printStr ( str );
printStr ( 7bmap_hgt" ); itoa ( ySize, str, 10 ); printStr ( str );
printStr ( 7bpp 1 def\n" ); printStr ( 7res " ); itoa ( mode, str, 10 ); printStr ( str ); printStr ( " def\n\nH ); printStr ( 7x 5 def\n" ); printStr ( 7y 5 def\n" ); printStr ( 7scx 100 100 div def\n" ); printStr ( 7scy 100 100 div def\n" ); printStr ( 7scg 100 100 div def\n" ); printStr ( "scaleitW ); ♦ printStr ( "imagedata\n\nH );
for ( int y = y1 ; y <= y2; y++ ) {
for ( int i = 0, x = x1 ; i < numCols; i++ ) {
for ( int j = 0, bit = 0x80, byte = 0; j < 8 &&x+j <=x2; j++, bit »= 1 )
if ( getpixel ( x + j, y ) > 0 ) byte l= bit;
itoa ( byte, str, 16 ); printStr ( str );
}
printStr ( "\n" );