Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / doc / iiuwgraf.pl
1 \r
2 \r
3 \r
4 \r
5 \r
6 \r
7 \r
8 \r
9 \r
10 \r
11 \r
12                                       IIUWGRAF\r
13 \r
14                    biblioteczka podstawowych procedur graficznych\r
15 \r
16                 moze wspolpracowac z kompilatorami firmy Microsoft:\r
17 \r
18                            Fortran 77 wersja 3.31 i 4.00\r
19                                  Pascal wersja 3.31\r
20 \r
21                                         oraz\r
22                                           \r
23                               C (Lattice) wersja 3.10\r
24                                Aztec C  wersja 3.20d\r
25 \r
26                                           \r
27 \r
28                                    dla IBM PC/XT\r
29 \r
30               obsluguje karty IBM color/graphics, Hercules II oraz EGA\r
31 \r
32 \r
33 \r
34 \r
35 \r
36 \r
37                              wersja 2.2, grudzien 1987\r
38 \r
39 \r
40 \r
41 \r
42 \r
43 \r
44 \r
45             Autorzy:\r
46 \r
47                  Piotr Carlson\r
48                  Miroslawa Milkowska -    procedury poziomu 1\r
49 \r
50                  Janina Jankowska\r
51                  Michal Jankowski    -    procedury poziomu 2\r
52 \r
53 \r
54             Osrodek Obliczeniowy Instytutu Informatyki\r
55             Uniwersytet Warszawski\f\r
56 \r
57 \r
58                                                                         2\r
59 \r
60 \r
61             \r
62             Spis tresci\r
63             \r
64             \r
65             Informacje ogolne                                       3\r
66             Procedury poziomu 1                                     4\r
67             Procedury ustawiania trybu                              5\r
68             Procedury sterujace kolorami                            8\r
69             Procedury ustawiania pozycji                           11\r
70             Procedury obslugujace punkty                           12\r
71             Procedury rysowania linii                              13\r
72             Procedury operujace na fragmentach ekranu              15\r
73             Procedury wejscia/wyjscia dla pojedynczych znakow      16\r
74             Procedury wejscia/wyjscia dla linii                    18\r
75             Procedury wejscia/wyjscia dla okienek                  19\r
76             Procedury poziomu 2                                    20\r
77             Informacje dodatkowe                                   22\r
78             Procedury dodatkowe                                    22\r
79             \r
80             \r
81             \r
82             Dodatki\r
83             \r
84             A. Uzycie IIUWGRAFu z FORTRANem 77                     23\r
85             B. Uzycie IIUWGRAFu z Pascalem                         24\r
86             C. Uzycie IIUWGRAFu z Lattice C                        25\r
87             D. Uzycie IIUWGRAFu z LOGLANem                         26\r
88             E. Wykaz specyfikacji procedur IIUWGRAFu               27\r
89             F. Wartosci kodow klawiszy specjalnych                 29\r
90             G. FEDIT - prosty program do edycji kroju znakow       30\r
91             H. Zmiany IIUWGRAFu w stosunku do poprzednich wersji   33\r
92             \f\r
93 \r
94 \r
95                                                                         3\r
96 \r
97 \r
98             \r
99             Informacje ogolne\r
100             \r
101                      \r
102 \r
103                      Rysunek jest tworzony na ekranie monitora za pomoca\r
104             szeregu wywolan procedur bibliotecznych IIUWGRAF. Modyfikuja\r
105             one zawartosc bufora mapy bitowej, ktora jest zwykle\r
106             bezposrednio wyswietlana na ekranie. Zmiany te sa wtedy\r
107             widoczne natychmiast. Umiejscowienie bufora roboczego moze\r
108             byc jednak zmienione, tak aby byl on zwiazany z obszarem\r
109             pamieci dostarczonym przez uzytkownika. W tym przypadku\r
110             zmiany jego zawartosci oczywiscie nie sa wyswietlane, a\r
111             nawet przestawienie monitora w tryb graficzny nie jest\r
112             konieczne. Rysunek moze byc wtedy skonstruowany w pamieci,\r
113             bez wyswietlania, przechowany na dysku w postaci binarnej i\r
114             odtworzony pozniej na ekranie. Omowiony tryb pracy jest\r
115             mozliwy jednak tylko dla karty Hercules II oraz karty IBM.\r
116                  W opisie procedur slowo ekran, tam gdzie mowa o jego\r
117             zawartosci, nalezy rozumiec wlasnie jako bufor roboczy.\r
118 \r
119                      Karty Hercules II oraz EGA daja dodatkowa mozliwosc\r
120             blyskawicznego przelaczania pomiedzy dwiema\r
121             rownouprawnionymi stronami graficznymi.\r
122 \r
123                      W wersji podstawowej karta graficzna EGA posiada\r
124             64K bajty pamieci. Pamiec ta moze byc zwiekszona do 128K\r
125             oraz 256K bajtow. Opisane ponizej procedury graficzne\r
126             dotycza w zasadzie karty EGA z pelna pamiecia 256K bajtow.\r
127             Tylko w tej wersji karty mozna bowiem uzywac 16 kolorow\r
128             ( z 64 istniejacych ) oraz dwoch stron graficznych. W obu\r
129             wersjach z mniejsza pamiecia istnieje tylko jedna strona\r
130             graficzna, a ponadto w wersji podstawowej uzytkownik ma\r
131             mozliwosc korzystania tylko z 4 kolorow (z 16 istniejacych).\r
132 \r
133                      Dostarczone sa cztery zestawy oddzielnych bibliotek\r
134             IIUWGRAF, kazda dla innego rodzaju ekranu:\r
135             \r
136                  HGCMSF   i  HGCMSF4      dla karty Hercules\r
137                  MGCMSF   i  MGCMSF4      dla karty IBM color/graphics\r
138                  MGC64MSF i  MGC64MF4     dla karty IBM w trybie mono\r
139                  EGAMSF   i  EGAMSF4      dla karty EGA\r
140 \r
141                      Biblioteki HGCMSF, MGCMSF, MGC64MSF i EGAMSF zgodne\r
142             sa z konwencjami Fortranu ( wersja 3.31 ) i Pascala firmy\r
143             Microsoft. Natomiast biblioteki HGCMSF4, MGCMSF4, MGC64MF4 i\r
144             EGAMSF4 sa zgodne z konwencjami Fortranu ( wersja 4.00 )\r
145             firmy Microsoft. Dodatkowo, kazda biblioteka moze byc\r
146             dostarczona w konwencji Lattice C, oddzielnie dla czterech\r
147             modeli kodu  S, P, D i L.\r
148 \r
149                      Programy uzytkowe komunikuja sie z IIUWGRAFem na\r
150             dwoch poziomach:\r
151             \r
152                       poziom 1  - zarzadzanie ekranem na poziomie pixli,\r
153             przy uzyciu prawdziwych wspolrzednych na ekranie,\r
154             \r
155                       poziom 2  - rysowanie punktow i linii we\r
156             wspolrzednych  abstrakcyjnych.\r
157             \f\r
158 \r
159 \r
160                                                                         4\r
161 \r
162 \r
163             \r
164             Procedury poziomu 1\r
165             \r
166                      Wszystkie parametry bez podanej explicite\r
167             specyfikacji maja typ integer. Wszystkie parametry calkowite\r
168             powinny miec wartosci 16-bitowe (integer*2 w Fortranie,\r
169             integer w Pascalu, int w C)\r
170 \r
171             \r
172             Zakresy wspolrzednych ekranu:\r
173             \r
174                  0 <= ix <= 719\r
175                  0 <= iy <= 347      dla karty Hercules\r
176             \r
177                  0 <= ix <= 319\r
178                  0 <= iy <= 199      dla karty IBM color/graphics\r
179             \r
180                  0 <= ix <= 639\r
181                  0 <= iy <= 199      dla karty IBM color/graphics\r
182                                      w trybie mono\r
183                  0 <= ix <= 639\r
184                  0 <= iy <= 349      dla karty EGA\r
185             \r
186             \r
187             \r
188                       (0,0)-----------> (ix,0)\r
189                         |\r
190                         |\r
191                         |\r
192                         V\r
193                       (0,iy)\r
194             \f\r
195 \r
196 \r
197                                                                         5\r
198 \r
199 \r
200             \r
201             Procedury ustawiania trybu\r
202             \r
203             GRON(i)\r
204             \r
205                      Procedura GRON ustawia monitor w graficznym trybie\r
206             pracy, czyszczac zawartosc jego ekranu, ktory jednoczesnie\r
207             staje sie buforem roboczym. Parametr i ma znaczenie jedynie\r
208             dla karty IBM w trybie 320*200: wartosc 1 wybiera normalne\r
209             kolory, wartosc 0 - kolory zmodyfikowane do pracy na\r
210             monitorach monochromatycznych. Dla kart Hercules, EGA oraz\r
211             karty IBM w trybie 640*200 wartosc parametru i jest\r
212             ignorowana. Przy przelaczaniu karty Hercules z trybu\r
213             tekstowego na graficzny i odwrotnie stosowane jest\r
214             programowo opoznienie ok. 3 sekund. Tryb karty IBM ustawiany\r
215             jest wprost, bez pomocy przerwania 10H, tak aby mozliwa byla\r
216             jednoczesna praca na monitorze kolorowym w trybie graficznym\r
217             z praca na monitorze monochromatycznym w trybie tekstowym.\r
218             Konsekwencja tego rozwiazania jest to, ze nie mozna\r
219             korzystac z komendy GRAPHICS. Natomiast tryb karty EGA jest\r
220             ustawiany wprost, za pomoca przerwania 10H.\r
221 \r
222             \r
223             \r
224             NOCARD(ple)\r
225             \r
226                      Funkcja NOCARD zwraca liczbe calkowita\r
227             identyfikujaca rodzaj monitora obslugiwanego przez biezaco\r
228             uzywana biblioteke:\r
229 \r
230                  1    dla karty Hercules\r
231                  2    dla karty IBM w trybie kolor\r
232                  3    dla karty IBM w trybie mono 640*200\r
233                  4    dla karty IBM w trybie mono 320*200\r
234                  5    dla karty EGA\r
235 \r
236                      Funkcja NOCARD moze byc wywolana dopiero po\r
237             zainicjowaniu trybu graficznego za pomoca procedury GRON.\r
238             Parametr ple jest ignorowany.\r
239 \r
240             \r
241             \r
242             GROFF\r
243             \r
244                      Procedura GROFF przelacza monitor w tryb tekstowy,\r
245             wypelniajac zawartosc jego ekranu spacjami. Przed\r
246             zakonczeniem dzialania programu monitor, z ktorego byl\r
247             wywolany, nalezy zawsze ustawic z powrotem w tryb tekstowy.\r
248 \r
249             \r
250             CLS\r
251             \r
252                      Procedura CLS czysci ekran, wypelniajac go kolorem\r
253             0. Czyszczenie odbywa sie bez wylaczania ekranu.\f\r
254 \r
255 \r
256                                                                         6\r
257 \r
258 \r
259             \r
260             HPAGE(nr, tryb, zeruj)\r
261             \r
262                      Procedura HPAGE ma zastosowanie jedynie dla kart\r
263             Hercules oraz EGA. Pozwala na dostep do drugiej strony\r
264             graficznej monitora. Wywolanie HPAGE wybiera strone o\r
265             numerze nr (0 lub 1), zeruje jej zawartosc, o ile parametr\r
266             zeruj ma wartosc <> 0, oraz ustawia jej tryb:\r
267 \r
268                  tryb = 0 wyswietla zawartosc strony alfanumerycznie\r
269                  tryb = 1 wyswietla zawartosc strony graficznie\r
270                  tryb =-1 przypisuje do tej strony bufor roboczy\r
271             \r
272 \r
273                      Przypisanie bufora roboczego trybem -1 nie zmienia\r
274             numeru ani sposobu wyswietlania biezacej strony. Tryb 0\r
275             wiaze bufor roboczy z wybrana wlasnie strona. Przelaczanie\r
276             stron odbywa sie bez opoznien, o ile nie ulega zmianie tryb\r
277             wyswietlania (alfanumeryka/grafika). Poza tym, wywolanie\r
278             HPAGE(0,1,1) jest ( tylko dla karty Hercules ) rownowazne\r
279             GRON(), a HPAGE(0,0,1) - wywolaniu GROFF.\r
280 \r
281             Typowa petla animacyjna moze byc zatem rozwiazana na\r
282             przyklad tak:\r
283 \r
284             VAR  NR: INTEGER;\r
285             BEGIN\r
286                  GRON(0);\r
287                  NR := 1;\r
288                  (* NARYSUJ PIERWOTNY OBRAZ *)\r
289                  DRAW(...\r
290                  ...\r
291                  WHILE JESZCZE DO\r
292                       HPAGE(1-NR,1,0); (* WYSWIETLANIE *)\r
293                       HPAGE(NR,-1,1);  (* BUFOROWANIE *)\r
294                  (* NARYSUJ ZMODYFIKOWANY OBRAZ *)\r
295                       DRAW(...\r
296                       ...\r
297                       NR := 1-NR\r
298                  OD\r
299 \r
300             \r
301             VIDEO(tablica)\r
302             \r
303                      Procedura VIDEO przelacza bufor roboczy tak, aby\r
304             miescil sie on w tablicy podanej jako parametr jej\r
305             wywolania.\r
306             Samo wywolanie VIDEO nie zmienia zawartosci bufora. Obraz\r
307             wyswietlany na monitorze nie bedzie ulegal teraz zmianom\r
308             mimo wywolywania procedur modyfikujacych zawartosc ekranu.\r
309             Wszelkie odwolania do ekranu beda teraz dokonywane w\r
310             tablicy. Gotowy obraz moze byc przeniesiony na rzeczywisty\r
311             ekran za pomoca procedur GETMAP/PUTMAP lub zapisany binarnie\r
312             na dysku w celu pozniejszego odtworzenia. Tablica powinna\r
313             miec 16K bajtow przy wspolpracy z karta IBM i 32K bajtow\r
314             przy wspolpracy z karta Hercules.\r
315             Procedury VIDEO nie mozna stosowac dla karty EGA.\f\r
316 \r
317 \r
318                                                                         7\r
319 \r
320 \r
321             Przyklad:\r
322 \r
323             VAR  BOK: ARRAY[1..32K] OF BYTE;\r
324                  FRAGM: ARRAY[1..MAX] OF BYTE;\r
325             BEGIN\r
326                  GRON(1);\r
327                  (* NARYSUJ STRONE TYTULOWA *)\r
328                  DRAW(...\r
329                  ...\r
330                  (* SKONSTRUUJ RYSUNEK "NA BOKU" *)\r
331                  VIDEO(BOK);\r
332                  DRAW(...\r
333                  ...\r
334                  (* ZAPAMIETAJ FRAGMENT GOTOWEGO RYSUNKU *)\r
335                  MOVE(MINX,MINY);\r
336                  GETMAP(MAXX,MAXY,FRAGM);\r
337                  (* PRZYPISZ Z POWROTEM EKRAN DO MONITORA *)\r
338                  GRON(1); (* NIESTETY, CZYSCI EKRAN *)\r
339                  MOVE(MINX,MINY);\r
340                  PUTMAP(FRAGM);\r
341                  ...\r
342 \r
343             Uwaga:\r
344                  W przypadku wywolania  VIDEO(tablica(adres)), wartosc\r
345             wyrazenia adres musi byc postaci  1+k*16, gdzie k=0,1,2,...\r
346             \f\r
347 \r
348 \r
349                                                                         8\r
350 \r
351 \r
352             \r
353             Procedury sterujace kolorami\r
354             \r
355             \r
356             COLOR(kolor)\r
357             \r
358                      Procedura COLOR ustawia biezacy kolor. W tym\r
359             kolorze beda odtad dokonywane zmiany zawartosci ekranu. Na\r
360             monitorach monochromatycznych kolor 0 oznacza czarny (pixel\r
361             wygaszony), kolor <> 0 oznacza bialy (pixel zapalony).\r
362             Na monitorach kolorowych, dla karty IBM color/graphics,\r
363             kolory maja nastepujace numery:\r
364             \r
365                  0 - tlo (czarny lub ustalony wywolaniem BORDER)\r
366                  1 - zielony lub turkusowy -  cyan ( zaleznie od wyboru\r
367             palety)\r
368                  2 - czerwony lub purpurowy - magenta\r
369                  3 - zolty lub bialy\r
370             \r
371             Kolorem ustawionym poczatkowo jest 1.\r
372             \r
373 \r
374                      Dla karty EGA kolor moze przyjmowac wartosci od 0\r
375             do 15. Znaczenie tego parametru jest okreslone poprzez wybor\r
376             palety ( przyporzadkowanie kazdemu z 16 identyfikatorow\r
377             koloru dowolnego koloru z 64 istniejacych ), dokonywany za\r
378             pomoca procedury PALLET.\r
379             Kolorem ustawionym poczatkowo jest 7.\r
380 \r
381             \r
382             STYLE(styl)\r
383             \r
384                      Procedura STYLE ustawia biezacy styl, czyli\r
385             kombinacje kolorow uzywana do rysowania odcinkow (DRAW) i\r
386             wypelniania obszarow (HFILL,VFILL). Styl wybiera jeden z\r
387             szesciu nastepujacych sposobow mieszania tla (.) i biezacego\r
388             koloru (*):\r
389 \r
390                  0 - ....\r
391                  1 - ****\r
392                  2 - ***.\r
393                  3 - **..\r
394                  4 - *.*.\r
395                  5 - *...\r
396 \r
397                      Przy rysowaniu odcinkow kolejne pixle beda mialy\r
398             kolor wyznaczony cyklicznie wzorcem stylu. Pierwszy i\r
399             ostatni pixel odcinka bedzie zawsze mial biezacy kolor.\r
400             Przy wypelnianiu, podany wzorzec  dotyczy linii poziomych\r
401             (pionowych) ekranu o parzystej wspolrzednej y (x). Wzorzec\r
402             dla linii o wspolrzednych nieparzystych dobierany jest\r
403             automatycznie.\r
404             Inne sposoby mieszania, dopuszczajace uzycie wiekszej liczby\r
405             kolorow sa dostepne za pomoca procedury PATERN.\f\r
406 \r
407 \r
408                                                                         9\r
409 \r
410 \r
411             PATERN(par,par1,par2,par3)\r
412             \r
413                      Procedura PATERN pozwala rysowac odcinki i\r
414             wypelniac obszary dowolna kombinacja kolorow. Przy rysowaniu\r
415             odcinkow brany jest pod uwage tylko par. Przy wypelnianiu,\r
416             par oraz par2 dotycza linii poziomych (pionowych) o\r
417             wspolrzednych  y (x) parzystych, par1 oraz par3 - linii o\r
418             wspolrzednych nieparzystych ( na zmiane kolejno par/par2\r
419             oraz par1/par3 ). Wartosci par,...,par3 przedstawione jako\r
420             czterocyfrowe liczby szesnastkowe daja wzorce mieszania\r
421             numerow kolorow.  0 oznacza tlo, inne cyfry - zob. opis\r
422             procedury COLOR.\r
423 \r
424             Przyklad:\r
425 \r
426             PATERN(#1100,#0011,#1100,#0011);\r
427                       ODPOWIADA:  COLOR(1); STYLE(3);\r
428 \r
429             natomiast efekt:\r
430 \r
431             PATERN(#1212,#0303,#2121,#3030);\r
432                       NIE MOzE BYC UZYSKANY INACZEJ\r
433 \r
434             \r
435             BORDER(kolor)\r
436             \r
437                      Procedura BORDER ustawia biezacy kolor tla.\r
438             \r
439                  kolor     kolor\r
440             \r
441                    0       czarny\r
442                    1       niebieski\r
443                    2       zielony\r
444                    3       turkusowy - cyan (niebiesko-zielony)\r
445                    4       czerwony\r
446                    5       karmazynowy - magenta (czerwono-niebieski)\r
447                    6       zolty\r
448                    7       jasno szary\r
449             \r
450             Kolory 8 - 15 to jasniejsze odcienie kolorow 0 - 7, przy\r
451             czym kolor bialy ma numer 15.\r
452 \r
453             Przedstawione powyzej kolory dotycza tylko karty IBM, dla\r
454             karty EGA natomiast parametr kolor moze przyjmowac wartosci\r
455             od 0 do 63.\r
456             \r
457             \r
458             PALLET(nr)\r
459             \r
460                      Dla karty IBM color/graphics :\r
461             \r
462                       procedura PALLET wybiera biezaca palete z dwu\r
463             mozliwych\r
464             \r
465 \r
466                  nr             kolory\r
467             \r
468                  0              turkusowy,karmazynowy,bialy\r
469                  1              zielony,czerwony,zolty\r
470             \f\r
471 \r
472 \r
473                                                                         10\r
474 \r
475 \r
476                      Domyslna paleta jest paleta nr 0.\r
477 \r
478                      Dla karty EGA natomiast procedura PALLET sluzy do\r
479             wyboru dowolnych 16 kolorow z 64 ogolnie dostepnych.\r
480             Parametr nr powinien byc postaci\r
481                            kolor16 * 256 + kolor64,\r
482             gdzie\r
483                       kolor16 oznacza identyfikator koloru ( uzywany\r
484             przez procedure COLOR ), mogacy przyjmowac wartosci 0 - 15,\r
485                       kolor64 oznacza wybrany kolor.\r
486             \r
487 \r
488                      Standardowa paleta ( przyjmowana domyslnie )\r
489             zawiera nastepujace kolory :\r
490             \r
491                  identyfikator     kolor          numer koloru\r
492             \r
493                       0          czarny                 0\r
494                       1          niebieski              1\r
495                       2          zielony                2\r
496                       3          turkusowy              3\r
497                       4          czerwony               4\r
498                       5          karmazynowy            5\r
499                       6          zolty                  6\r
500                       7          bialy                  7\r
501                       8          szary                 56\r
502                       9          jasno-niebieski       57\r
503                      10          jasno-zielony         58\r
504                      11          jasno-turkusowy       59\r
505                      12          jasno-czerwony        60\r
506                      13          jasno-karmazynowy     61\r
507                      14          jasno-zolty           62\r
508                      15          intensywny bialy      63\r
509             \r
510 \r
511                      Wszystkie dostepne kolory mozna obejrzec oraz\r
512             poznac ich numery za pomoca programu demonstracyjnego\r
513             EGADEMO.EXE.\r
514 \r
515                      Procedura PALLET nie ma zastosowania dla karty\r
516             Hercules.\r
517 \r
518             \r
519             \r
520             INTENS(i)\r
521             \r
522                      Procedura INTENS wybiera intensywnosc kolorow.\r
523             Dla i rownego 0 intensywnosc jest wieksza, dla i rownego 1\r
524             mniejsza.\r
525             Domyslnie intensywnosc jest ustawiona na poziomie 0.\r
526             \r
527             Procedura INTENS ma zastosowanie tylko dla karty IBM.\f\r
528 \r
529 \r
530                                                                         11\r
531 \r
532 \r
533             \r
534             Procedury ustawiania pozycji\r
535             \r
536             \r
537             MOVE(x,y)\r
538             \r
539                      Procedura MOVE ustawia biezaca pozycje na ekranie\r
540             na pixel o wspolrzednych (x {kolumna}, y {wiersz}).\r
541 \r
542             \r
543             INXPOS(ple), INYPOS(ple)\r
544             \r
545                      Funkcje calkowite INXPOS i INYPOS zwracaja\r
546             odpowiednio wspolrzedne x i y biezacej pozycji. Parametr ple\r
547             jest ignorowany.\r
548 \r
549             \r
550             PUSHXY\r
551             \r
552                      Procedura PUSHXY powoduje przechowanie biezacej\r
553             pozycji, koloru i stylu na wierzcholku wewnetrznego stosu\r
554             IIUWGRAFu. Parametry te nie ulegaja przy tym zmianie.\r
555             Maksymalna glebokosc stosu wynosi 16.\r
556 \r
557             \r
558             POPXY\r
559             \r
560                      Procedura POPXY odtwarza biezacy styl, kolor i\r
561             pozycje z wierzcholka wewnetrznego stosu IIUWGRAFu.\r
562             Glebokosc stosu zmniejsza sie o 1.\r
563 \r
564             \r
565             \r
566             Przyklad:\r
567             \r
568 \r
569             PROCEDURE SKOS;\r
570             VAR  IX,IY:INTEGER;\r
571             BEGIN\r
572                  PUSHXY;\r
573                  IX := INXPOS(0);\r
574                  IY := INYPOS(0);\r
575                  DRAW(IX+10,IY+10);\r
576                  POPXY;\r
577             END;\f\r
578 \r
579 \r
580                                                                         12\r
581 \r
582 \r
583             \r
584             TRACK(x,y)\r
585             \r
586                      Procedura TRACK wyswietla na ekranie wskaznik w\r
587             ksztalcie malej (8*8 pixli) strzalki, skierowanej na punkt o\r
588             wspolrzednych (x,y). Wskaznik ten moze byc przesuwany po\r
589             ekranie za pomoca klawiszy kierunkowych. Nacisniecie\r
590             klawisza powoduje przesuniecie wskaznika o 5 pixli.\r
591             Nacisniecie odpowiedniego klawisza w trybie numerycznym\r
592             przesuwa wskaznik o 1 pixel. Klawisz "home" powoduje powrot\r
593             wskaznika do pozycji (x,y). Klawisz "End" usuwa wskaznik z\r
594             ekranu i powoduje powrot z procedury, pozostawiajac biezaca\r
595             pozycje w tym miejscu. Moze byc ona teraz odczytana za\r
596             pomoca funkcji INXPOS i INYPOS.\r
597 \r
598             \r
599             \r
600             \r
601             \r
602             \r
603             \r
604             Procedury obslugujace punkty\r
605             \r
606             \r
607             POINT(x,y)\r
608             \r
609                      Procedura POINT ustawia biezaca pozycje w punkcie\r
610             (x,y) i zmienia jego kolor na biezacy.\r
611 \r
612             \r
613             INPIX(x,y)\r
614             \r
615                      Funkcja INPIX ustawia biezaca pozycje w punkcie\r
616             (x,y) i zwraca jego kolor.\f\r
617 \r
618 \r
619                                                                         13\r
620 \r
621 \r
622             \r
623             Procedury rysowania linii\r
624             \r
625             \r
626             DRAW(x,y)\r
627             \r
628                      Procedura DRAW rysuje odcinek od biezacej pozycji\r
629             do pozycji o wspolrzednych (x,y). Rysowanie polega na\r
630             zmianie koloru pixli nalezacych, wedlug algorytmu\r
631             Bresenhama, do odcinka.  Pixle te przyjmuja nowy stan\r
632             zaleznie od biezacego koloru i stylu.\r
633 \r
634             \r
635             \r
636             CIRB(x,y,r,alfa,beta,kolb,wwyp,p,q)\r
637             \r
638                      Procedura CIRB  rysuje na ekranie wycinek okregu\r
639             lub elipsy, zaleznie od podanych wartosci p i q,\r
640             okreslajacych aspekt. Aspekt wyznaczony jest stosunkiem p/q.\r
641             Dla wartosci aspektu rownej 1 zostanie narysowany idealny\r
642             okrag.  Srodek bedzie umieszczony w punkcie (x,y), promien\r
643             poziomy bedzie mial wielkosc r pixli, alfa i beta okreslaja,\r
644             odpowiednio kat poczatkowy i koncowy rysowanego wycinka. Dla\r
645             alfa = beta zostanie narysowany pelny okrag (lub elipsa).\r
646             Wartosci alfa i beta sa wyrazane w radianach, w zwyklym\r
647             ukladzie. Brzeg wycinka i jego promienie zostana narysowane\r
648             kolorem kolb, niezaleznie od stylu. Jesli wwyp <> 0, wnetrze\r
649             wycinka zostanie wypelnione biezacym kolorem i stylem.\r
650 \r
651             \r
652             HFILL(x)\r
653             \r
654                      Procedura HFILL rysuje, w biezacym kolorze i stylu,\r
655             odcinek poziomy od biezacej pozycji do punktu o\r
656             wspolrzednych\r
657             \r
658                  (x,inypos(0))\r
659             \r
660             OSTROZNIE: HFILL nie zmienia biezacej pozycji.\r
661 \r
662                      Uzycie HFILL jest zalecane przy wypelnianiu\r
663             obszarow, gdyz dziala znacznie szybciej niz odpowiedni DRAW.\r
664             Rowniez mieszajac kolory w danym stylu, HFILL, w\r
665             przeciwienstwie do DRAW nie bierze pod uwage poczatkowego\r
666             punktu odcinka, co pozwala na uzyskanie substytutu\r
667             dodatkowych kolorow.\r
668 \r
669             \f\r
670 \r
671 \r
672                                                                         14\r
673 \r
674 \r
675             VFILL(y)\r
676             \r
677             \r
678                      Procedura VFILL rysuje, w biezacym kolorze i stylu,\r
679             odcinek pionowy od biezacej pozycji do punktu o\r
680             wspolrzednych\r
681             \r
682                  (inxpos(0),y)\r
683             \r
684             OSTROZNIE: VFILL nie zmienia biezacej pozycji.\f\r
685 \r
686 \r
687                                                                         15\r
688 \r
689 \r
690             \r
691             Procedury operujace na fragmentach ekranu\r
692             \r
693             \r
694             GETMAP(x,y,tablica)\r
695             \r
696                      Procedura GETMAP zapamietuje prostokatny obszar\r
697             ekranu pomiedzy biezaca pozycja jako lewym gornym rogiem a\r
698             punktem (x,y) jako prawym dolnym rogiem w tablicy. GETMAP\r
699             nie zmienia przy tym biezacej pozycji. Tablica powinna miec\r
700             co najmniej  4 + w*sufit(k/8)*kol bajtow, gdzie w i k sa,\r
701             odpowiednio, liczba wierszy i kolumn zapamietywanego\r
702             obszaru, natomiast wartosc wspolczynnika kol zalezy od\r
703             rodzaju karty graficznej i wynosi  1 dla karty Hercules,\r
704             2 dla karty IBM oraz 4 dla karty EGA.\r
705 \r
706             Przyklad: zapamietanie obszaru 101*101 polozonego w lewym\r
707             gornym rogu ekranu.\r
708 \r
709             VAR  OKNO: ARRAY[1..700] OF INTEGER;\r
710             \r
711                  ...\r
712                  MOVE(0,0);\r
713                  GETMAP(100,100,OKNO);\r
714                  ...\r
715             \r
716 \r
717             \r
718             PUTMAP(tablica)\r
719             \r
720                      Procedura PUTMAP ustawia prostokatny obszar ekranu\r
721             o lewym gornym rogu znajdujacym sie w biezacej pozycji\r
722             zgodnie z zawartoscia tablicy, w ktorej uprzednio\r
723             zapamietano fragment ekranu za pomoca procedury GETMAP.\r
724             Biezaca pozycja nie ulega zmianie. Odtworzeniu podlega caly\r
725             zapamietany obszar, ktory jest kopiowany w nowe miejsce.\r
726 \r
727             \r
728             ORMAP(tablica)\r
729             \r
730                      Procedura ORMAP dziala podobnie jak PUTMAP, lecz o\r
731             nowej  zawartosci ekranu decyduje wynik zastosowania funkcji\r
732             or do elementow tablicy i ekranu.\r
733 \r
734             \r
735             XORMAP(tablica)\r
736             \r
737                      Procedura XORMAP dziala podobnie jak PUTMAP, lecz o\r
738             nowej  zawartosci ekranu decyduje wynik zastosowania funkcji\r
739             xor do elementow tablicy i ekranu.\f\r
740 \r
741 \r
742                                                                         16\r
743 \r
744 \r
745             \r
746             Procedury wejscia/wyjscia dla pojedynczych znakow\r
747             \r
748             \r
749             INKEY(ple)\r
750             \r
751                      Funkcja calkowita INKEY podaje i usuwa nastepny\r
752             znak z bufora klawiatury. Czytanie odbywa sie bez echa.\r
753             Jesli bufor jest pusty, wynikiem jest 0. Klawisze specjalne\r
754             kodowane sa jako liczby ujemne wedlug zalaczonej tablicy.\r
755             Metoda ALT-NUM moze byc uzyta do wprowadzenia z klawiatury\r
756             kodow powyzej 127 jako zwyklych znakow. Uniemozliwia to,\r
757             niestety, korzystanie ze znakow specjalnych o kodach od 128\r
758             do 132.\r
759 \r
760             Przyklad: zaczekaj na klawisz End.\r
761 \r
762             PROCEDURE WAIT_FOR_END;\r
763             BEGIN\r
764                  WHILE INKEY(0)<>-79 DO;\r
765             END;\r
766 \r
767             Wartosci kodow klawiszy specjalnych podane sa w Dodatku F.\r
768             \r
769             \r
770             HASCII(kod)\r
771             \r
772                      Procedura HASCII rysuje na ekranie znak\r
773             alfanumeryczny. Znak wpisany jest w raster 8*8. Gorny lewy\r
774             rog rastra umieszczony bedzie w biezacej pozycji, ktora\r
775             jednoczesnie przesunie sie o 8 pixli w prawo. Uzyta funkcja\r
776             rysujaca jest xor. Kroj znakow pobierany jest z tablicy\r
777             znajdujacej sie w ROM BIOS standardowo pod adresem\r
778             F000:FA6E. W przypadku niestandardowego ROM BIOSu obraz\r
779             znaku alfanumerycznego bedzie zly. Uzycie procedur HFONT i\r
780             HFONT8 pozwala uniezaleznic sie od wersji BIOSu a takze\r
781             korzystac z innych, rowniez wlasnorecznie zaprojektowanych\r
782             krojow znakow. Kod znaku 0 powoduje tylko wyczyszczenie\r
783             miejsca przeznaczonego na znak, bez zmiany biezacej pozycji.\r
784             Wszystkie kody maja tylko interpretacje graficzna, bez\r
785             funkcji sterujacych (NL, CR etc.).\r
786 \r
787             Przyklad: napisanie slowa "oh" na gwarantowanie czystym tle.\r
788             \r
789 \r
790             HASCII(0); HASCII('o'); HASCII(0); HASCII('h');\r
791 \r
792             Uwaga:\r
793                  Parametr procedury HASCII moze byc typu integer lub\r
794             znakowego ( character w Fortranie, char w Pascalu i C ).\r
795             \f\r
796 \r
797 \r
798                                                                         17\r
799 \r
800 \r
801             \r
802             HFONT(segment,offset)\r
803             \r
804                      Wywolanie procedury HFONT przelacza adres wzorca\r
805             znakow alfanumerycznych na segment:offset. Bez uzycia HFONT\r
806             uzywa sie adresu F000:FA6E.\r
807 \r
808             \r
809             HFONT8(segment,offset)\r
810             \r
811                      Uzycie procedury HFONT8 dolacza do programu\r
812             uzytkowego kopie tablicy kroju znakow z ROM BIOS i zwraca\r
813             adres tej kopii jako segment:offset (parametry wyjsciowe).\r
814 \r
815             \f\r
816 \r
817 \r
818                                                                         18\r
819 \r
820 \r
821             \r
822             Procedury wejscia/wyjscia dla linii\r
823             \r
824             \r
825             OUTHLINE(dlugosc,bufor)\r
826             \r
827                      Procedura OUTHLINE wywoluje HASCII dlugosc razy,\r
828             wypisujac na ekran znaki, ktorych kody zawarte sa w buforze.\r
829             Przed narysowaniem kazdego znaku wywolywane jest HASCII(0).\r
830 \r
831             \r
832             INHLINE(dlugosc,bufor)\r
833             \r
834                      Procedura INHLINE wczytuje z klawiatury linie\r
835             zlozona z co najwyzej dlugosci znakow i umieszcza je w\r
836             buforze. Do wczytywania uzyta jest procedura INKEY.\r
837             Wyswietlane jest echo. Migajacy wskaznik oznacza oczekiwanie\r
838             na nacisniecie klawisza. Klawisz BACKSPACE dziala tak, jak\r
839             mozna tego oczekiwac. Linia moze byc zakonczona klawiszem CR\r
840             albo wyczerpaniem jej dlugosci. Znak CR konczacy linie nie\r
841             jest umieszczany w buforze. Przed rozpoczeciem czytania\r
842             bufor jest wypelniany spacjami. Po zakonczeniu czytania\r
843             parametr dlugosc zwraca liczbe wczytanych znakow.\r
844             Migajacy wskaznik jest zawsze rysowany kolorem numer 1,\r
845             wyswietlane znaki natomiast biezacym kolorem.\r
846 \r
847             \r
848             Przyklad: echo wczytanej linii.\r
849 \r
850             VAR  LINIA: ARRAY[1:40] OF INTEGER;\r
851                  N: INTEGER;\r
852             BEGIN\r
853                  N:=80;\r
854                  INHLINE(N,LINIA);\r
855                  IF N=0 THEN MOVE(INXPOS(0),INYPOS(0)+10)\r
856                         ELSE OUTHLINE(N,LINIA);\r
857                  ...\r
858 \r
859             \f\r
860 \r
861 \r
862                                                                         19\r
863 \r
864 \r
865             \r
866             Procedury wejscia/wyjscia dla okienek\r
867             \r
868             \r
869             MKWNDW(x,y,kolumn,wierszy,okienko,rozmiar,ramka)\r
870             \r
871                      Procedura MKWNDW urzadza na ekranie prostokatne\r
872             okienko do konwersacji. Lewy gorny rog okienka znajdzie sie\r
873             w punkcie (x,y). Zmiesci ono zadana liczbe kolumn i wierszy\r
874             tekstu alfanumerycznego. Opis okienka bedzie przechowany w\r
875             dostarczonej przez uzytkownika tablicy okienko. Parametr\r
876             rozmiar jest na razie ignorowany, a tablica powinna miec co\r
877             najmniej 20 bajtow, lub duzo wiecej, jesli okienko ma byc\r
878             zaslaniane i odslaniane ( patrz opis procedury BURY ). Jesli\r
879             parametr ramka ma wartosc rozna od 0, obszar okienka bedzie\r
880             obwiedziony ramka, co uczyni je nieco wiekszym.\r
881 \r
882             \r
883             BURY(okienko)\r
884             \r
885                      Wywolanie BURY usuwa okienko z ekranu, przechowujac\r
886             jego obraz w dalszej czesci tablicy okienko tak, aby moc\r
887             odtworzyc je pozniej za pomoca EXPOSE. Tablica okienko musi\r
888             miec odpowiednia wielkosc, aby GETMAP obszaru okienka\r
889             pozostawilo w niej jeszcze co najmniej 20 bajtow.\r
890 \r
891             \r
892             EXPOSE(okienko,x,y)\r
893             \r
894                      Wywolanie EXPOSE odtwarza okienko przechowane za\r
895             pomoca BURY umieszczajac jego gorny lewy rog w punkcie\r
896             (x,y).\r
897 \r
898             \r
899             OUTWLINE(okienko,dlugosc,bufor)\r
900             \r
901                      Procedura OUTWLINE dziala podobnie jak OUTHLINE,\r
902             wyswietlajac linie w ramach podanego okienka. Bufor o\r
903             dlugosci wiekszej niz rozmiar okienka wyswietli sie w kilku\r
904             liniach.\r
905 \r
906             \r
907             INWLINE(okienko,dlugosc,bufor)\r
908             \r
909                      Procedura INWLINE, podobnie jak INHLINE, wczytuje z\r
910             klawiatury linie tekstu. W przypadku INWLINE okienko\r
911             wskazuje na obszar ekranu, w ktorym ma pojawiac sie echo.\r
912             Jesli dlugosc bufora jest wieksza niz rozmiar okienka echo\r
913             moze zajac w nim kilka linii. Poprawianie wprowadzanego\r
914             tekstu przy uzyciu BACKSPACE jest mozliwe tylko w ostatniej\r
915             czesci linii. Dlugosc jako parametr wyjsciowy zwraca liczbe\r
916             wczytanych znakow, bez konczacego CR.\f\r
917 \r
918 \r
919                                                                         20\r
920 \r
921 \r
922             \r
923             Procedury poziomu 2\r
924             \r
925             \r
926                      Procedury te operuja wspolrzednymi wyrazonymi\r
927             liczbami rzeczywistymi odnoszacymi sie do abstrakcyjnego\r
928             okna o dowolnych rozmiarach.\r
929 \r
930             \r
931             \r
932             Definiowanie okna\r
933             \r
934             \r
935             SWINDOW(rxy,ixy,skalowanie)\r
936             \r
937                      Procedura SWINDOW urzadza na ekranie prostokatne\r
938             okno umieszczone pomiedzy punktami naroznikowymi podanymi w\r
939             tablicy ixy jako calkowite wspolrzedne prawdziwych pixli.\r
940             Program uzytkowy tworzacy rysunek w tym obszarze bedzie\r
941             okreslal polozenie punktow w sposob abstrakcyjny we\r
942             wspolrzednych rzeczywistych. Tablica rxy podaje zakresy tych\r
943             wspolrzednych. Jesli parametr skalowanie ma wartosc 0,\r
944             abstrakcyjny prostokat bedzie po prostu odwzorowany na\r
945             wskazana czesc ekranu bez zachowania proporcji miedzy\r
946             skalowaniem w pionie i w poziomie. Jesli natomiast parametr\r
947             skalowanie bedzie rozny od zera, wykorzystana zostanie\r
948             jedynie srodkowa czesc obszaru ekranu tak, aby zachowac\r
949             rzeczywiste proporcje rysunku, niezaleznie od aspektu danego\r
950             monitora.\r
951             Odwzorowanie stosowane przez IIUWGRAF odwraca tez kierunek\r
952             wzrastania wspolrzednej y do naturalnego ukladu:\r
953             \r
954             \r
955                          (ixy(1),ixy(3))\r
956                          /\r
957                (rxy(1),rxy(4))\r
958                       ^\r
959                       |\r
960                       |\r
961                       |\r
962                       | (ixy(1),ixy(4))                  (ixy(2),ixy(4))\r
963                       | /                                   /\r
964                (rxy(1),rxy(3))--------------------->(rxy(2),rxy(3))\r
965             \r
966             \r
967             Przyklad: przygotowanie rysunku sinusoidy w gornej polowie\r
968             ekranu Herculesa.\r
969 \r
970 \r
971             VAR  RW:ARRAY [1:4] OF REAL INIT (0.,6.29,-1.,1.);\r
972                  IW:ARRAY [1:4] OF INTEGER INIT (0,719,0,173);\r
973             BEGIN\r
974                  SWINDOW(RW,IW,0);\r
975             \f\r
976 \r
977 \r
978                                                                         21\r
979 \r
980 \r
981             RWINDOW(rxy,skalowanie)\r
982 \r
983                      Procedura RWINDOW jest skrotem wywolania SWINDOW\r
984             dla odwzorowania obejmujacego caly ekran.\r
985 \r
986             \r
987             \r
988             RINXPOS(ple),RINYPOS(ple)\r
989             \r
990                      Funkcje rzeczywiste RINXPOS i RINYPOS zwracaja,\r
991             odpowiednio wspolrzedne x i y biezacej pozycji w\r
992             abstrakcyjnym oknie urzadzonym przez ostatnie wywolanie\r
993             RWINDOW lub SWINDOW. Biezaca pozycja jest zawsze zaokraglana\r
994             do najblizszego pixla.\r
995 \r
996             \r
997             \r
998             RMOVE(rx,ry)\r
999             \r
1000                      Wywolanie procedury RMOVE ustawia biezaca pozycje w\r
1001             punkcie (rx,ry) w ostatnio urzadzonym oknie. Pozycja ta jest\r
1002             zaokraglona do najblizszego pixla.\r
1003 \r
1004             \r
1005             \r
1006             RDRAW(rx,ry)\r
1007             \r
1008                      Wywolanie procedury RDRAW powoduje narysowanie w\r
1009             biezacym kolorze i stylu odcinka od biezacej pozycji do\r
1010             pixla najblizszego punktowi (rx,ry) w ostatnio urzadzonym\r
1011             oknie.\r
1012 \r
1013             \r
1014             \r
1015             RCIRB(rx,ry,rr,alfa,beta,kolb,wwyp,p,q)\r
1016             \r
1017                      Procedura RCIRB odpowiada procedurze CIRB z poziomu\r
1018             1, z tym, ze wspolrzedne srodka (rx,ry) i promien rr\r
1019             wyrazane sa, jako liczby rzeczywiste, w oknie urzadzonym\r
1020             przez ostatnie wywolanie RWINDOW lub SWINDOW. Pozostale\r
1021             parametry maja znaczenie takie, jak w CIRB.\f\r
1022 \r
1023 \r
1024                                                                         22\r
1025 \r
1026 \r
1027             \r
1028             Informacje dodatkowe\r
1029             \r
1030             \r
1031                      Pakiet IIUWGRAF zawiera dodatkowo dwa programy\r
1032             HGCPRINT.EXE oraz MGCPRINT.EXE. Umozliwiaja one drukowanie\r
1033             tworzonych obrazow graficznych na powszechnie dostepnych\r
1034             drukarkach ( np. typu STAR GEMINI, EPSON ). W przypadku\r
1035             uzywania karty Hercules nalezy stosowac program HGCPRINT, a\r
1036             dla karty IBM color/graphics program MGCPRINT.\r
1037 \r
1038                      Programow tych powinno uzywac sie w nastepujacy\r
1039             sposob :\r
1040                  przed zaladowaniem wlasnego programu nalezy wykonac\r
1041             program HGCPRINT lub MGCPRINT, w zaleznosci od rodzaju\r
1042             uzywanej karty graficznej. Kazdy z tych programow ustawia\r
1043             znaczenie klawisza PrtSc. Kazdorazowe pozniejsze nacisniecie\r
1044             klawisza PrtSc powoduje wydrukowanie graficznej zawartosci\r
1045             ekranu.\r
1046             \r
1047             Uwaga.    W przypadku karty Hercules drukowana jest\r
1048             zawartosc pierwszej strony graficznej, niezaleznie od tego,\r
1049             ktora strona jest aktualnie wyswietlana.\r
1050                       W przypadku karty IBM color/graphics klawisz PrtSc\r
1051             zaklada, ze jest ustawiony tryb kolor 320*200. Wydruk obrazu\r
1052             graficznego utworzonego w trybie mono 640*200 jest mozliwe\r
1053             poprzez uzycie procedury PRTSCR.\r
1054 \r
1055                      Mozliwosc drukowania obrazu graficznego nie\r
1056             istnieje dla karty EGA.\r
1057 \r
1058                      Autorem programow HGCPRINT oraz MGCPRINT jest\r
1059             Krzysztof Studzinski.\r
1060 \r
1061             \r
1062             \r
1063             \r
1064             Procedury dodatkowe\r
1065             \r
1066             \r
1067             PRTSCR(nr)\r
1068             \r
1069                      Procedura PRTSCR umozliwia drukowanie obrazow\r
1070             graficznych tworzonych na ekranie monitora pod kontrola\r
1071             programu. Parametr nr okresla numer strony graficznej\r
1072             (0 lub 1), ktorej zawartosc ma byc wydrukowana.\r
1073 \r
1074                      Wywolanie procedury PRTSCR z parametrem nr rownym\r
1075             zeru jest rownowazne nacisnieciu klawisza PrtSc.\r
1076 \r
1077                      W celu poprawnego dzialania tej procedury nalezy,\r
1078             analogicznie jak w przypadku klawisza PrtSc, uprzednio\r
1079             wykonac dolaczony program :\r
1080                       - HGCPRINT.EXE  w przypadku uzywania karty\r
1081             Hercules lub\r
1082                       - MGCPRINT.EXE dla karty IBM.\r
1083 \r
1084                      Procedura PRTSCR nie dziala dla karty EGA.\r
1085 \r
1086             \f\r
1087 \r
1088 \r
1089                                                                         23\r
1090 \r
1091 \r
1092             \r
1093 \r
1094                                      DODATEK A\r
1095 \r
1096                           Uzycie IIUWGRAFu z FORTRANem 77.\r
1097             \r
1098             \r
1099             1)   Procedury IN?LINE i OUT?LINE dokonuja jedynie\r
1100             transmisji tekstu, bez zadnej konwersji pomiedzy postacia\r
1101             binarna i tekstowa. Aby takiej konwersji dokonac, mozna\r
1102             posluzyc sie instrukcjami formatowanego wejscia/wyjscia\r
1103             w polaczeniu z tzw. plikami wewnetrznymi (internal file).\r
1104 \r
1105             Przyklad:\r
1106 \r
1107 \r
1108                  INTEGER*2 I,J,SUM,W(10)\r
1109                  CHARACTER*20 LINE\r
1110                  CHARACTER LINEL(20)\r
1111                  EQUIVALENCE (LINE,LINEL(1))\r
1112             \r
1113                  ...\r
1114                  CALL MKWNDW(10,10,21,4,W,20,1)\r
1115                  CALL OUTWLINE(W,20,'PODAJ 2 LICZBY (2I3)')\r
1116                  CALL INWLINE(W,20,LINEL)\r
1117                  READ (LINE,'(2I3)') I,J\r
1118                  SUM=I+J\r
1119                  WRITE (LINE,'(8H SUMA = I4)') SUM\r
1120                  CALL OUTWLINE(W,12,LINEL)     \f\r
1121 \r
1122 \r
1123                                                                         24\r
1124 \r
1125 \r
1126 \r
1127             \r
1128 \r
1129                                      DODATEK B\r
1130 \r
1131                             Uzycie IIUWGRAFu z PASCALem.\r
1132             \r
1133             \r
1134             1)   Microsoft Pascal dopuszcza jedynie 6 znakow w nazwie\r
1135             podprogramu, zatem nazwy: INHLIN(E), INWLIN(E), OUTHLI(NE),\r
1136             OUTWLI(NE), RWINDO(W), SWINDO(W), RINXPO(S), RINYPO(S) musza\r
1137             byc uzywane w skroconej postaci.\r
1138             \r
1139             2)   Niektore procedury IIUWGRAFu sa napisane w FORTRANie.\r
1140             Przy linkowaniu LINK moze domagac sie dostarczenia\r
1141             biblioteki FORTRAN.LIB. Zadanie to nalezy zignorowac.\r
1142             \r
1143             3)   Do linkowania nalezy uzywac LINK w wersji co najmniej\r
1144             3.04, do kompilacji Pascal w wersji co najmniej 3.31.\f\r
1145 \r
1146 \r
1147                                                                         25\r
1148 \r
1149 \r
1150             \r
1151 \r
1152                                      DODATEK C\r
1153 \r
1154                            Uzycie IIUWGRAFu z Lattice C.\r
1155             \r
1156             \r
1157             1)   Nalezy unikac konfliktow z nazwami globalnych zmiennych\r
1158             roboczych IIUWGRAFu. Zmienne te maja nazwy rozpoczynajace\r
1159             sie od liter WIR... i PQASP...\r
1160             \r
1161             2)   W przypadku procedur majacych parametry wyjsciowe ( w\r
1162             dodatku E sa one zaznaczone jako vars ) nalezy przy ich\r
1163             wywolaniu przekazywac adres odpowiedniego parametru\r
1164             aktualnego.\r
1165             \r
1166             Przyklad:\r
1167             \r
1168 \r
1169                       CHAR LENGTH;\r
1170                       CHAR *TEXT;\r
1171                       ...\r
1172                       INHLINE(&LENGTH,TEXT)\r
1173             \r
1174 \r
1175 \r
1176             3)   Adresy parametrow aktualnych nalezy przekazywac rowniez\r
1177             w przypadku parametrow bedacych tablicami znakowymi.\r
1178 \r
1179 \r
1180             Przyklad:\r
1181 \r
1182 \r
1183                       INT  LENGTH;\r
1184                       CHAR *TEXT;    /* LUB NP. CHAR TEXT[40]; */\r
1185                       ...\r
1186                       OUTHLINE(LENGTH, &TEXT[3]);\r
1187                       /* WYPISZ ZNAKI Z TABLICY 'TEXT', ROZPOCZYNAJAC OD\r
1188             CZWARTEGO */\r
1189             \f\r
1190 \r
1191 \r
1192                                                                         26\r
1193 \r
1194 \r
1195             \r
1196 \r
1197                                      DODATEK D\r
1198 \r
1199                             Uzycie IIUWGRAFu z LOGLANem.\r
1200             \r
1201             \r
1202             1)   W biezacej wersji LOGLANu dostepnych jest jedynie 7\r
1203             podstawowych procedur: GRON, GROFF, MOVE, DRAW, HASCII,\r
1204             HPAGE, INKEY obslugujacych wylacznie karte Hercules.\r
1205             \r
1206             2)   System okienek do konwersacji nie bedzie  w LOGLANie\r
1207             dostepny w postaci procedur standardowych. Podobnie okienka\r
1208             o wspolrzednych rzeczywistych.\r
1209             \r
1210             3)   Niektore podprogramy dostepne jako funkcje standardowe\r
1211             LOGLANu musza miec zmienione specyfikacje parametrow w\r
1212             stosunku do oryginalnego IIUWGRAFu:\r
1213             \r
1214                  IIUWGRAF  LOGLAN\r
1215             \r
1216                  GETMAP    GETMAP:function:array of ?\r
1217                  INKEY     INKEY:integer function; (* bez parametrow *)\r
1218                  INXPOS    INXPOS:integer function;(* bez parametrow *)\r
1219                  INYPOS    INYPOS:integer function;(* bez parametrow *)\r
1220             \f\r
1221 \r
1222 \r
1223                                                                         27\r
1224 \r
1225 \r
1226             \r
1227 \r
1228                                      DODATEK E\r
1229 \r
1230                        Wykaz specyfikacji procedur IIUWGRAFu.\r
1231             \r
1232             \r
1233                  proc BORDER(consts b: integer);\r
1234                L proc BURY(window: buffer);\r
1235                  proc CIRB(consts ix,iy,ir: integer;\r
1236                            consts alfa, beta: real;\r
1237                            consts cbord, bcint, p, q: integer);\r
1238                  proc CLS;\r
1239                  proc COLOR(consts c: integer);\r
1240                  proc DRAW(consts ix,iy: integer);\r
1241                L proc EXPOSE(window: buffer; consts x,y: integer);\r
1242                L proc GETMAP(consts x,y: integer; ekran: buffer);\r
1243                L proc GROFF;\r
1244                  proc GRON(consts imode: integer);\r
1245                  proc HASCII(consts ic: integer);\r
1246                  proc HFILL(consts maxx: integer);\r
1247                  proc HFONT(consts seg, offs: integer);\r
1248                  proc HFONT8(vars seg, offs: integer);\r
1249                  proc HPAGE(consts page, mode, clear: integer);\r
1250               P  proc INHLINE(vars n:integer; line: tekst);\r
1251                L func INKEY(consts idummy: integer): integer;\r
1252                  func INPIX(consts x,y: integer): integer;\r
1253                  proc INTENS(consts i: integer);\r
1254               PL proc INWLINE(window: buffer; vars n: integer;\r
1255                            line: tekst);\r
1256                L func INXPOS(consts idummy: integer): integer;\r
1257                L func INYPOS(consts idummy: integer): integer;\r
1258                L proc MKWNDW(consts x,y,icols,ilines: integer;\r
1259                            window: buffer;\r
1260                            consts iwndwsize,iborder: integer);\r
1261                  proc MOVE(consts ix,iy: integer);\r
1262                L func NOCARD(consts idummy: integer): integer;\r
1263                  proc ORMAP(ekran: buffer);\r
1264               PL proc OUTHLINE(consts n:integer; line: tekst);\r
1265               PL proc OUTWLINE(window: buffer; consts n: integer;\r
1266                            line: tekst);\r
1267                  proc PALLET(consts p: integer);\r
1268                  proc PATERN(consts p1, p2, p3, p4: integer);\r
1269                  proc POINT(consts ix,iy: integer);\r
1270                  proc POPXY;\r
1271                  proc PRTSCR(consts nr: integer);\r
1272                  proc PUSHXY;\r
1273                  proc PUTMAP(ekran: buffer);\r
1274                L proc RCIRB(consts ix,iy,ir: real;\r
1275                            consts alfa, beta: real;\r
1276                            consts cbord, bcint, p, q: integer);\r
1277                L proc RDRAW(consts rx,ry: real);\r
1278               PL func RINXPOS(consts dummy: real): real;\r
1279               PL func RINYPOS(consts dummy: real): real;\r
1280                L proc RMOVE(consts rx,ry: real);\r
1281               PL proc RWINDOW(rw: array [1:4] of real;\r
1282                            consts s: integer);\r
1283                  proc STYLE(consts s: integer);\f\r
1284 \r
1285 \r
1286                                                                         28\r
1287 \r
1288 \r
1289               PL proc SWINDOW(rw: array [1:4] of real;\r
1290                            iw: array [1:4] of integer;\r
1291                            consts s: integer);\r
1292                  proc TRACK(consts x,y: integer);\r
1293                  proc VFILL(consts maxy: integer);\r
1294                  proc VIDEO(ekran: buffer);\r
1295                  proc XORMAP(ekran: buffer);\r
1296             \r
1297             Uzyto notacji semi-pascalowej.\r
1298             Specyfikacja consts oznacza parametr przekazywany przez\r
1299             wartosc (tylko wejsciowy), vars - przez zmienna (wejsciowo-\r
1300             wyjsciowy).\r
1301             Typ buffer oznacza tablice bajtowa sluzaca do przechowania\r
1302             zawartosci okreslonego obszaru ekranu ( rozmiar jej zalezy\r
1303             od wielkosci tego obszaru ), typ tekst natomiast oznacza\r
1304             tablice znakowa.\r
1305             Litery w pierwszej kolumnie sugeruja dodatkowe wazne\r
1306             informacje (roznice) w kontekscie konkretnych jezykow\r
1307             (Fortran, Pascal, C, Loglan).\f\r
1308 \r
1309 \r
1310                                                                         29\r
1311 \r
1312 \r
1313 \r
1314                                      DODATEK F\r
1315 \r
1316                         Wartosci kodow klawiszy specjalnych:\r
1317             \r
1318             \r
1319                  3         -    ctrl-2\r
1320                  15        -    back tab (shift-tab)\r
1321                  16-25     -    ALT-Q az do ALT-P\r
1322                  30-38     -    ALT-A az do ALT-L\r
1323                  44-50     -    ALT-Z az do ALT-M\r
1324                  59-68     -    F1 az do F10\r
1325                  71        -    Home\r
1326                  72        -    Cursor-Up\r
1327                  73        -    PgUp\r
1328                  75        -    Cursor-Left\r
1329                  77        -    Cursor-Right\r
1330                  79        -    End\r
1331                  80        -    Cursor-Down\r
1332                  81        -    PgDn\r
1333                  82        -    Ins\r
1334                  83        -    Del\r
1335                  84-93     -    Shift-F1 az do Shift-F10\r
1336                  94-103    -    Ctrl-F1 az do Ctrl-F10\r
1337                  104-113   -    Alt-F1 az do Alt-F10\r
1338                  114       -    Ctrl-PrtSc\r
1339                  115       -    Ctrl-Cursor-Left\r
1340                  116       -    Ctrl-Cursor-Right\r
1341                  117       -    Ctrl-End\r
1342                  118       -    Ctrl-PgDn\r
1343                  119       -    Ctrl-Home\r
1344                  120-131   -    Alt-1 az do Alt-=\r
1345                  132       -    Ctrl-PgUp\f\r
1346 \r
1347 \r
1348                                                                         30\r
1349 \r
1350 \r
1351             \r
1352 \r
1353                                      DODATEK G\r
1354 \r
1355                                        FEDIT\r
1356             \r
1357                        Prosty program do edycji kroju znakow.\r
1358                      Dodatek do biblioteki graficznej IIUWGRAF.\r
1359             \r
1360             FEDIT pozwala komponowac i modyfikowac uklady pixli o\r
1361             wymiarze 8*8. Takie uklady moga byc wyswietlane razem z\r
1362             grafika za pomoca procedury HASCII.\r
1363             \r
1364             FEDIT produkuje opisy tablic kroju znakow w dwoch\r
1365             postaciach:\r
1366             \r
1367                  -    jako podprogram dostarczajacy adres tablicy kroju\r
1368             w postaci odpowiedniej do przekazania procedurze HFONT,\r
1369             \r
1370                  -    jako niezalezny program umieszczajacy wskaznik do\r
1371             tablicy kroju w wektorze przerwania 14H.\r
1372             \r
1373             Pierwszy format moze byc uzyty do zastapienia standardowego\r
1374             zestawu znakow zwykle znajdujacego sie w ROM BIOS pod\r
1375             adresem F000:FA6E. Jest on uzywany przez procedure HASCII do\r
1376             rysowania znakow o kodach od 0 do 127. Stad jego nazwa :\r
1377                  "format 0".\r
1378             \r
1379             Podprogram wygenerowany przez FEDIT ma nazwe HFONT8. Po\r
1380             przetlumaczeniu przez MACROASSEMBLER musi byc on linkowany\r
1381             razem z programem uzytkowym. Jesli zajdzie potrzeba zmiany\r
1382             nazwy (np. w celu dynamicznego przelaczania pomiedzy kilkoma\r
1383             krojami znakow), nazwa moze byc zmieniona recznie w tekscie\r
1384             zrodlowym.\r
1385             \r
1386             Drugi format jest uzywany do rysowania znakow z\r
1387             rozszerzonego zakresu znakow o kodach od 128 do 255. Stad\r
1388             nazwa:\r
1389                  "format 128".\r
1390             \r
1391             Opis zestawu znakow w tym formacie musi byc zaladowany do\r
1392             pamieci przed rozpoczeciem wykonania programu, ktory z niego\r
1393             korzysta. Wskaznik do tablicy kroju musi byc wpisany w\r
1394             wektor przerwania 14H. Robi to program wygenerowany przez\r
1395             FEDIT, ktory nastepnie zawiesza sie za pomoca przerwania 27H\r
1396             (terminate but stay resident). W tym przypadku tekst\r
1397             zrodlowy po przetlumaczeniu przez MACROASSEMBLER musi byc\r
1398             zlinkowany (bez zadnych bibliotek) do postaci .EXE.\r
1399             IIUWGRAF i FEDIT nie daja mozliwosci dynamicznego\r
1400             przelaczania tablic znakow rozszerzonego zakresu.\r
1401             \f\r
1402 \r
1403 \r
1404                                                                         31\r
1405 \r
1406 \r
1407             Przyklad:\r
1408             \r
1409             VAR  ISEG, IOFFS: INTEGER;\r
1410             BEGIN\r
1411                  HFONT8(ISEG,IOFFS); (* ADRES TABLICY FORMATU 0 *)\r
1412                  ...\r
1413                  HASCII(45);         (* UZYWA ROM BIOS *)\r
1414                  HASCII(145);        (* UZYWA ROZSZERZONEGO ZESTAWU *)\r
1415                  ...\r
1416                  HFONT(ISEG,IOFFS);\r
1417                  HASCII(45);         (* UZYWA TABLICY FORMATU 0 *)\r
1418                  HASCII(145);        (* TEN SAM ROZSZERZONY ZESTAW *)\r
1419                  ...\r
1420                  HFONT(16#F000,16#FA6E);\r
1421                  HASCII(45);         (* ZNOWU ROM BIOS *)\r
1422                  HASCII(145);        (* TEN SAM ROZSZERZONY ZESTAW *)\r
1423             \r
1424             \r
1425                  FEDIT jest prostym programem konwersacyjnym o kilku\r
1426             zaledwie rozkazach. Tablica kroju znakow zawiera wzorce\r
1427             ukladow pixli rozmiaru 8*8. Wzorzec pojedynczego znaku moze\r
1428             byc wyjety z tej tablicy w celu jego edycji i zapamietany z\r
1429             powrotem, byc moze w innym miejscu tablicy. Sa dwie tablice\r
1430             znakow: jedna dla kodow od 0 do 127, druga dla kodow od 128\r
1431             do 255. Pierwsza z nich nie moze byc modyfikowana. Druga z\r
1432             nich moze poczatkowo zawierac  zaladowany wczesniej\r
1433             rozszerzony zestaw lub zostac wyczyszczona. Mozna tez\r
1434             wczytac do niej zestaw zawarty w pliku wygenerowanym\r
1435             wczesniej przez FEDIT. Po dokonaniu modyfikacji, zawartosc\r
1436             tej drugiej tablicy moze byc uzyta do generacji badz\r
1437             "formatu 0" badz "128".\r
1438             \r
1439 \r
1440                                   Rozkazy FEDITu.\r
1441 \r
1442             \r
1443             Rozkazy FEDITu sa wprowadzane jako pojedyncze litery\r
1444             wybierajace czynnosci wymienione w jadlospisie wyswietlonym\r
1445             u gory ekranu. Dodatkowe parametry podaje sie po\r
1446             przynagleniu przez FEDIT.\r
1447             \r
1448             Komendy FEDITu:\r
1449             \r
1450             <    low  odswieza tablice "0 do 127"\r
1451             \r
1452             >    high odswieza tablice "128 do 255"\r
1453             \r
1454             i    init inicjalizuje zerami tablice "128 do 255"\r
1455             \r
1456             l    load laduje tablice "128 do 255" z pliku\r
1457                       dodatkowy parametr:\r
1458                            - nazwa pliku (musi istniec)\f\r
1459 \r
1460 \r
1461                                                                         32\r
1462 \r
1463 \r
1464             \r
1465             d    dump wypisuje zawartosc tablicy "128 do 255"\r
1466                       na plik; dodatkowe parametry:\r
1467                            - nazwa pliku (bedzie zapisany)\r
1468                            - baza ( 0 albo 128),\r
1469                              zaleznie od formatu\r
1470                            - jezyk:\r
1471                                 f - MS Fortran, MS Pascal\r
1472                                 s - Lattice C, model S\r
1473                                 p - Lattice C, model P\r
1474                                 d - Lattice C, model D\r
1475                                 l - Lattice C, model L\r
1476             \r
1477             e    edit wyjmuje z tablicy pojedynczy znak\r
1478                       i umieszcza go w obszarze roboczym.\r
1479                       dodatkowy parametr:\r
1480                            - kod znaku (dziesietnie)\r
1481                       Po obszarze roboczym mozna poruszac sie\r
1482                       za pomoca klawiszy kierunkowych. Pixel\r
1483                       zapala klawisz Ins, gasi klawisz Del.\r
1484                       Klawisz End powoduje wyjscie z tego trybu.\r
1485             \r
1486             t    text wyswietla tekst pomocny przy ocenie\r
1487                       jakosci ksztaltu znakow. Tekst, nie dluzszy\r
1488                       niz 40 znakow jest wprowadzany przez uzytkow-\r
1489                       nika. Dodatkowe parametry:\r
1490                            - vspace,\r
1491                            - hspace - odpowiednio, pionowy i poziomy\r
1492                       odstep w pixlach pomiedzy znakami. Normalnie,\r
1493                       vspace wynosi 2, hspace - 0.\r
1494             \r
1495             p    put  przechowuje wzorzec z obszaru roboczego pod\r
1496                       wskazanym kodem. Dodatkowy parametr:\r
1497                            - kod pozycji (dziesietnie),\r
1498                              powinien byc miedzy 128 a 255\r
1499             \r
1500             q    quit konczy dzialanie FEDIT\r
1501             \r
1502             \r
1503             Z FEDITem nalezy obchodzic sie ostroznie. Posiada on jedynie\r
1504             minimalne wbudowane zabezpieczenia i np. bez ostrzezenia\r
1505             zapisze nowa, nie wykonczona jeszcze wersje kroju znakow na\r
1506             pliku zawierajacym jedyny egzemplarz poprzedniej, bardzo\r
1507             potrzebnej wersji.\f\r
1508 \r
1509 \r
1510                                                                         33\r
1511 \r
1512 \r
1513             \r
1514                                      DODATEK H\r
1515             \r
1516                  Zmiany IIUWGRAFu w stosunku do poprzednich wersji\r
1517             \r
1518             \r
1519             \r
1520                      Zmiany IIUWGRAFu w stosunku do wersji 1.1\r
1521             \r
1522             \r
1523             1)   Rozszerzenie zestawu obslugiwanych kart graficznych o\r
1524             karte EGA  ( IBM Enhanced Graphics Adapter ).\r
1525             \r
1526             2)   Niewielkie modyfikacje procedur IIUWGRAFu :\r
1527             \r
1528                       - dodanie procedury PRTSCR,\r
1529                       - modyfikacja procedury PATERN polegajaca na :\r
1530                            zwiekszeniu liczby parametrow ( wzorcow ) z\r
1531             dwoch do czterech oraz\r
1532                            zmianie postaci tych parametrow ( zamiast\r
1533             liczb dziesietnych liczby szesnastkowe ),\r
1534             ( rozszerzenie wzorcow oczywiscie oznacza rownoczesnie\r
1535             modyfikacje procedur HFILL oraz VFILL ),\r
1536                       - zmiany nazw procedur GRAPH, TEXT, SCREEN\r
1537             odpowiednio na GRON, GROFF, NOCARD.\r
1538             \r
1539             \r
1540             \r
1541             \r
1542                      Zmiany IIUWGRAFu w stosunku do wersji 2.1\r
1543             \r
1544             \r
1545             1)   Udostepnienie procedur CIRB oraz RCIRB dla C.\r
1546             \f