• No results found

Het Graphical Kernel System geïmplementeerd in PEP : beschrijving van de grafische software

N/A
N/A
Protected

Academic year: 2021

Share "Het Graphical Kernel System geïmplementeerd in PEP : beschrijving van de grafische software"

Copied!
110
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Het Graphical Kernel System geïmplementeerd in PEP :

beschrijving van de grafische software

Citation for published version (APA):

van Amen, D. R. (1987). Het Graphical Kernel System geïmplementeerd in PEP : beschrijving van de grafische software. Technische Universiteit Eindhoven.

Document status and date: Published: 01/01/1987 Document Version:

Publisher’s PDF, also known as Version of Record (includes final page, issue and volume numbers) Please check the document version of this publication:

• A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website.

• The final author version and the galley proof are versions of the publication after peer review.

• The final published version features the final layout of the paper including the volume, issue and page numbers.

Link to publication

General rights

Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain

• You may freely distribute the URL identifying the publication in the public portal.

If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement:

www.tue.nl/taverne

Take down policy

If you believe that this document breaches copyright please contact us at:

openaccess@tue.nl

providing details and we will investigate your claim.

(2)

Ket 6raphical Karnel System

geïmplementeerd in PEP,

beschriJving van de grafische software

D.R. van Amen

Technisch rapport UDF/NO

87-05

Dit rapport is bedoeld als aanvullende

toelichting biJ de formele presentatie

gegeven in het afstudeerverslag

(3)

Inhoudsopgave

0.

1.

2.

Samenvatting

Inleiding

De GKS-basisbibliotheek PM1:GKS6B.RAC

2.1. Werkstations

2.2. Schaling

2.3. Clipping

2.'L Lijnen

2.5. Markers

2.6. Vlakvulling

2.7. Teksten

2.8. Cirkels en ellipsen

3.

De applicatiebibliotheek PMl:GKSAPP.RAC

3.1. Grafische files

3.2. Aansturing van devices

3.3. Assen

3.~.

Het standaardplaatje frame

3.5. Splinecurves

3.6. Overige applicaties

~.

Vaste segmenten, de bibliotheek PMl:GKSSEG.RAC

5.

De soureetekst van polyline, de file PMl:POlYR.RAC

Referenties

Appendices

A.

Ket strippen van bibliotheken

B.l. Inhoudsopgavevan procedures uit PMl:GKS68.RAC

8.2. Programmatekst van PMl:GKS6B.RAC

C.l. Inhoudsopgavevan procedures uit PMl:GKSAPP.RAC

C.2. Programmatekst van PMl:GKSAPP.RAC

D.

Programmatekst van PMl:GKSSEG.RAC

E.

F.

Programmatekst van PMl:POlYR.RAC

Programmatekst van PM1:KRUIS.RAC

1 2 6 6 8 10

11

12

1~ 15

23

25

25

26

27

29

31

32

33

35

36

37

37

38

~1

81

82

95

98 105

(4)

0. Samenvatting

Het voortgezet implementeren van grafische faciliteiten in PEP

op

basis van het Graphical Karnel Sustem CG.K.S.)

heeft geleid

tot een

nogal drastische herziening en uitbreiding van de

door

Schelleman en Prins ontworpen software CSCH B6J, CPRI B6J.

Dit heeft

geleid tot een basisbibliotheek met

als filenaam

PM1:GKS6B.RAC,

welke geschikt is voor een QUME QVT-211 GX

termi-nal, een DIGITAL

VT2~0

terminal en een HITACHI 672 Graph Plotter.

Deze bibliotheek mag niet worden opgevat als een volledige

imple-mentatie van het laagste niveau van GKS voor een aantal

werksta-tions.

Het

is wel

zo dat het voor de

gebruikers beschikbaar

gekomen gereedschap êênduidig geênt is op de GKS-voorschriften.

Daarnaast

is een applicatiebibliotheek geschreven,

met

als

filenaam

PMl:GKSAPP.RAC,

die gebruikt moet worden in combinatie

met de basisbibliotheek. Deze geeft de gebruikers extra

mogeliJk-heden zoals het bewaren van plaatjes,

cubic spline

interpolatie

en het eenvoudig in grafiek zetten van meetdata.

Voortzetting van dit werk kan geschieden langs

verschillende

wegen. We noemen hier:

-Optimalisering (compileren bijvoorbeeld)

-Verbreding (volledig in overeenstemming brengen met GKS)

-Uitbreiding Candere grafische apparatuur)

-Applicatiegerichte voortzetting Cfast fourier transform)

-Aanvulling Chet opvullen van polygonen biJ de plotter)

(5)

1. Inleiding

In dit rapport zullen de Ccomputer)programma's,

die zijn

ge-schreven voor grafische doeleinden,

zie afstudeerwerk CAME 87J,

nader worden toegelicht.

Deze programma's staan opgenomen in de

appendices.

Het afstudeerwerk zelf beschrijft o.a.

voorbeelden

uit de fysische praktijk.

Er

is bewust voor deze vorm van toelichten gekozen.

Het

ge-bruik van cammentregels in de programma's zelf heeft als

belang-rijke nadelen:

1)

In PEP kan per bibliotheek slechts 255 regels commentaar

op de standaard manier C%-teken) gegeven worden.

Dit is

voor grote bibliotheken te weinig. De grote

GKS-basisbi-bliotheek PM1:GKS68.RAC heeft nu al 68 blokken.

2)

Men

blijft binnen cammentregels noodgedwongen in

tele-gramstijl schrijven.

3)

Er

zijn geen mogelijkheden voor verklarende

illustra-ties.

~)

Het

totale geheugenbeslag wordt erg groot

zodat

men

steeds moeilijker kan saven of minimaliseren.

In navolging van CISO

B~J

hanteren we de volgende afkortingen:

WC • World Coordinates

DC • Device Coordinates

NOC • Normalized Device Coordinates

GDP - Generalized Drawing Primitive

-- <

x

<

+-K

<

x_dc

<

M

0

< x_ndc < 1

Alvorens

per hoofdstuk de bibliotheken te bespreken vermelden

we eerst enige belangrijke apparaateigenschappen van de

geïmple-menteerde werkstations. Het gaat om drie apparaten:

QUME QUT-211 GX terminal

Digital

UT2~0

terminal

Hitachi 672 Graph Plotter

De

apparaten werken met een eigen instructieset gecombineerd

met

apparaatcoördinaten.

Alle genoemde apparaten zijn hierdoor

(6)

o.a.

in staat verschillende soorten lijnen te genereren, alsmede

hardware-matig gemaakte cirkels.

Ook verschillende

karakterhoog-tes en breedkarakterhoog-tes ziJn mogeliJk.

Belangrijke verschillen tussen de genoemde apparaten ziJn de

resolutie (oplossend vermogen,

het aantal zichtbare pixels in

X-en

V-richting),

de aspect ratio Chet aantal mogeliJke

apparaat-coöLdinaten

in de X-richting,

gedeeld door het aantal in de

V-richting) en de relatie hiertussen.

De

drie apparaten hebben alle de mogelijkheid om

het

adres-seerbereik van de DC in te stellen. Deze coördinaten komen in het

algemeen niet overeen met pixels.

Uoor

de

plotter is gekozen voor adressering in plotterunits

van 25 micron,

zodat de apparaatcoördinaten wel oveLeenkomen met

pixels,

zie Tabel 1.1. Uit dezelfde tabel lezen we af dat biJ de

UT2~0

de DC in de X-richting oveLeenkomen met pixels.

In de

V-richting blijkt iedere liJn (totaal

2~0

lijnen) twee

opeenvolgen-de adLessen (totaal

~80

adressen) te hebben.

BiJ de QUME ligt de zaak minder eenvoudig.

Het instellen van

een adresseerbaar veld moet hieL gebeuren

m.b.v.

6AIN-instLuc-ties.

De verhouding tussen de ingestelde GAIN's moet hieLbiJ 3:2

ziJn.

In dat geval is de aspect ratio eveneens 3:2 en dit heeft

tot gevolg dat het ciLkelcommando een geometrisch correcte ciLkel

(binnen resolutie grenzen) geeft.

BiJ een andere 6AIN-veLhouding

ontstaat een ellips.

Indien we nu in Tabel 1.1 de QUME veLgelijken met de

UT2~0

dan

bliJkt de QUME ook twee adressen per liJn te hebben. Er is echter

geen correspondentie tussen het aantal liJnstukjes en het

adLes-seerbereik

in de X-richting.

C6~0

lijnstukjes versus

86~

als

maximum coördinaat).

(7)

station

~esolutie ad~essee~-

ga in

(afmeting)

Cve~houding) be~eik

instelling

Caspeet

~atio) Cve~houding)

Plotte~

A3

15200 x 10800

15200 x 10800

n.v.t.

(380 x 270 mm)

(38

:

27)

(38

:

27)

C270 x 380 mm)

(27

:

38)

(27

:

38)

Plotte~

A'i

10800 x 6800

10800 x 6800

n.v.t.

C270 x 170 mm)

(27

:

17)

C27

:

17)

of

7000 x 10800

7000 x 10800

(175 x 270 mm)

(17.5

:

27)

(17.5

:

27)

UT2'i0

800 lijnstukken

800 x "!80

n.v.t.

(205 x 135 mm)

2"!0 lijnen

CS

:

3)

gemeten

(10

:

3)

QUME

6"!0 lijnstukken

86"! x 576

768X

(230 x 160 mm)

288 lijnen

(3

:

2)

-512Y

gemeten

C20

:

9)

(3

:

2)

TABEL 1.1.

Ove~zicht

van

~esolutie,

aspect

~atio,

afmetingen,

ad~essee~­ be~eik

en gain van de

ve~schillende g~afische

stations.

Indien we op een QUME de afmetingen van een

ka~akte~

moeten

wijzigen,

dan moet

dit ook met de 6AIN-inste11ing

gebeu~en. Ue~g~oting

van de X-6AIN betekent

ve~b~eding

van de nog te

teke-nen

ka~akte~s.

Het aantal

ad~essen

in de

x-~ichting wo~dt hie~­ doo~ echte~ ve~kleind

m.a.w.

de aspect

~atio wo~dt kleine~. Ue~g~oting

van de Y-6AIN maakt de

ka~akte~s hoge~.

De

ve~kleining

van het aantal

ad~essen

in

Y-~ichting

maakt de aspect

~atio

in

dit geval

g~ote~.

Bij de positiebepaling van

ka~akte~s

moeten we

hie~

dus

~ekening

mee houden.

E~ t~eden

nog een

paa~ ext~a

com-plicaties op

t.g.v.

nulpuntsinstelling en mode-wisseling

maa~

deze behandelen we bij de

p~og~ammabesp~eking.

(8)

Algemene opmerkingen

De

te bespreken programma's worden zeer

frequent

gebruikt.

Mede

daarom is gepoogd de executie van procedures zo snel

moge-lijk te laten geschieden.

Hierdoor worden bepaalde constructies

langer dan strikt genomen noodzakelijk is, maar wel sneller.

De

editor genereert code voor de interpreter.

Code

behorend

bij het getal 1 is anders dan die van het getal 1.0, CERU 86J.

In de

praktijk zal de interpreter zeer vaak

conversies uit

moeten voeren van integer naar real.

We hebben geprobeerd dit te

beperken door getallen in de programma's reeds de gewenste

repre-sentatie te geven.

De procedures die zijn gecompileerd hebben ook niet altijd de

meest vooF de hand liggende vorm,

maar dit is vrijwel altijd een

gevolg van de beperkingen van de compiler.

In Figuur 1.1 staan de verschillende te bespreken bibliotheken

in de volgorde waarin zij geladen moeten worden.

Het gebruik van

segmenten

en kruisdraden is optioneel,

aangegeven door de

stip-pellijnen.

6:

5:

~:

3:

2:

1 :

rP~1~KRuÎs~R;c-

1

L---J

rP~l~G~S~E~.RA~

1

L---J

IPMl:GKSAPP.RAC

lPMl:GKS68.RAC

EDITOR

IPEP - Oparating Systeml

FIGUUR 1.1. De

ontwikkelde

grafische bibliotheken en

de

volgorde

waarin ze geladen moeten

worden.

De

stippellijn betekent dat deze pakketten

optio-neel zijn

(9)

2. De aKS-basisbibliotheek PM1:6KS68.RAC

Op

een gekozen werkstation kan pas een grafische figuur

ont-staan als een array met de juiste tekeninstructies

(ASCII-karak-ters) wordt gevuld Czie bijvoorbeeld Tabel 2.1 van [AME 87J).

De

procedures die het tekenarray vullen met de juiste

ASCII-karak-ters voor êên bepaald werkstation en dit array zelf,

zijn

onder-gebracht

in de aKS-basisbibliotheek PM1:6KS68.RAC.

Deze

biblio-theek wordt geladen in een M68000-computersysteem nadat eerst het

PEP-Oparating System en het EDITOR-programma geladen zijn.

De relevante procedures en globale variabelen,

die in de

aKS-basisbibliotheek voorkomen,

zullen worden ondergebracht in een

aantal rubrieken.

In deze rubrieken zal doel en werking van deze

procedures en variabelen worden toegelicht.

In appendix B.l zijn

van

de hier besproken procedures de

regelnummers

vermeld.

Uan

6KS-functies vermelden

we alleen de

implementatie-afhankelijke

bijzonderheden.

In

6KS68

en 6KSAPP komen een

aantal

machinetaal-procedures

voor die zijn gemaakt m.b.v.

de PEP-compiler. Ten behoeve van de

leesbaarheid van het programma zijn de souree-teksten ook

opgeno-men als aanroepbare procedures met als naam:

procedurenaam_onver-taald.

Voor

de vertaalde procedure polylina_compiled zou dit teveel

van het goede worden Czie listingin de appendix). Daarom

bespre-ken we deze procedure in een apart hoofdstuk.

2.1. Werkstations

In

deze rubriek behandelen we de procedures

die samenhangen

met

het instellen van de werkstations.

In het tekenarray moeten

instructies worden gezet die de gewenste grafische mode

kiezen,

of deze

mode weer verlaten.

Allerlei

default-settings worden

geldig gemaakt.

De geïmplementeerde werkstations krijgen ieder een unieke naam

die gedeclareerd wordt als constant string.

Het station dat actief

is

krijgt een nummer dat gegeven

wordt

(10)

door de procedure davica_numbar. Dit nummer zal worden bewaard in

de globale variabele werkstation.

Ieder werkstation heeft een adresseerbaar veld.

sat_devica_limits zet de grenzen van dit veld in

De

procedure

devicelimits.

Deze getallen komen niet automatisch overeen met pixels.

Uoor de

QUME-terminal geldt bijvoorbeeld een werkelijke resolutie van

6~0

lijnstukjes bij 288 lijnen. De

UT2~0-terminal

heeft een resolutie

van 800 lijnstukjes bij

2~0

lijnen. Uoor de plotter geldt wel dat

de getallen overeenkomen met plotterunits van 25 micron,zie Tabel

1.1.

De getallen waarmee wordt geadresseerd zijn zo gekozen

dat

zij de resolutie volledig dekken en toch zo klein mogelijk zijn,

rekeninghoudend met de aspect ratio's Czie hoofdstuk 1). De

beno-digde

hoeveelheid

karakters om de terminals aan te sturen met

volledige benutting van de resolutie is dan ook minimaal.

Alle

apparaat-afhankelijke grafische instructies worden

be-waard in het array tek,

een afkorting van tekening. De variabele

tellar wijst altijd naar de eerstvolgende vrije plaats in tak.

De procedure raset_tek initialiseert zowel tak als tellar voor

een nieuwe reeks instructies.

Het

array

tak zou in principe een

maximale

grootte mogen

hebben

van 65535 bytes.

Indien echter de pointer in dit array,

teller, groter wordt dan 32767, dan wordt dit in sommige

machine-taal-procedures een negatief getal. Het eerste bit wordt namelijk

opgevat

als tekenbit.

De veilige grootte van 32767 bytes blijkt

in de praktijk goed te voldoen.

De procedure sat_colour_indax is een generalisatie van de

GKS-functies set_polyline_colour_index,

set_polymarker_colour_index,

set_text_colour_index,

etc.

Deze procedure heeft alleen zin bij

gebruik van de plotter,

deze kan n.l.

kiezen uit vier

verschil-lende pennen.

Als een fout optreedt,

of als de tekening klaar is,

moet een

werkstation

worden verlaten.

De plotter wordt in dezelfde

toe-stand gebracht als bij het aanzetten automatisch

gebeurt,

een

grafische terminal wordt in terminalmode gebracht en voorzien van

noodzakelijke defaultsettings.

Dit alles wordt verzorgd door de

(11)

procedure exit_graphics_mada.

Deze wordt o.a aangeroepen door de

foutmeldingsprocedure arr.

Hiermee wordt bereikt dat een

grafi-sche terminal

niet

in grafische mode blijft staan nadat

een

(mislukt)

plaatje is getekend.

Nieuw te implementeren stations

leiden noodzakelijkerwijze tot uitbreiding van deze procedure.

Binnen

activata_~rkstation

worden de eerder besproken

proce-dures davica_number,

sst_davica_limits en rasat_tek aangeroepen.

Vervolgens wordt per station een adresseerbaar veld ingesteld en

een default waarde voor de afmeting van de markers in DC.

Bij de

terminals wordt het alfanumerieke scherm schoongemaakt.

Bij

de

plotstations 3

t/m 6 moet pen 1 geselecteerd worden met de

in-structie SPl.

Indien men dit achterwege laat,

omdat

bij

het

aanzetten de plotter automatisch pen 1 kiest,

dan blijft

gedu-rende het tekenen de pen omhoog,

zie CHIT

86J.

De aanroep van

set_colour_index binnen activate_workstation voorkomt dit

pro-bleem.

De

overige procedures en statements verzorgen de

voor-geschreven opstart-condities.

De

GKS-functies claar_warkstation en

daactivata_~orkstation

spreken verder voor zichzelf.

Voor de

plotstations

C3 t/m 6)

heeft

claar_~rkstation

geen betekenis omdat niet automatisch een

nieuw stuk papier kan worden ingelegd.

De GKS-functies activate_workstation en deactivate_workstation

moeten

t.b.v.

de

VT2~0

in de toekomst zodanig worden gewijzigd

dat een grafisch plaatje bliJft staan.

Dit kan door het plaatje

vast te houden in de hardware,

zie CDIG

83J,

of te werken

met

cursor besturing.

Nu

is het nog zo dat alleen al

de

melding

'Program executed' na het sturen van de grafische instructies de

bovenkant van het plaatje uit het scherm •scrolled'.

Het opnemen

van een readln-statement om de computer te laten wachten

is

slechts een mogelijke noodoplossing.

2.2. Schaling

De tekeninstructies hebben

na~2-variabelen

nodig om de gewenste

pixels van het gekozen werkstation aan te sturen. Er wordt echter

gerekend met wereldcoördinaten.

Deze coördinaten moeten dus

(12)

den

omgerekend

naar apparaatcoördinaten

Cnat2-variabelen

in

ASCII-representatie).

De

procedure point converteert twee reals naar nat2-ASCII

re-presentatie,

gescheiden door een comma.

Deze

procedure

gebruikt om de berekende apparaatcoördinaten af te ronden,

wordt

zodat

pixeladressen

Cnat2) worden verkregen.

Deze adressen worden dan

in het array met tekeninstructies ingevuld.

Uoorbeeld:

in: 100.235 en 253.798

uit:

'100,25~'

De

procedure single converteert êên real op dezelfde

manier.

Beide

procedures geven problemen als negatieve getallen worden

opgegeven.

Zij

worden

echter vrijwel uitsluitend gebruikt om

apparaatcoördinaten

in te stellen en deze zijn bij de tot nu toe

geïmplementeerde apparaten nooit negatief.

De

procedures·point_alternatieF en single_alternatieF worden

nergens aangeroepen maar geven een in PEP geschreven analogon van

het voorafgaande. Bovendien leveren deze procedures een conversie

van real naar integer-ASCII representatie, zodat het volgende ook

is toegestaan:

De

ASCII

in: -2.3E6

uit: '-2300000'

procedure

real_nr converteert een real

naar

vijf bytes

representatie t.b.v.

de plotter.

Betallen groter dan 100

worden altijd weergegeven als '100.0', dit geeft geen problemen.

Uoorbeeld:

in: ·-5/3

uit: '-1.666'

Met

behulp

van de GKS-functies

set_~indo~

en

set_viewport

kunnen

15

transformaties worden ingesteld.

Transformatie 0

is

gereserveerd,

overeenkomstig

de

BKS-standaard.

De

ingestelde

grenzen worden bewaard in

wir~o~

en

vie~port.

(13)

Uoor

alle twee-dimensionale arrays die grenzen

representeren

hanteren we de volgende regel:

(i,jJ betekent:

i•O

-> x-as

i•1 -> y-as

j•O -> ondergrens

j•1 -> bovengrens

De

vertaalde procedure map rekent

wereldcoördinaten

om

in

apparaatcoördinaten op de wijze gegeven in map_onvertaald.

Indien een

bepaalde transformatie geldig is bevat het

array

scala voor de twee coördinaatrichtingen de schalingsfactoren. Het

array

oFFset bevat de verschuiving van de oorsprong

in device

coördinaten, DC. Het geldende transformatiegetal wordt bewaard in

curtn.

De

procedure select_narmalization_transFormation stelt

de

arrays scala en offset in. formeel is dit geen BKS-functie, omdat

in ons geval normalisatie transformatie en werkstation

transfor-matie worden samengenomen, zie ook CPRI B6J.

Set_~rkstation_~indo~

en

sat_~orkstation_vie~port

zijn de

BKS-functies die de globale arrays

~s-~indow

en ws_viawport

in-stellen.

Bij de plotter kunnen we er eenvoudig voor

zorgen

dat

buiten de werkstation viewport niets getekend wordt door gebruik

te maken

van de lW-instructie.

Met deze

instructie geven

we

namelijk

een rechthoek op die grenzen oplegt aan de penbeweging.

Er wordt dus hardwarematig geclipt indien noodzakelijk.

2.3. Clipping

Grafische output

die buiten het werkstation window ligt mag

niet worden getekend.

Indien de gebruiker dit wenst moet ook

de

grafische output

buiten het window

worden

verwijderd.

Indien

lijnen geheel of gedeeltelijk buiten een af te beelden rechthoek

vallen moet dus worden geclipt.

Deze rubriek behandelt de

proce-dures die betrekking hebben op het clippen.

De

BKS-functie set_clipping_indicator spreekt voor

zichzelf.

Als tegemoetkoming aan de gebruikers zijn clip en noclip

gedecla-reerd als constant string.

De gecompileerde procedure clipping heeft als souree de

(14)

dure clipping_onvartaald.

De vier uitvoerparameters

xl,yl,x2,y2

bevatten begin- en eindpunt van een lijn. Als deze liJn buiten de

rechthoek gegeven door xl,xr,yb,yt valt,

wordt door clipping de

waarde

false afgegeven.

In alle andere gevallen wordt

de

liJn

geclipt als beschreven in CSCH 86J.

Het door ons gehanteerde algorithme is in wezen hetzelfde, het

is alleen efficiënter omdat het werkt met booleans.

Bovendien is

het

in de gegeven vorm te vertalen met de meest recente

versie

van de PEP-compiler.

Er wordt te allen tijde geclipt op de grenzen van de

worksta-tien viewport.

Uanwege

afrondfouten worden de grenzen

van

de

werkstation viewport êên pixel naar buiten gelegd.

Op de grenzen

van het window wordt afhankelijk van de globale boclaan variabele

clipping_indicator geclipt.

2.~

LiJnen

De

procedures die te maken hebben met het tekenen van

rechte

lijnen worden in deze paragraaf behandeld.

BiJ

ieder station wordt gebruik gemaakt van het feit dat

het

laatst geadresseerde pixel wordt vastgehouden.

Ieder geïmplementeerd station heeft een conneet-procedure die

twee punten opgegeven in DC verbindt.

Bij

het

trekken

van lijnen wordt de laatste positie

in

WC

bewaard in lastx en lasty. De laatste positie in DC wordt bewaard

in lastx_dc en lasty_dc.

Ieder te implementeren werkstation krijgt een

move-procedure.

Deze procedure adresseert een pixel dat wordt opgegeven in WC. De

procedure

move_to doet

dit werkstation-onafhankelijk

door

te

kijken naar de geldende waarde voor werkstation.

Ieder station krijgt een line-procedure.

Deze trekt een

lijn

tussen

het

in WC gespecificeerde punt en het punt gegeven

door

lastx en lasty.

De procedure line_to doet dit weer

(15)

werkstation-onafhankeliJk.

Door

gebruik

te maken van de verkorte adresseermogelijkheid

van

de geïmplementeerde grafische terminals C'abbreviate

adres-sing'),

kan hier worden bespaard op grafische code. Indien

name-liJk slechts êên coördinaat verandert, dan behoeft de andere niet

opnieuw te worden opgegeven.

Ieder station heeft een linetype-procedure.

Uan deze

procedu-res moet linetype2, behorend biJ de

UT2~0

grafische terminal, nog

worden

voorzien van de linetypes -1 en -2.

De linetypes 1 t/m

~

zijn in overeenstemming met de standaard,

zie Tabel

2.1,

de

overige zijn implementatieafhankeliJk.

Met deze gegevens behoeft

de GKS-functie set_linetype geen verdere toelichting.

LINETYPE

1

2

3 ~

-1

-2

QUME

-

- - -

...

-·-·-·-

--

--

--

erase line

UT2~0

- - -

-

I I I I I I I

-·-·-·-PLOTTER

- -

-

-

I I I I I I I

-·-·-·-

--

--

--

pen up always

TABEL 2.1. De geïmplementeerde linetypes

De

GKS-primitive polyline bestaat biJna geheel uit code

die

ontstaat door compileren van de file PM1:POLYR.RAC. De code wordt

afgehandeld

door de procedure palyline_compiled.

De

procedure

polyline_onvertaald doet precies hetzelfde als polyline,

maar is

een factor

~.5

trager.

2.5. Markers

De procedures die te maken hebben met het weergeven van punten

(bijvoorbeeld meetpunten) worden hier toegelicht.

De point-procedures tekenen een in DC gegeven punt.

De

proce-dure

point_at doet dit werkstation-onafhankeliJk voor

een

punt

opgegeven in WC.

Ieder station heeft voor ieder marktype een mark-procedure. De

(16)

procedures mark_min2_2

en mark_min3_2 behorende bij

de

UT2~0

hebben

nog niet de gewenste vorm.

De marktypes 1 t/m 5 zijn

in

overeenstemming met de standaard,

zie

Tabel 2.2. De marktypes -1

t/m -3 zijn implementatieafhankelijk.

MARKTYPE 1

I

2

I

3

I

~

J

5

I -

1

I

-2

I

-3

CUME

+

0 )( 0

VT2'f0

+

0 )( 0 0 0

PLOTTER

+

0 )( 0

TABEL 2.2. De geïmplementeerde marktypes

Bij

een mark-procedure worden positie en afmeting gegeven

in

reêle DC.

Onder afmeting verstaan

we

de straal van de omhullende

cirkel.

De

mark-procedure behorend biJ marktype- 3 heeft

twee

parameters voor de afmeting,

omdat hier twee markers over elkaar

heen getekend worden.

Set_marker_size_scale_Factor en sat_marker_tupe behoeven

geen

verdere toelichting.

De

gecompileerde

procedure set_polumarkar_Flags voorziet de

punten gespecificeerd in xarr en uarr van een vlag als ze

buiten

de opgegeven rechthoek vallen.

Van de GKS-functie polumarker vermelden

we

de volgende

bijzon-derheden:

a) Markers worden getekend met continue lijnen.

b) Afhankelijk van clipping_indicatar worden markers

buiten

het window wel of niet getekend.

c) De grootte van de markers wordt beïnvloed door

viewpart,

~s-~indow

en

~_viewport.

Verkleining van

vie~art

en van

~s_vi~port

werkt verkleinend,

verkleining van

~s-~inda~

werkt Cuit)vergrotend.

d) Markers buiten de werkstation viewport worden niet

gete-kend.

(17)

2.6. Vlakvulling

GKS

biedt

geb~uike~s

de mogelijkheid om vlakken te vullen

Cbijvoo~beeld

het

inkleu~en

van

histog~ammen).

De

voo~gesch~even

functies zijn in

bepe~kte vo~m geïmplementee~d

in

de

basisbiblio-theek.

De GKS-functie set_fill_area_interiar_style kan twee

vulpat~o­

nen instellen, geen vulling of massief vullen.

De GKS-functie fill_area

we~kt

niet

voo~

de plotstations.

Een

massieve vulling van een polygoon zou geheel

softwa~ematig

opge-lost moeten

wo~den.

Bij

de

VT2~0-te~minal wo~dt geb~uik

gemaakt van het

SKADE-commando, zie [PRI 86J. Dit geeft nog steeds

p~oblemen.

De

QUME geeft

ove~

het algemeen weinig

p~oblemen,

tenzij

de

vulinst~uctie

komt als een

b~andend

pixel is

gead~essee~d.

In dat

geval

wo~den

alle

aang~enzende

eveneens

b~andende

pixels

uitge-zet. Dit

p~obleem

ontstaat nog al eens bij het tekenen van

gevul-de

ma~ke~s Cma~ktype

-2 en -3),

als

ee~de~

een polyline

doo~

dezelfde punten is

get~okken.

Deze punten staan dan

imme~s

'aan'.

Bij

vulp~oblemen

kan met AD de

vulinst~uctie

van

de

QUME

wo~den afgeb~oken.

Dit

is

voo~al

handig indien

g~ote

vlakken

wo~den

gevuld als gevolg van een fout.

Voo~

een

implementatie volledig

in

ove~eenstemming

met

de

standaa~d

moet

aan de zojuist

besch~even

GKS-functie nog

veel

wo~den ve~bete~d.

Volgens [150

B~J

moet als het te vullen

poly-goon gedeeltelijk buiten window of

wo~kstation

window valt op de

voo~gesch~even

wijze

wo~den

geclipt.

De

softwa~e

die dit alles

moet

ve~zo~gen

is tamelijk complex en zal

ge~uime

tijd geen

~endement

hebben.

Wannee~ g~ootschalig

en

geävancee~d

met

GKS

ende~

PEP

gewe~kt

gaat

wo~den

is

het zinnig om de

noodzakelijk

ve~bete~ingen

aan te

b~engen.

De

GKS-functie cell_array

definiëe~t

een

~ooste~ Cg~id)

en

afhankelijk van calaur_array

wo~dt

een vakje

wee~gegeven

in een

bepaalde

kleu~.

De QUME tekent

voo~ iede~e

index ongelijk aan nul

een gevuld vakje.

Voo~

de

VT2~0

moet deze functie nog

geïmplemen-tee~d wo~den. Naa~ ve~wachting

zal dit weinig

p~oblemen

opleve-~en.

De plotstations hebben

vie~ kleu~en beschikbaa~.

(18)

ove~eenko-mand met de indices 1 t/m

~.

Het cell array wordt in onze

imple-mentatie niet geclipt, noch op het window, noch op de werkstation

viewport.

2.7 Teksten

In

een figuur moeten ook teksten geplaatst kunnen worden.

In

deze

rubriek zullen de

verschillende geïmplementeerde

GKS-functies die met het tekenen van teksten te maken hebben

worden

toegelicht.

Uoor

we

hieraan beginnen moeten we echter een

af-spraak maken.

De als leidraad gebruikte standaard,

CISO

B~J,

veronderstelt

dat op een werkstation een bepaald standaard lettertype aanwezig

is. De drie te implementeren stations hebben echter een

karakter-set waarvan de

karakters continu variabel zijn in breedte en

hoogte. Bijgevolg moeten we zelf een standaard letter definiêren.

De keuze die we maken voor de vorm van een standaard karakter

is

de

volgende.

Een normalized device dat teksten bevat en dat

in

zijn geheel wordt afgebeeld op het gehele device,

levert op dit

device een letter op waarvan de breedte gelijk is aan 70% van

de

hoogte.

De

GKS-functie

set_charactar_height

stelt naast de

karakter-hoogte in WC ook een karakterbreedte in,

in overeenstemming

met

de standaardbreedte. De breedte in WC wordt dus zo gekozen dat de

breedte

in DC gelijk is aan 70% van de hoogte in DC.

De

vrije

ruimte tussen de karakters wordt ingesteld op 1/3 van de

breedte

in WC.

Tengevolge van deze default instelling zullen bij

afbeel-ding van het gehele genormaliseerde apparaat op het gehele device

teksten een aanvaardbare representatie hebben,

onafhankelijk van

de viewport, zie Figuur 2.1.

(19)

10 1

M

0

20

0

1 0

K

WC

NDC

DC

fiGUUR 2.1. De afmetingen van karakters in WC, NDC en DC.

De

lange expressie in de statement voor

ch_~idth

is een

cor-rectiefactor.

Het afbeelden van een deel van het genormaliseerde

apparaat (uitvergroten), of het afbeelden op een gedeelte van het

device,

of beide, zal nameliJk leiden tot (gewenste) vervorming.

Met

de

correctiefactor

in ch_width bereiken we

dat

het

niet

uitmaakt

of de gebruiker voor of na set_character_height met

de

functies set_workstation_window of set_workstation_viewport

vast-legt hoe

het genormaliseerde apparaat moet

worden

afgebeeld,

m.a.w.

we

hebben de standaardbreedte teruggerekend naar NOC.

BiJ de creatie van tekst bepalen uitsluitend de op dat moment

geldende gegevens voor werkstation window en werkstation viewport

de afwiJking van de default tekstrepresentatie. Hoogte en breedte

ziJn gerelateerd aan de Y- respectieveliJk de X-schaal van

het

window dat op dat moment geldig is.

De variabelen ch_haight,

ch_~idth,

ch_exp_factor en ch_spacing

ziJn op

te vragen.

Indien gewenst kan dan met de

GKS-functies

set_character_expanaion_factor en set_character_spacing een

ande-re actuele bande-reedte en spatiêring worden ingesteld,

afwijkend van

de default instelling.

Met de GKS-functie set_text_path kan de schrijfrichting worden

ingesteld.

Naast de strings "left", "LEFT", "RIGHT" etc. kan dit

ook m.b.v.

de identifiers left,

right, up en

d~n.

De heersende

schriJfrichting wordt bewaard in text_path.

Ten

behoeve

van de GKS-functie set_text_alignment zijn de

volgende identifiers toegevoegd:

normal, centra, bottom, base,

hal~.

cap, top.

(20)

De opgegeven instructies worden gecodeerd bewaard in het array

taxt_alignment. In Figuur 2.2 staat de betekenis van een en ander

uitgelegd.

cap

line

+-

--left

haltline

I

- - -+- -

boltomline

righl

FIGUUR 2.2.

De

verschillende Formele

pa-rameters die kunnen

worden

meegegeven aan de GKS-runctie

set text alignment,

aangege-ven in êên enkele letter.

Uoor

gebruik in de BKS-runctie sat_charactar_up_vactor is de

procedure

gae~_hoak

gemaakt.

Deze procedure geert de werkelijke

hoek

in radialen die de opgegeven vector maakt met de

positieve

X-as

in een.orthonormaal assenstelsel.

De arcten-runetie geert

een hoek tussen

+~w

en

-~wen

dit voldoet niet. De op deze manier

berekende

hoek die de character up vector maakt met de

horizon-taal wordt bewaard in ch_angla.

Dit betekent bijvoorbeeld dat de

aanroep set_character_up_vectorC-1,1) resulteert in een

ch_angle

gelijk aan

3w/~.

De

GKS-runctie sat_taxt_indax wordt hier gebruikt om de

plot-stations met andere karaktersets te laten werken.

De

toegelaten

invoerparameter

komt

overeen met het getal dat de

karakterset

aanduidt in het manual, CHIT 86J.

De

UT2~0

kent ook verschillende gestandaardiseerde

karakter-sets.

Indien

gewenst

kunnen deze ook in set_text_index worden

ondergebracht.

We

kunnen dan echter niet meer volstaan met

de

hier gegeven

eenvoudige implementatie,

maar moeten

een

tabel

(21)

implemente~en

in

ove~eenstemming

met de

standaa~d

CISO

B~J.

Al-leen dan kan

appa~aatonafhankelijk wo~den

gekozen door een

ge-bruike~.

Het

inp~odukt

van

characte~

up

vecto~

en

cha~acter

base vector

is steeds gelijk aan nul,

d.w.z.

normale horizontaal

gesch~even lette~s

passen in een

~achthoek.

Aangezien de x- en u-coördinaat

in het algemeen

ve~schillend

schalen zal de

rechthoek,

bepaald

doe~

deze twee

vecto~en,

die de te tekenen

st~ing

omsluit,

veran-deren

in een

pa~allellog~am

bij het schuin

plaatsen van een

tekst, zie

Figuu~

2.3.

JHorizontaall

FIGUUR 2.3.

De invloed van

transfo~maties

bij het scheef

tekenen

van

een tekst.

Binnen de BKS-primitive text wordt de

p~ocedure

calc_char_pos

gedeclareerd. Na aanroep van deze procedure worden de

ar~aus

xpos

en ypos gevuld met de apparaatcoördinaten van het punt linksonder

van ieder te tekenen karakter.

De

invoe~pa~amete~s

moeten

wo~den

opgegeven

in DC.

Daa~toe

moeten x en y uit text,

alsmede

de

va~iabelen

ch_height,

ch_~idth,

ch_spacing en ch_angle worden

omgerekend en ingevuld bij x_dc,

y_dc,

hg_dc,

~d_dc,

sp_dc en

Fi_dc.

Afhankelijk van de lengte van txt en de

invoe~parameters

wordt

voor iedere text_path - taxt_alignment combinatie uitgerekend hoe

het

parallellogram er uit komt te zien.

De

schrijfrichting en

verplaatsing

in dit parallellogram worden bewaard in de

variabe-len x_shiFt en y_shiFt.

Het punt linksonder van het

eerste te

tekenen karakter wordt bewaard in x_init en y_init.

Er

wordt

in calc_char_pos geen onderscheid

gemaakt

tussen

(22)

'base' en 'bottom' en ook niet tussen 'cap' en 'top'.

De

proce-dure kan indien gewenst echter gemakkelijk worden uitgebreid. Een

dergelijke uitbreiding t.b.v.

top en bottam heeft overigens

al-leen nut voor de plotter.

De letters g en y bijvoorbeeld

hebben

alleen bij de plotter een gedeelte onder de character base line.

De

in totaal

~x~x6•96

mogelijke text_path-text_alignment

com-binaties staan in zodanige structuur geprogrammeerd dat de

meest

waarschijnlijke combinaties het eerst aan bod komen in de

case-statements.

CEen

IF ... ELSIF ... ELSIF ... ELSIF ... Ft-statement

ge-draagt zich als een case-statement).

In

de body van text wordt eerst gekeken of er überhaupt tekst

is om te tekenen.

Uervolgens worden de projecties van de

charac-ter up

vector en de character base vector

uitgerekend

uit de

variabele ch_angla,

rekeninghoudend met het verschil in schaling

tussen de twee coördinaatrichtingen.

De projecties van de

genor-meerde character up vector zijn:

CcosCch_angle),O) en CO,sinCch_angle))

We

kunnen nu

ling gewijzigde,

tor uitrekenen.

dezelfde manier

eenvoudig de,

tengevolge van de ongelijke

scha-projecties van de genormeerde character up

vee-Deze projecties worden bewaard in dx2 en dy2. Op

berekenen we de projecties van

de

gewijzigde

character base vector, dx1 en dy1.

We hebben nu de gewenste vectoren. Bij aanroep van de

procedu-re calc_char_pos moeten we voor de hoek

~i_dc,

die de gewijzigde

character up

vector

(vastgelegd met dx2 en dy2) maakt

met

de

horizontaal, de hoek opgeven die de vector loodrecht op de

gewij-zigde character base vector C-dyl,dxl) maakt met de

horizontaal.

De

procedure calc_char_pos werkt namelijk met DC die wel

gelijk

schalen,

m.a.w.

het

parallellogram uit Figuur 2.3 is voor

de

procedure calc_char_pos in iedere stand een rechthoek.

De

vecto-ren gevormd

door

Cdxl,dyl) en Cdx2,dy2) staan

immers

in het

algemeen niet geometrisch loodrecht op elkaar,

tenzij

toevallig

geldt:

ch_angle•k*w/2 met k een integer, zie Figuur

2.~.

In deze

figuur

is

ook te zien dat,

indien mogelijk,

voor de tt tekenen

karakters een scheefstand moet worden ingesteld,

zodat de

karak-ters passen bij het parallellogram opgespannen door character

up

(23)

vecto~

en

cha~acte~

base

vecto~.

De scheefheid

wo~dt

in de

figuu~

gegeven

doe~

de hoek tilt.

In de

linke~ figuu~

staan de

vecto~en C-1.~)

en

(~,1) algeb~aïsch

en

geomet~isch lood~echt

op

elkaa~.

In de

~echte~ figuu~

staan deze

vecto~en

alleen

algeb~aïsch lood~echt.

Bijgevolg geldt

VOO~

de

linke~ figuu~:

fi_dc - ch_angle -

arctanC-~) + w

en dus geldt: t i l t - 0

Uoor de rechter figuur geldt de uitdrukking:

t i l t -

a~ctanC-8)

- arctanC-2) dus t i l t < 0

5

JO

• TILT

4 8 3 6 2 4 2 0 2 3 0 2 3 4 5

FIGUUR

2.~.

De

invloed van een

ve~andering

van de V-schaal

met

een

facto~

twee op de

rep~esentatie

van een schuin

geschreven tekst.

Nadat calc_char_pos de

a~~ays

xpos en ypos heeft gevuld,

wo~dt

gekeken welke

coö~dinaten

buiten het window

vallen, mits de

boclaan clipping_indicator true is.

Daa~toe

moet het window eerst

in

Oe

bekend Zijn omdat de

karakte~posities

OOk in

Oe

Zijn

uitge-rekend.

De

bijbehorende geclipte

karakte~s wo~den

voorzien van

een vlag in

flags_~_dc

en

wo~den

niet getekend.

Nu

moet nog worden getest welke

ka~akte~s

buiten de

wo~ksta­

tion viewport vallen. Deze mogen nooit worden getekend.

Indien biJ

no~male ho~izontale

regels van

een

ka~akter

de

rechterkant of de bovenkant gedeelteliJk buiten de werkstation

viewport

valt en de

ad~essering

Chet punt

linksonde~)

geschiedt

binnen de deviceli•itB, dan wordt gebruik gemaakt van de hardware

clip mogelijkheid van de plotstations.

Een

ka~akte~ wo~dt

dan

(24)

zowel

links en rechts,als boven en onder op een correcte manier

geclipt, zie Figuur 2.5.

6ECI

I

F?l

TPl

FIGUUR 2.5.

Hardware clip

mogelijkhe-den van de plotstations.

Nu

moeten per werkstation de karakterhoogte en breedte worden

ingesteld.

Uoor de QUME betekent dit het instellen van XGAIN

en

YGAIN Czie hoofdstuk 1).

Vergroting van de GAIN betekent

vergro-ting van een karakter,

maar verkleining van het adresseerbare

veld.

De karakters kunnen slechts in taktranix alpha mode worden

getekend.

Dit betekent dat de oorsprong linksboven moet komen te

liggen en de YGAIN positief moet worden gekozen.

Doet

men

dit

niet dan worden de karakters ondersteboven getekend.

Bovendien

moet

voor

het positioneren voortdurend worden gewisseld

tussen

native mode en taktranix alpha mode,

omdat positioneren slechts

mogelijk

is in native mode.

Dit alles leidt tot de gegeven

con-structie in het programma Cregelnr 25500-25670).

De waarden

in

xpos en ypos zijn natuurlijk niet meer juist en moeten

worden

aangepast bij de nieuwe GAIN's. Dit gebeurt door de waarden op te

geven als in point.

De getallen 22.0 en 21.7 zijn

proefondervin-delijk vastgesteld.

Zij stellen breedte en hoogte voor

van

de

karakters

in DC in native mode als wordt overgegaan naar

taktra-nix alpha mode,

zonder verandering van GAIN.

Het zijn dus

afme-tingen

in DC die passen bij het adresseerbare veld gegeven

door

devicelimits.

De QUME kent alleen horizontale regels en geen

'!talies',

de

tekst is dus niet nauwkeuriger weer te geven.

Als alle karakters

getekend

zijn wordt het scherm weer in overeenstemming

gebracht

met de beginsituatie, zie ook activate_workstatian.

Bij de

UT2~0-terminal

stellen we de karaktergrootte en breedte

in door het opgeven van een

character-~ace-

en

een

character-Unit-cell.

De

factoren

8/7 en 10/7 zijn nodig omdat een

BxlO-matrix gevuld wordt met een karakter dat in een 7x7-BxlO-matrix

past.

De celgrootte correspondeert dus niet met de gewenste

(25)

karakteraf-metingen. Zonder deze factoren zouden de letters te klein

uitval-len.

Een

bijzonderheid van deze terminal is dat

de

karakters

passen

in

een matrix van rechthoekjes. Grotere karakters

implice-ren grotere blokjes en dus dikkere lijnen.

Indien de

karakters

een bepaalde hoogte-breedte verhouding overschrijden worden twee

of meer

tekens

naast elkaar getekend,

de

vereiste breedte

vullend,

zie Figuur 2.6.

De karakters hebben nu

de

gewenste

grootte en zitten in een cel van BxlO.

Om het karakter op

de

goede

plaats te krijgen moeten we het punt linksboven van

deze

cel adresseren.

Dit komt overeen met het linkerbovenpunt van êên

matrixrechthoekje geplaatst linksboven het karakter.

FIGUUR 2.6.

Het maken van

te brede

let-ters bij de

UT2~0.

De

UT2~0

heeft als extra mogelijkheid het schrijven op

niet-horizontale lijnen en !talies,

evenals de

plotter.

Uan

deze

mogelijkheid wordt nog geen gebruik gemaakt.

Bij

de plotstations worden karaktergrootte en breedte

inge-steld door deze op te geven

in

cm.

Een plotterunit komt

echter

overeen met

25 micron,

dus moeten de karakterafmetingen

in

oe

worden vermenigvuldigd met 0.0025.

Als de character base vector

niet horizontaal loopt wordt hij ingesteld m.b.v.

de

DI-instruc-tie. We

hebben daartoe

dxl

en

dut

reeds uitgerekend.

We moeten

hierbiJ

rekening houden met het feit dat de

procedure real_nr

alleen getallen waarvan de absolute waarde kleiner is dan

100

significant kan weergeven.

Hieraan is voldaan door te normeren.

De

character up vector maakt een hoek

tilt

met de vector

lood-recht op de character base vector Chet inprodukt van de

vectoren

dxl,dyl en -dyl,dxl is nul).

Door de tangens van deze hoek op te

geven

biJ

de St-instructie kunnen we de

character up

vector

instellen zodat de tekens cursief worden geplot. De twee

default-instructies DISL

zorgen voor rechtop-staande,

horizontaal

ge-schreven karakters, als

ch_angla- w/2.

(26)

Uoor

het positioneren tenslotte hebben xpos en ypos reeds

de

goede waarden.

2.8. Cirkels en ellipsen

Alle tot nu toe besproken werkstations kunnen zelf een

cirkel

genereren.

Het ligt dus voor de hand om dit gegeven te gebruiken

om een generalized drawing primitive te implementeren.

We moeten

echter

niet vergeten dat een cirkel getekend in een

willekeurig

window

vrijwel altijd transformeert naar een ellips in de

werk-station viewport. De QUME kan als enige ook ellipsen zelf

genere-ren.

Een

cirkel is dan een ellips waarvan de brandpunten

samen-vallen.

Uoor het maken van ellipsen moeten we, net als bij het

instel-len van karakterhoogte en breedte,

gebruik maken van

de

GAIN-instelling van

de QUME.

Een extra voorwaarde is bijgevolg het

horizontaal

of vertikaal lopen van de lange en korte as van

de

ellips.

Een

geroteerde ellips is dus alleen met

fill_area

te

benaderen Cd.m.v. een ellipsvormige veelhoek).

Indien wel aan deze voorwaarde is voldaan moet de aspect ratio

worden

gewijzigd m.b.v.

de GAIN-instructies zodat

een cirkel

overgaat

in een ellips met halve lange as a_dc en halve korte as

b_dc. We kiezen een oplossing waarbij de heersende GAIN's

gelijk-waardig worden gewijzigd,

zodat ze niet te sterk gaan

verschil-len. Daartoe krijgt

dafo~mation

de waarde

die overeenkomt met de

wortel uit de gewenste afwijking van de aspect ratio.

Uervolgens

worden

de

twee heersend GAIN's tegengesteld

gewijzigd.

Hierna

kunnen

we

het centrum van de ellips uitrekenen en

instellen.

We

moeten dan coördinaten gebruiken die passen bij het

gemodificeer-de

veld,

net als bij het positioneren van de karakters uit een

tekst bij de QUME.

Uervolgens geven we het punt dat op de ellips

ligt en laten de ellips-creatie starten.

Indien mogelijk

wordt

gebruik

gemaakt van 'abbreviate addressing' om code te besparen

(zie ook

2.~.

Lijnen).

Uiteindelijk worden de default

waardes

voor

de GAIN's ingevuld die passen biJ de devicelimits,

zie ook

text en activate_workstation.

We hanteren niet de voorgeschreven handelswijze voor de

imple-mentatie van een GDP, zie CISO

B~J.

maar geven de

geïmplementeer-de functies een direct toegankelijke naam.

Als identifiers ziJn

(27)

gekozen: ellips, circle en set_arc_angle.

De

procedure set_arc_angle moet worden opgevat als een

attri-buut biJ ellips en circla. We laten de gebruiker niet twee punten

opgeven waartussen de kromme moet worden getrokken, zie EISO

B~J,

maar we laten de booghoek instellen.

Op deze manier kan

biJvoor-beeld op de QUME een halve ellips worden getekend.

Deze krommes

worden altiJd tegen de klok in getekend, startend biJ het

opgege-ven punt. Gebruik van deze procedure heeft ook gevolgen voor de

cirkelvormige markers biJ de QUME.

Een gebruiker moet hier dus

rekening mee houden.

(28)

3. De applicatiebibliotheek PMl:GKSAPP.RAC

In een zestal rubrieken zullen de

p~ocedures

van de

applica-tiebibliotheek PMl:GKSAPP.RAC worden toegelicht. Deze bibliotheek

wordt

geladen na PM1:GKS68.RAC welke de GKS-basisfuncties levert

die werden beschreven in hoofdstuk 2.

De

applicatiebibliotheek

maakt

gebruik van globale declaraties uit deze

GKS-bibliotheek.

ZiJ

bevat een aantal

praktijkgerichte,

gebruikersvriendeliJke

tekenprocedures, die opgebouwd zijn uit de basisprocedures.

De

applicaties zijn ontstaan in een fysische werkomgeving

en

omvatten de meest voorkomende grafische handelingen in deze

omge-ving, zoals:

-g~afieken

tekenen (eventueel met teksten)

-meetpunten tekenen

-tekenen van

k~ommen

-bewaren van tekeningen

Belangrijke identifiers zullen weer vet worden afgedrukt.

Uan

de verschillende procedures zullen we niet de

gebruiksmogeliJkhe-den

uitvoerig behandelen omdat dit reeds beschreven staat in het

handleidinggedeelte van CAME 87J.

3.1.

G~afische

files

Het

array met tekeninstructies,

dat biJ

aanstu~ing

van

een

werkstation een plaatje

opleve~t,

kan opgeslagen worden in een

file. · Om

met grafische files te kunnen werken zijn de

volgende

procedures geschreven.

De

voor

inte~actief

gebruik bedoelde procedure

sava_graphics

sch~iJft

de

g~afische

commandostring uit tak naar een file met

extensie '6', als deze nog niet bestaat. Als tak geen instructies

bevat,

wat we kunnen zien aan teller,

gebeu~t

er niets. Met deze

laatste variabele berekenen we ook het geheugenbeslag van de file

in bytes en blokken.

De

p~ocedu~e

save_na.ad_graphics werkt niet

interactief.

E~

(29)

opgegeven.

Vanwege het niet inteLactieve gebLuik woLdt ook

niet

getest Or de rile al bestaat en dus WOLdt OVBLSChLeVen.

Binnen de

pLoceduLe dump_graphics woLdt blok voeL

blok

een

rile naaL output geschLeven.

Het laatste blok bevat in het

alge-meen nog een gLoot aantal nullen CchLCQ)), dit geert geen

pLoble-men. De pLoceduLB weLkt inteLactier en kan bij gebLuik als diLeet

commando,

dus niet als pLOgLammaondeLdeel, woLden veLvangen dooL

het monitoLcommando 'TYPE'.

Dit commando zoekt in eeLste

instan-tie naaL riles met extensie 'T'.

We moeten de extensie '6' hieL

dus expliciet opgegeven, in tegenstelling tot dump_graphics.

De

pLoceduLB

load_graphics heeft veel gemeen met

de

vaLige

pLoceduLB.

De

blokken WOLden nu êên VOOL êên opgeslagen in tak.

Omdat

het laatste blok in het algemeen een aantal nullen bevat,

woLdt

de vaLiabele tallar gecOLLigeeLd.

In pLincipe kan nu

op-nieuw

save_graphics aangeLeepen WOLden voeL het maken

van

een

copie.

3.2. AanstuLing van devices

Het

baLekende aLLay met tekeninstLucties moet naaL een device

gestuuLd woLden om tekeningen zichtbaaL te maken. DaaLtoe zijn de

VOlgende pLOCBdULBS gBSChLBVBn.

De

pLoceduLBS es weLkt in de noLmale teLminalmode.

Met

deze

pLOCBdULB WOLdt de tekst van het scheLm gewist. De PLOCBdULBS cq,

vidao_on en vidao_orr weLken op het gLarische beeldscheLm van

de

QUME-teLminal.

DaaLtoe

moet

BBLst de teLminal in de

gLafische

mode gebLacht woLden C<esc>'-'<esc>'O'- enteL NATIVE-mode).

Het

foLmfeed-kaLakteL

CASCII-code 12) in cq wist het gLafische

deel

van het scheLm.

In de pLodeduLBS video_on en video_off weLken de

stLings

'lU'

Lesp.

'OU' als enable gLaphics video

en

disable

gLaphics

video.

Teksten geschLeven in teLminalmede blijven wel

zichtbaaL.

Na

afloop van deze dLiB pLoceduLes moet de

teLminal

weeL in teLminalmede woLden gebLacht. Dat gebsuLt met het

comman-do <esc> '2', zie [QUM

B~J.

De

pLoceduLe

dra~

behoeft geen toelichting.

De

fOR-loop

in

(30)

plat is noodzakelijk als deze

p~ocedu~e wo~dt geb~uikt

in een

p~oces.

De

p~ocedu~e

put_array

wo~dt

namelijk afgehandeld

zonde~

dat een

ande~ p~oces

aan de

beu~t

komt.

Dit betekent actief

wachten op de

Ct~age) plotte~.

Het

aanstu~en

van de plotter via de auxiliary

poo~t

CRS

232-aansluiting) van QUME of

ADM-te~minal

m.b.v.

plat_aux heeft als

nadeel

het tijdelijk niet beschikbaar hebben van de

terminal,

maar

als voordelen het gebruik van een

efficiënte~e synch~onisa­

tie en het

uitspa~en

van een aansluiting.

De

te~minal

wordt

nu

geb~uikt

als medium tussen plotter en computer,

waa~bij

met

de

computer

wo~dt gecommunicee~d

via de

no~male synch~onisatie p~o­ cedu~e Ccont~ol-Q

en control-5).

Tussen plotter en auxiliary

poo~t

is

echte~

bovendien aansluiting 20 van de RS 232 uitgang

aan te sluiten.

Dit heeft tot gevolg dat de

plotte~

gebruik

kan

maken van de zogenaamde

ha~dwire

handshake, via het DTR-protocol,

CData

Te~minal

Ready rHIT B6J).

Dit

lukt omdat de genoemde terminals deze

handshake

kunnen

maken via de

auxilia~y poo~t,

onafhankelijk van de

poo~t

die

is

ve~bonden

met de computer. De efficiënte synchronisatie heeft als

g~oot voo~deel

dat de plotsnelheid

wo~dt ve~dubbeld,

n.l. van 100

mm/s

naa~

200 mm/s, mits de dipswitches van de plotter goed staan

en de status van de

te~minal

klopt (HIT B6J.

3.3. Assen

Om met eenvoudige handelingen een grafiek te kunnen maken zijn

procedures nodig die assen tekenen.

Het maken van assen met een

duidelijke eenhedenverdeling

wo~dt hie~ besp~oken.

De

eerste

p~ocedure

die we

besp~eken

is axis.

Gemakkelijk is

in te zien dat bij een horizontale of vertikale as de

va~iabele

dy

resp.

dx nul is,

waardoor de lengte van de

dwa~sst~eepjes,

lenx of leny,

gelijk

is

aan 1/50 van de betreffende afmeting van

het window.

Als de as een hoek

~

maakt met de horizontaal worden

lenx en leny vermenigvuldigd met

sinC~)

en

cosC~)

ofwel

dy/norm

en dx/norm.

Het trekken van de dwarsstreepjes

is

afhankelijk van

axis_type, zie de beschrijving van axis

in

CAME 87J.

Referenties

GERELATEERDE DOCUMENTEN

verdachte en raadsman hebben in beginsel recht op inzage van de processtukken, de verdachte moet in principe worden gehoord voordat er een ingrijpende beslissing in zijn nadeel

Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of

The literature review that follows focuses on issues that are central to the development of a work unit performance measurement questionnaire, namely organizational

Performing this study on township high school learners’ perceptions of child trafficking generates another lens for showing how learners perceive child trafficking as a

Een n × n matrix U heet orthogonaal als de kolommen van U een orthonormale verzameling vectoren vormen. Pas op: deze naamgeving is

Dit vraagt van hen een grote professionaliteit in het bewust en actief aandacht schenken aan het mogelijk maken van ontmoetingen tussen gezinnen (Geens et al., 2018). Al deze

Figuur 1 geeft een over- zicht van de stappen in het door het Steunpunt WSE ontwikkelde projectiemodel werkzaamheid (zie Theunissen en Herremans (2012) voor meer details)..

Het principe is eenvoudig: de globe wordt opgedeeld in een zeer groot aantal facetten en vervolgens wordt deze in facetten ingedeelde bol ingesneden en uitgevouwen. Dit leidt tot