










                                      IIUWGRAF

                   biblioteczka podstawowych procedur graficznych

                moze wspolpracowac z kompilatorami firmy Microsoft:

                           Fortran 77 wersja 3.31 i 4.00
                                 Pascal wersja 3.31

                                        oraz
                                          
                              C (Lattice) wersja 3.10
                               Aztec C  wersja 3.20d

                                          

                                   dla IBM PC/XT

              obsluguje karty IBM color/graphics, Hercules II oraz EGA






                             wersja 2.2, grudzien 1987







            Autorzy:

                 Piotr Carlson
                 Miroslawa Milkowska -    procedury poziomu 1

                 Janina Jankowska
                 Michal Jankowski    -    procedury poziomu 2


            Osrodek Obliczeniowy Instytutu Informatyki
            Uniwersytet Warszawski


                                                                        2


            
            Spis tresci
            
            
            Informacje ogolne                                       3
            Procedury poziomu 1                                     4
            Procedury ustawiania trybu                              5
            Procedury sterujace kolorami                            8
            Procedury ustawiania pozycji                           11
            Procedury obslugujace punkty                           12
            Procedury rysowania linii                              13
            Procedury operujace na fragmentach ekranu              15
            Procedury wejscia/wyjscia dla pojedynczych znakow      16
            Procedury wejscia/wyjscia dla linii                    18
            Procedury wejscia/wyjscia dla okienek                  19
            Procedury poziomu 2                                    20
            Informacje dodatkowe                                   22
            Procedury dodatkowe                                    22
            
            
            
            Dodatki
            
            A. Uzycie IIUWGRAFu z FORTRANem 77                     23
            B. Uzycie IIUWGRAFu z Pascalem                         24
            C. Uzycie IIUWGRAFu z Lattice C                        25
            D. Uzycie IIUWGRAFu z LOGLANem                         26
            E. Wykaz specyfikacji procedur IIUWGRAFu               27
            F. Wartosci kodow klawiszy specjalnych                 29
            G. FEDIT - prosty program do edycji kroju znakow       30
            H. Zmiany IIUWGRAFu w stosunku do poprzednich wersji   33
            


                                                                        3


            
            Informacje ogolne
            
                     

                     Rysunek jest tworzony na ekranie monitora za pomoca
            szeregu wywolan procedur bibliotecznych IIUWGRAF. Modyfikuja
            one zawartosc bufora mapy bitowej, ktora jest zwykle
            bezposrednio wyswietlana na ekranie. Zmiany te sa wtedy
            widoczne natychmiast. Umiejscowienie bufora roboczego moze
            byc jednak zmienione, tak aby byl on zwiazany z obszarem
            pamieci dostarczonym przez uzytkownika. W tym przypadku
            zmiany jego zawartosci oczywiscie nie sa wyswietlane, a
            nawet przestawienie monitora w tryb graficzny nie jest
            konieczne. Rysunek moze byc wtedy skonstruowany w pamieci,
            bez wyswietlania, przechowany na dysku w postaci binarnej i
            odtworzony pozniej na ekranie. Omowiony tryb pracy jest
            mozliwy jednak tylko dla karty Hercules II oraz karty IBM.
                 W opisie procedur slowo ekran, tam gdzie mowa o jego
            zawartosci, nalezy rozumiec wlasnie jako bufor roboczy.

                     Karty Hercules II oraz EGA daja dodatkowa mozliwosc
            blyskawicznego przelaczania pomiedzy dwiema
            rownouprawnionymi stronami graficznymi.

                     W wersji podstawowej karta graficzna EGA posiada
            64K bajty pamieci. Pamiec ta moze byc zwiekszona do 128K
            oraz 256K bajtow. Opisane ponizej procedury graficzne
            dotycza w zasadzie karty EGA z pelna pamiecia 256K bajtow.
            Tylko w tej wersji karty mozna bowiem uzywac 16 kolorow
            ( z 64 istniejacych ) oraz dwoch stron graficznych. W obu
            wersjach z mniejsza pamiecia istnieje tylko jedna strona
            graficzna, a ponadto w wersji podstawowej uzytkownik ma
            mozliwosc korzystania tylko z 4 kolorow (z 16 istniejacych).

                     Dostarczone sa cztery zestawy oddzielnych bibliotek
            IIUWGRAF, kazda dla innego rodzaju ekranu:
            
                 HGCMSF   i  HGCMSF4      dla karty Hercules
                 MGCMSF   i  MGCMSF4      dla karty IBM color/graphics
                 MGC64MSF i  MGC64MF4     dla karty IBM w trybie mono
                 EGAMSF   i  EGAMSF4      dla karty EGA

                     Biblioteki HGCMSF, MGCMSF, MGC64MSF i EGAMSF zgodne
            sa z konwencjami Fortranu ( wersja 3.31 ) i Pascala firmy
            Microsoft. Natomiast biblioteki HGCMSF4, MGCMSF4, MGC64MF4 i
            EGAMSF4 sa zgodne z konwencjami Fortranu ( wersja 4.00 )
            firmy Microsoft. Dodatkowo, kazda biblioteka moze byc
            dostarczona w konwencji Lattice C, oddzielnie dla czterech
            modeli kodu  S, P, D i L.

                     Programy uzytkowe komunikuja sie z IIUWGRAFem na
            dwoch poziomach:
            
                      poziom 1  - zarzadzanie ekranem na poziomie pixli,
            przy uzyciu prawdziwych wspolrzednych na ekranie,
            
                      poziom 2  - rysowanie punktow i linii we
            wspolrzednych  abstrakcyjnych.
            


                                                                        4


            
            Procedury poziomu 1
            
                     Wszystkie parametry bez podanej explicite
            specyfikacji maja typ integer. Wszystkie parametry calkowite
            powinny miec wartosci 16-bitowe (integer*2 w Fortranie,
            integer w Pascalu, int w C)

            
            Zakresy wspolrzednych ekranu:
            
                 0 <= ix <= 719
                 0 <= iy <= 347      dla karty Hercules
            
                 0 <= ix <= 319
                 0 <= iy <= 199      dla karty IBM color/graphics
            
                 0 <= ix <= 639
                 0 <= iy <= 199      dla karty IBM color/graphics
                                     w trybie mono
                 0 <= ix <= 639
                 0 <= iy <= 349      dla karty EGA
            
            
            
                      (0,0)-----------> (ix,0)
                        |
                        |
                        |
                        V
                      (0,iy)
            


                                                                        5


            
            Procedury ustawiania trybu
            
            GRON(i)
            
                     Procedura GRON ustawia monitor w graficznym trybie
            pracy, czyszczac zawartosc jego ekranu, ktory jednoczesnie
            staje sie buforem roboczym. Parametr i ma znaczenie jedynie
            dla karty IBM w trybie 320*200: wartosc 1 wybiera normalne
            kolory, wartosc 0 - kolory zmodyfikowane do pracy na
            monitorach monochromatycznych. Dla kart Hercules, EGA oraz
            karty IBM w trybie 640*200 wartosc parametru i jest
            ignorowana. Przy przelaczaniu karty Hercules z trybu
            tekstowego na graficzny i odwrotnie stosowane jest
            programowo opoznienie ok. 3 sekund. Tryb karty IBM ustawiany
            jest wprost, bez pomocy przerwania 10H, tak aby mozliwa byla
            jednoczesna praca na monitorze kolorowym w trybie graficznym
            z praca na monitorze monochromatycznym w trybie tekstowym.
            Konsekwencja tego rozwiazania jest to, ze nie mozna
            korzystac z komendy GRAPHICS. Natomiast tryb karty EGA jest
            ustawiany wprost, za pomoca przerwania 10H.

            
            
            NOCARD(ple)
            
                     Funkcja NOCARD zwraca liczbe calkowita
            identyfikujaca rodzaj monitora obslugiwanego przez biezaco
            uzywana biblioteke:

                 1    dla karty Hercules
                 2    dla karty IBM w trybie kolor
                 3    dla karty IBM w trybie mono 640*200
                 4    dla karty IBM w trybie mono 320*200
                 5    dla karty EGA

                     Funkcja NOCARD moze byc wywolana dopiero po
            zainicjowaniu trybu graficznego za pomoca procedury GRON.
            Parametr ple jest ignorowany.

            
            
            GROFF
            
                     Procedura GROFF przelacza monitor w tryb tekstowy,
            wypelniajac zawartosc jego ekranu spacjami. Przed
            zakonczeniem dzialania programu monitor, z ktorego byl
            wywolany, nalezy zawsze ustawic z powrotem w tryb tekstowy.

            
            CLS
            
                     Procedura CLS czysci ekran, wypelniajac go kolorem
            0. Czyszczenie odbywa sie bez wylaczania ekranu.


                                                                        6


            
            HPAGE(nr, tryb, zeruj)
            
                     Procedura HPAGE ma zastosowanie jedynie dla kart
            Hercules oraz EGA. Pozwala na dostep do drugiej strony
            graficznej monitora. Wywolanie HPAGE wybiera strone o
            numerze nr (0 lub 1), zeruje jej zawartosc, o ile parametr
            zeruj ma wartosc <> 0, oraz ustawia jej tryb:

                 tryb = 0 wyswietla zawartosc strony alfanumerycznie
                 tryb = 1 wyswietla zawartosc strony graficznie
                 tryb =-1 przypisuje do tej strony bufor roboczy
            

                     Przypisanie bufora roboczego trybem -1 nie zmienia
            numeru ani sposobu wyswietlania biezacej strony. Tryb 0
            wiaze bufor roboczy z wybrana wlasnie strona. Przelaczanie
            stron odbywa sie bez opoznien, o ile nie ulega zmianie tryb
            wyswietlania (alfanumeryka/grafika). Poza tym, wywolanie
            HPAGE(0,1,1) jest ( tylko dla karty Hercules ) rownowazne
            GRON(), a HPAGE(0,0,1) - wywolaniu GROFF.

            Typowa petla animacyjna moze byc zatem rozwiazana na
            przyklad tak:

            VAR  NR: INTEGER;
            BEGIN
                 GRON(0);
                 NR := 1;
                 (* NARYSUJ PIERWOTNY OBRAZ *)
                 DRAW(...
                 ...
                 WHILE JESZCZE DO
                      HPAGE(1-NR,1,0); (* WYSWIETLANIE *)
                      HPAGE(NR,-1,1);  (* BUFOROWANIE *)
                 (* NARYSUJ ZMODYFIKOWANY OBRAZ *)
                      DRAW(...
                      ...
                      NR := 1-NR
                 OD

            
            VIDEO(tablica)
            
                     Procedura VIDEO przelacza bufor roboczy tak, aby
            miescil sie on w tablicy podanej jako parametr jej
            wywolania.
            Samo wywolanie VIDEO nie zmienia zawartosci bufora. Obraz
            wyswietlany na monitorze nie bedzie ulegal teraz zmianom
            mimo wywolywania procedur modyfikujacych zawartosc ekranu.
            Wszelkie odwolania do ekranu beda teraz dokonywane w
            tablicy. Gotowy obraz moze byc przeniesiony na rzeczywisty
            ekran za pomoca procedur GETMAP/PUTMAP lub zapisany binarnie
            na dysku w celu pozniejszego odtworzenia. Tablica powinna
            miec 16K bajtow przy wspolpracy z karta IBM i 32K bajtow
            przy wspolpracy z karta Hercules.
            Procedury VIDEO nie mozna stosowac dla karty EGA.


                                                                        7


            Przyklad:

            VAR  BOK: ARRAY[1..32K] OF BYTE;
                 FRAGM: ARRAY[1..MAX] OF BYTE;
            BEGIN
                 GRON(1);
                 (* NARYSUJ STRONE TYTULOWA *)
                 DRAW(...
                 ...
                 (* SKONSTRUUJ RYSUNEK "NA BOKU" *)
                 VIDEO(BOK);
                 DRAW(...
                 ...
                 (* ZAPAMIETAJ FRAGMENT GOTOWEGO RYSUNKU *)
                 MOVE(MINX,MINY);
                 GETMAP(MAXX,MAXY,FRAGM);
                 (* PRZYPISZ Z POWROTEM EKRAN DO MONITORA *)
                 GRON(1); (* NIESTETY, CZYSCI EKRAN *)
                 MOVE(MINX,MINY);
                 PUTMAP(FRAGM);
                 ...

            Uwaga:
                 W przypadku wywolania  VIDEO(tablica(adres)), wartosc
            wyrazenia adres musi byc postaci  1+k*16, gdzie k=0,1,2,...
            


                                                                        8


            
            Procedury sterujace kolorami
            
            
            COLOR(kolor)
            
                     Procedura COLOR ustawia biezacy kolor. W tym
            kolorze beda odtad dokonywane zmiany zawartosci ekranu. Na
            monitorach monochromatycznych kolor 0 oznacza czarny (pixel
            wygaszony), kolor <> 0 oznacza bialy (pixel zapalony).
            Na monitorach kolorowych, dla karty IBM color/graphics,
            kolory maja nastepujace numery:
            
                 0 - tlo (czarny lub ustalony wywolaniem BORDER)
                 1 - zielony lub turkusowy -  cyan ( zaleznie od wyboru
            palety)
                 2 - czerwony lub purpurowy - magenta
                 3 - zolty lub bialy
            
            Kolorem ustawionym poczatkowo jest 1.
            

                     Dla karty EGA kolor moze przyjmowac wartosci od 0
            do 15. Znaczenie tego parametru jest okreslone poprzez wybor
            palety ( przyporzadkowanie kazdemu z 16 identyfikatorow
            koloru dowolnego koloru z 64 istniejacych ), dokonywany za
            pomoca procedury PALLET.
            Kolorem ustawionym poczatkowo jest 7.

            
            STYLE(styl)
            
                     Procedura STYLE ustawia biezacy styl, czyli
            kombinacje kolorow uzywana do rysowania odcinkow (DRAW) i
            wypelniania obszarow (HFILL,VFILL). Styl wybiera jeden z
            szesciu nastepujacych sposobow mieszania tla (.) i biezacego
            koloru (*):

                 0 - ....
                 1 - ****
                 2 - ***.
                 3 - **..
                 4 - *.*.
                 5 - *...

                     Przy rysowaniu odcinkow kolejne pixle beda mialy
            kolor wyznaczony cyklicznie wzorcem stylu. Pierwszy i
            ostatni pixel odcinka bedzie zawsze mial biezacy kolor.
            Przy wypelnianiu, podany wzorzec  dotyczy linii poziomych
            (pionowych) ekranu o parzystej wspolrzednej y (x). Wzorzec
            dla linii o wspolrzednych nieparzystych dobierany jest
            automatycznie.
            Inne sposoby mieszania, dopuszczajace uzycie wiekszej liczby
            kolorow sa dostepne za pomoca procedury PATERN.


                                                                        9


            PATERN(par,par1,par2,par3)
            
                     Procedura PATERN pozwala rysowac odcinki i
            wypelniac obszary dowolna kombinacja kolorow. Przy rysowaniu
            odcinkow brany jest pod uwage tylko par. Przy wypelnianiu,
            par oraz par2 dotycza linii poziomych (pionowych) o
            wspolrzednych  y (x) parzystych, par1 oraz par3 - linii o
            wspolrzednych nieparzystych ( na zmiane kolejno par/par2
            oraz par1/par3 ). Wartosci par,...,par3 przedstawione jako
            czterocyfrowe liczby szesnastkowe daja wzorce mieszania
            numerow kolorow.  0 oznacza tlo, inne cyfry - zob. opis
            procedury COLOR.

            Przyklad:

            PATERN(#1100,#0011,#1100,#0011);
                      ODPOWIADA:  COLOR(1); STYLE(3);

            natomiast efekt:

            PATERN(#1212,#0303,#2121,#3030);
                      NIE MOzE BYC UZYSKANY INACZEJ

            
            BORDER(kolor)
            
                     Procedura BORDER ustawia biezacy kolor tla.
            
                 kolor     kolor
            
                   0       czarny
                   1       niebieski
                   2       zielony
                   3       turkusowy - cyan (niebiesko-zielony)
                   4       czerwony
                   5       karmazynowy - magenta (czerwono-niebieski)
                   6       zolty
                   7       jasno szary
            
            Kolory 8 - 15 to jasniejsze odcienie kolorow 0 - 7, przy
            czym kolor bialy ma numer 15.

            Przedstawione powyzej kolory dotycza tylko karty IBM, dla
            karty EGA natomiast parametr kolor moze przyjmowac wartosci
            od 0 do 63.
            
            
            PALLET(nr)
            
                     Dla karty IBM color/graphics :
            
                      procedura PALLET wybiera biezaca palete z dwu
            mozliwych
            

                 nr             kolory
            
                 0              turkusowy,karmazynowy,bialy
                 1              zielony,czerwony,zolty
            


                                                                        10


                     Domyslna paleta jest paleta nr 0.

                     Dla karty EGA natomiast procedura PALLET sluzy do
            wyboru dowolnych 16 kolorow z 64 ogolnie dostepnych.
            Parametr nr powinien byc postaci
                           kolor16 * 256 + kolor64,
            gdzie
                      kolor16 oznacza identyfikator koloru ( uzywany
            przez procedure COLOR ), mogacy przyjmowac wartosci 0 - 15,
                      kolor64 oznacza wybrany kolor.
            

                     Standardowa paleta ( przyjmowana domyslnie )
            zawiera nastepujace kolory :
            
                 identyfikator     kolor          numer koloru
            
                      0          czarny                 0
                      1          niebieski              1
                      2          zielony                2
                      3          turkusowy              3
                      4          czerwony               4
                      5          karmazynowy            5
                      6          zolty                  6
                      7          bialy                  7
                      8          szary                 56
                      9          jasno-niebieski       57
                     10          jasno-zielony         58
                     11          jasno-turkusowy       59
                     12          jasno-czerwony        60
                     13          jasno-karmazynowy     61
                     14          jasno-zolty           62
                     15          intensywny bialy      63
            

                     Wszystkie dostepne kolory mozna obejrzec oraz
            poznac ich numery za pomoca programu demonstracyjnego
            EGADEMO.EXE.

                     Procedura PALLET nie ma zastosowania dla karty
            Hercules.

            
            
            INTENS(i)
            
                     Procedura INTENS wybiera intensywnosc kolorow.
            Dla i rownego 0 intensywnosc jest wieksza, dla i rownego 1
            mniejsza.
            Domyslnie intensywnosc jest ustawiona na poziomie 0.
            
            Procedura INTENS ma zastosowanie tylko dla karty IBM.


                                                                        11


            
            Procedury ustawiania pozycji
            
            
            MOVE(x,y)
            
                     Procedura MOVE ustawia biezaca pozycje na ekranie
            na pixel o wspolrzednych (x {kolumna}, y {wiersz}).

            
            INXPOS(ple), INYPOS(ple)
            
                     Funkcje calkowite INXPOS i INYPOS zwracaja
            odpowiednio wspolrzedne x i y biezacej pozycji. Parametr ple
            jest ignorowany.

            
            PUSHXY
            
                     Procedura PUSHXY powoduje przechowanie biezacej
            pozycji, koloru i stylu na wierzcholku wewnetrznego stosu
            IIUWGRAFu. Parametry te nie ulegaja przy tym zmianie.
            Maksymalna glebokosc stosu wynosi 16.

            
            POPXY
            
                     Procedura POPXY odtwarza biezacy styl, kolor i
            pozycje z wierzcholka wewnetrznego stosu IIUWGRAFu.
            Glebokosc stosu zmniejsza sie o 1.

            
            
            Przyklad:
            

            PROCEDURE SKOS;
            VAR  IX,IY:INTEGER;
            BEGIN
                 PUSHXY;
                 IX := INXPOS(0);
                 IY := INYPOS(0);
                 DRAW(IX+10,IY+10);
                 POPXY;
            END;


                                                                        12


            
            TRACK(x,y)
            
                     Procedura TRACK wyswietla na ekranie wskaznik w
            ksztalcie malej (8*8 pixli) strzalki, skierowanej na punkt o
            wspolrzednych (x,y). Wskaznik ten moze byc przesuwany po
            ekranie za pomoca klawiszy kierunkowych. Nacisniecie
            klawisza powoduje przesuniecie wskaznika o 5 pixli.
            Nacisniecie odpowiedniego klawisza w trybie numerycznym
            przesuwa wskaznik o 1 pixel. Klawisz "home" powoduje powrot
            wskaznika do pozycji (x,y). Klawisz "End" usuwa wskaznik z
            ekranu i powoduje powrot z procedury, pozostawiajac biezaca
            pozycje w tym miejscu. Moze byc ona teraz odczytana za
            pomoca funkcji INXPOS i INYPOS.

            
            
            
            
            
            
            Procedury obslugujace punkty
            
            
            POINT(x,y)
            
                     Procedura POINT ustawia biezaca pozycje w punkcie
            (x,y) i zmienia jego kolor na biezacy.

            
            INPIX(x,y)
            
                     Funkcja INPIX ustawia biezaca pozycje w punkcie
            (x,y) i zwraca jego kolor.


                                                                        13


            
            Procedury rysowania linii
            
            
            DRAW(x,y)
            
                     Procedura DRAW rysuje odcinek od biezacej pozycji
            do pozycji o wspolrzednych (x,y). Rysowanie polega na
            zmianie koloru pixli nalezacych, wedlug algorytmu
            Bresenhama, do odcinka.  Pixle te przyjmuja nowy stan
            zaleznie od biezacego koloru i stylu.

            
            
            CIRB(x,y,r,alfa,beta,kolb,wwyp,p,q)
            
                     Procedura CIRB  rysuje na ekranie wycinek okregu
            lub elipsy, zaleznie od podanych wartosci p i q,
            okreslajacych aspekt. Aspekt wyznaczony jest stosunkiem p/q.
            Dla wartosci aspektu rownej 1 zostanie narysowany idealny
            okrag.  Srodek bedzie umieszczony w punkcie (x,y), promien
            poziomy bedzie mial wielkosc r pixli, alfa i beta okreslaja,
            odpowiednio kat poczatkowy i koncowy rysowanego wycinka. Dla
            alfa = beta zostanie narysowany pelny okrag (lub elipsa).
            Wartosci alfa i beta sa wyrazane w radianach, w zwyklym
            ukladzie. Brzeg wycinka i jego promienie zostana narysowane
            kolorem kolb, niezaleznie od stylu. Jesli wwyp <> 0, wnetrze
            wycinka zostanie wypelnione biezacym kolorem i stylem.

            
            HFILL(x)
            
                     Procedura HFILL rysuje, w biezacym kolorze i stylu,
            odcinek poziomy od biezacej pozycji do punktu o
            wspolrzednych
            
                 (x,inypos(0))
            
            OSTROZNIE: HFILL nie zmienia biezacej pozycji.

                     Uzycie HFILL jest zalecane przy wypelnianiu
            obszarow, gdyz dziala znacznie szybciej niz odpowiedni DRAW.
            Rowniez mieszajac kolory w danym stylu, HFILL, w
            przeciwienstwie do DRAW nie bierze pod uwage poczatkowego
            punktu odcinka, co pozwala na uzyskanie substytutu
            dodatkowych kolorow.

            


                                                                        14


            VFILL(y)
            
            
                     Procedura VFILL rysuje, w biezacym kolorze i stylu,
            odcinek pionowy od biezacej pozycji do punktu o
            wspolrzednych
            
                 (inxpos(0),y)
            
            OSTROZNIE: VFILL nie zmienia biezacej pozycji.


                                                                        15


            
            Procedury operujace na fragmentach ekranu
            
            
            GETMAP(x,y,tablica)
            
                     Procedura GETMAP zapamietuje prostokatny obszar
            ekranu pomiedzy biezaca pozycja jako lewym gornym rogiem a
            punktem (x,y) jako prawym dolnym rogiem w tablicy. GETMAP
            nie zmienia przy tym biezacej pozycji. Tablica powinna miec
            co najmniej  4 + w*sufit(k/8)*kol bajtow, gdzie w i k sa,
            odpowiednio, liczba wierszy i kolumn zapamietywanego
            obszaru, natomiast wartosc wspolczynnika kol zalezy od
            rodzaju karty graficznej i wynosi  1 dla karty Hercules,
            2 dla karty IBM oraz 4 dla karty EGA.

            Przyklad: zapamietanie obszaru 101*101 polozonego w lewym
            gornym rogu ekranu.

            VAR  OKNO: ARRAY[1..700] OF INTEGER;
            
                 ...
                 MOVE(0,0);
                 GETMAP(100,100,OKNO);
                 ...
            

            
            PUTMAP(tablica)
            
                     Procedura PUTMAP ustawia prostokatny obszar ekranu
            o lewym gornym rogu znajdujacym sie w biezacej pozycji
            zgodnie z zawartoscia tablicy, w ktorej uprzednio
            zapamietano fragment ekranu za pomoca procedury GETMAP.
            Biezaca pozycja nie ulega zmianie. Odtworzeniu podlega caly
            zapamietany obszar, ktory jest kopiowany w nowe miejsce.

            
            ORMAP(tablica)
            
                     Procedura ORMAP dziala podobnie jak PUTMAP, lecz o
            nowej  zawartosci ekranu decyduje wynik zastosowania funkcji
            or do elementow tablicy i ekranu.

            
            XORMAP(tablica)
            
                     Procedura XORMAP dziala podobnie jak PUTMAP, lecz o
            nowej  zawartosci ekranu decyduje wynik zastosowania funkcji
            xor do elementow tablicy i ekranu.


                                                                        16


            
            Procedury wejscia/wyjscia dla pojedynczych znakow
            
            
            INKEY(ple)
            
                     Funkcja calkowita INKEY podaje i usuwa nastepny
            znak z bufora klawiatury. Czytanie odbywa sie bez echa.
            Jesli bufor jest pusty, wynikiem jest 0. Klawisze specjalne
            kodowane sa jako liczby ujemne wedlug zalaczonej tablicy.
            Metoda ALT-NUM moze byc uzyta do wprowadzenia z klawiatury
            kodow powyzej 127 jako zwyklych znakow. Uniemozliwia to,
            niestety, korzystanie ze znakow specjalnych o kodach od 128
            do 132.

            Przyklad: zaczekaj na klawisz End.

            PROCEDURE WAIT_FOR_END;
            BEGIN
                 WHILE INKEY(0)<>-79 DO;
            END;

            Wartosci kodow klawiszy specjalnych podane sa w Dodatku F.
            
            
            HASCII(kod)
            
                     Procedura HASCII rysuje na ekranie znak
            alfanumeryczny. Znak wpisany jest w raster 8*8. Gorny lewy
            rog rastra umieszczony bedzie w biezacej pozycji, ktora
            jednoczesnie przesunie sie o 8 pixli w prawo. Uzyta funkcja
            rysujaca jest xor. Kroj znakow pobierany jest z tablicy
            znajdujacej sie w ROM BIOS standardowo pod adresem
            F000:FA6E. W przypadku niestandardowego ROM BIOSu obraz
            znaku alfanumerycznego bedzie zly. Uzycie procedur HFONT i
            HFONT8 pozwala uniezaleznic sie od wersji BIOSu a takze
            korzystac z innych, rowniez wlasnorecznie zaprojektowanych
            krojow znakow. Kod znaku 0 powoduje tylko wyczyszczenie
            miejsca przeznaczonego na znak, bez zmiany biezacej pozycji.
            Wszystkie kody maja tylko interpretacje graficzna, bez
            funkcji sterujacych (NL, CR etc.).

            Przyklad: napisanie slowa "oh" na gwarantowanie czystym tle.
            

            HASCII(0); HASCII('o'); HASCII(0); HASCII('h');

            Uwaga:
                 Parametr procedury HASCII moze byc typu integer lub
            znakowego ( character w Fortranie, char w Pascalu i C ).
            


                                                                        17


            
            HFONT(segment,offset)
            
                     Wywolanie procedury HFONT przelacza adres wzorca
            znakow alfanumerycznych na segment:offset. Bez uzycia HFONT
            uzywa sie adresu F000:FA6E.

            
            HFONT8(segment,offset)
            
                     Uzycie procedury HFONT8 dolacza do programu
            uzytkowego kopie tablicy kroju znakow z ROM BIOS i zwraca
            adres tej kopii jako segment:offset (parametry wyjsciowe).

            


                                                                        18


            
            Procedury wejscia/wyjscia dla linii
            
            
            OUTHLINE(dlugosc,bufor)
            
                     Procedura OUTHLINE wywoluje HASCII dlugosc razy,
            wypisujac na ekran znaki, ktorych kody zawarte sa w buforze.
            Przed narysowaniem kazdego znaku wywolywane jest HASCII(0).

            
            INHLINE(dlugosc,bufor)
            
                     Procedura INHLINE wczytuje z klawiatury linie
            zlozona z co najwyzej dlugosci znakow i umieszcza je w
            buforze. Do wczytywania uzyta jest procedura INKEY.
            Wyswietlane jest echo. Migajacy wskaznik oznacza oczekiwanie
            na nacisniecie klawisza. Klawisz BACKSPACE dziala tak, jak
            mozna tego oczekiwac. Linia moze byc zakonczona klawiszem CR
            albo wyczerpaniem jej dlugosci. Znak CR konczacy linie nie
            jest umieszczany w buforze. Przed rozpoczeciem czytania
            bufor jest wypelniany spacjami. Po zakonczeniu czytania
            parametr dlugosc zwraca liczbe wczytanych znakow.
            Migajacy wskaznik jest zawsze rysowany kolorem numer 1,
            wyswietlane znaki natomiast biezacym kolorem.

            
            Przyklad: echo wczytanej linii.

            VAR  LINIA: ARRAY[1:40] OF INTEGER;
                 N: INTEGER;
            BEGIN
                 N:=80;
                 INHLINE(N,LINIA);
                 IF N=0 THEN MOVE(INXPOS(0),INYPOS(0)+10)
                        ELSE OUTHLINE(N,LINIA);
                 ...

            


                                                                        19


            
            Procedury wejscia/wyjscia dla okienek
            
            
            MKWNDW(x,y,kolumn,wierszy,okienko,rozmiar,ramka)
            
                     Procedura MKWNDW urzadza na ekranie prostokatne
            okienko do konwersacji. Lewy gorny rog okienka znajdzie sie
            w punkcie (x,y). Zmiesci ono zadana liczbe kolumn i wierszy
            tekstu alfanumerycznego. Opis okienka bedzie przechowany w
            dostarczonej przez uzytkownika tablicy okienko. Parametr
            rozmiar jest na razie ignorowany, a tablica powinna miec co
            najmniej 20 bajtow, lub duzo wiecej, jesli okienko ma byc
            zaslaniane i odslaniane ( patrz opis procedury BURY ). Jesli
            parametr ramka ma wartosc rozna od 0, obszar okienka bedzie
            obwiedziony ramka, co uczyni je nieco wiekszym.

            
            BURY(okienko)
            
                     Wywolanie BURY usuwa okienko z ekranu, przechowujac
            jego obraz w dalszej czesci tablicy okienko tak, aby moc
            odtworzyc je pozniej za pomoca EXPOSE. Tablica okienko musi
            miec odpowiednia wielkosc, aby GETMAP obszaru okienka
            pozostawilo w niej jeszcze co najmniej 20 bajtow.

            
            EXPOSE(okienko,x,y)
            
                     Wywolanie EXPOSE odtwarza okienko przechowane za
            pomoca BURY umieszczajac jego gorny lewy rog w punkcie
            (x,y).

            
            OUTWLINE(okienko,dlugosc,bufor)
            
                     Procedura OUTWLINE dziala podobnie jak OUTHLINE,
            wyswietlajac linie w ramach podanego okienka. Bufor o
            dlugosci wiekszej niz rozmiar okienka wyswietli sie w kilku
            liniach.

            
            INWLINE(okienko,dlugosc,bufor)
            
                     Procedura INWLINE, podobnie jak INHLINE, wczytuje z
            klawiatury linie tekstu. W przypadku INWLINE okienko
            wskazuje na obszar ekranu, w ktorym ma pojawiac sie echo.
            Jesli dlugosc bufora jest wieksza niz rozmiar okienka echo
            moze zajac w nim kilka linii. Poprawianie wprowadzanego
            tekstu przy uzyciu BACKSPACE jest mozliwe tylko w ostatniej
            czesci linii. Dlugosc jako parametr wyjsciowy zwraca liczbe
            wczytanych znakow, bez konczacego CR.


                                                                        20


            
            Procedury poziomu 2
            
            
                     Procedury te operuja wspolrzednymi wyrazonymi
            liczbami rzeczywistymi odnoszacymi sie do abstrakcyjnego
            okna o dowolnych rozmiarach.

            
            
            Definiowanie okna
            
            
            SWINDOW(rxy,ixy,skalowanie)
            
                     Procedura SWINDOW urzadza na ekranie prostokatne
            okno umieszczone pomiedzy punktami naroznikowymi podanymi w
            tablicy ixy jako calkowite wspolrzedne prawdziwych pixli.
            Program uzytkowy tworzacy rysunek w tym obszarze bedzie
            okreslal polozenie punktow w sposob abstrakcyjny we
            wspolrzednych rzeczywistych. Tablica rxy podaje zakresy tych
            wspolrzednych. Jesli parametr skalowanie ma wartosc 0,
            abstrakcyjny prostokat bedzie po prostu odwzorowany na
            wskazana czesc ekranu bez zachowania proporcji miedzy
            skalowaniem w pionie i w poziomie. Jesli natomiast parametr
            skalowanie bedzie rozny od zera, wykorzystana zostanie
            jedynie srodkowa czesc obszaru ekranu tak, aby zachowac
            rzeczywiste proporcje rysunku, niezaleznie od aspektu danego
            monitora.
            Odwzorowanie stosowane przez IIUWGRAF odwraca tez kierunek
            wzrastania wspolrzednej y do naturalnego ukladu:
            
            
                         (ixy(1),ixy(3))
                         /
               (rxy(1),rxy(4))
                      ^
                      |
                      |
                      |
                      | (ixy(1),ixy(4))                  (ixy(2),ixy(4))
                      | /                                   /
               (rxy(1),rxy(3))--------------------->(rxy(2),rxy(3))
            
            
            Przyklad: przygotowanie rysunku sinusoidy w gornej polowie
            ekranu Herculesa.


            VAR  RW:ARRAY [1:4] OF REAL INIT (0.,6.29,-1.,1.);
                 IW:ARRAY [1:4] OF INTEGER INIT (0,719,0,173);
            BEGIN
                 SWINDOW(RW,IW,0);
            


                                                                        21


            RWINDOW(rxy,skalowanie)

                     Procedura RWINDOW jest skrotem wywolania SWINDOW
            dla odwzorowania obejmujacego caly ekran.

            
            
            RINXPOS(ple),RINYPOS(ple)
            
                     Funkcje rzeczywiste RINXPOS i RINYPOS zwracaja,
            odpowiednio wspolrzedne x i y biezacej pozycji w
            abstrakcyjnym oknie urzadzonym przez ostatnie wywolanie
            RWINDOW lub SWINDOW. Biezaca pozycja jest zawsze zaokraglana
            do najblizszego pixla.

            
            
            RMOVE(rx,ry)
            
                     Wywolanie procedury RMOVE ustawia biezaca pozycje w
            punkcie (rx,ry) w ostatnio urzadzonym oknie. Pozycja ta jest
            zaokraglona do najblizszego pixla.

            
            
            RDRAW(rx,ry)
            
                     Wywolanie procedury RDRAW powoduje narysowanie w
            biezacym kolorze i stylu odcinka od biezacej pozycji do
            pixla najblizszego punktowi (rx,ry) w ostatnio urzadzonym
            oknie.

            
            
            RCIRB(rx,ry,rr,alfa,beta,kolb,wwyp,p,q)
            
                     Procedura RCIRB odpowiada procedurze CIRB z poziomu
            1, z tym, ze wspolrzedne srodka (rx,ry) i promien rr
            wyrazane sa, jako liczby rzeczywiste, w oknie urzadzonym
            przez ostatnie wywolanie RWINDOW lub SWINDOW. Pozostale
            parametry maja znaczenie takie, jak w CIRB.


                                                                        22


            
            Informacje dodatkowe
            
            
                     Pakiet IIUWGRAF zawiera dodatkowo dwa programy
            HGCPRINT.EXE oraz MGCPRINT.EXE. Umozliwiaja one drukowanie
            tworzonych obrazow graficznych na powszechnie dostepnych
            drukarkach ( np. typu STAR GEMINI, EPSON ). W przypadku
            uzywania karty Hercules nalezy stosowac program HGCPRINT, a
            dla karty IBM color/graphics program MGCPRINT.

                     Programow tych powinno uzywac sie w nastepujacy
            sposob :
                 przed zaladowaniem wlasnego programu nalezy wykonac
            program HGCPRINT lub MGCPRINT, w zaleznosci od rodzaju
            uzywanej karty graficznej. Kazdy z tych programow ustawia
            znaczenie klawisza PrtSc. Kazdorazowe pozniejsze nacisniecie
            klawisza PrtSc powoduje wydrukowanie graficznej zawartosci
            ekranu.
            
            Uwaga.    W przypadku karty Hercules drukowana jest
            zawartosc pierwszej strony graficznej, niezaleznie od tego,
            ktora strona jest aktualnie wyswietlana.
                      W przypadku karty IBM color/graphics klawisz PrtSc
            zaklada, ze jest ustawiony tryb kolor 320*200. Wydruk obrazu
            graficznego utworzonego w trybie mono 640*200 jest mozliwe
            poprzez uzycie procedury PRTSCR.

                     Mozliwosc drukowania obrazu graficznego nie
            istnieje dla karty EGA.

                     Autorem programow HGCPRINT oraz MGCPRINT jest
            Krzysztof Studzinski.

            
            
            
            Procedury dodatkowe
            
            
            PRTSCR(nr)
            
                     Procedura PRTSCR umozliwia drukowanie obrazow
            graficznych tworzonych na ekranie monitora pod kontrola
            programu. Parametr nr okresla numer strony graficznej
            (0 lub 1), ktorej zawartosc ma byc wydrukowana.

                     Wywolanie procedury PRTSCR z parametrem nr rownym
            zeru jest rownowazne nacisnieciu klawisza PrtSc.

                     W celu poprawnego dzialania tej procedury nalezy,
            analogicznie jak w przypadku klawisza PrtSc, uprzednio
            wykonac dolaczony program :
                      - HGCPRINT.EXE  w przypadku uzywania karty
            Hercules lub
                      - MGCPRINT.EXE dla karty IBM.

                     Procedura PRTSCR nie dziala dla karty EGA.

            


                                                                        23


            

                                     DODATEK A

                          Uzycie IIUWGRAFu z FORTRANem 77.
            
            
            1)   Procedury IN?LINE i OUT?LINE dokonuja jedynie
            transmisji tekstu, bez zadnej konwersji pomiedzy postacia
            binarna i tekstowa. Aby takiej konwersji dokonac, mozna
            posluzyc sie instrukcjami formatowanego wejscia/wyjscia
            w polaczeniu z tzw. plikami wewnetrznymi (internal file).

            Przyklad:


                 INTEGER*2 I,J,SUM,W(10)
                 CHARACTER*20 LINE
                 CHARACTER LINEL(20)
                 EQUIVALENCE (LINE,LINEL(1))
            
                 ...
                 CALL MKWNDW(10,10,21,4,W,20,1)
                 CALL OUTWLINE(W,20,'PODAJ 2 LICZBY (2I3)')
                 CALL INWLINE(W,20,LINEL)
                 READ (LINE,'(2I3)') I,J
                 SUM=I+J
                 WRITE (LINE,'(8H SUMA = I4)') SUM
                 CALL OUTWLINE(W,12,LINEL)     


                                                                        24



            

                                     DODATEK B

                            Uzycie IIUWGRAFu z PASCALem.
            
            
            1)   Microsoft Pascal dopuszcza jedynie 6 znakow w nazwie
            podprogramu, zatem nazwy: INHLIN(E), INWLIN(E), OUTHLI(NE),
            OUTWLI(NE), RWINDO(W), SWINDO(W), RINXPO(S), RINYPO(S) musza
            byc uzywane w skroconej postaci.
            
            2)   Niektore procedury IIUWGRAFu sa napisane w FORTRANie.
            Przy linkowaniu LINK moze domagac sie dostarczenia
            biblioteki FORTRAN.LIB. Zadanie to nalezy zignorowac.
            
            3)   Do linkowania nalezy uzywac LINK w wersji co najmniej
            3.04, do kompilacji Pascal w wersji co najmniej 3.31.


                                                                        25


            

                                     DODATEK C

                           Uzycie IIUWGRAFu z Lattice C.
            
            
            1)   Nalezy unikac konfliktow z nazwami globalnych zmiennych
            roboczych IIUWGRAFu. Zmienne te maja nazwy rozpoczynajace
            sie od liter WIR... i PQASP...
            
            2)   W przypadku procedur majacych parametry wyjsciowe ( w
            dodatku E sa one zaznaczone jako vars ) nalezy przy ich
            wywolaniu przekazywac adres odpowiedniego parametru
            aktualnego.
            
            Przyklad:
            

                      CHAR LENGTH;
                      CHAR *TEXT;
                      ...
                      INHLINE(&LENGTH,TEXT)
            


            3)   Adresy parametrow aktualnych nalezy przekazywac rowniez
            w przypadku parametrow bedacych tablicami znakowymi.


            Przyklad:


                      INT  LENGTH;
                      CHAR *TEXT;    /* LUB NP. CHAR TEXT[40]; */
                      ...
                      OUTHLINE(LENGTH, &TEXT[3]);
                      /* WYPISZ ZNAKI Z TABLICY 'TEXT', ROZPOCZYNAJAC OD
            CZWARTEGO */
            


                                                                        26


            

                                     DODATEK D

                            Uzycie IIUWGRAFu z LOGLANem.
            
            
            1)   W biezacej wersji LOGLANu dostepnych jest jedynie 7
            podstawowych procedur: GRON, GROFF, MOVE, DRAW, HASCII,
            HPAGE, INKEY obslugujacych wylacznie karte Hercules.
            
            2)   System okienek do konwersacji nie bedzie  w LOGLANie
            dostepny w postaci procedur standardowych. Podobnie okienka
            o wspolrzednych rzeczywistych.
            
            3)   Niektore podprogramy dostepne jako funkcje standardowe
            LOGLANu musza miec zmienione specyfikacje parametrow w
            stosunku do oryginalnego IIUWGRAFu:
            
                 IIUWGRAF  LOGLAN
            
                 GETMAP    GETMAP:function:array of ?
                 INKEY     INKEY:integer function; (* bez parametrow *)
                 INXPOS    INXPOS:integer function;(* bez parametrow *)
                 INYPOS    INYPOS:integer function;(* bez parametrow *)
            


                                                                        27


            

                                     DODATEK E

                       Wykaz specyfikacji procedur IIUWGRAFu.
            
            
                 proc BORDER(consts b: integer);
               L proc BURY(window: buffer);
                 proc CIRB(consts ix,iy,ir: integer;
                           consts alfa, beta: real;
                           consts cbord, bcint, p, q: integer);
                 proc CLS;
                 proc COLOR(consts c: integer);
                 proc DRAW(consts ix,iy: integer);
               L proc EXPOSE(window: buffer; consts x,y: integer);
               L proc GETMAP(consts x,y: integer; ekran: buffer);
               L proc GROFF;
                 proc GRON(consts imode: integer);
                 proc HASCII(consts ic: integer);
                 proc HFILL(consts maxx: integer);
                 proc HFONT(consts seg, offs: integer);
                 proc HFONT8(vars seg, offs: integer);
                 proc HPAGE(consts page, mode, clear: integer);
              P  proc INHLINE(vars n:integer; line: tekst);
               L func INKEY(consts idummy: integer): integer;
                 func INPIX(consts x,y: integer): integer;
                 proc INTENS(consts i: integer);
              PL proc INWLINE(window: buffer; vars n: integer;
                           line: tekst);
               L func INXPOS(consts idummy: integer): integer;
               L func INYPOS(consts idummy: integer): integer;
               L proc MKWNDW(consts x,y,icols,ilines: integer;
                           window: buffer;
                           consts iwndwsize,iborder: integer);
                 proc MOVE(consts ix,iy: integer);
               L func NOCARD(consts idummy: integer): integer;
                 proc ORMAP(ekran: buffer);
              PL proc OUTHLINE(consts n:integer; line: tekst);
              PL proc OUTWLINE(window: buffer; consts n: integer;
                           line: tekst);
                 proc PALLET(consts p: integer);
                 proc PATERN(consts p1, p2, p3, p4: integer);
                 proc POINT(consts ix,iy: integer);
                 proc POPXY;
                 proc PRTSCR(consts nr: integer);
                 proc PUSHXY;
                 proc PUTMAP(ekran: buffer);
               L proc RCIRB(consts ix,iy,ir: real;
                           consts alfa, beta: real;
                           consts cbord, bcint, p, q: integer);
               L proc RDRAW(consts rx,ry: real);
              PL func RINXPOS(consts dummy: real): real;
              PL func RINYPOS(consts dummy: real): real;
               L proc RMOVE(consts rx,ry: real);
              PL proc RWINDOW(rw: array [1:4] of real;
                           consts s: integer);
                 proc STYLE(consts s: integer);


                                                                        28


              PL proc SWINDOW(rw: array [1:4] of real;
                           iw: array [1:4] of integer;
                           consts s: integer);
                 proc TRACK(consts x,y: integer);
                 proc VFILL(consts maxy: integer);
                 proc VIDEO(ekran: buffer);
                 proc XORMAP(ekran: buffer);
            
            Uzyto notacji semi-pascalowej.
            Specyfikacja consts oznacza parametr przekazywany przez
            wartosc (tylko wejsciowy), vars - przez zmienna (wejsciowo-
            wyjsciowy).
            Typ buffer oznacza tablice bajtowa sluzaca do przechowania
            zawartosci okreslonego obszaru ekranu ( rozmiar jej zalezy
            od wielkosci tego obszaru ), typ tekst natomiast oznacza
            tablice znakowa.
            Litery w pierwszej kolumnie sugeruja dodatkowe wazne
            informacje (roznice) w kontekscie konkretnych jezykow
            (Fortran, Pascal, C, Loglan).


                                                                        29



                                     DODATEK F

                        Wartosci kodow klawiszy specjalnych:
            
            
                 3         -    ctrl-2
                 15        -    back tab (shift-tab)
                 16-25     -    ALT-Q az do ALT-P
                 30-38     -    ALT-A az do ALT-L
                 44-50     -    ALT-Z az do ALT-M
                 59-68     -    F1 az do F10
                 71        -    Home
                 72        -    Cursor-Up
                 73        -    PgUp
                 75        -    Cursor-Left
                 77        -    Cursor-Right
                 79        -    End
                 80        -    Cursor-Down
                 81        -    PgDn
                 82        -    Ins
                 83        -    Del
                 84-93     -    Shift-F1 az do Shift-F10
                 94-103    -    Ctrl-F1 az do Ctrl-F10
                 104-113   -    Alt-F1 az do Alt-F10
                 114       -    Ctrl-PrtSc
                 115       -    Ctrl-Cursor-Left
                 116       -    Ctrl-Cursor-Right
                 117       -    Ctrl-End
                 118       -    Ctrl-PgDn
                 119       -    Ctrl-Home
                 120-131   -    Alt-1 az do Alt-=
                 132       -    Ctrl-PgUp


                                                                        30


            

                                     DODATEK G

                                       FEDIT
            
                       Prosty program do edycji kroju znakow.
                     Dodatek do biblioteki graficznej IIUWGRAF.
            
            FEDIT pozwala komponowac i modyfikowac uklady pixli o
            wymiarze 8*8. Takie uklady moga byc wyswietlane razem z
            grafika za pomoca procedury HASCII.
            
            FEDIT produkuje opisy tablic kroju znakow w dwoch
            postaciach:
            
                 -    jako podprogram dostarczajacy adres tablicy kroju
            w postaci odpowiedniej do przekazania procedurze HFONT,
            
                 -    jako niezalezny program umieszczajacy wskaznik do
            tablicy kroju w wektorze przerwania 14H.
            
            Pierwszy format moze byc uzyty do zastapienia standardowego
            zestawu znakow zwykle znajdujacego sie w ROM BIOS pod
            adresem F000:FA6E. Jest on uzywany przez procedure HASCII do
            rysowania znakow o kodach od 0 do 127. Stad jego nazwa :
                 "format 0".
            
            Podprogram wygenerowany przez FEDIT ma nazwe HFONT8. Po
            przetlumaczeniu przez MACROASSEMBLER musi byc on linkowany
            razem z programem uzytkowym. Jesli zajdzie potrzeba zmiany
            nazwy (np. w celu dynamicznego przelaczania pomiedzy kilkoma
            krojami znakow), nazwa moze byc zmieniona recznie w tekscie
            zrodlowym.
            
            Drugi format jest uzywany do rysowania znakow z
            rozszerzonego zakresu znakow o kodach od 128 do 255. Stad
            nazwa:
                 "format 128".
            
            Opis zestawu znakow w tym formacie musi byc zaladowany do
            pamieci przed rozpoczeciem wykonania programu, ktory z niego
            korzysta. Wskaznik do tablicy kroju musi byc wpisany w
            wektor przerwania 14H. Robi to program wygenerowany przez
            FEDIT, ktory nastepnie zawiesza sie za pomoca przerwania 27H
            (terminate but stay resident). W tym przypadku tekst
            zrodlowy po przetlumaczeniu przez MACROASSEMBLER musi byc
            zlinkowany (bez zadnych bibliotek) do postaci .EXE.
            IIUWGRAF i FEDIT nie daja mozliwosci dynamicznego
            przelaczania tablic znakow rozszerzonego zakresu.
            


                                                                        31


            Przyklad:
            
            VAR  ISEG, IOFFS: INTEGER;
            BEGIN
                 HFONT8(ISEG,IOFFS); (* ADRES TABLICY FORMATU 0 *)
                 ...
                 HASCII(45);         (* UZYWA ROM BIOS *)
                 HASCII(145);        (* UZYWA ROZSZERZONEGO ZESTAWU *)
                 ...
                 HFONT(ISEG,IOFFS);
                 HASCII(45);         (* UZYWA TABLICY FORMATU 0 *)
                 HASCII(145);        (* TEN SAM ROZSZERZONY ZESTAW *)
                 ...
                 HFONT(16#F000,16#FA6E);
                 HASCII(45);         (* ZNOWU ROM BIOS *)
                 HASCII(145);        (* TEN SAM ROZSZERZONY ZESTAW *)
            
            
                 FEDIT jest prostym programem konwersacyjnym o kilku
            zaledwie rozkazach. Tablica kroju znakow zawiera wzorce
            ukladow pixli rozmiaru 8*8. Wzorzec pojedynczego znaku moze
            byc wyjety z tej tablicy w celu jego edycji i zapamietany z
            powrotem, byc moze w innym miejscu tablicy. Sa dwie tablice
            znakow: jedna dla kodow od 0 do 127, druga dla kodow od 128
            do 255. Pierwsza z nich nie moze byc modyfikowana. Druga z
            nich moze poczatkowo zawierac  zaladowany wczesniej
            rozszerzony zestaw lub zostac wyczyszczona. Mozna tez
            wczytac do niej zestaw zawarty w pliku wygenerowanym
            wczesniej przez FEDIT. Po dokonaniu modyfikacji, zawartosc
            tej drugiej tablicy moze byc uzyta do generacji badz
            "formatu 0" badz "128".
            

                                  Rozkazy FEDITu.

            
            Rozkazy FEDITu sa wprowadzane jako pojedyncze litery
            wybierajace czynnosci wymienione w jadlospisie wyswietlonym
            u gory ekranu. Dodatkowe parametry podaje sie po
            przynagleniu przez FEDIT.
            
            Komendy FEDITu:
            
            <    low  odswieza tablice "0 do 127"
            
            >    high odswieza tablice "128 do 255"
            
            i    init inicjalizuje zerami tablice "128 do 255"
            
            l    load laduje tablice "128 do 255" z pliku
                      dodatkowy parametr:
                           - nazwa pliku (musi istniec)


                                                                        32


            
            d    dump wypisuje zawartosc tablicy "128 do 255"
                      na plik; dodatkowe parametry:
                           - nazwa pliku (bedzie zapisany)
                           - baza ( 0 albo 128),
                             zaleznie od formatu
                           - jezyk:
                                f - MS Fortran, MS Pascal
                                s - Lattice C, model S
                                p - Lattice C, model P
                                d - Lattice C, model D
                                l - Lattice C, model L
            
            e    edit wyjmuje z tablicy pojedynczy znak
                      i umieszcza go w obszarze roboczym.
                      dodatkowy parametr:
                           - kod znaku (dziesietnie)
                      Po obszarze roboczym mozna poruszac sie
                      za pomoca klawiszy kierunkowych. Pixel
                      zapala klawisz Ins, gasi klawisz Del.
                      Klawisz End powoduje wyjscie z tego trybu.
            
            t    text wyswietla tekst pomocny przy ocenie
                      jakosci ksztaltu znakow. Tekst, nie dluzszy
                      niz 40 znakow jest wprowadzany przez uzytkow-
                      nika. Dodatkowe parametry:
                           - vspace,
                           - hspace - odpowiednio, pionowy i poziomy
                      odstep w pixlach pomiedzy znakami. Normalnie,
                      vspace wynosi 2, hspace - 0.
            
            p    put  przechowuje wzorzec z obszaru roboczego pod
                      wskazanym kodem. Dodatkowy parametr:
                           - kod pozycji (dziesietnie),
                             powinien byc miedzy 128 a 255
            
            q    quit konczy dzialanie FEDIT
            
            
            Z FEDITem nalezy obchodzic sie ostroznie. Posiada on jedynie
            minimalne wbudowane zabezpieczenia i np. bez ostrzezenia
            zapisze nowa, nie wykonczona jeszcze wersje kroju znakow na
            pliku zawierajacym jedyny egzemplarz poprzedniej, bardzo
            potrzebnej wersji.


                                                                        33


            
                                     DODATEK H
            
                 Zmiany IIUWGRAFu w stosunku do poprzednich wersji
            
            
            
                     Zmiany IIUWGRAFu w stosunku do wersji 1.1
            
            
            1)   Rozszerzenie zestawu obslugiwanych kart graficznych o
            karte EGA  ( IBM Enhanced Graphics Adapter ).
            
            2)   Niewielkie modyfikacje procedur IIUWGRAFu :
            
                      - dodanie procedury PRTSCR,
                      - modyfikacja procedury PATERN polegajaca na :
                           zwiekszeniu liczby parametrow ( wzorcow ) z
            dwoch do czterech oraz
                           zmianie postaci tych parametrow ( zamiast
            liczb dziesietnych liczby szesnastkowe ),
            ( rozszerzenie wzorcow oczywiscie oznacza rownoczesnie
            modyfikacje procedur HFILL oraz VFILL ),
                      - zmiany nazw procedur GRAPH, TEXT, SCREEN
            odpowiednio na GRON, GROFF, NOCARD.
            
            
            
            
                     Zmiany IIUWGRAFu w stosunku do wersji 2.1
            
            
            1)   Udostepnienie procedur CIRB oraz RCIRB dla C.
            