14 biblioteczka podstawowych procedur graficznych
16 moze wspolpracowac z kompilatorami firmy Microsoft:
18 Fortran 77 wersja 3.31 i 4.00
23 C (Lattice) wersja 3.10
30 obsluguje karty IBM color/graphics, Hercules II oraz EGA
37 wersja 2.2, grudzien 1987
48 Miroslawa Milkowska - procedury poziomu 1
51 Michal Jankowski - procedury poziomu 2
54 Osrodek Obliczeniowy Instytutu Informatyki
55 Uniwersytet Warszawski
\f
67 Procedury ustawiania trybu 5
68 Procedury sterujace kolorami 8
69 Procedury ustawiania pozycji 11
70 Procedury obslugujace punkty 12
71 Procedury rysowania linii 13
72 Procedury operujace na fragmentach ekranu 15
73 Procedury wejscia/wyjscia dla pojedynczych znakow 16
74 Procedury wejscia/wyjscia dla linii 18
75 Procedury wejscia/wyjscia dla okienek 19
76 Procedury poziomu 2 20
77 Informacje dodatkowe 22
78 Procedury dodatkowe 22
84 A. Uzycie IIUWGRAFu z FORTRANem 77 23
85 B. Uzycie IIUWGRAFu z Pascalem 24
86 C. Uzycie IIUWGRAFu z Lattice C 25
87 D. Uzycie IIUWGRAFu z LOGLANem 26
88 E. Wykaz specyfikacji procedur IIUWGRAFu 27
89 F. Wartosci kodow klawiszy specjalnych 29
90 G. FEDIT - prosty program do edycji kroju znakow 30
91 H. Zmiany IIUWGRAFu w stosunku do poprzednich wersji 33
103 Rysunek jest tworzony na ekranie monitora za pomoca
104 szeregu wywolan procedur bibliotecznych IIUWGRAF. Modyfikuja
105 one zawartosc bufora mapy bitowej, ktora jest zwykle
106 bezposrednio wyswietlana na ekranie. Zmiany te sa wtedy
107 widoczne natychmiast. Umiejscowienie bufora roboczego moze
108 byc jednak zmienione, tak aby byl on zwiazany z obszarem
109 pamieci dostarczonym przez uzytkownika. W tym przypadku
110 zmiany jego zawartosci oczywiscie nie sa wyswietlane, a
111 nawet przestawienie monitora w tryb graficzny nie jest
112 konieczne. Rysunek moze byc wtedy skonstruowany w pamieci,
113 bez wyswietlania, przechowany na dysku w postaci binarnej i
114 odtworzony pozniej na ekranie. Omowiony tryb pracy jest
115 mozliwy jednak tylko dla karty Hercules II oraz karty IBM.
116 W opisie procedur slowo ekran, tam gdzie mowa o jego
117 zawartosci, nalezy rozumiec wlasnie jako bufor roboczy.
119 Karty Hercules II oraz EGA daja dodatkowa mozliwosc
120 blyskawicznego przelaczania pomiedzy dwiema
121 rownouprawnionymi stronami graficznymi.
123 W wersji podstawowej karta graficzna EGA posiada
124 64K bajty pamieci. Pamiec ta moze byc zwiekszona do 128K
125 oraz 256K bajtow. Opisane ponizej procedury graficzne
126 dotycza w zasadzie karty EGA z pelna pamiecia 256K bajtow.
127 Tylko w tej wersji karty mozna bowiem uzywac 16 kolorow
128 ( z 64 istniejacych ) oraz dwoch stron graficznych. W obu
129 wersjach z mniejsza pamiecia istnieje tylko jedna strona
130 graficzna, a ponadto w wersji podstawowej uzytkownik ma
131 mozliwosc korzystania tylko z 4 kolorow (z 16 istniejacych).
133 Dostarczone sa cztery zestawy oddzielnych bibliotek
134 IIUWGRAF, kazda dla innego rodzaju ekranu:
136 HGCMSF i HGCMSF4 dla karty Hercules
137 MGCMSF i MGCMSF4 dla karty IBM color/graphics
138 MGC64MSF i MGC64MF4 dla karty IBM w trybie mono
139 EGAMSF i EGAMSF4 dla karty EGA
141 Biblioteki HGCMSF, MGCMSF, MGC64MSF i EGAMSF zgodne
142 sa z konwencjami Fortranu ( wersja 3.31 ) i Pascala firmy
143 Microsoft. Natomiast biblioteki HGCMSF4, MGCMSF4, MGC64MF4 i
144 EGAMSF4 sa zgodne z konwencjami Fortranu ( wersja 4.00 )
145 firmy Microsoft. Dodatkowo, kazda biblioteka moze byc
146 dostarczona w konwencji Lattice C, oddzielnie dla czterech
147 modeli kodu S, P, D i L.
149 Programy uzytkowe komunikuja sie z IIUWGRAFem na
152 poziom 1 - zarzadzanie ekranem na poziomie pixli,
153 przy uzyciu prawdziwych wspolrzednych na ekranie,
155 poziom 2 - rysowanie punktow i linii we
156 wspolrzednych abstrakcyjnych.
166 Wszystkie parametry bez podanej explicite
167 specyfikacji maja typ integer. Wszystkie parametry calkowite
168 powinny miec wartosci 16-bitowe (integer*2 w Fortranie,
169 integer w Pascalu, int w C)
172 Zakresy wspolrzednych ekranu:
175 0 <= iy <= 347 dla karty Hercules
178 0 <= iy <= 199 dla karty IBM color/graphics
181 0 <= iy <= 199 dla karty IBM color/graphics
184 0 <= iy <= 349 dla karty EGA
188 (0,0)-----------> (ix,0)
201 Procedury ustawiania trybu
205 Procedura GRON ustawia monitor w graficznym trybie
206 pracy, czyszczac zawartosc jego ekranu, ktory jednoczesnie
207 staje sie buforem roboczym. Parametr i ma znaczenie jedynie
208 dla karty IBM w trybie 320*200: wartosc 1 wybiera normalne
209 kolory, wartosc 0 - kolory zmodyfikowane do pracy na
210 monitorach monochromatycznych. Dla kart Hercules, EGA oraz
211 karty IBM w trybie 640*200 wartosc parametru i jest
212 ignorowana. Przy przelaczaniu karty Hercules z trybu
213 tekstowego na graficzny i odwrotnie stosowane jest
214 programowo opoznienie ok. 3 sekund. Tryb karty IBM ustawiany
215 jest wprost, bez pomocy przerwania 10H, tak aby mozliwa byla
216 jednoczesna praca na monitorze kolorowym w trybie graficznym
217 z praca na monitorze monochromatycznym w trybie tekstowym.
218 Konsekwencja tego rozwiazania jest to, ze nie mozna
219 korzystac z komendy GRAPHICS. Natomiast tryb karty EGA jest
220 ustawiany wprost, za pomoca przerwania 10H.
226 Funkcja NOCARD zwraca liczbe calkowita
227 identyfikujaca rodzaj monitora obslugiwanego przez biezaco
231 2 dla karty IBM w trybie kolor
232 3 dla karty IBM w trybie mono 640*200
233 4 dla karty IBM w trybie mono 320*200
236 Funkcja NOCARD moze byc wywolana dopiero po
237 zainicjowaniu trybu graficznego za pomoca procedury GRON.
238 Parametr ple jest ignorowany.
244 Procedura GROFF przelacza monitor w tryb tekstowy,
245 wypelniajac zawartosc jego ekranu spacjami. Przed
246 zakonczeniem dzialania programu monitor, z ktorego byl
247 wywolany, nalezy zawsze ustawic z powrotem w tryb tekstowy.
252 Procedura CLS czysci ekran, wypelniajac go kolorem
253 0. Czyszczenie odbywa sie bez wylaczania ekranu.
\f
260 HPAGE(nr, tryb, zeruj)
262 Procedura HPAGE ma zastosowanie jedynie dla kart
263 Hercules oraz EGA. Pozwala na dostep do drugiej strony
264 graficznej monitora. Wywolanie HPAGE wybiera strone o
265 numerze nr (0 lub 1), zeruje jej zawartosc, o ile parametr
266 zeruj ma wartosc <> 0, oraz ustawia jej tryb:
268 tryb = 0 wyswietla zawartosc strony alfanumerycznie
269 tryb = 1 wyswietla zawartosc strony graficznie
270 tryb =-1 przypisuje do tej strony bufor roboczy
273 Przypisanie bufora roboczego trybem -1 nie zmienia
274 numeru ani sposobu wyswietlania biezacej strony. Tryb 0
275 wiaze bufor roboczy z wybrana wlasnie strona. Przelaczanie
276 stron odbywa sie bez opoznien, o ile nie ulega zmianie tryb
277 wyswietlania (alfanumeryka/grafika). Poza tym, wywolanie
278 HPAGE(0,1,1) jest ( tylko dla karty Hercules ) rownowazne
279 GRON(), a HPAGE(0,0,1) - wywolaniu GROFF.
281 Typowa petla animacyjna moze byc zatem rozwiazana na
288 (* NARYSUJ PIERWOTNY OBRAZ *)
292 HPAGE(1-NR,1,0); (* WYSWIETLANIE *)
293 HPAGE(NR,-1,1); (* BUFOROWANIE *)
294 (* NARYSUJ ZMODYFIKOWANY OBRAZ *)
303 Procedura VIDEO przelacza bufor roboczy tak, aby
304 miescil sie on w tablicy podanej jako parametr jej
306 Samo wywolanie VIDEO nie zmienia zawartosci bufora. Obraz
307 wyswietlany na monitorze nie bedzie ulegal teraz zmianom
308 mimo wywolywania procedur modyfikujacych zawartosc ekranu.
309 Wszelkie odwolania do ekranu beda teraz dokonywane w
310 tablicy. Gotowy obraz moze byc przeniesiony na rzeczywisty
311 ekran za pomoca procedur GETMAP/PUTMAP lub zapisany binarnie
312 na dysku w celu pozniejszego odtworzenia. Tablica powinna
313 miec 16K bajtow przy wspolpracy z karta IBM i 32K bajtow
314 przy wspolpracy z karta Hercules.
315 Procedury VIDEO nie mozna stosowac dla karty EGA.
\f
323 VAR BOK: ARRAY[1..32K] OF BYTE;
324 FRAGM: ARRAY[1..MAX] OF BYTE;
327 (* NARYSUJ STRONE TYTULOWA *)
330 (* SKONSTRUUJ RYSUNEK "NA BOKU" *)
334 (* ZAPAMIETAJ FRAGMENT GOTOWEGO RYSUNKU *)
336 GETMAP(MAXX,MAXY,FRAGM);
337 (* PRZYPISZ Z POWROTEM EKRAN DO MONITORA *)
338 GRON(1); (* NIESTETY, CZYSCI EKRAN *)
344 W przypadku wywolania VIDEO(tablica(adres)), wartosc
345 wyrazenia adres musi byc postaci 1+k*16, gdzie k=0,1,2,...
353 Procedury sterujace kolorami
358 Procedura COLOR ustawia biezacy kolor. W tym
359 kolorze beda odtad dokonywane zmiany zawartosci ekranu. Na
360 monitorach monochromatycznych kolor 0 oznacza czarny (pixel
361 wygaszony), kolor <> 0 oznacza bialy (pixel zapalony).
362 Na monitorach kolorowych, dla karty IBM color/graphics,
363 kolory maja nastepujace numery:
365 0 - tlo (czarny lub ustalony wywolaniem BORDER)
366 1 - zielony lub turkusowy - cyan ( zaleznie od wyboru
368 2 - czerwony lub purpurowy - magenta
371 Kolorem ustawionym poczatkowo jest 1.
374 Dla karty EGA kolor moze przyjmowac wartosci od 0
375 do 15. Znaczenie tego parametru jest okreslone poprzez wybor
376 palety ( przyporzadkowanie kazdemu z 16 identyfikatorow
377 koloru dowolnego koloru z 64 istniejacych ), dokonywany za
378 pomoca procedury PALLET.
379 Kolorem ustawionym poczatkowo jest 7.
384 Procedura STYLE ustawia biezacy styl, czyli
385 kombinacje kolorow uzywana do rysowania odcinkow (DRAW) i
386 wypelniania obszarow (HFILL,VFILL). Styl wybiera jeden z
387 szesciu nastepujacych sposobow mieszania tla (.) i biezacego
397 Przy rysowaniu odcinkow kolejne pixle beda mialy
398 kolor wyznaczony cyklicznie wzorcem stylu. Pierwszy i
399 ostatni pixel odcinka bedzie zawsze mial biezacy kolor.
400 Przy wypelnianiu, podany wzorzec dotyczy linii poziomych
401 (pionowych) ekranu o parzystej wspolrzednej y (x). Wzorzec
402 dla linii o wspolrzednych nieparzystych dobierany jest
404 Inne sposoby mieszania, dopuszczajace uzycie wiekszej liczby
405 kolorow sa dostepne za pomoca procedury PATERN.
\f
411 PATERN(par,par1,par2,par3)
413 Procedura PATERN pozwala rysowac odcinki i
414 wypelniac obszary dowolna kombinacja kolorow. Przy rysowaniu
415 odcinkow brany jest pod uwage tylko par. Przy wypelnianiu,
416 par oraz par2 dotycza linii poziomych (pionowych) o
417 wspolrzednych y (x) parzystych, par1 oraz par3 - linii o
418 wspolrzednych nieparzystych ( na zmiane kolejno par/par2
419 oraz par1/par3 ). Wartosci par,...,par3 przedstawione jako
420 czterocyfrowe liczby szesnastkowe daja wzorce mieszania
421 numerow kolorow. 0 oznacza tlo, inne cyfry - zob. opis
426 PATERN(#1100,#0011,#1100,#0011);
427 ODPOWIADA: COLOR(1); STYLE(3);
431 PATERN(#1212,#0303,#2121,#3030);
432 NIE MOzE BYC UZYSKANY INACZEJ
437 Procedura BORDER ustawia biezacy kolor tla.
444 3 turkusowy - cyan (niebiesko-zielony)
446 5 karmazynowy - magenta (czerwono-niebieski)
450 Kolory 8 - 15 to jasniejsze odcienie kolorow 0 - 7, przy
451 czym kolor bialy ma numer 15.
453 Przedstawione powyzej kolory dotycza tylko karty IBM, dla
454 karty EGA natomiast parametr kolor moze przyjmowac wartosci
460 Dla karty IBM color/graphics :
462 procedura PALLET wybiera biezaca palete z dwu
468 0 turkusowy,karmazynowy,bialy
469 1 zielony,czerwony,zolty
476 Domyslna paleta jest paleta nr 0.
478 Dla karty EGA natomiast procedura PALLET sluzy do
479 wyboru dowolnych 16 kolorow z 64 ogolnie dostepnych.
480 Parametr nr powinien byc postaci
481 kolor16 * 256 + kolor64,
483 kolor16 oznacza identyfikator koloru ( uzywany
484 przez procedure COLOR ), mogacy przyjmowac wartosci 0 - 15,
485 kolor64 oznacza wybrany kolor.
488 Standardowa paleta ( przyjmowana domyslnie )
489 zawiera nastepujace kolory :
491 identyfikator kolor numer koloru
504 11 jasno-turkusowy 59
506 13 jasno-karmazynowy 61
508 15 intensywny bialy 63
511 Wszystkie dostepne kolory mozna obejrzec oraz
512 poznac ich numery za pomoca programu demonstracyjnego
515 Procedura PALLET nie ma zastosowania dla karty
522 Procedura INTENS wybiera intensywnosc kolorow.
523 Dla i rownego 0 intensywnosc jest wieksza, dla i rownego 1
525 Domyslnie intensywnosc jest ustawiona na poziomie 0.
527 Procedura INTENS ma zastosowanie tylko dla karty IBM.
\f
534 Procedury ustawiania pozycji
539 Procedura MOVE ustawia biezaca pozycje na ekranie
540 na pixel o wspolrzednych (x {kolumna}, y {wiersz}).
543 INXPOS(ple), INYPOS(ple)
545 Funkcje calkowite INXPOS i INYPOS zwracaja
546 odpowiednio wspolrzedne x i y biezacej pozycji. Parametr ple
552 Procedura PUSHXY powoduje przechowanie biezacej
553 pozycji, koloru i stylu na wierzcholku wewnetrznego stosu
554 IIUWGRAFu. Parametry te nie ulegaja przy tym zmianie.
555 Maksymalna glebokosc stosu wynosi 16.
560 Procedura POPXY odtwarza biezacy styl, kolor i
561 pozycje z wierzcholka wewnetrznego stosu IIUWGRAFu.
562 Glebokosc stosu zmniejsza sie o 1.
586 Procedura TRACK wyswietla na ekranie wskaznik w
587 ksztalcie malej (8*8 pixli) strzalki, skierowanej na punkt o
588 wspolrzednych (x,y). Wskaznik ten moze byc przesuwany po
589 ekranie za pomoca klawiszy kierunkowych. Nacisniecie
590 klawisza powoduje przesuniecie wskaznika o 5 pixli.
591 Nacisniecie odpowiedniego klawisza w trybie numerycznym
592 przesuwa wskaznik o 1 pixel. Klawisz "home" powoduje powrot
593 wskaznika do pozycji (x,y). Klawisz "End" usuwa wskaznik z
594 ekranu i powoduje powrot z procedury, pozostawiajac biezaca
595 pozycje w tym miejscu. Moze byc ona teraz odczytana za
596 pomoca funkcji INXPOS i INYPOS.
604 Procedury obslugujace punkty
609 Procedura POINT ustawia biezaca pozycje w punkcie
610 (x,y) i zmienia jego kolor na biezacy.
615 Funkcja INPIX ustawia biezaca pozycje w punkcie
616 (x,y) i zwraca jego kolor.
\f
623 Procedury rysowania linii
628 Procedura DRAW rysuje odcinek od biezacej pozycji
629 do pozycji o wspolrzednych (x,y). Rysowanie polega na
630 zmianie koloru pixli nalezacych, wedlug algorytmu
631 Bresenhama, do odcinka. Pixle te przyjmuja nowy stan
632 zaleznie od biezacego koloru i stylu.
636 CIRB(x,y,r,alfa,beta,kolb,wwyp,p,q)
638 Procedura CIRB rysuje na ekranie wycinek okregu
639 lub elipsy, zaleznie od podanych wartosci p i q,
640 okreslajacych aspekt. Aspekt wyznaczony jest stosunkiem p/q.
641 Dla wartosci aspektu rownej 1 zostanie narysowany idealny
642 okrag. Srodek bedzie umieszczony w punkcie (x,y), promien
643 poziomy bedzie mial wielkosc r pixli, alfa i beta okreslaja,
644 odpowiednio kat poczatkowy i koncowy rysowanego wycinka. Dla
645 alfa = beta zostanie narysowany pelny okrag (lub elipsa).
646 Wartosci alfa i beta sa wyrazane w radianach, w zwyklym
647 ukladzie. Brzeg wycinka i jego promienie zostana narysowane
648 kolorem kolb, niezaleznie od stylu. Jesli wwyp <> 0, wnetrze
649 wycinka zostanie wypelnione biezacym kolorem i stylem.
654 Procedura HFILL rysuje, w biezacym kolorze i stylu,
655 odcinek poziomy od biezacej pozycji do punktu o
660 OSTROZNIE: HFILL nie zmienia biezacej pozycji.
662 Uzycie HFILL jest zalecane przy wypelnianiu
663 obszarow, gdyz dziala znacznie szybciej niz odpowiedni DRAW.
664 Rowniez mieszajac kolory w danym stylu, HFILL, w
665 przeciwienstwie do DRAW nie bierze pod uwage poczatkowego
666 punktu odcinka, co pozwala na uzyskanie substytutu
678 Procedura VFILL rysuje, w biezacym kolorze i stylu,
679 odcinek pionowy od biezacej pozycji do punktu o
684 OSTROZNIE: VFILL nie zmienia biezacej pozycji.
\f
691 Procedury operujace na fragmentach ekranu
696 Procedura GETMAP zapamietuje prostokatny obszar
697 ekranu pomiedzy biezaca pozycja jako lewym gornym rogiem a
698 punktem (x,y) jako prawym dolnym rogiem w tablicy. GETMAP
699 nie zmienia przy tym biezacej pozycji. Tablica powinna miec
700 co najmniej 4 + w*sufit(k/8)*kol bajtow, gdzie w i k sa,
701 odpowiednio, liczba wierszy i kolumn zapamietywanego
702 obszaru, natomiast wartosc wspolczynnika kol zalezy od
703 rodzaju karty graficznej i wynosi 1 dla karty Hercules,
704 2 dla karty IBM oraz 4 dla karty EGA.
706 Przyklad: zapamietanie obszaru 101*101 polozonego w lewym
709 VAR OKNO: ARRAY[1..700] OF INTEGER;
713 GETMAP(100,100,OKNO);
720 Procedura PUTMAP ustawia prostokatny obszar ekranu
721 o lewym gornym rogu znajdujacym sie w biezacej pozycji
722 zgodnie z zawartoscia tablicy, w ktorej uprzednio
723 zapamietano fragment ekranu za pomoca procedury GETMAP.
724 Biezaca pozycja nie ulega zmianie. Odtworzeniu podlega caly
725 zapamietany obszar, ktory jest kopiowany w nowe miejsce.
730 Procedura ORMAP dziala podobnie jak PUTMAP, lecz o
731 nowej zawartosci ekranu decyduje wynik zastosowania funkcji
732 or do elementow tablicy i ekranu.
737 Procedura XORMAP dziala podobnie jak PUTMAP, lecz o
738 nowej zawartosci ekranu decyduje wynik zastosowania funkcji
739 xor do elementow tablicy i ekranu.
\f
746 Procedury wejscia/wyjscia dla pojedynczych znakow
751 Funkcja calkowita INKEY podaje i usuwa nastepny
752 znak z bufora klawiatury. Czytanie odbywa sie bez echa.
753 Jesli bufor jest pusty, wynikiem jest 0. Klawisze specjalne
754 kodowane sa jako liczby ujemne wedlug zalaczonej tablicy.
755 Metoda ALT-NUM moze byc uzyta do wprowadzenia z klawiatury
756 kodow powyzej 127 jako zwyklych znakow. Uniemozliwia to,
757 niestety, korzystanie ze znakow specjalnych o kodach od 128
760 Przyklad: zaczekaj na klawisz End.
762 PROCEDURE WAIT_FOR_END;
764 WHILE INKEY(0)<>-79 DO;
767 Wartosci kodow klawiszy specjalnych podane sa w Dodatku F.
772 Procedura HASCII rysuje na ekranie znak
773 alfanumeryczny. Znak wpisany jest w raster 8*8. Gorny lewy
774 rog rastra umieszczony bedzie w biezacej pozycji, ktora
775 jednoczesnie przesunie sie o 8 pixli w prawo. Uzyta funkcja
776 rysujaca jest xor. Kroj znakow pobierany jest z tablicy
777 znajdujacej sie w ROM BIOS standardowo pod adresem
778 F000:FA6E. W przypadku niestandardowego ROM BIOSu obraz
779 znaku alfanumerycznego bedzie zly. Uzycie procedur HFONT i
780 HFONT8 pozwala uniezaleznic sie od wersji BIOSu a takze
781 korzystac z innych, rowniez wlasnorecznie zaprojektowanych
782 krojow znakow. Kod znaku 0 powoduje tylko wyczyszczenie
783 miejsca przeznaczonego na znak, bez zmiany biezacej pozycji.
784 Wszystkie kody maja tylko interpretacje graficzna, bez
785 funkcji sterujacych (NL, CR etc.).
787 Przyklad: napisanie slowa "oh" na gwarantowanie czystym tle.
790 HASCII(0); HASCII('o'); HASCII(0); HASCII('h');
793 Parametr procedury HASCII moze byc typu integer lub
794 znakowego ( character w Fortranie, char w Pascalu i C ).
802 HFONT(segment,offset)
804 Wywolanie procedury HFONT przelacza adres wzorca
805 znakow alfanumerycznych na segment:offset. Bez uzycia HFONT
806 uzywa sie adresu F000:FA6E.
809 HFONT8(segment,offset)
811 Uzycie procedury HFONT8 dolacza do programu
812 uzytkowego kopie tablicy kroju znakow z ROM BIOS i zwraca
813 adres tej kopii jako segment:offset (parametry wyjsciowe).
822 Procedury wejscia/wyjscia dla linii
825 OUTHLINE(dlugosc,bufor)
827 Procedura OUTHLINE wywoluje HASCII dlugosc razy,
828 wypisujac na ekran znaki, ktorych kody zawarte sa w buforze.
829 Przed narysowaniem kazdego znaku wywolywane jest HASCII(0).
832 INHLINE(dlugosc,bufor)
834 Procedura INHLINE wczytuje z klawiatury linie
835 zlozona z co najwyzej dlugosci znakow i umieszcza je w
836 buforze. Do wczytywania uzyta jest procedura INKEY.
837 Wyswietlane jest echo. Migajacy wskaznik oznacza oczekiwanie
838 na nacisniecie klawisza. Klawisz BACKSPACE dziala tak, jak
839 mozna tego oczekiwac. Linia moze byc zakonczona klawiszem CR
840 albo wyczerpaniem jej dlugosci. Znak CR konczacy linie nie
841 jest umieszczany w buforze. Przed rozpoczeciem czytania
842 bufor jest wypelniany spacjami. Po zakonczeniu czytania
843 parametr dlugosc zwraca liczbe wczytanych znakow.
844 Migajacy wskaznik jest zawsze rysowany kolorem numer 1,
845 wyswietlane znaki natomiast biezacym kolorem.
848 Przyklad: echo wczytanej linii.
850 VAR LINIA: ARRAY[1:40] OF INTEGER;
855 IF N=0 THEN MOVE(INXPOS(0),INYPOS(0)+10)
856 ELSE OUTHLINE(N,LINIA);
866 Procedury wejscia/wyjscia dla okienek
869 MKWNDW(x,y,kolumn,wierszy,okienko,rozmiar,ramka)
871 Procedura MKWNDW urzadza na ekranie prostokatne
872 okienko do konwersacji. Lewy gorny rog okienka znajdzie sie
873 w punkcie (x,y). Zmiesci ono zadana liczbe kolumn i wierszy
874 tekstu alfanumerycznego. Opis okienka bedzie przechowany w
875 dostarczonej przez uzytkownika tablicy okienko. Parametr
876 rozmiar jest na razie ignorowany, a tablica powinna miec co
877 najmniej 20 bajtow, lub duzo wiecej, jesli okienko ma byc
878 zaslaniane i odslaniane ( patrz opis procedury BURY ). Jesli
879 parametr ramka ma wartosc rozna od 0, obszar okienka bedzie
880 obwiedziony ramka, co uczyni je nieco wiekszym.
885 Wywolanie BURY usuwa okienko z ekranu, przechowujac
886 jego obraz w dalszej czesci tablicy okienko tak, aby moc
887 odtworzyc je pozniej za pomoca EXPOSE. Tablica okienko musi
888 miec odpowiednia wielkosc, aby GETMAP obszaru okienka
889 pozostawilo w niej jeszcze co najmniej 20 bajtow.
894 Wywolanie EXPOSE odtwarza okienko przechowane za
895 pomoca BURY umieszczajac jego gorny lewy rog w punkcie
899 OUTWLINE(okienko,dlugosc,bufor)
901 Procedura OUTWLINE dziala podobnie jak OUTHLINE,
902 wyswietlajac linie w ramach podanego okienka. Bufor o
903 dlugosci wiekszej niz rozmiar okienka wyswietli sie w kilku
907 INWLINE(okienko,dlugosc,bufor)
909 Procedura INWLINE, podobnie jak INHLINE, wczytuje z
910 klawiatury linie tekstu. W przypadku INWLINE okienko
911 wskazuje na obszar ekranu, w ktorym ma pojawiac sie echo.
912 Jesli dlugosc bufora jest wieksza niz rozmiar okienka echo
913 moze zajac w nim kilka linii. Poprawianie wprowadzanego
914 tekstu przy uzyciu BACKSPACE jest mozliwe tylko w ostatniej
915 czesci linii. Dlugosc jako parametr wyjsciowy zwraca liczbe
916 wczytanych znakow, bez konczacego CR.
\f
926 Procedury te operuja wspolrzednymi wyrazonymi
927 liczbami rzeczywistymi odnoszacymi sie do abstrakcyjnego
928 okna o dowolnych rozmiarach.
935 SWINDOW(rxy,ixy,skalowanie)
937 Procedura SWINDOW urzadza na ekranie prostokatne
938 okno umieszczone pomiedzy punktami naroznikowymi podanymi w
939 tablicy ixy jako calkowite wspolrzedne prawdziwych pixli.
940 Program uzytkowy tworzacy rysunek w tym obszarze bedzie
941 okreslal polozenie punktow w sposob abstrakcyjny we
942 wspolrzednych rzeczywistych. Tablica rxy podaje zakresy tych
943 wspolrzednych. Jesli parametr skalowanie ma wartosc 0,
944 abstrakcyjny prostokat bedzie po prostu odwzorowany na
945 wskazana czesc ekranu bez zachowania proporcji miedzy
946 skalowaniem w pionie i w poziomie. Jesli natomiast parametr
947 skalowanie bedzie rozny od zera, wykorzystana zostanie
948 jedynie srodkowa czesc obszaru ekranu tak, aby zachowac
949 rzeczywiste proporcje rysunku, niezaleznie od aspektu danego
951 Odwzorowanie stosowane przez IIUWGRAF odwraca tez kierunek
952 wzrastania wspolrzednej y do naturalnego ukladu:
962 | (ixy(1),ixy(4)) (ixy(2),ixy(4))
964 (rxy(1),rxy(3))--------------------->(rxy(2),rxy(3))
967 Przyklad: przygotowanie rysunku sinusoidy w gornej polowie
971 VAR RW:ARRAY [1:4] OF REAL INIT (0.,6.29,-1.,1.);
972 IW:ARRAY [1:4] OF INTEGER INIT (0,719,0,173);
981 RWINDOW(rxy,skalowanie)
983 Procedura RWINDOW jest skrotem wywolania SWINDOW
984 dla odwzorowania obejmujacego caly ekran.
988 RINXPOS(ple),RINYPOS(ple)
990 Funkcje rzeczywiste RINXPOS i RINYPOS zwracaja,
991 odpowiednio wspolrzedne x i y biezacej pozycji w
992 abstrakcyjnym oknie urzadzonym przez ostatnie wywolanie
993 RWINDOW lub SWINDOW. Biezaca pozycja jest zawsze zaokraglana
994 do najblizszego pixla.
1000 Wywolanie procedury RMOVE ustawia biezaca pozycje w
1001 punkcie (rx,ry) w ostatnio urzadzonym oknie. Pozycja ta jest
1002 zaokraglona do najblizszego pixla.
1008 Wywolanie procedury RDRAW powoduje narysowanie w
1009 biezacym kolorze i stylu odcinka od biezacej pozycji do
1010 pixla najblizszego punktowi (rx,ry) w ostatnio urzadzonym
1015 RCIRB(rx,ry,rr,alfa,beta,kolb,wwyp,p,q)
1017 Procedura RCIRB odpowiada procedurze CIRB z poziomu
1018 1, z tym, ze wspolrzedne srodka (rx,ry) i promien rr
1019 wyrazane sa, jako liczby rzeczywiste, w oknie urzadzonym
1020 przez ostatnie wywolanie RWINDOW lub SWINDOW. Pozostale
1021 parametry maja znaczenie takie, jak w CIRB.
\f
1028 Informacje dodatkowe
1031 Pakiet IIUWGRAF zawiera dodatkowo dwa programy
1032 HGCPRINT.EXE oraz MGCPRINT.EXE. Umozliwiaja one drukowanie
1033 tworzonych obrazow graficznych na powszechnie dostepnych
1034 drukarkach ( np. typu STAR GEMINI, EPSON ). W przypadku
1035 uzywania karty Hercules nalezy stosowac program HGCPRINT, a
1036 dla karty IBM color/graphics program MGCPRINT.
1038 Programow tych powinno uzywac sie w nastepujacy
1040 przed zaladowaniem wlasnego programu nalezy wykonac
1041 program HGCPRINT lub MGCPRINT, w zaleznosci od rodzaju
1042 uzywanej karty graficznej. Kazdy z tych programow ustawia
1043 znaczenie klawisza PrtSc. Kazdorazowe pozniejsze nacisniecie
1044 klawisza PrtSc powoduje wydrukowanie graficznej zawartosci
1047 Uwaga. W przypadku karty Hercules drukowana jest
1048 zawartosc pierwszej strony graficznej, niezaleznie od tego,
1049 ktora strona jest aktualnie wyswietlana.
1050 W przypadku karty IBM color/graphics klawisz PrtSc
1051 zaklada, ze jest ustawiony tryb kolor 320*200. Wydruk obrazu
1052 graficznego utworzonego w trybie mono 640*200 jest mozliwe
1053 poprzez uzycie procedury PRTSCR.
1055 Mozliwosc drukowania obrazu graficznego nie
1056 istnieje dla karty EGA.
1058 Autorem programow HGCPRINT oraz MGCPRINT jest
1059 Krzysztof Studzinski.
1069 Procedura PRTSCR umozliwia drukowanie obrazow
1070 graficznych tworzonych na ekranie monitora pod kontrola
1071 programu. Parametr nr okresla numer strony graficznej
1072 (0 lub 1), ktorej zawartosc ma byc wydrukowana.
1074 Wywolanie procedury PRTSCR z parametrem nr rownym
1075 zeru jest rownowazne nacisnieciu klawisza PrtSc.
1077 W celu poprawnego dzialania tej procedury nalezy,
1078 analogicznie jak w przypadku klawisza PrtSc, uprzednio
1079 wykonac dolaczony program :
1080 - HGCPRINT.EXE w przypadku uzywania karty
1082 - MGCPRINT.EXE dla karty IBM.
1084 Procedura PRTSCR nie dziala dla karty EGA.
1096 Uzycie IIUWGRAFu z FORTRANem 77.
1099 1) Procedury IN?LINE i OUT?LINE dokonuja jedynie
1100 transmisji tekstu, bez zadnej konwersji pomiedzy postacia
1101 binarna i tekstowa. Aby takiej konwersji dokonac, mozna
1102 posluzyc sie instrukcjami formatowanego wejscia/wyjscia
1103 w polaczeniu z tzw. plikami wewnetrznymi (internal file).
1108 INTEGER*2 I,J,SUM,W(10)
1111 EQUIVALENCE (LINE,LINEL(1))
1114 CALL MKWNDW(10,10,21,4,W,20,1)
1115 CALL OUTWLINE(W,20,'PODAJ 2 LICZBY (2I3)')
1116 CALL INWLINE(W,20,LINEL)
1117 READ (LINE,'(2I3)') I,J
1119 WRITE (LINE,'(8H SUMA = I4)') SUM
1120 CALL OUTWLINE(W,12,LINEL)
\f
1131 Uzycie IIUWGRAFu z PASCALem.
1134 1) Microsoft Pascal dopuszcza jedynie 6 znakow w nazwie
1135 podprogramu, zatem nazwy: INHLIN(E), INWLIN(E), OUTHLI(NE),
1136 OUTWLI(NE), RWINDO(W), SWINDO(W), RINXPO(S), RINYPO(S) musza
1137 byc uzywane w skroconej postaci.
1139 2) Niektore procedury IIUWGRAFu sa napisane w FORTRANie.
1140 Przy linkowaniu LINK moze domagac sie dostarczenia
1141 biblioteki FORTRAN.LIB. Zadanie to nalezy zignorowac.
1143 3) Do linkowania nalezy uzywac LINK w wersji co najmniej
1144 3.04, do kompilacji Pascal w wersji co najmniej 3.31.
\f
1154 Uzycie IIUWGRAFu z Lattice C.
1157 1) Nalezy unikac konfliktow z nazwami globalnych zmiennych
1158 roboczych IIUWGRAFu. Zmienne te maja nazwy rozpoczynajace
1159 sie od liter WIR... i PQASP...
1161 2) W przypadku procedur majacych parametry wyjsciowe ( w
1162 dodatku E sa one zaznaczone jako vars ) nalezy przy ich
1163 wywolaniu przekazywac adres odpowiedniego parametru
1172 INHLINE(&LENGTH,TEXT)
1176 3) Adresy parametrow aktualnych nalezy przekazywac rowniez
1177 w przypadku parametrow bedacych tablicami znakowymi.
1184 CHAR *TEXT; /* LUB NP. CHAR TEXT[40]; */
1186 OUTHLINE(LENGTH, &TEXT[3]);
1187 /* WYPISZ ZNAKI Z TABLICY 'TEXT', ROZPOCZYNAJAC OD
1199 Uzycie IIUWGRAFu z LOGLANem.
1202 1) W biezacej wersji LOGLANu dostepnych jest jedynie 7
1203 podstawowych procedur: GRON, GROFF, MOVE, DRAW, HASCII,
1204 HPAGE, INKEY obslugujacych wylacznie karte Hercules.
1206 2) System okienek do konwersacji nie bedzie w LOGLANie
1207 dostepny w postaci procedur standardowych. Podobnie okienka
1208 o wspolrzednych rzeczywistych.
1210 3) Niektore podprogramy dostepne jako funkcje standardowe
1211 LOGLANu musza miec zmienione specyfikacje parametrow w
1212 stosunku do oryginalnego IIUWGRAFu:
1216 GETMAP GETMAP:function:array of ?
1217 INKEY INKEY:integer function; (* bez parametrow *)
1218 INXPOS INXPOS:integer function;(* bez parametrow *)
1219 INYPOS INYPOS:integer function;(* bez parametrow *)
1230 Wykaz specyfikacji procedur IIUWGRAFu.
1233 proc BORDER(consts b: integer);
1234 L proc BURY(window: buffer);
1235 proc CIRB(consts ix,iy,ir: integer;
1236 consts alfa, beta: real;
1237 consts cbord, bcint, p, q: integer);
1239 proc COLOR(consts c: integer);
1240 proc DRAW(consts ix,iy: integer);
1241 L proc EXPOSE(window: buffer; consts x,y: integer);
1242 L proc GETMAP(consts x,y: integer; ekran: buffer);
1244 proc GRON(consts imode: integer);
1245 proc HASCII(consts ic: integer);
1246 proc HFILL(consts maxx: integer);
1247 proc HFONT(consts seg, offs: integer);
1248 proc HFONT8(vars seg, offs: integer);
1249 proc HPAGE(consts page, mode, clear: integer);
1250 P proc INHLINE(vars n:integer; line: tekst);
1251 L func INKEY(consts idummy: integer): integer;
1252 func INPIX(consts x,y: integer): integer;
1253 proc INTENS(consts i: integer);
1254 PL proc INWLINE(window: buffer; vars n: integer;
1256 L func INXPOS(consts idummy: integer): integer;
1257 L func INYPOS(consts idummy: integer): integer;
1258 L proc MKWNDW(consts x,y,icols,ilines: integer;
1260 consts iwndwsize,iborder: integer);
1261 proc MOVE(consts ix,iy: integer);
1262 L func NOCARD(consts idummy: integer): integer;
1263 proc ORMAP(ekran: buffer);
1264 PL proc OUTHLINE(consts n:integer; line: tekst);
1265 PL proc OUTWLINE(window: buffer; consts n: integer;
1267 proc PALLET(consts p: integer);
1268 proc PATERN(consts p1, p2, p3, p4: integer);
1269 proc POINT(consts ix,iy: integer);
1271 proc PRTSCR(consts nr: integer);
1273 proc PUTMAP(ekran: buffer);
1274 L proc RCIRB(consts ix,iy,ir: real;
1275 consts alfa, beta: real;
1276 consts cbord, bcint, p, q: integer);
1277 L proc RDRAW(consts rx,ry: real);
1278 PL func RINXPOS(consts dummy: real): real;
1279 PL func RINYPOS(consts dummy: real): real;
1280 L proc RMOVE(consts rx,ry: real);
1281 PL proc RWINDOW(rw: array [1:4] of real;
1283 proc STYLE(consts s: integer);
\f
1289 PL proc SWINDOW(rw: array [1:4] of real;
1290 iw: array [1:4] of integer;
1292 proc TRACK(consts x,y: integer);
1293 proc VFILL(consts maxy: integer);
1294 proc VIDEO(ekran: buffer);
1295 proc XORMAP(ekran: buffer);
1297 Uzyto notacji semi-pascalowej.
1298 Specyfikacja consts oznacza parametr przekazywany przez
1299 wartosc (tylko wejsciowy), vars - przez zmienna (wejsciowo-
1301 Typ buffer oznacza tablice bajtowa sluzaca do przechowania
1302 zawartosci okreslonego obszaru ekranu ( rozmiar jej zalezy
1303 od wielkosci tego obszaru ), typ tekst natomiast oznacza
1305 Litery w pierwszej kolumnie sugeruja dodatkowe wazne
1306 informacje (roznice) w kontekscie konkretnych jezykow
1307 (Fortran, Pascal, C, Loglan).
\f
1316 Wartosci kodow klawiszy specjalnych:
1320 15 - back tab (shift-tab)
1321 16-25 - ALT-Q az do ALT-P
1322 30-38 - ALT-A az do ALT-L
1323 44-50 - ALT-Z az do ALT-M
1324 59-68 - F1 az do F10
1335 84-93 - Shift-F1 az do Shift-F10
1336 94-103 - Ctrl-F1 az do Ctrl-F10
1337 104-113 - Alt-F1 az do Alt-F10
1339 115 - Ctrl-Cursor-Left
1340 116 - Ctrl-Cursor-Right
1344 120-131 - Alt-1 az do Alt-=
1357 Prosty program do edycji kroju znakow.
1358 Dodatek do biblioteki graficznej IIUWGRAF.
1360 FEDIT pozwala komponowac i modyfikowac uklady pixli o
1361 wymiarze 8*8. Takie uklady moga byc wyswietlane razem z
1362 grafika za pomoca procedury HASCII.
1364 FEDIT produkuje opisy tablic kroju znakow w dwoch
1367 - jako podprogram dostarczajacy adres tablicy kroju
1368 w postaci odpowiedniej do przekazania procedurze HFONT,
1370 - jako niezalezny program umieszczajacy wskaznik do
1371 tablicy kroju w wektorze przerwania 14H.
1373 Pierwszy format moze byc uzyty do zastapienia standardowego
1374 zestawu znakow zwykle znajdujacego sie w ROM BIOS pod
1375 adresem F000:FA6E. Jest on uzywany przez procedure HASCII do
1376 rysowania znakow o kodach od 0 do 127. Stad jego nazwa :
1379 Podprogram wygenerowany przez FEDIT ma nazwe HFONT8. Po
1380 przetlumaczeniu przez MACROASSEMBLER musi byc on linkowany
1381 razem z programem uzytkowym. Jesli zajdzie potrzeba zmiany
1382 nazwy (np. w celu dynamicznego przelaczania pomiedzy kilkoma
1383 krojami znakow), nazwa moze byc zmieniona recznie w tekscie
1386 Drugi format jest uzywany do rysowania znakow z
1387 rozszerzonego zakresu znakow o kodach od 128 do 255. Stad
1391 Opis zestawu znakow w tym formacie musi byc zaladowany do
1392 pamieci przed rozpoczeciem wykonania programu, ktory z niego
1393 korzysta. Wskaznik do tablicy kroju musi byc wpisany w
1394 wektor przerwania 14H. Robi to program wygenerowany przez
1395 FEDIT, ktory nastepnie zawiesza sie za pomoca przerwania 27H
1396 (terminate but stay resident). W tym przypadku tekst
1397 zrodlowy po przetlumaczeniu przez MACROASSEMBLER musi byc
1398 zlinkowany (bez zadnych bibliotek) do postaci .EXE.
1399 IIUWGRAF i FEDIT nie daja mozliwosci dynamicznego
1400 przelaczania tablic znakow rozszerzonego zakresu.
1409 VAR ISEG, IOFFS: INTEGER;
1411 HFONT8(ISEG,IOFFS); (* ADRES TABLICY FORMATU 0 *)
1413 HASCII(45); (* UZYWA ROM BIOS *)
1414 HASCII(145); (* UZYWA ROZSZERZONEGO ZESTAWU *)
1417 HASCII(45); (* UZYWA TABLICY FORMATU 0 *)
1418 HASCII(145); (* TEN SAM ROZSZERZONY ZESTAW *)
1420 HFONT(16#F000,16#FA6E);
1421 HASCII(45); (* ZNOWU ROM BIOS *)
1422 HASCII(145); (* TEN SAM ROZSZERZONY ZESTAW *)
1425 FEDIT jest prostym programem konwersacyjnym o kilku
1426 zaledwie rozkazach. Tablica kroju znakow zawiera wzorce
1427 ukladow pixli rozmiaru 8*8. Wzorzec pojedynczego znaku moze
1428 byc wyjety z tej tablicy w celu jego edycji i zapamietany z
1429 powrotem, byc moze w innym miejscu tablicy. Sa dwie tablice
1430 znakow: jedna dla kodow od 0 do 127, druga dla kodow od 128
1431 do 255. Pierwsza z nich nie moze byc modyfikowana. Druga z
1432 nich moze poczatkowo zawierac zaladowany wczesniej
1433 rozszerzony zestaw lub zostac wyczyszczona. Mozna tez
1434 wczytac do niej zestaw zawarty w pliku wygenerowanym
1435 wczesniej przez FEDIT. Po dokonaniu modyfikacji, zawartosc
1436 tej drugiej tablicy moze byc uzyta do generacji badz
1437 "formatu 0" badz "128".
1443 Rozkazy FEDITu sa wprowadzane jako pojedyncze litery
1444 wybierajace czynnosci wymienione w jadlospisie wyswietlonym
1445 u gory ekranu. Dodatkowe parametry podaje sie po
1446 przynagleniu przez FEDIT.
1450 < low odswieza tablice "0 do 127"
1452 > high odswieza tablice "128 do 255"
1454 i init inicjalizuje zerami tablice "128 do 255"
1456 l load laduje tablice "128 do 255" z pliku
1458 - nazwa pliku (musi istniec)
\f
1465 d dump wypisuje zawartosc tablicy "128 do 255"
1466 na plik; dodatkowe parametry:
1467 - nazwa pliku (bedzie zapisany)
1468 - baza ( 0 albo 128),
1471 f - MS Fortran, MS Pascal
1472 s - Lattice C, model S
1473 p - Lattice C, model P
1474 d - Lattice C, model D
1475 l - Lattice C, model L
1477 e edit wyjmuje z tablicy pojedynczy znak
1478 i umieszcza go w obszarze roboczym.
1480 - kod znaku (dziesietnie)
1481 Po obszarze roboczym mozna poruszac sie
1482 za pomoca klawiszy kierunkowych. Pixel
1483 zapala klawisz Ins, gasi klawisz Del.
1484 Klawisz End powoduje wyjscie z tego trybu.
1486 t text wyswietla tekst pomocny przy ocenie
1487 jakosci ksztaltu znakow. Tekst, nie dluzszy
1488 niz 40 znakow jest wprowadzany przez uzytkow-
1489 nika. Dodatkowe parametry:
1491 - hspace - odpowiednio, pionowy i poziomy
1492 odstep w pixlach pomiedzy znakami. Normalnie,
1493 vspace wynosi 2, hspace - 0.
1495 p put przechowuje wzorzec z obszaru roboczego pod
1496 wskazanym kodem. Dodatkowy parametr:
1497 - kod pozycji (dziesietnie),
1498 powinien byc miedzy 128 a 255
1500 q quit konczy dzialanie FEDIT
1503 Z FEDITem nalezy obchodzic sie ostroznie. Posiada on jedynie
1504 minimalne wbudowane zabezpieczenia i np. bez ostrzezenia
1505 zapisze nowa, nie wykonczona jeszcze wersje kroju znakow na
1506 pliku zawierajacym jedyny egzemplarz poprzedniej, bardzo
1507 potrzebnej wersji.
\f
1516 Zmiany IIUWGRAFu w stosunku do poprzednich wersji
1520 Zmiany IIUWGRAFu w stosunku do wersji 1.1
1523 1) Rozszerzenie zestawu obslugiwanych kart graficznych o
1524 karte EGA ( IBM Enhanced Graphics Adapter ).
1526 2) Niewielkie modyfikacje procedur IIUWGRAFu :
1528 - dodanie procedury PRTSCR,
1529 - modyfikacja procedury PATERN polegajaca na :
1530 zwiekszeniu liczby parametrow ( wzorcow ) z
1531 dwoch do czterech oraz
1532 zmianie postaci tych parametrow ( zamiast
1533 liczb dziesietnych liczby szesnastkowe ),
1534 ( rozszerzenie wzorcow oczywiscie oznacza rownoczesnie
1535 modyfikacje procedur HFILL oraz VFILL ),
1536 - zmiany nazw procedur GRAPH, TEXT, SCREEN
1537 odpowiednio na GRON, GROFF, NOCARD.
1542 Zmiany IIUWGRAFu w stosunku do wersji 2.1
1545 1) Udostepnienie procedur CIRB oraz RCIRB dla C.