





  utwervden

   u1.9999-01 34 04





                                  
                                  

                                  

                    grafi~eskij paket dlq dwk3.
                               M E D

                                  

                      rukowodstwo programmista
                                  


                           u1.9999-01 34 04

                             listow 30

























                                  
                                                         litera   







                               CTP. 2 

                           u1.9999-01 34 04






                            1. annotaciq




       dannyj dokument sodervit opisanie grafi~eskogo  paketa  MED.
  paket  prednazna~en  dlq  ispolxzowaniq  w  sostawe  dwk-3,3m2  s
  operacionnoj    sistemoj     os     dwk,fodos-2     iz     qzykow
  paskalx,makro,fortran.  grafi~eskij  paket  sostoit   iz   nabora
  podprogramm,  wyzow  kotoryh   iz   prikladnoj   programmy   daet
  wozmovnostx  proizwoditx   grafi~eskie   postroeniq   na   |krane
  dwk-3,3m2, ispolxzuq kontroller grafi~eskogo  displeq  (  kgd  ),
  whodq}ego w sostaw dwk-3.










































                               CTP. 3 

                           u1.9999-01 34 04






                             sodervanie



  1.   annotaciq   .............................................  2


  2.  nazna~enie,uslowiq primeneniq.............................  5


  3.  harakteristiki grafi~eskogo paketa........................  5


  4.  wozmovnosti grafi~eskogo kotrollera dwk-3,3m2.............  6


  5.  ispolxzowanie grafi~eskogo paketa.........................  7


  6.  na~alo wywoda grafi~eskoj informacii......................  8


  7.  okon~anie wywoda grafi~eskoj informacii...................  9


  8.  wkl`~enie-wykl`~enie grafi~eskogo plana...................  9


  9.  wkl`~enie-wykl`~enie alfawitno-cifrowogo plana............ 10


  10. ustanowka revima wywoda................................... 10


  11. sistema koordinat, mas{tabirowanie, okna i polq wywoda.... 11


  12. o~istka teku}ego polq wywoda.............................. 13


  13. wywod to~ki............................................... 14


  14. wywod otrezka prqmoj...................................... 14


  15. wywod okruvnosti.......................................... 15


  16. wywod dugi................................................ 16


  17. zadanie tipa linii........................................ 16


                               CTP. 4 

                           u1.9999-01 34 04


  18. wywod simwolow na grafi~eskij plan........................ 17


  19. atributy simwola.......................................... 18


  20. zapolnenie grani~no-opredelennoj oblasti.................. 19


  21. grafi~eskij kursor........................................ 20


  22. pozicionirowanie markera na alfawitno-cifrowom plane...... 22


  23. wywod massiwow 8h8 bit.................................... 23


  24. stiranie massiwa 8h8 to~ek................................ 27


  25. komponowka prikladnoj programmy s paketom................. 27


  26. ob'qwlenie podprogramm paketa w prikladnoj programme...... 28


































                               CTP. 5 

                           u1.9999-01 34 04


                 2. nazna~enie,uslowiq primeneniq.




       grafi~eskij paket MED,( dalee po tekstu - paket),  pozwolqet
  programmistu pisatx programmy, proizwodq}ie grafi~eskij wywod  na
  |kran displeq dwk-3,3m2.

       rabota podprogramm  paketa  osu}estwlqetsq  pod  uprawleniem
  SJ-monitora os dwk,fodos-2.

       apparatura, neobhodimaq dlq obespe~eniq grafi~eskogo wywoda:
  dwk-3,3m2 s kontrollerom kgd.

       ob'em pamqti, neobhodimyj  dlq  raboty  paketa,  zawisit  ot
  wybrannyh programmistom funkcij, no ne movet bytx menee 6 k slow.




               3. harakteristiki grafi~eskogo paketa.




       podprogrammy  grafi~eskogo  paketa   pozwolq`t   proizwoditx
  sledu`}ie osnownye grafi~eskie postroeniq:


         -wywod otrezkow i to~ek;
         -wywod okruvnostej i dug;
         -wywod simwolow na grafi~eskij i ac plany displeq;
         -wywod massiwow 8h8 to~ek;
         -mas{tabirowanie izobraveniq;
         -ustanowku polej wywoda na |kran;
         -ustanowku atributow dlq grafi~eskih primitiwow;
         -uprawlenie revimami wywoda;
         -zapolnenie grani~no-opredelennyh oblastej;
         -uprawlenie grafi~eskim kursorom.



















                               CTP. 6 

                           u1.9999-01 34 04


         4. wozmovnosti grafi~eskogo kotrollera dwk-3,3m2.




       paket  ispolxzuet   wozmovnosti   kontrollera   grafi~eskogo
  displeq ( kgd ), kotoryj pozwolqet proizwoditx wywod  grafi~eskoj
  informacii na dwk. opi{em kratko wozmovnosti kgd, |to  neobhodimo
  dlq ponimaniq funkcij i roli  podprogramm  paketa,  a  takve  dlq
  wwedeniq takogo  ponqtiq  kak  "plany"  displeq,  kotorymi  my  w
  dalxnej{em budem polxzowatxsq.

       kgd  funkcioniruet  sowmestno  s  kontrollerom   simwolxnogo
  displeq  ksd,ksm  ili  l`bym  drugim.  kgd   ispolxzuet   signaly
  sinhronizacii simwolxnogo kontrollera i tot wideo-signal, kotoryj
  sootwetstwuet alfawitno-cifrowomu izobraveni`.  k  |tomu  signalu
  kgd "podme{iwaet" signal, sootwetstwu`}ij  sostoqni`  bitow  ozu,
  kotoroe razme}eno w kgd. takim obrazom na monitor  dwk  postupaet
  wideo-signal, nesu}ij  w  sebe  informaci`  alfawitno-cifrowu`  i
  grafi~esku`.

       kgd  pozwolqet  "wkl`~atx"  i  "wykl`~atx"  prohovdenie   na
  monitor alfawitno-cifrowoj  i  grafi~eskoj  informacii,  tak  ~to
  movno wybratx  libo  wywod  grafi~eskoj  informacii  sowmestno  s
  alfawitno-cifrowoj, libo otdelxno l`boj iz nih,  libo  zapre}enie
  l`bogo wywoda na monitor.

       w silu togo, ~to su}estwu`t dwa signala, ne  zawisq}ie  drug
  ot druga, movno goworitx o  dwuh  "planah"  displeq  :  odin  dlq
  wywoda alfawitno-cifrowoj informacii, drugoj -  dlq  grafi~eskoj.
  dalee termin "plan" budem upotreblqtx bez kawy~ek i pod nim budem
  ponimatx izobravenie na  |krane  monitora,  sootwetstwu`}ee  libo
  alfawitno-cifrowoj, libo grafi~eskoj informacii, sformirowannoj w
  kgd ili w simwolxnom kontrollere.

       kgd   formiruet   wideo-signal,   qwlq`}ijsq    otobraveniem
  sostoqniq ozu, razme}ennogo w nem. esli bit ozu sodervit edinicu,
  to pri wywode na |kran budet sformirowana swetq}aqsq to~ka,  esli
  nolx, to w moment wywoda podswetka teku}ej to~ki proizwoditxsq ne
  budet. ozu kgd imeet bajtowu` organizaci` i ob'em  16k  bajt,  no
  wywoditsq na |kran tolxko ego ~astx. wywod  osu}estwlqetsq  takim
  obrazom, ~to formiruetsq 286 strok po 50  bajt  w  stroke.  takim
  obrazom, razre{a`}aq sposobnostx kgd - 286H400 to~ek. dlq dostupa
  k ozu kgd sodervit 2 registra : adresa  i  dannyh.  posle  zapisi
  adresa ozu w registr adresa kgd w ego registre  dannyh  nahoditsq
  bajt informacii  s  kotorym  movno  wypolnqtx  l`bye  operacii  -
  ~tenie,modifikaci`,zapisx. pri |tom wse izmeneniq teku}ego  bajta
  w registre soprowovda`tsq izmeneniqmi pri wywode ego na |kran.

       iz skazannogo widno, ~to kgd predstawlqet  soboj  dostato~no
  prostoe  ustrojstwo,  i  dlq  formirowaniq  otrezkow   i   drugih
  primitiwow neobhodimo ispolxzowatx specialxnye programmy, kotorye
  po trebowani` polxzowatelq proizwodqt ustanowku bitow w  ozu  kgd
  takim obrazom, ~toby pri wywode grafi~eskogo plana  formirowalisx
  trebuemye izobraveniq.  paket  MED  qwlqetsq  odnim  iz  paketow,
  kotoryj kak raz i wypolnqet podobnye  dejstwiq  i  realizuet  dlq
  polxzowatelq nekotoryj nabor  prostyh  dejstwij  nad  bitami  ozu
  kgd,wywodimymi swetq}imisq to~kam na |kran monitora.

                               CTP. 7 

                           u1.9999-01 34 04


               5. ispolxzowanie grafi~eskogo paketa.




       dlq togo, ~toby polu~itx wozmovnostx grafi~eskogo wywoda  iz
  prikladnoj programmy, neobhodimo predstawitx wywodimu` informaci`
  w wide nabora primitiwow, realizowannyh grafi~eskim paketom. esli
  pri |tom, naprimer, trebuetsq prowesti  prqmu`,  to  proizwoditsq
  wyzow podprogrammy paketa LINE. esli ve dlq wywodimoj  informacii
  net sootwetswu`}ego primitiwa w pakete, to movno libo  proizwesti
  poto~e~nyj  wywod,  libo,  poprobowatx  smodelirowatx   wywodimu`
  kriwu` iz korotkih otrezkow. w l`bom slu~ae  wybor  predstawleniq
  izobraveniq w wide primitiwow paketa  budet  qwlqtxsq  twor~eskim
  aktom polxzowatelq.

       w prikladnoj programme pi{utsq  wyzowy  podprogramm  paketa,
  proizwoditsq translqciq programmy, zatem na  |tape  komponowki  k
  prikladnoj programme proizwoditsq podkl`~enie podprogramm paketa.
  takim obrazom, ispolxzowanie grafi~eskogo wywoda proizwoditsq  za
  s~et ispolxzowaniq adresnogo prostranstwa polxzowatelq.

       grafi~eskij paket MED postawlqetsq w wide bibliotek os i ego
  movno ispolxzowatx  iz  qzykow  fortran,  paskalx  i  makro.  dlq
  paskalq ispolxzuetsq odin nabor bibliotek, dlq  fortrana  drugoj,
  |to  swqzano  so  sposobami  pereda~i  parametrow  podprogrammam,
  prinqtymi w ukazannyh qzykah.

       pri  ispolxzowanii  qzyka  paskalx  w  prikladnoj  programme
  neobhodimo  opisatx  ispolxzuemye  podprogrammy   paketa   i   ih
  parametry w na~ale prikladnoj programmy, pri |tom opisanie kavdoj
  procedury dolvno soprowovdatsq kl`~ewym slowom ;EXTERNAL;  ,  kak
  soob}enie translqtoru o tom, ~to |to wne{nqq,  realizowannaq  wne
  programmy procedura.

       pri  ispolxzowanii  qzyka  fortran   opisanij   delatx   net
  neobhodimosti, wse podprogrammy, kotorye w programme ne  opisany,
  s~ita`tsq "wne{nimi".

       podprogrammy  paketa   movno   ispolxzowatx   iz   programm,
  napisannyh  na  makroassemblere,  pri  |tom  neobhodimo   opisatx
  podprogrammy kak wne{nie w operatore .GLOBL , pereda~a parametrow
  proizwoditsq  ~erez  stek,  esli  ispolxzuetsq  paket  dlq  qzyka
  paskalx ili spiskom posredstwom registra  R5,  esli  ispolxzuetsq
  paket dlq qzyka fortran.  podrobnee  sm.  rukowodstwa  sistemnogo
  programmista dlq qzykow paskalx i fortran.

       proinformirowaw  translqtor  ob  ispolxzowanii   podprogramm
  paketa, dalee w tekste nuvno wyzywatx ih, sobl`daq prawila qzyka,
  osobenno w ~asti tipow parametrow.









                               CTP. 8 

                           u1.9999-01 34 04


              6. na~alo wywoda grafi~eskoj informacii.




       dlq na~ala wywoda grafi~eskoj informacii neobhodimo  wyzwatx
  podprogrammu   paketa   INIT.   s   pomo}x`   |toj   podprogrammy
  proizwoditsq inicializaciq podprogramm paketa,  wkl`~aetsq  wywod
  na grafi~eskij plan, proizwoditsq o~istka grafi~eskogo |krana,  a
  to~nee - ozu kgd, w  kotorom  posle  wkl`~eniq  pitaniq  zapisana
  proizwolxnaq informaciq.  odnowremenno  s  o~istkoj  grafi~eskogo
  plana proizwoditsq  o~istka  i  alfawitno-cifrowogo  i  ustanowka
  markera  w  na~alo  |krana.  dlq  togo,  ~toby  inicializaciq  ne
  uni~tovila nuvnu`  informaci`  alfawitno-cifrowogo  plana,  nuvno
  wyzywatx podprogrammu  INIT  w  samom  na~ale  raboty  prikladnoj
  programm.

       nive  priweden  primer  prostoj  programmy  na   paskale   i
  fortrane, proizwodq}ej risowanie kwadrata:


 	paskalx

 PROGRAM QUAD;
   PROCEDURE INIT;EXTERNAL;
   PROCEDURE LINE(X0,Y0,X1,Y1:INTEGER);EXTERNAL;
   PROCEDURE FINIT;EXTERNAL;
   VAR C:INTEGER;
 BEGIN
   READLN(C);
   INIT;
   LINE(10,10,10,200);
   LINE(10,200,200,200);
   LINE(200,200,200,10);
   LINE(200,10,10,10);
   WRITELN('PAUSE');
   READLN(C);
   FINIT;
 END.

 	fortran

         CALL  INIT
         CALL  LINE(10,10,10,200)
         CALL  LINE(10,200,200,200)
         CALL  LINE(200,200,200,10)
         CALL  LINE(200,10,10,10)
         PAUSE
         CALL  FINIT
         STOP
         END








                               CTP. 9 

                           u1.9999-01 34 04


            7. okon~anie wywoda grafi~eskoj informacii.




       dlq zawer{eniq wywoda grafi~eskoj informacii  nuvno  wyzwatx
  podprogrammu  paketa   FINIT,   kotoraq   proizwodit   wykl`~enie
  grafi~eskogo  plana,  wkl`~enie  alfawitno-cifrowogo.   poslednee
  dejstwie neobhodimo iz-za togo, ~to alfawitno-cifrowoj plan movno
  otkl`~atx s pomo}x` podprogrammy paketa ANMODE.




            8. wkl`~enie-wykl`~enie grafi~eskogo plana.




       pri   rabote   prikladnoj   programmy    movet    wozniknutx
  neobhodimostx  wremenno  wykl`~itx  grafi~eskij  plan,  ne  menqq
  wywedennoj w nego informacii. dlq |togo  wyzywaetsq  podprogramma
  GRMODE, s parametrom, kotoryj imeet zna~enie nolx. dlq  wkl`~eniq
  nuvno  wyzwatx  |tu  ve  podprogrammu   s   nenulewym   zna~eniem
  parametra. nive priweden fragment  programmy  na  qzyke  paskalx,
  proizwodq}ij sna~ala  wykl`~enie,  zatem  wkl`~enie  grafi~eskogo
  plana.


    PROGRAM TEST;
       . . .
       PROCEDURE GRMODE(ONOFF:INTEGER);EXTERNAL;
       . . .
    BEGIN
      . . .
      GRMODE(0);
      . . .
      GRMODE(ORD(TRUE));
      . . .
    END.


       w sootwetswii s prawilami qzykow wmesto konstanty pri wyzowe
  mogut  ispolxzowatxsq   proizwolxnye   wyraveniq,   ograni~eniqmi
  qwlq`tsq slu~ai, kogda trebuetsq ukazanie peremennoj  dlq  priema
  zna~eniq nekotorogo parametra iz wyzywaemoj programmy. |ti slu~ai
  otme~a`tsq dalee osobo, w bolx{instwe ve slu~aew wmesto parametra
  movno upotreblqtx konstanty, konstantnye wyraveniq,  wyraveniq  s
  ispolxzowaniem zna~enij peremennyh.  w  priwedennom  primere  dlq
  wkl`~eniq grafi~eskogo plana w  ka~estwe  fakti~eskogo  parametra
  ispolxzowano wyravenie, kotoroe imeet swoim zna~eniem edinicu.








                               CTP. 10 

                           u1.9999-01 34 04


         9. wkl`~enie-wykl`~enie alfawitno-cifrowogo plana.




       dlq wkl`~eniq-wykl`~eniq alfawitno-cifrowogo plana displeq w
  proizwolxnyj moment wremeni  nuvno  wyzwatx  podprogrammu  paketa
  ANMODE. nulewoe zna~enie parametra wykl`~aet  plan,  nenulewoe  -
  wkl`~aet. ob'qwlenie i wyzow podprogrammy  takie  ve  kak  i  dlq
  podprogrammy GRMODE.




                    10. ustanowka revima wywoda.




       wsledstwie  togo,  ~to  izobravenie  formiruetsq  w  kgd  po
  sostoqni` ozu, poqwlqetsq wozmovnostx wybora  neskolxkih  revimow
  wywoda w |to ozu. w pakete realizowany 3 revima wywoda, a  imenno
  : wywod  ustanowkoj,  sbrosom,  inwersiej  bitow  wideo-ozu.  dlq
  ukazaniq   revima   wywoda   neobhodimo   wyzywatx   podprogrammu
  grafi~eskogo paketa DRAWMODE.  otricatelxnoe  zna~enie  parametra
  |toj podprogrammy wyzywaet ustanowku revima inwersii. pri  wywode
  primitiwow, naprimer otrezka, to~ki, ~erez kotorye on  prowoditsq
  budut prowerqtxsq na 0 ili 1. esli oni ustanowleny, to sbrosqtsq,
  esli ve oni ne byli ustanowleny, to ustanowqtsq i budut widny  na
  |krane. perese~enie dwuh otrezkow budet soprowovdatxsq poqwleniem
  "dyrki" w meste perese~eniq. ne sleduet wosprinimatx  |tot  revim
  wywoda kak ne o~enx prigodnyj dlq realxnoj  raboty.  w  nekotoryh
  slu~aqh trebuetsq proizwoditx nebolx{ie izmeneniq izobraveniq  na
  |krane, pri |tom bolx{aq ~astx ego ne trogaetsq, udalq`tsq tolxko
  nebolx{ie fragmenty. edinstwennym "de{ewym" sposobom  realizowatx
  |to qwlqetsq wywod w  revime  inwersii:  sna~ala  w  |tom  revime
  proizwoditsq wywod wsego izobraveniq, zatem powtorqetsq wywod teh
  fragmentow, kotorye trebuetsq udalitx, wywod budet soprowovdatxsq
  udaleniem   to~ek,   prinadleva}ih   "udalqemym"   fragmentam   i
  "zatqgiwaniem dyr" w mestah perese~enij s drugimi fragmentami.

       legko  zametitx,  ~to   prostoj   wywod   sbrosom   nenuvnyh
  fragmentow  budet  soprowovdatxsq  poqwleniem  pustot  na   meste
  perese~eniq primitiwow. odnako, wywodu w revime  inwersii  prisu}
  serxeznyj   nedostatok   -   prowedenie   pu~ka   prqmyh    movet
  soprowovdatxsq  propadaniem  zna~itelxnogo  sektora,  w   kotorom
  prqmye ~asti~no sowpada`t.

       revim  wywoda  sbrosom  wybiraetsq   pri   pomo}i   nulewogo
  parametra podprogrammy. takoj revim udoben pri wywode "~ernym" na
  "swetlyj" fon.

       revim wywoda ustanowkoj  podrazumewaetsq  pri  inicializacii
  paketa   i   zadaetsq    polovitelxnym    nenulewym    parametrom
  podprogrammy.

       priwedem primery ob'qwleniq i ispolxzowaniq  podprogrammy  w
  programmah na paskale i fortrane:

                               CTP. 11

                           u1.9999-01 34 04


 	paskalx

 PROGRAM TEST;
    . . .
   PROCEDURE DRAWMODE(I:INTEGER);EXTERNAL;
    . . .
   VAR MODE:INTEGER;
 BEGIN
   . . .
   MODE:=-1;
   . . .
   DRAWMODE(MODE);
   . . .
   DRAWMODE(-1);
   . . .
 END.


 	fortran

         . . .
         CALL  DRAWMO(AMAX(OLDMOD,NEWMOD)
         . . .
         CALL  DRAWMO(0)
         . . .
         END






    11. sistema koordinat, mas{tabirowanie, okna i polq wywoda.




       dlq wypolneniq grafi~eskih  postroenij  paket  predostawlqet
  nabor  podprogramm,  proizwodq}ih  wywod  na  grafi~eskij   |kran
  otrezkow, to~ek, okruvnostej, dug, simwolow,  kotorye  nazywa`tsq
  primitiwami iz-za togo, ~to slovnoe izobravenie movno predstawitx
  w wide nekotorogo nabora |tih, prostyh |lementow izobraveniq. dlq
  ukazaniq raspoloveniq primitiwow na  |krane  trebuetsq  nekotoraq
  koordinatnaq sistema.

       w   pakete   primenena   dekartowa   prqmougolxnaq   sistema
  koordinat,  wse  izobraveniq  formiru`tsq  iz  primitiwow   putem
  zadaniq koordinat ih na~ala i konca w wide  pary  ~isel,  perwoe,
  uslowno nazywaemoe X, s~itaetsq zada`}im polovenie wdolx  bolx{ej
  storony |krana,  wtoroe  -  Y  -  wdolx  menx{ej  storony.  posle
  inicializacii  paketa  w  nem  s~itaetsq,  ~to  na~alo  koordinat
  raspoloveno  w  lewom  nivnem  uglu  |krana,  i  emu  soowetswu`t
  koordinaty (0,0), pri  |tom  samaq  werhnqq  to~ka  sprawa  imeet
  koordinaty (399,279). takim  obrazom,  "razre{a`}aq  sposobnostx"
  sostawlqet 400 po  X  i  280  po  Y.  wse  |lementy  izobraveniq,
  koordinaty kotoryh wyhodqt za ukazannye predely,  "otseka`tsq"  ,
  to estx libo ne widny wowse,  libo  widny  tolxko  te  ih  ~asti,
  kotorye popada`t w predely.

                               CTP. 12

                           u1.9999-01 34 04


       inogda trebuetsq wozmovnostx otobravatx bolee protqvennye po
  koordinatam ob'ekty, pustx dave cenoj poteri to~nosti otobraveniq
  ih melkih detalej.  dlq  wypoleneniq  |togo  paket  predostawlqet
  podprogrammu WINDOW, s pomo}x` kotoroj daetsq wozmovnostx ukazatx
  predstawlq`}ie interes  predely  ob'ektow,  wywodimyh  prikladnoj
  programmoj  na  |kran.   parametry   |toj   podprogrammy   zada`t
  koordinaty lewoj nivnej to~ki, kotoraq pri wywode popadet w samu`
  lewu` nivn`` to~ku na |krane, i koordinaty werhnej prawoj  to~ki,
  kotoraq  sowmestitsq  s  samoj  werhnej  to~koj  |krana.  zadanie
  parametrow  proizwoditsq  w  celyh  ~islah,   i   takim   obrazom
  poqwlqetsq   wozmovnostx    zadaniq    ob'ektow    protqvennostx`
  -32768..+32767  po  X  i  -32768..+32767  po  Y.  sposob  zadaniq
  koordinat w teh edinicah, kotorye prisu}i re{aemoj zada~e polu~il
  nazwanie raboty w "mirowyh"  koordinatah.  otobravenie  ob'ektow,
  zadannyh w takih  koordinatah  na  realxnyj  |kran,  s  ime`}ejsq
  razre{a`}ej sposobnostx` proizwoditsq putem mas{tabirowaniq,  pri
  |tom mogut izmenqtxsq proporcii izobraveniq.  ukazanie  "okna"  w
  mirowom  prostranstwe,  kotoroe  budet   wywoditxsq,   opredelqet
  proporcii  i   mas{tab   wywodimogo   izobraveniq,   odnowremenno
  ukazywaetsq, ~to  wse,  ~to  ne  popadaet  w  okno,  dolvno  bytx
  otse~eno. nive priwoditsq fragment programmy  na  qzyke  paskalx,
  kotoraq  opredelqet  okno  i   proizwodit   wywod   treugolxnika,
  zadannogo w mirowyh koordinatah.


    PROGRAM TTT;
      . . .
      PROCEDURE WINDOW(XLEFT,YBOTTOM,XRIGHT,YTOP:INTEGER);EXTERNAL;
      . . .
    BEGIN
      . . .
      WINDOW(-100,-100,500,500);
      LINE(60,-99,300,450);
      LINE(300,450,200,200);
      LINE(200,200,60,-99);
     . . .
    END.


       w nekotoryh slu~aqh trebuetsq proizwoditx wywod ob'ektow  iz
  zadannogo okna ne na wesx |kran, a tolxko w nekotoru` oblastx  na
  nem. takaq oblastx oby~no nazywaetsq polem wywoda, a  zadanie  ee
  proizwoditsq putem ukazaniq poloveniq lewogo  nivnego  i  prawogo
  werhnego  ugla  prqmougolxnika,  opredelq`}ego  pole  wywoda   na
  |krane.  w  pakete   dlq   wypoleneniq   |toj   funkcii   imeetsq
  podprogramma   VIEWPORT,   kotoraq   imeet   swoimi   parametrami
  pere~islennye to~ki, zadannye celymi ~islami iz predelow 0..399 i
  0..279 po X i Y sootwetswenno. w priwedennoj  nive  programmy  na
  fortrane proizwoditsq wywod treugolxnika sna~ala na  wesx  |kran,
  zatem w opredelennoe na nem pole wywoda.


         CALL INIT
         CALL WINDOW(-100,-100,500,500)
         CALL TRIANG
         CALL VIEWPO(200,140,300,260)
         CALL TRIANG
         PAUSE

                               CTP. 13

                           u1.9999-01 34 04


         CALL FINIT
         STOP
         SUBROUTINE TRIANG
         CALL LINE(60,-99,300,450)
         CALL LINE(300,450,200,200)
         CALL LINE(200,200,60,-99)
         RETURN
         END


       wywod soprowovdaetsq mas{tabirowaniem i izmeneniem proporcij
  izobraveniq. ukazanie polq wywoda  priwodit  k  tomu,  ~to  wywod
  budet proizwoditsq tolxko w  ukazannu`  oblastx,  takim  obrazom,
  movno, zadaniem poo~eredno neskolxkih polej  wywoda,  proizwoditx
  nezawisimo wywod neskolxkih izobravenij w raznye  oblasti  odnogo
  |krana.

       pri zadanii polq wywoda  i  okna  opredelq`tsq  ko|fficienty
  preobrazowaniq i predely. pri |tom  nikakih  drugih  dejstwij  ne
  proizwoditsq.

       razmer polq wywoda dolven bytx bolx{e ili rawen  1  po  Y  i
  bolx{e ili rawen 8 po X.




                 12. o~istka teku}ego polq wywoda.




       dlq wypolneniq o~istki wsego |krana  pered  na~alom  raboty,
  kak  uve  goworilosx,  trebuetsq  wyzow  podprogrammy   INIT.   w
  dalxnej{em movet potrebowatxsq proizwesti  o~istku  wsego  |krana
  ili ego  ~asti,  qwlq`}ejsq  w  nastoq}ij  moment  teku}im  polem
  wywoda. dlq |togo sleduet wyzwatx podprogrammu paketa NEWPICTURE,
  parametr kotoroj zadaet, kak budet  proizwoditxsq  o~istka:  esli
  parametr otricatelxnyj,  to  proizojdet  inwersiq  teku}ego  polq
  wywoda; esli parametr  nulewoj,  to  o~istka;  esli  ve  parametr
  bolx{e ili rawen 1, to proizojdet "zaliwka" polq wywoda, wse  ego
  to~ki budut ustanowleny w 1,  |tot  revim  udoben  dlq  wywoda  w
  revime stiraniq, "~ernym" po "belomu" fonu.

       parametr wweden dlq soglasowannosti  s  ime`}imisq  revimami
  wywoda  primitiwow   stiraniem,inwersiej   i   ustanowkoj.   nive
  priwoditsq primer ob'qwleniq procedury o~istki dlq paskalq.


    PROGRAM TT;
      . . .
      PROCEDURE NEWPICTURE(CLRMODE:INTEGER);
      . . .


       kak i dlq dlq drugih opisannyh ranee parametrow, fakti~eskim
  parametrom movet bytx l`boe celoe wyravenie.


                               CTP. 14

                           u1.9999-01 34 04


                          13. wywod to~ki.




       wyzow podprogrammy DOT soprowovdaetsq wywodom  po  ukazannym
  koordinatam   to~ki   w   teku}em   revime   wywoda,   to    estx
  stiraniem,inwersiej ili ustanowkoj. ob'qwlenie procedury  DOT  na
  qzyke paskalx proizwoditsq sledu`}im obrazom:


         PROCEDURE DOT(X,Y:INTEGER);EXTERNAL;






                     14. wywod otrezka prqmoj.




       dlq wywoda otrezka  prqmoj  wyzywaetsq  podprogramma  paketa
  LINE,  koordinaty  kotoroj  zada`t  na~alxnu`  i  kone~nu`  to~ki
  prqmoj. nali~ie dwuh par koordinat priwodit k tomu, ~to w otli~ie
  ot drugih grafi~eskih paketow w  pakete  MED  otsutswuet  ponqtie
  "teku}ej pozicii", to estx nekotoroj  to~ki,  w  kotoru`  smotrit
  nekotoryj  "lu~".  takoj  podhod   imeet   swoi   dostoinstwa   i
  nedostatki,  ob  otsutstwii  ponqtiq  "teku}aq   poziciq"   zdesx
  upominaetsq dlq informacii  tem,  kto  uve  porabotal  na  drugih
  grafi~eskih paketah.

       pri wywode otrezka movet okazatxsq tak, ~to  iz-za  ukazaniq
  okna i koordinat otrezka, on ne pomestitsq celikom w pole wywoda,
  pri |tom proizojdet otse~enie wsego, ~to ne popadaet  w  "ramku",
  zadawaemu` s pomo}x` podprogramm WINDOW i VIEWPORT.






















                               CTP. 15

                           u1.9999-01 34 04


                       15. wywod okruvnosti.




       dlq postroeniq okruvnosti  neobhodimo  wyzwatx  podprogrammu
  paketa CIRCLE i ukazatx  w  ee  parametrah  radius  i  koordinaty
  centra w wide celyh ~isel. tak kak  dlq  otrisowki  okruvnosti  w
  pakete primenen specialxnyj sposob wy~isleniq to~ek na nej, paket
  budet wsegda wywoditx imenno okruvnostx, dave esli zadaniem  polq
  wywoda i okna ustanowleno iskavenie  proporcij  izobraveniq,  pri
  |tom radius peres~itywaetsq soglasno mas{tabu  po  X.  dlq  togo,
  ~toby okruvnostx wsegda wywodilasx imenno okruvnostx`, bez sboew,
  rekomenduetsq wybiratx odinakowye proporcii po X i Y pri ukazanii
  polej wywoda i okon. esli ve  trebuetsq  polu~enie  |llipsow  pri
  svatii po l`boj iz koordinat, to lu~{e ispolxzowatx  podprogrammy
  splajn-interpolqcii ili ve realizowatx samim  okruvnostx  w  wide
  nabora otrezkow.

       okruvnostx, kak i bolx{instwo drugih primitiwow, wywoditsq w
  teku}em revime wywoda. esli okruvnostx ne  pome}aetsq  celikom  w
  pole wywoda, to  proishodit  otse~enie  po  pol`  wywoda.  radius
  okruvnosti posle mas{tabirowaniq dolven bytx bolx{e 1. ob'qwlenie
  dlq qzyka paskalx sleduet delatx w wide:


         PROCEDURE CIRCLE(XC,YC,R:INTEGER);EXTERNAL;
































                               CTP. 16

                           u1.9999-01 34 04


                          16. wywod dugi.




       dlq  postroeniq  dugi  wyzywaetsq   podprogramma   ARC.   ee
  parametry zada`t polovenie centra,  radius,  na~alxnu`  to~ku  na
  duge, kone~nu` to~ku i naprawlenie wywoda, po ili protiw  ~asowoj
  strelki. prowerki na su}estwowanie dugi po zadannym parametram ne
  proizwoditsq.   dlq   dugi   sprawedliwy   wse   ograni~eniq   na
  proporcionalxnostx  mas{tabirowaniq,  priwedennye  pri   opisanii
  wywoda okruvnosti.

       nali~ie  nekotoryh  parametrow  movet  pokazatxsq  izli{nim,
  nekotorym ob'qsneniem |tomu movet sluvitx  nevelanie  proizwoditx
  okruglenie pri wy~islenii radiusa  po  zadannym  to~kam,  kotoroe
  movet bytx  proizwedeno  sposobom,  nepriemlemym  dlq  prikladnoj
  programmy. ob'qwlenie podprogrammy dlq wywoda dugi w programme na
  qzyke paskalx priwoditsq nive.

         PROCEDURE ARC(XC,YC,R,XB,YB,XE,YE,CW:INTEGER);EXTERNAL;

       esli parametr CW imeet nulewoe zna~enie, to  duga  wywoditsq
  ot na~alxnoj to~ki k kone~noj protiw ~asowoj strelki, ina~e - po.




                      17. zadanie tipa linii.




       pri wywode prqmyh, dug  i  okruvnostej  movet  potrebowatxsq
  kak-to  otdelitx  ih  drug  ot  druga.  uniwersalxnoj   praktikoj
  qwlqetsq wywod ih razli~nymi  tipami  linij.  dlq  ukazaniq  tipa
  linii, kotorym sleduet wywoditx opisannye ranee primitiwy,  paket
  predostawlqet dwe podprogrammy : LINESTYLE i USERSTYLE.  parametr
  podprogrammy LINESTYLE  proizwodit  ustanowku  odnogo  iz  wosxmi
  standartnyh tipow linij, on movet prinimatx l`boe  zna~enie,  pri
  opredelenii tipa budet  proizwedeno  wy~islenie  nomera  tipa  po
  modul` 8 ot zadannogo ~isla,  odnako  lu~{e  zadawatx  tip  linii
  ~islami ot 0 do 7. sootwetswie mevdu zna~eniem parametra i  tipom
  linii sledu`}ee:


     zna~enie parametra         tip linii

              0               splo{naq;
              1               to~e~naq;
              2               {trihowaq, korotkij {trih;
              3               {trihowaq, srednij {trih;
              4               {trihowaq, dlinnyj {trih;
              5               {trih-punktir;
              6               {trihowaq, {trih korotkij, dlinnyj {trih;
              7               {trihowaq, dwa {triha, dlinnyj {trih.



                               CTP. 17

                           u1.9999-01 34 04


       dlq   ukazaniq   "obrazca",   soglasno   kotoromu    sleduet
  proizwoditx wywod to~ek, realizu`}ih opisannye  ranee  primitiwy,
  imeetsq  podprogramma  USERSTYLE,  parametrom  kotoroj   qwlqetsq
  ~islo, kotoroe budet ispolxzowatxsq kak obrazec. pri  |tom  bitam
  ~isla, ustanowlennym w 1, budet sootwetstwowatx wywod to~ki,  dlq
  nulewyh bitow wywod proizwoditxsq ne  budet.  wyzow  podprogrammy
  USERSTYLE zamenqet obrazec standartnogo tipa linii na  ukazannyj,
  on budet ispolxzowatxsq do nowogo zadaniq  obrazca  ili  ukazaniq
  wybora standartnogo tipa linii. ob'qwlenie podprogramm  w  na~ale
  ispolxzu`}ej ih programmy na qzyke paskalx sledu`}ee:


         PROCEDURE LINESTYLE(NEWSTYLE:INTEGER);EXTERNAL;
         PROCEDURE USERSTYLE(NEWPATTERN:INTEGER);EXTERNAL;



       posle inicializacii paketa w nem ustanowlen standartnyj  tip
  linii 0, obrazec emu sootwetstwu`}ij - 177777 (8).




              18. wywod simwolow na grafi~eskij plan.




       dlq wywoda poqsnq`}ej  risunki  tekstowoj  informacii  movno
  ispolxzowatx oby~nyj  wywod  w  alfawitno-cifrowoj  plan.  odnako
  inogda trebuetsq wywoditx simwoly  i  na  grafi~eskij  plan,  dlq
  |togo w pakete imeetsq podprogramma  CHARACTER,  kotoraq  wywodit
  simwol w pozicii,  zadannoj  zna~eniqmi  perwyh  dwuh  parametrow
  podprogrammy.   kod   simwola   zadaetsq    tretxim    parametrom
  podprogrammy. kodirowka takaq ve, kak i w simwolxnom  kontrollere
  dwk, to estx kod koi-7, nabory n0,n1. perekl`~enie mevdu naborami
  po  simwolam  rus/lat  s  wosxmeri~nym  |kwiwalentami  -   16/17.
  atributy wywodimogo simwola opisany nive. esli peres~itannyj  pri
  mas{tabirowanii  razmer  simwola   stanowitsq   menx{e   razmerow
  matricy,  ego  zada`}ej,  to  otobravaetsq  ~astx  matricy.   pri
  izmenenii mas{tabow, swqzannyh s ukazaniem okna  i  polq  wywoda,
  proizwoditsq   proporcionalxnoe   izmenenie   razmerow   simwola.
  uprawlq`}ie simwoly koi-7 ne otobrava`tsq  i  ne  otrabatywa`tsq.
  primery ob'qwleniq i ispolxzowaniq podprogrammy iz qzykow paskalx
  i fortran budut priwedeny nive.














                               CTP. 18

                           u1.9999-01 34 04


                       19. atributy simwola.




       w  pakete  imetsq  wozmovnostx   wywoditx   simwoly   raznyh
  razmerow, orientacii i {riftow. dlq wybora razmera simwolow nuvno
  wyzwatx podprogrammu SETCHSIZE, dwa ee parametra  zada`t  razmery
  simwola w  mirowyh  edinicah,  po|tomu  pri  izmenenii  mas{tabow
  proizwoditsq proporcionalxnoe izmenenie  simwola,  wywodimogo  na
  teku}ee pole wywoda.

       odna iz 8  realizowannyh  orientacij  simwola  wybiraetsq  s
  pomo}x` podprogrammy SETCHUP.  dwa  parametra  |toj  podprogrammy
  zada`t  naprawlenie  wektora,  prohodq}ego   wdolx   simwola   po
  naprawleni` k ego wer{ine, takim obrazom, ~to zadanie  parametrow
  0,1 opisywaet "oby~nu`" orientaci`, zadanie 1,0 -  wywod  simwola
  powernutogo na 90 gradusow po ~asowoj  strelke,  0,-1  -  na  180
  gradusow, "wwerh nogami", -1,0 - s poworotom na  270  gradusow  i
  t.d.

       dlq ukazaniq tipa {rifta  wyzywaetsq  podprogramma  SETFONT,
  edinstwennyj  ee  parametr   opredelqet   kakaq   budet   wybrana
  prorisowka dlq wywodimyh simwolow, a takve "bazowyj  razmer",  to
  estx razmer matricy w  kotoroj  prorisowan  simwol.  imeetsq  dwe
  prorisowki, odna iz nih zadaet simwoly w matrice  8h9,  drugaq  w
  matrice 16h18. wybor  perwoj  proizwoditsq  ukazaniem  parametra,
  rawnogo 1, wtoroj - 2.

       wybor   {rifta   soprowovdaetsq   peres~etom   ko|fficientow
  uweli~eniq simwolow, dlq posledu`}ego ego wywoda  ukazannymi  ili
  umal~iwaemymi razmerami.

       umol~aniq dlq wywoda simwolow na grafi~eskij plan:  {rift  -
  1, registr - latinskij, razmer simwola - 8h9, orientaciq - 0,1.

       pri  ispolxzowanii  mas{tabirowaniq  zadaniem  okna  i  polq
  wywoda pered ispolxzowaniem podprogramm CHARACTER,SETFONT,SETCHUP
  neobhodimo  opredelitx  razmery  simwola   w   mirowyh   edinicah
  posredstwom podprogrammy SETCHSIZE.

       rassmotrim primer programmy na qzyke paskalx ,  proizwodq}ej
  wywod simwolow na grafi~eskij plan. simwoly  wywodqtsq  so  wsemi
  wozmovnymi orientaciqmi.


 PROGRAM TEST;

   CONST SIZEX=32;SIZEY=38;

   VAR I,J:INTEGER;
       MES:ARRAY[1..9] OF CHAR;

   PROCEDURE INIT;EXTERNAL;
   PROCEDURE SETFONT(I:INTEGER);EXTERNAL;
   PROCEDURE CHARACTER(X,Y:INTEGER;C:CHAR);EXTERNAL;
   PROCEDURE SETCHUP(I,J:INTEGER);EXTERNAL;
   PROCEDURE SETCHSIZE(XS,YS:INTEGER);EXTERNAL;

                               CTP. 19

                           u1.9999-01 34 04


   PROCEDURE WINDOW(XL,YB,XR,YT:INTEGER);EXTERNAL;

 BEGIN
   MES:='dwk3 3kwd';
   INIT;
   WINDOW(0,0,799,559);
   SETFONT(2);
   SETCHSIZE(SIZEX,SIZEY);
   CHARACTER(0,0,CHR(16B));
   FOR I:=-1 TO 1 DO BEGIN
     FOR J:=-1 TO 1 DO BEGIN
       IF ((I=0) AND (J=0)) THEN BEGIN END
       ELSE BEGIN
         SETCHUP(I,J);
         CHARACTER(399+I*40,279+J*40,MES[(I+1)*3+J+2]);
       END;
     END;
   END;
 END.






           20. zapolnenie grani~no-opredelennoj oblasti.




       dlq wydeleniq ob'ektow, predstawlennyh zamknutymi konturami,
  movno polxzowatxsq podprogrammoj paketa FILL, kotoraq  proizwodit
  zapolnenie oblasti wybrannoj {trihowkoj.  parametry  podprogrammy
  FILL zada`t to~ku wnutri oblasti,  kotoraq  s~itaetsq  zamknutoj.
  podprogramma i}et granicy |toj oblasti  i  zapolnqet  ee  teku}im
  tipom {trihowki. esli na samom dele wokrug  ukazannoj  to~ki  net
  zamknutoj oblasti, to  zapolnenie  budet  proishoditx  do  granic
  teku}ego  polq   wywoda.   ob'qwlenie   podprogrammy   FILL   pri
  ispolxzowanii qzyka paskalx proizwoditsq w sledu`}em wide:


         PROCEDURE FILL(XSEED,YSEED:INTEGER);EXTERNAL;


       zamknutye  oblasti  mogut  bytx  sformirowany   proizwolxnym
  obrazom, ih granicami mogut bytx otrezki  prqmyh,  dugi,  kriwye,
  sostawlennye iz  posledowatelxnyh  i  smevnyh  to~ek.  neobhodimo
  tolxko, ~toby granica byla 8-swqzna, to estx l`baq to~ka  granicy
  byla by dostivima  iz  l`boj  drugoj  to~ki  granicy  posredstwom
  proizwolxnoj   posledowatelxnosti   pereme}enij   na   to~ku    w
  wertikalxnom,  gorizontalxnom  naprawleniqh  ili  po  diagonalqm.
  oblastx movet sodervatx wnutri sebq drugie zamknutye oblasti, pri
  |tom oni ne budut zapolneny.

       zapolnenie proizwoditsq  odnim  iz  wosxmi  ime`}ihsq  tipow
  {trihowki. wybor tipa  {trihowki  zadaetsq  wyzowom  podprogrammy
  SETHATCH, kotoraq ob'qwlqetsq w programme  na  paskale  sledu`}im
  obrazom:

                               CTP. 20

                           u1.9999-01 34 04


         PROCEDURE  SETHATCH(HATCHSTYLE:INTEGER);EXTERNAL;


       parametr podprogrammy movet prinimatx  l`boe  zna~enie,  pri
  opredelenii tipa budet  proizwedeno  wy~islenie  nomera  tipa  po
  modul` 8 ot zadannogo ~isla. nulewoe zna~enie parametra ukazywaet
  na otsutstwie {trihowki.

       ispolxzowanie  podprogramm  zapolneniq  i  wybora  {trihowki
  pokazano w programme, priwedennoj w sledu`}ej glawe.




                      21. grafi~eskij kursor.




       dlq organizacii interaktiwnoj  raboty  prikladnaq  programma
  movet  prinimatx  komandy,  zadawaemye  polxzowatelem  s  pomo}x`
  klawiatury. inogda trebuetsq  ukazanie  koordinat  ob'ektow,  uve
  wywedennyh na |kran, dlq |togo paket wkl`~aet w sebq podprogrammu
  CURSOR. ob'qwlenie  ispolxzowaniq  |toj  podprogrammy  dlq  qzyka
  paskalx proizwoditsq sledu`}im obrazom:


         PROCEDURE CURSOR(VAR XPOS,YPOS:INTEGER; VAR C:CHAR);EXTERNAL;


       perwye  dwa  parametra,  kotorye  obqzatelxno  dolvny   bytx
  peremennymi  celogo  tipa,  zada`t  pri  whode   w   podprogrammu
  na~alxnoe polovenie grafi~eskogo kursora. posle zawer{eniq raboty
  podprogrammy  ~erez  |ti   parametry   w   prikladnu`   programmu
  pereda`tsq koordinaty, ukazannye operatorom.

       kursor  izobravaetsq  dwumq  prqmymi,   parallelxnymi   osqm
  koordinat, dlina |tih prqmyh rawna razmeram teku}ego polq wywoda.
  dlq togo, ~toby pereme}enie  prqmyh,  predstawlq`}ih  kursor,  ne
  portilo wywedennogo izobraveniq, oni wywodqtsq w revime inwersii.
  na  meste  perese~eniq  prqmyh  imeetsq  "dyrka",  blagodarq   ee
  nali~i`, movno pozicionirowatx kursor s to~nostx` do otobravaemoj
  na |krane to~ki.

       uprawlenie   kursorom   proizwoditsq   posredstwom    klawi{
  klawiatury, oby~no ispolxzuemym dlq uprawleniq markerom, to  estx
  "wwerh",  "wlewo",  "wniz",  "wprawo",  kotorye  generiru`t   tak
  nazywaemye     ESC-posledowatelxnosti     ESC-A..D,     polovenie
  alfawitno-cifrowogo markera pri |tom ne menqetsq. navatie na odnu
  iz pere~islennyh klawi{ priwodit k pereme}eni` to~ki  perese~eniq
  prqmyh w wybrannom naprawlenii. weli~ina pereme}eniq movet bytx 1
  ili  10  to~ek,  otobravaemyh  na  |krane,   w   zawisimosti   ot
  ustanowlennoj operatorom "skorosti" pereme}eniq. wybor "skorosti"
  proizwoditsq s pomo}x` navatiq na klawi{i "ar2", zatem  na  l`bu`
  drugu`,    ne    "A".."D",    to    estx    posredstwom     l`boj
  ESC-posledowatelxnosti, ne sowpada`}ej  s  uprawleniem  markerom.
  perekl`~enie proishodit ot bystrogo k medlennomu i obratno. posle
  inicializacii pereme}enie ustanowleno medlennoe, na 1 to~ku.

                               CTP. 21

                           u1.9999-01 34 04


       posle   navatiq    na    l`bu`    klawi{u,    ne    wyda`}u`
  ESC-posledowatelxnostx,  ili  ne   formiru`}u`   ee,   proishodit
  zawer{enie raboty  podprogrammy,  pri  |tom  kursor  udalqetsq  s
  |krana, wosstanawliwatsq revim wywoda, ~erez  poslednij  parametr
  podprogrammy  w  prikladnu`  programmu  peredaetsq  kod   navatoj
  klawi{i i, kak uve goworilosx, koordinaty, wybrannye operatorom.

       w ka~estwe primera priwoditsq programma na fortrane, kotoraq
  pozwolqet interaktiwno wybiratx na~alxnu`  to~ku  pri  wypolnenii
  zapolneniq grani~no-opredelennoj oblasti.


             CALL  INIT
     10      CALL    NEWPICTURE(0)
     C    risuem nekotoru` figuru s wnutrennimi konturami
             CALL    LINE (45,32,210,200)
             CALL    LINE (210,200,315,50)
             CALL    LINE (315,50,230,140)
             CALL    LINE (230,140,180,10)
             CALL    LINE (180,10,98,70)
             CALL    LINE (98,70,45,32)
             CALL    LINE (180,150,215,140)
             CALL    LINE (215,140,215,120)
             CALL    LINE (215,120,170,120)
             CALL    LINE (170,120,180,150)
             CALL    LINE (145,60,155,40)
             CALL    LINE (146,60,156,40)
             CALL    LINE (147,60,157,40)
             CALL    LINE (148,60,158,40)
             CALL    LINE (149,60,159,40)
     C    aktiwiruem grafi~eskij kursor
             CALL    CURSOR(IXX,IYY,III)
     C    wybor {trihowki : 0 - 7, ina~e wyhod
             IF(III.GE."60.AND.III.LE."67) GO TO 20
             GO TO 30
     C    wybiraem tip {trihowki
     20      CALL SETHATCH(III-"60)
     C    operaciq zapolneniq oblasti ot zadannoj to~ki
             CALL FILL(IXX,IYY)
             PAUSE
             GOTO 10
     C    okon~anie programmy
     30      CALL  FINIT
             END















                               CTP. 22

                           u1.9999-01 34 04


     22. pozicionirowanie markera na alfawitno-cifrowom plane.





       dlq naneseniq nadpisej  k  wywedennym  na  grafi~eskij  plan
  izobraveniqm    movno    ispolxzowatx    oby~nyj     wywod     na
  alfawitno-cifrowoj  plan.  pri   |tom   ne   budet   proizwoditsq
  proporcionalxnoe mas{tabirowanie simwolow,  tak  kak  ih  razmery
  zadany apparaturoj simwolxnogo displeq,  no  inogda  |togo  i  ne
  trebuetsq.  dlq  pozicionirowaniq   alfawitno-cifrowogo   markera
  wblizi ot to~ki, zadannoj mirowymi  koordinatami  nuvno  wyzywatx
  podprogrammu paketa VANPOS, dwa parametra  kotoroj  ukazywa`t  na
  tebuemu` pozici`. ob'qwlenie podprogrammy pri ispolxzowanii qzyka
  paskalx proizwoditsq w sledu`}ej forme:


         PROCEDURE VANPOS(X,Y:INTEGER);EXTERNAL;


       dlq pozicionirowaniq alfawitno-cifrowogo markera w  zadannyh
  stroke i stolbce alfawitno-cifrowogo |krana movno wospolxzowatxsq
  podprogrammoj    paketa    ANPOS.    dlq    wypolneniq    o~istki
  alfawitno-cifrowogo |krana, na~inaq  s  pozicii,  zadannoj  takve
  strokoj  i  stolbcom,  nuvno   wyzywatx   podprogrammu   ANCLEAR.
  ob'qwleniq |tih podprogramm dlq qzyka paskalx imee`t formu:


         PROCEDURE ANPOS  (ROW,COLUMN:INTEGER);EXTERNAL;
         PROCEDURE ANCLEAR(ROW,COLUMN:INTEGER);EXTERNAL;



       parametry ROW, COLUMN zada`t sootwetstwenno nomer  stroki  i
  stolbca na alfawitno-cifrowom plane, oni prinima`t zna~eniq  1-24
  i  1-80  sootwetstwenno.  zadanie  pozicii  (1,1)  ukazywaet   na
  ustanowku markera w samu` lewu` werhn`` pozici` |krana.





















                               CTP. 23

                           u1.9999-01 34 04


                    23. wywod massiwow 8h8 bit.




       wse opisannye  wy{e  primitiwy  wywodqtsq  na  teku}ee  pole
  wywoda   po   mirowym   koordinatam,   pri    |tom    wypolnq`tsq
  preobrazowaniq mirowyh koordinat w adresa  bajtow  ozu  kgd,  ~to
  trebuet nekotorogo wremeni.  inogda  trebutsq  proizwoditx  wywod
  otnositelxno  prostoj,   zaranee   izwestnoj,   psewdografi~eskoj
  informacii w wide massiwow to~ek. dlq wypolneniq  takih  dejstwij
  neobhodimo  predstawitx  podleva}ie  wywodu  informaci`  w   wide
  massiwow 8h8 to~ek, i wywoditx ih posredstwom podprogrammy paketa
  CELL. ob'qwlenie podprogrammy dlq qzyka paskalx imeet wid:


         TYPE CELLARRAY = ARRAY[1..8] OF CHAR;
         PROCEDURE CELL(XCELL,YCELL:INTEGER; VAR CA:CELLARRAY);EXTERNAL;



       peredannyj  podprogramme  massiw  budet  wywoditsq  w   wide
  kwadratnoj kartinki 8h8 to~ek w pozicii, zadannoj  perwymi  dwumq
  parametrami. tak  kak  grafi~eskij  plan  movno  predstawitx  kak
  sowokupnostx 35h40 takih kartinok,  to  koordinaty  XCELL,  YCELL
  mogut prinimatx zna~eniq 0-39, 0-34 sootwetstwenno, poziciq (0,0)
  raspolovena w lewom nivnem uglu grafi~eskogo  plana.  pri  wywode
  informacii  posredstwom   podprogrammy   CELL   ne   proizwoditsq
  otse~enij, peres~etow, po|tomu wywod osu}estwlqetsq bystree,  ~em
  ~erez podprogrammu DOT,  ee  udobno  ispolxzowatx  pri  napisanii
  prostyh i  dinami~nyh  wideoigr,  dlq  izobraveniq  {kal  i  t.d.
  massiw, podleva}ij wywodu movet bytx  sformirowan  putem  oby~noj
  operacii priswaiwaniq, neobhodimo pomnitx li{x o tom, ~to w  silu
  postroeniq kgd, na |kran perwymi  budut  wywoditsq  mlad{ie  bity
  bajtow massiwa, po|tomu zagotowki nuvno opredelqtx  zerkalxno  ih
  trebuemomu poloveni`.

       priwedennaq nive programma risuet na grafi~eskom plane zme`,
  konfiguraciq ee |lementow pokazana w kommentariqh.




















                               CTP. 24

                           u1.9999-01 34 04


 	fortran

         BYTE TH(8),TB(8),TT(8)
 C massiw dlq risowaniq golowy,powernutoj wlewo.
 C
 C        # # #
 C       #     #
 C  #    #  #
 C    #
 C     # #
 C  # #  #  #
 C       #     #
 C        # # #
 C
         TH(1)="160
         TH(2)="210
         TH(3)="051
         TH(4)="002
         TH(5)="14
         TH(6)="53
         TH(7)="210
         TH(8)="160
 C massiw dlq risowaniq tela zmei.
 C
 C
 C
 C  # # # # # # # #
 C  # #     # #
 C      # #     # #
 C  # # # # # # # #
 C
 C
 C
         TB(1)="000
         TB(2)="000
         TB(3)="377
         TB(4)="063
         TB(5)="314
         TB(6)="377
         TB(7)="000
         TB(8)="000
 C massiw dlq risowaniq hwosta zmei, powernut wprawo.
 C
 C
 C
 C  # # # #
 C  # #     # #
 C      # # # #
 C  # # # #
 C
 C
 C
         TT(1)="000
         TT(2)="000
         TT(3)="017
         TT(4)="063
         TT(5)="074
         TT(6)="017

                               CTP. 25

                           u1.9999-01 34 04


         TT(7)="000
         TT(8)="000

         CALL  INIT
         CALL  NEWPICTURE(-1)
         CALL  DRAWMODE(0)
         CALL  CELL(20,20,TH)
         CALL  CELL(21,20,TB)
         CALL  CELL(22,20,TB)
         CALL  CELL(23,20,TB)
         CALL  CELL(24,20,TB)
         CALL  CELL(25,20,TT)

         PAUSE
         CALL  FINIT
         END











































                               CTP. 26

                           u1.9999-01 34 04


 	paskalx

 PROGRAM ZMEJ;

   TYPE TYPCELL=ARRAY[1..8] OF CHAR;

   VAR TH,TB,TT:TYPCELL;

   PROCEDURE INIT;EXTERNAL;
   PROCEDURE NEWPICTURE(I:INTEGER);EXTERNAL;
   PROCEDURE DRAWMODE(I:INTEGER);EXTERNAL;
   PROCEDURE CELL(R,C:INTEGER;VAR M:TYPCELL);EXTERNAL;

 BEGIN
         TH[1]:=CHR(160B);
         TH[2]:=CHR(210B);
         TH[3]:=CHR(051B);
         TH[4]:=CHR(002B);
         TH[5]:=CHR(014B);
         TH[6]:=CHR(053B);
         TH[7]:=CHR(210B);
         TH[8]:=CHR(160B);

         TB[1]:=CHR(000B);
         TB[2]:=CHR(000B);
         TB[3]:=CHR(377B);
         TB[4]:=CHR(063B);
         TB[5]:=CHR(314B);
         TB[6]:=CHR(377B);
         TB[7]:=CHR(000B);
         TB[8]:=CHR(000B);

         TT[1]:=CHR(000B);
         TT[2]:=CHR(000B);
         TT[3]:=CHR(017B);
         TT[4]:=CHR(063B);
         TT[5]:=CHR(074B);
         TT[6]:=CHR(017B);
         TT[7]:=CHR(000B);
         TT[8]:=CHR(000B);
         INIT;
         NEWPICTURE(0);
         DRAWMODE(1);
         CELL(20,20,TH);
         CELL(21,20,TB);
         CELL(22,20,TB);
         CELL(23,20,TB);
         CELL(24,20,TB);
         CELL(25,20,TT);
         FINIT;

 END.







                               CTP. 27

                           u1.9999-01 34 04


                  24. stiranie massiwa 8h8 to~ek.




       dlq stiraniq massiwa,  wywedennogo  s  pomo}x`  podprogrammy
  CELL  movno  wospolxzowatxsq  podprogrammoj   CLRCELL.   dwa   ee
  parametra  ukazywa`t  koordinaty  massiwa  8h8  to~ek.   stiranie
  proizwoditsq s u~etom teku}ego sposoba wywoda,  t.e.  stiranie  w
  revime wywoda sbrosom priwedet k ustanowke  w  1  wseh  to~ek  iz
  massiwa 8h8. ob'qwlenie podprogrammy w prgramme na paskale  imeet
  wid:


 	PROCEDURE CLRCELL(X,Y:INTEGER);EXTERNAL;






           25. komponowka prikladnoj programmy s paketom.




       komponowka  osu}estwlqetsq  oby~nym   obrazom,   s   pomo}x`
  programmy LINK. pri ee wyzowe  trebuetsq  w  spiske  ukazatx  imq
  fajla, soderva}ego  ob'ektnu`  biblioteku  paketa,  naprimer  dlq
  paskalq:


 	.LINK MYPROG,MED,SY:PASCAL

       komponowka dlq fortrana movet imetx wid:


 	.RU LINK
 	*MYPROG=MYPROG,MEDFOR
 	*~C



















                               CTP. 28

                           u1.9999-01 34 04


     26. ob'qwlenie podprogramm paketa w prikladnoj programme.




       kak uve  goworilosx  ranee,  pri  ispolxzowanii  podprogramm
  paketa iz qzyka fortran net neobhodimosti opisywatx podprgrammy i
  ih parametry. neskolxko  ina~e  obstoit  delo  pri  ispolxzowanii
  qzyka paskalx. po ego prawilam  wse  wne{nie  podprogrammy  i  ih
  parametry dolvny bytx opisany pered  upotrebleniem.  pro}e  wsego
  |to sdelatx wstawiw w na~ale programmy sledu`}ij tekst:
















































                               CTP. 29

                           u1.9999-01 34 04


   PROCEDURE INIT;EXTERNAL;
            (* inicializaciq |kranow*)
   PROCEDURE FINIT;EXTERNAL;
            (*okon~anie raboty*)

   PROCEDURE WINDOW(XL,YB,XR,YT:INTEGER);EXTERNAL;
             (*ob'qwlenie wirtualxnogo okna*)
             (*XL,YB-nivnij lewyj ugol,XR,YT-werhnij prawyj*)
   PROCEDURE VIEWPORT(XL,YB,XR,YT:INTEGER);EXTERNAL;
             (*ob'qwlenie polq wywoda 0:399,0:279*)

   PROCEDURE GRMODE(ONOFF:INTEGER);EXTERNAL;
             (*wkl=1/wykl=0 gr.|krana*)
   PROCEDURE ANMODE(ONOFF:INTEGER);EXTERNAL;
             (*wkl=1/wykl=0 ac |krana*)

   PROCEDURE NEWPICTURE(I:INTEGER);EXTERNAL;
             (*inwersiq=-1/o~istka=0/zaliwka=1 polq wywoda*)

   PROCEDURE DRAWMODE(I:INTEGER);EXTERNAL;
             (*ustanowka revima wywoda:-1,0,1*)
   PROCEDURE LINESTYLE(I:INTEGER);EXTERNAL;
             (*ustanowka tipa linii 0-7*)
   PROCEDURE USERSTYLE(I:INTEGER);EXTERNAL;
             (*ustanowka "polxzowatelxskogo" tipa*)
             (* I - l`boe celoe*)
   PROCEDURE SETCHUP(I,J:INTEGER);EXTERNAL;
             (*ustanowka poworota simwola: 0,1/1,0/0,-1/-1,0*)
 	    (* 1,1/-1,1/1,-1/-1,-1*)
   PROCEDURE SETCHSIZE(I,J:INTEGER);EXTERNAL;
             (*ustanowka razmera simwola(wirt.ed.)   *)
   PROCEDURE SETFONT(I:INTEGER);EXTERNAL;
             (*wybor fonta, 1,2 matrica 8X9,16h18 *)
   PROCEDURE SETHATCH(I:INTEGER);EXTERNAL;
             (*wybor .trihowki*)
 	    (*I=0..7*)
   PROCEDURE LINE(X,Y,XX,YY:INTEGER);EXTERNAL;
             (*liniq*)
   PROCEDURE DOT(X,Y:INTEGER);EXTERNAL;
             (*to~ka*)
   PROCEDURE CIRCLE(X,Y,R:INTEGER);EXTERNAL;
             (*okruvnostx*)
   PROCEDURE ARC(X,Y,R,XS,YS,XT,YT,CW:INTEGER);EXTERNAL;
             (*duga ot XS,YS do XT,YT,CW=1-po ~asowoj,0 - protiw*)
   PROCEDURE CHARACTER(X,Y:INTEGER; C:CHAR);EXTERNAL;
   (*simwol w poz. X,Y ;koi7n0n1 16B,17B=rus/lat, upr. ne otrab.*)

   PROCEDURE CURSOR(VAR X,Y:INTEGER;VAR C:CHAR);EXTERNAL;
   (*gr.kursor,upr:ESC<A-D>,ESC<ne A-D>- perekl.skorosti;C=navali+wyhod*)

   PROCEDURE FILL(X,Y:INTEGER);EXTERNAL;
             (*zapolnenie grani~no-opredelennoj oblasti, soderv. X,Y*)

   TYPE TCELL=ARRAY[1..8] OF CHAR;
   PROCEDURE CELL(X,Y:INTEGER; VAR C:TCELL);EXTERNAL;
             (*wywod 8h8 bit X:0-49,Y:0-34*)
   PROCEDURE CLRCELL(X,Y:INTEGER);EXTERNAL;
             (*o~istka 8h8 bit teku.im wywodom*)

                               CTP. 30

                           u1.9999-01 34 04


   PROCEDURE VANPOS(X,Y:INTEGER);EXTERNAL;
             (*pozicionirowanie ac kursora blizko k X,Y*)

   PROCEDURE ANPOS(ROW,COLUMN:INTEGER);EXTERNAL;
             (*pozic. w terminah stroki:1-24, stolbca:1-80 ac |krana*)
   PROCEDURE ANCLEAR(ROW,COLUMN:INTEGER);EXTERNAL;
             (*to ve + o~istka ot |toj pozicii*)

 (* wse koordinaty, krome ogoworennyh osobo -32768:+32767*)
 (* X,Y=0 - niz gr. |krana*)
 (* wesx wywod teku}imi atributami*)
 (* pri wywode dug ne sleduet naru{atx proporcii po h i u *)




       priwedennyj tekst opisywaet wse  parametry  podprogramm,  ih
  tip i sposob pereda~i - ssylkoj ili zna~eniem.
















































                                                                                                                                                          