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