                    grafi~eskaq biblioteka
                        GL VERSION 1.1
                awtor paketa  n.tuvilin (TSW)
	 (C)OPYRIGHT  too "grimaks" ("orion-serwis")


	zapre}aetsq  kommer~eskoe  rasprostranenie  paketa  bez
wedoma  razrabot~ikow.

	    awtorskim prawom na razrabotku wladeet
                too "grimaks" ("orion-serwis").

	      adres dlq priema korrespondencii :

                    140061 moskowskaq obl.
                      g.lytkarino, a/q 18
                        "orion-serwis"

                  telefon: (095) 359-73-56




wnimanie: imena wseh funkcij sleduet nabiratx w nivnem registre
	  (stro~nymi bukwami),  a  makroopredelenij - w werhnem
          (zaglawnymi bukwami).

w na~ale programy sleduet wstawitx stroku:
	#INCLUDE "GRAPHICS.H"
pri komponowke sleduet ukazatx imq biblioteki:
	LN PROGRAM.O LIBC.LIB GL.LIB

	w ka~estwe proobraza ispolxzowalasx grafi~eskaq biblio-
teka kompilqtora TURBO C V2.0 dlq IBM-sowmestimyh  kompx`terow.
po|tomu dlq bolee podrobnogo  oznakomleniq  movno  ispolxzowatx
ee opisanie (sowmestimy bolx{instwo funkcij).

	na~alo  koordinat  raspoloveno  w  werhnem lewom uglu -
to~ka s koordinatami 0,0.


	perehod w grafi~eskij revim i wyhod


	VOID INITGRAPH (MODE) INT MODE;
   inicializiruet grafi~eskij revim raboty. w ka~estwe na~alx-
   nogo ustanawliwaetsq revim MODE (sm. SETVIDEOMODE). teku}aq
   poziciq ustanawliwaetsq w 0,0. GRAPHRESULT()==GRINIT, kogda
   grafi~eskij revim uve aktiwen.

INT GRAPHRESULT()
   wozwra}aet rezulxtat wypolneniq poslednej grafi~eskoj funk-
   cii:
	GROK (=0)	- net o{ibok
	GRINIT		- neiniciirowan grafi~eskij revim,
			  ili uve aktiwen (dlq INITGRAPH)
	GRINVALMODE	- neprawilxnyj grafi~eskij revim
	GRNOFLOODMEM	- perepolneie steka pri wypolnenii
			  funkcii FLOODFILL
	GRINVALFONT	- neprawilxnyj nomer {rifta

VOID CLOSEGRAPH ()
   prekra}aet rabotu w grafi~eskom  revime,  dlq  BIOS  V3.00
   (orion-serwis) ustanawliwaet  revim |krana, su}estwowaw{ij
   pri wyzowe INITGRAPH

primer:
	#INCLUDE "LIBC.H"
	#INCLUDE "GRAPHICS.H"
	MAIN()
	[	INITGRAPH(COLOR4);
		IF (GRAPHRESULT()) [
			/* o{ibka inicializacii */
			...
			EXIT(1); ]
		...
		CLOSEGRAPH();
	]


VOID SETVIDEOMODE (MODE) INT MODE;
   ustanawliwaet revim MODE:
      MONO      - monohromnyj (2 cweta)
      COLOR4    - cwetnoj, 4 cweta
      COLOR16   - cwetnoj, 16 cwetow
   dlq revimow COLOR wkl`~aetsq stranica 1 (zdesx  i dalee pod
nomerom stranicy ponimaetsq nomer |krana "oriona"), dlq MONO - 
0.
   teku}ie cweta ustanawliwa`tsq tak (sm. SETCOLOR):
      dlq MONO		- SET,
	  COLOR4	- BLACK4,
	  COLOR16	- SET, PALETTE=COLOR(WHITE,BLACK)
   GRAPHRESULT()==GRINVALMODE esli MODE ne sootwestwuet ni
   odnomu iz pere~ilennyh revimow.

INT GETVIDEOMODE ()
   wozwra}aet teku}ij revim ili -1 esli grafi~eskij revim
   niniciirowan. ne menqet GRAPHRESULT.


		linii i to~ki. granicy


INT GETMAXX (), INT GETMAXY ()
   wozwra}a`t maksimalxnye zna~eniq koordinat po osqm X i Y
   sootwestwenno, ne menqet GRAPHRESULT.
   esli dlq grafi~eskih funkcij ukazywa`tsq zna~eniq koordinat,
   wyhodq}ie za granicy |krana, to oni zamenq`tsq maksimalxno
   wozmovnymi.

INT GETX (), INT GETY()
   wozwra}a`t zna~enie ukazatelq teku}ej pozicii. (ne menq`t
   GRAPHRESULT)

VOID MOVETO (X,Y) INT X,Y;
   ustanawliwaet nowoe zna~enie ukazatelq teku}ej to~ki.

VOID CLEARDEVICE ()
   o~i}aet |kran teku}im cwetom

VOID SETASPECTRATIO (W,H), VIOD GETASPECTRATIO (&W,&H)
   ustanawliwaet (wozwra}aet) mas{tabnye ko|fficienty |krana,
   ispolxzuetsq dlq polu~eniq odinakowyh gorizontalxnyh i wer-
   tikalxnyh razmerow. naprimer, esli u wywedennoj okruvnosti
   wertikalxnyj i gorizontalxnyj radius rawny 105 i 83 mm, to
   posle wyzowa SETASPECTRATIO(105,83) radiusy budut sowpadatx.
   posle zapuska programmy W=H=1. ne menqet GRAPHRESULT.
   wnimanie: W i H dolvny udowletworqtx uslowi`:
		0 < MIN (W,H) < 256

INT SETACTIVEPAGE (PAGE), INT SETVISUALPAGE (PAGE) INT PAGE;
   ustanawliwaet aktiwnu` i widimu` stranicy.
   PAGE = 1,2 dlq COLOR4, COLOR16 i
   PAGE = 0..3 dlq MONO
   wozwra}a`t nomer ustanowlennoj stranicy.

VOID PUTPIXEL (X,Y,COLOR) INT X,Y,COLOR;
   stawit to~ku na |krane s koordinatami X,Y i cwetom COLOR.
   COLOR = SET ili RESET dlq MONO i COLOR16 revimow
   COLOR = BLACK4, RED4, GREEN4, BLUE4 dlq COLOR4
   dlq COLOR16 w star{em bajte COLOR movno ukazatx cwet palit-
   ry (sm. SETPALETTE), naprimer:
	PUTPIXEL(0,0,COLOR(LIGHTGREEN,BLACK)<<8+SET);
   stawit w lewom werhnem uglu zelenu` to~ku na ~ernom fone.

INT GETPIXEL (X,Y) INT X,Y;
   wozwra}aet cwet to~ki s koordinatami X,Y (sm. PUTPIXEL),
   dlq revima COLOR16 w star{em bajte wozwra}aetsq palitra.

VOID LINE (X1,Y1,X2,Y2) INT X1,Y1,X2,Y2;
   wy~er~iwaet otrezok linii iz X1,Y1 w X2,Y2 teku}em cwetom.

VOID LINETO (X,Y) INT X,Y;
   wy~er~iwaet lini` iz teku}ej to~ki w X,Y.

INT SETWRITEMODE (TYPE) INT TYPE;
   ustanawliwaet sposob wywoda to~ek dlq funkcij:
      PUTPIXEL, LINE, LINETO, RECTANGLE, DRAWPOLY, CIRCLE
   TYPE = COPY_PUT - prosto wywod
          XOR_PUT  - operaciq iskl`~a`}ee ili
   wozwra}aet TYPE. w revime COLOR4 funkciq ne dejstwuet!


	prqmougolxniki, okruvnosti, |llipsy


VOID RECTANGLE (X1,Y1,X2,Y2) INT X1,Y1,X2,Y2;
   wy~er~iwaet prqmougolxnik s koodinatami uglow X1,Y1,X2,Y2

VOID DRAWPLOY (N,POINTS) INT N,*POINTS;
   risuet lomanu` s N wer{inami, koordinaty kotoryh zada`tsq w
   massiwe POINTS:
       X0,Y0,X1,Y1,...,X[N-1],Y[N-1]
   primer:
	STATIC INT STAR[12]=
	    [ 74,10, 202,250, 10,80, 266,80, 42,250, 74,10 ];
	DRAWPOLY (6,STAR);
   - risuet na |krane zwezdu.

VOID BAR (X1,Y1,X2,Y2) INT X1,Y1,X2,Y2;
   risuet zakra{ennyj teku}im cwetom prqmougolxnik.

VOID CIRCLE (X,Y,R) INT X,Y,R;
   risuet okruvnostx s centrom w X,Y i radiusom R (po osi X) s
   u~etom ASPECTRATIO.

VOID ELLIPSE (X,Y,0,0,RX,RY) INT X,Y,RX,RY;
   ~ertit |llips s centrom X,Y, radiusami RX,RY.


			cweta


INT SETCOLOR (COLOR) INT COLOR;
   ustanawliwaet teku}ij cwet to~ek (sm.PUTPIXEL), wozwra}aet
   COLOR. (star{ij bajt ne ispolxzuetsq!)

INT GETCOLOR ()
   wozwra}aet teku}ij cwet.

INT SETPALETTE (PAL) INT PAL;
   ustanawliwaet teku}u` palitru:
    PAL = 0,1 dlq COLOR4 i MONO
    PAL = COLOR(C,B) dlq COLOR16, gde C i B cweta izobraveniq i
          i fona ( COLOR - makroopredelenie ) :
		BLACK           - ~ernyj
		BLUE            - sinij
		GREEN		- zelenyj
		CYAN		- bir`zowyj
		RED		- krasnyj
		MAGENTA		- purpurnyj
		BROWN		- kori~newyj
		GRAY		- seryj
		DARKGRAY	- ~ernyj
		LIGHTBLUE	- goluboj
		LIGHTGREEN	- swetlo-zelenyj
		LIGHTCYAN	- swetlo-bir`zowyj
		LIGHTRED	- swetlo-krasnyj
		LIGHTMAGENTA	- swetlo-purpurnyj
		YELLOW		- veltyj
		WHITE           - belyj
   naprimer, posle komandy:
	SETPALETTE(COLOR(YELLOW,BLUE));
   wse to~ki budut wywoditxsq veltymi na sinem pole.

INT GETPALETTE ()
   wozwra}aet teku}u` palitru.


			zakraska


VOID SETFILLSTYLE (0,COLOR)
   ustanawliwaet cwet zakraski. (ne menqet GRAPHRESULT)

VOID FLOODFILL (X,Y,BORDERCOLOR) INT X,Y,BORDERCOLOR
   zakra{iwaet zamknutu` oblastx na~inaq s X,Y cwetom zakraski
   do cweta granicy BORDERCOLOR. dlq revimow MONO i COLOR16
   cwet granicy sowpadaet s cwetom zakraski, po|tomu dlq nih
   nado ispolxzowatx wyzow wida:
	FLOODFILL (X,Y);
   esli dlq raboty funkcii ne hwataet steka, to zna~enie
   GRAPHRESULT ustanawliwaetsq w GRNOFLOODMEM.


	sohranenie i wyda~a izobravenij


INT IMAGESIZE(X1,Y1,X2,Y2) INT X1,Y1,X2,Y2;
   wozwra}aet razmer pamqti, neobhodimoj dlq hraneniq prqmou-
   golxnogo fragmenta izobraveniq.

CHAR *GETIMAGE(X1,Y1,X2,Y2,BUF) INT X1,Y1,X2,Y2; CHAR *BUF;
   pome}aet w pamqtx BUF u~astok izobraveniq. wozwra}aet
   ukazatelx na sledu`}ij posle zapisannogo w BUF bajt.

CHAR *PUTIMAGE(X,Y,BUF,OP) INT X,Y,OP; CHAR *BUF;
   wywodit w zadannoe mesto na |krane izobravenie, sohranennoe
   funkciej GETIMAGE w buffere BUF. sposob wywoda opredelqet
   OP:
	COPY_PUT	- zamena izobraveniq na BUF
	XOR_PUT		- operaciq iskl`~a`}ee ili s izobra-
			  veniem i BUF
	OR_PUT		- operaciq ili
	AND_PUT		- operaciq i
	NOT_PUT		- zamena na inwertirowannyj BUF
   dlq revima COLOR4 OP=COPY_PUT i po|tomu movno pisatx:
	PUTIMAGE(X,Y,BUF);
   dlq revima COLOR16 k OP movno dobawitx flag WOCOLOR,
   ~toby ostawitx cwet bez izmenenij, naprimer:
	PUTIMAGE(X,Y,BUF,WOCOLOR+XOR_PUT);


			tekst


VOID OUTTEXT (STRING) CHAR *STRING;
   wywodit tekst teku}im stilem, na~inaq s teku}ej pozicii
   (lewaq - werhnqq to~ka perwoj bukwy). posle wypolneniq
   teku}aq poziciq ukazywaet na na~alo sledu`}ego simwola).
   simwoly wywodqtsq iz matricy 8 na 9 i zanima`t na |krane
   prqmougolxnik 8*SIZE na 9*SIZE. esli simwoly ne pome}a`tsq
   na |krane to oni useka`tsq.
   {rift - IBM, russkie bukwy po kodirowke koi8
   wnimanie: pri wywode simwoly nakladywa`tsq na izobravenie,
   po|tomu pri powtornom wywode teksta w tove mesto neobhodimo
   o~istitx u~astok |krana:
	S="EXAMPLE OF TEXT";
	SETTEXTSTYLE(0,HORIZ_DIR,2);
	SETCOLOR(RESET); SETPALETTE(COLOR(WHITE,GREEN));
	BAR(X,Y,X+TEXTWIDTH(S)-1,Y+TEXTHIGHT(S)-1);
	SETCOLOR(SET);
	OUTTEXTXY(X,Y,S);

OUTTEXTXY (X,Y,STRING) INT X,Y; CHAR *STRING;
   to ve, no s pozicii X,Y.

SETTEXTSTYLE (0,DIR,SIZE) INT DIR,SIZE;
   ustanawliwaet stilx wywoda teksta:
   DIR - naprawlenie:
      HORIZ_DIR - slewa naprawo
      VERT_DIR  - snizu wwerh
   SIZE - razmer bukw - ot 1 do 16

INT TEXTWIDTH (STRING), INT TEXTHEIGHT (STRING) CHAR *STRING;
   wozwra}a`t {irinu i wysotu teksta w to~kah s u~etom teku-
   }ego stilq wywoda.
   naprimer, wot tak movno wywesti tekst w centre |Krana:
	S="MIDDLE";
	SETTEXTSTYLE(0,HORIZ_DIR,5);
	OUTTEXTXY((GETMAXX()-TEXTWIDTH(S))/2,
		  (GETMAXY()+TEXTHIGHT(S))/2,S);

   zame~anie: sohranqetsq wozmovnostx ispolxzowatx standartnye
	      funkcii wywoda na |kran. wywod proishodit w ak-
	      tiwnu` stranicu.



               dopolnitelxnye funkcii


INT KBHIT ()
   wozwra}aet sostoqnie klawiatury:
      0 - ne nevata ni odna klawi{a
      1 - navata kakaq-nibudx klawi{a

INT GETCH ()
   ovidaet navatiq kakoj-nibudx klawi{i i wozwra}aet ee kod.

UNSIGNED RAND (RANGE)
   wozwra}aet slu~ajnoe ~islo iz diapazona 0..RANGE.

VOID SRAND (SEED)
   inicializiruet generator slu~ajnyh ~isel ~islom SEED.

CHAR *MALLOC (SIZE) UNSIGNED SIZE;
   wydelqet u~astok pamqti dlinnoj SIZE, sodervimoe kotorogo
   neopredelleno. esli pamqtx wydelitx newozmovno, to wozwra-
   }aetsq NULL.

CHAR *CALLOC (NMEMB,SIZE) UNSIGNED NMEMB,SIZE;
   wydelqet pamqtx pod massiw iz NMEMB |lementow, kavdyj razme-
   rom SIZE. pamqtx obnulqetsq. esli pamqti takogo razmera net
   to wozwra}aetsq NULL.

VOID FREE (PTR) CHAR *PTR;
   wozwra}aet u~astok pamqti, wydelennyj MALLOC ili CALLOC.

				opisanie sostawil:   n.tuvilin
				redaktirowal:       m.bridvidi
			    (C) too "grimaks" ("orion-serwis")
						     10.05.93


