|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 21504 (0x5400)
Types: TextFile
Names: »plotman«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »plotman«
\f
H. C. Ørsted Institute
Computer Department
Universitetsparken 5
DK-2100 København Ø
RC8000 algol 8. Procedurer
Externt algol tegnemaskinestyresystem
"plotman"
Anders Lindgård
80/1
januar 1980
revideret 82.02.17
\f
RC8000 tegnemaskinestyresystem 1
Forord
------
Denne lille vejledning beskriver, hvordan man skriver de ko-
destumper, som er nødvendige for at få tegnet formater, koordinat-
systemer og kurver på H.C. Ørsted Institutets RC8000's digitale
tegnemaskine. Systemet ligger tæt op af det i ref. 1 beskrevne, hvad
de ydre konventioner angår.
(c) 1973, 1976, 1978, 1980,1982 Anders Lindgård Det heri beskrev-
ne system må kun anvendes til undervisnings- og forskningsformål, som
udelukkende er financieret af den danske stat med mindre andet er
aftalt med forfatteren. Denne vejledning må ikke ændres eller
mangfoldiggøres uden aftale med forfatteren.
Systemet er under stadig udvikling. Fejl i systemet eller
beskrivelse bedes overgivet forfatteren vedlagt dokumentation.
Ved kald af programmet "plhotnews" kan man få oplysninger om de
seneste ændringer i systemet.
Denne vejledning er tilgængelig på pladelagret og kan kopieres
fra "plotman". Tegningerne til vejledningen kan tegnes på "houstona"
ved at skrive "i pmaneks" på terminalen under SOS (se dog nedenfor).
Tegnemaskinerne styres fysisk af en terminalmultiplekseren på
RC8000.
Om tegning
----------
Tilkoblet RC8000 findes nogle digitale tegnemaskiner, hvortil der
er udviklet styreprogrammel, som gør dem nemme at anvende i algol
programmer.
Calcomp 563-cm tegnemaskine (for tiden kun på RC4000)
---------------------------
Denne tromletegnemaskine tegner med kuglepen/tuschpen på et 75 cm
bredt papir, som kan være blankt papir eller milimeterpapir. Papiret
forefindes i ruller a 36 m. Skridtlængden for tegnemaskinen er 0,1
mm og den maksimale hastighed er 300 skridt/sek = 3 cm/sek. Hævning
og sænkning af pen tager hver 0.1 sek. Tegnemaskinen har en "local
remote" knap. Tegnemaskinen findes i RC4000 maskinstuen og kan bruges
af alle. Dens navn er "calcm".
Calcomp 81-tegnemaskine
------------------------
Denne tegnemaskine tegner med filtpen/tuschpen på papir. Største
format er 33.8 cm i x-aksen og 28 cm i y-aksen. Den har op til 8
penne. Papiret forefindes i ruller a 25 m. Skridtlængden er 0.1 mm
og maximal hastighed er 30 cm/sec. Denne maskintype forefindes for
tiden ikke på HCØ. Dens navn er 'calcomp81'.
\f
RC8000 tegnemaskinestyresystem 2
Tektronix 4006 grafisk terminal
-------------------------------
Denne skærm har et areal på 19 cm x 14 cm. Skrivehastigheden er
300 cm/sek. Tegnemaskinen findes i RC4000 maskinstuen og kan bruges
af alle. Dette er systemets standard tegnemaskine. Dens navn er
'tek4006a'. Tegnemaskinen vil automatisk ændre formater således at de
passer bedst muligt til skærmens størrelse.
Houston dp-11 tegnemaskine
--------------------------
Denne tegnemaskine tegner med kuglepen/tuschpen på foldet papir
med maksimal størrelse af en tegning på 25.1cm x 20.1 cm. Skridtlæng-
den kan stilles til 0.02, 0.04, 0.05, 0.1 mm. Normalt er den 0.1 mm.
Den maksimale hastighed er ca 10 cm/sek. Hævning og sænkning af pen
tager 10 msek og 60 msek henholdsvis. Tegnemaskinen findes i RC4000
maskinstuen og tilhører Kemisk Centralinstitut.
Generelle betragtninger
-----------------------
Til betjening af disse tegnemaskiner fra algolprogrammer er der
udviklet en række standardprocedurer. Systemet er således udviklet,
at uanset hvilken tegnemaskine man anvender, får man ensartet
udseende tegninger. Standard procedurerne kaldes fra algolprogrammer
på samme måde som f.eks. sin og cos, d.v.s. de skal ikke erklæres
af brugeren forinden.
Det må anbefales at man i videst muligt omfang holder beregninger og
tegning adskilt i programmerne, da man ellers ved mere langvarige
beregninger optager tegnemaskinen uden at den tegner.
Desuden er der i systemet indbygget grænser for, hvor længe man må
optage tegnemaskinen ad gangen. Denne grænse er for tiden 15 min.
Tegn små tegninger på Calcomp tegnemaskinerne. De færreste kurver har
så fine detaljer, at de ikke kan holdes inden for et A5 format.
Et tegneprogram består typisk af følgende trin, der beskrives nærmere
nedenfor:
1) Valg af tegnemaskine
2) Reservation af tegnemaskine og tegning af format, som definerer
de begrænsninger, som pennen skal holde sig indenfor
3) Tegning af tekst til identifikation af tegnemaskine
4) Tegning af et koordinatsystem
5) Tegning af en eller flere kurver
6) Tegning af punkter
\f
RC8000 tegnemaskinestyresystem 3
7) Frigivelse af tegnemaskine
Hvis man ønsker at udføre flere sæt tegninger adskilt af større
beregninger, bør man absolut frigive tegnemaskinen, når man er færdig
med det sæt tegninger, der hører til et format, således at andre
brugere også har en chance for at få noget tegnet.
Tegnemaskinerne kan anvendes under alle operativsystemerne.
1. Valg af tegnemaskine
-----------------------
For at kunne vælge den rette terminal udgang hvorpå tegnemaskinen
er tilkoblet er det nødvendigt at sætte en fildescriptor således:
<plotname>=set pl <terminal>
<plotname> er navnet på tegnemaskinen f. eks. "tek4006a og <terminal>
er navnet på terminaludgangen f. eks. "terminal20".
Ved kørsel under operativsystemet "sos" er det yderligere nødven-
digt at inkludere den pågældende enhed. Dette gøres ved:
att sos
>include 54
hvorved "terminal20" inkluderes for en "sos" proces.
Hvis dette trin udelades, vælger systemet automatisk den Tek-
tronix 4006 grafiske terminal, som er opstillet i RC4000 maskinstuen.
Valg af tegnemaskien foregår ved kald af proceduren:
setplotname(name,type) ;
name kan være
<:calcm:> ; calcomp 653-cm tegnemaskine
<:calcomp81:> ; calcomp 81-cm tegnemaskine
<:tek4006a:> ; tektronix 4006 grafisk skærm (standard)
<:houstona:> ; houston dp11 tegnemaskine
type har kun betydning for "houstona". På "houstona" er type beregnet
til at vælge skridtlængde. type=0 svarer til 0.1 mm, type=1 til 0.05
mm. Type=4 er som type=1 med automatisk ændring af format således at
papiret udnyttes bedst muligt. Analogt for type 5,6,7 osv. Der skal
være overenstemmelse mellem den skridtlængde som type angiver og den
der er sat med en kontakt på selve dp11 tegnemaskinen. For skærme har
kun type 0 og 4 mening.
2. Reservation og tegning af format
-----------------------------------
Dette gøres ved kald af proceduren
\f
RC8000 tegnemaskinestyresystem 4
plotform(type,xsize,ysize);
Hvis tegnemaskinen er ledig, reserveres den ellers udskrives på
hovedkonsollen:
message <name> wait for <pname>
message <name> reserved <user>
hvor <user> er navnet på den proces, der har reserveret tegnemaski-
nen. Derefter venter programmet på, at tegnemaskinen bliver ledig og
kan reserveres. <pname> er navnet på den ønskede tegnemaskine. <user>
er navnet på dens egen proces.
Dernæst tegnes et format afhængigt af den anvendte tegnemaskine og
parameteren type.
For houston dp-11 og calcomp-cm tegnemaskinerne gælder:
type = 0 Der tegnes et format som er xsize cm
gange ysize cm.
type = 1 Der tegnes et standard A-format. Hvis xsize er 1,
tegnes et A1 format, hvis xsize er 2 tegnes et A2
format o.s.v. Formatet placeres med den korteste
side i x-aksens retning.
type = 2 Der tegnes A-formater, som ved type = 1 blot placeres
den længste side i x-aksens retning.
Der er nu defineret et koordinatsystem med nulpunkt i nederste
venstre hjørne og med en enhed på 1 cm. Pennen befinder sig i
nulpunktet med pennen hævet.
Skærmene slettes ved plotform-kaldet, og formatet vælges som for
cm-tegnemaskinerne men dog således, at formatet og længdeenheden
divideres ned, således at formatet kan være på skærmen. Tegninger vil
være tro formindskede kopier af de tilsvarende calcomp- og houston-
tegninger.
3. Tegning af tekst og tal
--------------------------
Det må frarådes at skrive alt for megen tekst på tegnemaskinen,
da det er en tidsrøvende proces at tegne bogstaver og andre symboler.
Til udskrivning af tekst og tal anvendes en af de to procedurer
writeplot( ... )
\f
RC8000 tegnemaskinestyresystem 5
write(plotz, ... )
prikkerne står for en eller flere parametre som i et almindeligt kald
write. Anvendes write skal man skrive
setposition(plotz,0,0);
før andre tegnemaskineprocedurer bliver kaldt, ellers vil teksten
ikke blive tegnet.
Tegningen af bogstaver og symboler sker fra pennens nuværende
position. Da denne efter et kald af plotform er i nederste venstre
hjørne af formatet, er det normalt nødvendigt at flytte den.
For Calcomp81 tegnemaskinen kan mange anvende den indbyggede tegn-
generator ved at sætte: plotalpha:=true;
Det valgte alfabet på calcomp81 er det dansk/norske.
Ved at kalde proceduren
setmargin(x,y);
sættes et marginpunkt x,y cm (tommer) fra formatets nederste venstre
hjørne. Ved at skrive et sideskifttegn (tegnværdi 12) flyttes pennen
til marginpunktet. Et linieskifttegn (tegnværdi 10) bevirker, at
pennen flyttes til marginpunktets x-koordinat, medens y-koordinaten
reduceres med linieafstanden, der er 0.70 cm. Bogstavhøjden er 0.35
cm, medens bogstavbredden er 0.28 cm (også på tomme-tegnemaskinen)
Disse størrelser er gemt i 3 standardvariable "linediff", "plot-
height" og "plotsize" og kan ændres ved at give disse variable nye
værdier.
Eksempel:
begin
integer j;
plotform(0,8,3);
plotheight:=0,50; plotsize:=0,4;
linediff:=2*plotheight;
setmargin(1,2); j:=4;
writeplot(<:<12> en tekst med en <10> vognretur :>,j*2);
plotclose;
end;
der giver tegningen i figur1
\f
RC8000 tegnemaskinestyresystem 6
4. Tegning af koordinatsystem
-----------------------------
Til at administrere tegnearealet og tegning af et koordinatsystem
anvendes proceduren
plotadmini(xmin,xmax,ymin,ymax,type);
Den definerer et brugerkoordinatsystem, således at koordinaterne
xmin,xmax,ymin,ymax ligger iden for formatet og således, at 1 cm
svarer til et 'pænt' tal; ved et 'pænt' tal forstås et af tallene
1, 2, 5 gange et tiereksponent, og således at punktet xmin, ymin,
ligger så tæt som muligt på punktet 1,1 cm fra nederste venstre
hjørne. Den tegner et koordinatsystem således at akseskæringspunktet
(ikke nødvendigvis 0,0) ligger i venstre halvdel og indenfor de
nederste 9/10 af formatet. Ved akseskæringspunktet angives dette
punkts koordinater i brugersystemet. Ved hver af enderne af de to
pile skrives, hvor meget en inddeling er i koordinatsystemet. Hvis
type er 0 tegnes der mærker på akserne for hver inddeling ellers
tegnes kun et mærke på hver akse ved akseskræringspunktet.
5. Tegning af kurver
--------------------
Til kurvetegning findes to procedurer
plotgraph(x,y,xl,xh,dx);
plotcurve(x,y,t,tl,th,dt);
plotgraph tegner en kurve y(x) i intervallet fra xl til xh med en
skridtlængde på dx.
Eksempel:
plotgraph(x,sin(x),0,2*pi,pi/200);
tegner funktionen sinus af x i intervallet fra 0 til 2pi med en
skridtlængde på pi/200. Plotcurve tegner en funktion givet ved en
parameterfremstilling x(t), y(t), hvor t varieres i intervallet fra
tl til th med en ændring på dt.
Eksempel 1: plotcurve(x,sin(x),x,0,2*pi,pi/200);
identisk med eksemplet for plotgraph.
Eksempel 2: plotcurve(sin(t),cos(t),t,0,2*pi,pi/200);
tegner enhedescirklen.
Eksempel 3: plotcurve(x(t),y(t),t,0,200,1.0);
Tegner en stykvis ret linie gennem punktparrene
x(t) y(t), t = 1,2, ..., 200.
(t skal være en erklæret real variabel.)
dt i plotcurve skal vælges med nogen omhu. Den bør ikke vælges mindre
\f
RC8000 tegnemaskinestyresystem 7
end svarende til et skridt på tegnemaskinen, da man ellers får udført
overflødige tidsrøvende beregninger, d.v.s dt bør vælges således at
pennen flyttes mindst et skridt ved en ændring af t på dt.
6. Tegning af punkter
---------------------
Til dette brug findes proceduren
plotpoint(x,y,type);
som flytter pennen til punktet x,y. Hvis "type" er nul i kaldet
plotpoint, flyttes pennen blot. På skærmen sættes en prik, eller
tegnes et punkt afhængig af type, se figur2. Den tegnede figur vil
ligge i en omskreven cirkel med radius pointsize og centrum i x,y.
Standard værdi for pointsixe er 0.3 cm, og pointsize ændres ved at
give denne variabel en ny værdi.
Eksempel der viser de 15 forskellige punkttyper udtegnet med et
algolprogram, se figur2.
begin
2 integer i;
3 plotform(0,17,4);
4 pointsize:=35;
5 for i:=step 1 until 15 do
6 begin
7 plotmove(1+i-plotsize,3);
8 writeplot(i);
9 plotpoint(1+i,1,i);
10 end;
11 plotclose;
end
algol end 68
Hvis type er større end 15, tegnes flere figurer oven i hinanden
svarende til følgende algol-sætning:
for type:=type,type shift(-4) while type<>0 do
plotpoint(x,y,type extract 4);
plotpoint ændrer ikke pennens lodrette position. Dette kan gøres ved
at kalde procedurerne "pendown" eller "penup" som sænker og hæver
pennen henholdsvis.
7. Frigivelse af tegnemaskiner
---------------------------
På RC8000 vil det desværre indtil videre være nødvendigt explicit
at frigive tegnemaskiner ved afslutningsvis i tegneprogrammer ved
kald af "plotclose". Hvis et tegneprogram går i fejl og kalder en af
ALGOLs alarmprocedurer vil der ofte mangle noget af tegningen.
\f
RC8000 tegnemaskinestyresystem 8
Nogle eksempler på tegnemaskineprogrammer:
begin
real x;
plotform(0,8,8);
setmargin(3,7);
writeplot(<:<12>sin(x)*exp(-x):>);
plotadmini(0,2*pi,-0.1.4,0);
plotgraph(x,sin(x)*exp(-x),0,2*pi,pi/200);
plotclose;
end
eller
begin
real x;
plotform(0,8,8);
setmargin(3,7);
writeplot(<:12>sin(x)*exp(-x):>);
plotadmini(0,2*pi,-0.1,0.4,0);
plotcurve(x,sin(x)*exp(-x),x,0,2*pi,pi/200);
plotclose;
end
der begge giver figur3.
begin
real t;
plotform(0,8,8);
setmargin(1,7);
writeplot(<:12>unitcircle:>);
plotadmini(-1.3,1.3,-1.3,0);
plotcurve(sin(t),cost(t)T,0,2*pi,pi/200);
plotclose;
end
der giver figur4.
\f
RC8000 tegnemaskinestyresystem 9
Ref. 1. Ole J. Heilmann and Preben Graae Sørensen
A set of procedures for administrating the
plotter in GIER-Algol 4.
Rapport nr. 1.
Kemisk Laboratorium III
H.C. Ørsted Institutet.
Ref. 2. Anders Lindgård, P. Graae Sørensen and J. Oxenbøll
J. Phys. E 10 264 (1977)
Ref. 3. R. Moss and A. Lindgård
Comput. & Graphics 4 51 (1979)
\f
RC8000 tegnemaskinestyresystem 10
Appendix 1.
-----------
Nogle udvalgte algol 8 tegnemaskineprocedurer.
Pennens flytning
----------------
Hvis man ønsker selv at gøre det i stedet for at benytte de før
nævnte procedurer).
Til at ændre pennens position findes 3 procedurer:
plotmove(x,y);
penup;
pendown;
penup og pendown henholdsvis løfter og sænker pennen fra papiret,
mens plotmove flytter pennen til punktet med brugerkoordinaterne x,y.
Pennen kan dog ikke flyttes uden for formatet. Pennens lodrette
position ændres ikke ved kald af plotmove.
Pennens position i bruger koordinater gemmes af systemet i de to
"real" variable "plotxpos" og "plotypos".
Omsætningsfaktorerne mellem cm-systemet og brugerkoordinatsyste-
met er givet ved de to standardvariable "deltax" og "deltay" som
angiver 1 cm (enhed) i brugerkoordinater.
Underformatadministration
-------------------------
Ved kald af proceduren
plotsubform(xmin,xmax,ymin,ymax,draw);
defineres der et underformat i det af plotform definerende koordinat-
system. Dette underformat vil i alle henseender virke, som om det var
det oprindelige format for de øvrige tegnemaskine procedurer. (xmin,
ymin) er koordinaterne for nederste venstre hjørne af underformatet
i det af plotform fastlagte cm(tomme) koordinatsystem. (xmax,ymax)
koordinaterne for det øverste højre hjørne af underformatet.Er draw
true tegnes underformatets grænser. Er draw false tegnes grænserne
ikke. Ved et kald af plotsubform omdefineres et eventuelt brugerkoor-
dinatsystem (fra plotadmini) til et koordinatsystem med (0,0) i
subformatets nedre venstre hjørne og med længdeenheden 1 cm (1
tomme).
\f
RC8000 tegnemaskinestyresystem 11
Eksempler:
begin
real x;
plotform(0,8,8);
setmargin(2,7);
writeplot(<:<12>sin(x)*exp(-x):>);
plotsubform(2,6,2,6,true);
plotadmini(0,2*pi,-0,1,0.4,0);
plotcurve(x,sin(x)*exp(-x),x,0,2*pi,pi/200);
plotclose;
end
se figur 5
begin
2 real t;
3 plotform(0,8,8);
4 plotsubform(2,6,1,5,true);
5 plotadmini(-1.5,1.5,-1.5,1.5,0);
6 plotcurve(sin(t),cos(t),t,0,2*pi,pi/200);
7 plotsubform(1,7,6,8,false);
8 setmargin(1,1);
9 write(plotz,<:12>unitcircle:>);
10 setposition(plotz,0,0);
11 plotclose;
12 end
se figur 6
Alfabeter
---------
Standardalfabetet indeholder såvel det latinske alfabet som det
græske og desuden nogle specialtegn.
Skift mellem latinsk og græsk alfabet styres af tegnene SO
(tegnværdi 14) og SI (tegnværdi 15) hvor SO vælger det græske alfabet
og SI det latinske. I et kald af "writeplot" er tegnsættet initiali-
seret til det latinske. Tegnsættene er vist på figur 7 og 8.
Eksempel:
Writeplot (<:greek letters: :>,
<:<14> a b c d e f g h i k l m
n o p q r s t w x y z ø <15>:>);
Hvis man anvender calcomp81 tegnemaskinens indbyggede tegn-generator
kan ikke få græsk alfabet. Til gengæld kan man ved at kalde:
select_char(charset);
vælge mellem ASCII (=0), tysk (=1), spansk (=2), svensk/finsk (=3)
eller dansk/norsk (=4).
Skift af skriveretning
----------------------
Det er muligt at opnå andre skriveretninger end x-aksen, og få
hældning på bogstaver og tal ved at kalde proceduren:
\f
RC8000 tegnemaskinestyresystem 12
plotsettext(plotsize,plotheight,thetax,thetay,linediff);
hvor "plotsize", "plotheight", "linediff" angiver bredden, højden af
bogstaver samt linieafstand alt målt i cm. "thetax" og "thetay"
angiver vinkler for henholdsvis skriveretning og hældning. Begge
måles i radianer (0,2pi). "thetax" måles fra x-aksen i positiv
omløbsretning. "thetay" måles fra y-aksen i negativ omløbsretning.
Alle variable ses i forhold til marginpunktet som sat ved
setmargin (x_cm, y_cm);
Se figur 9.
For calcomp81 gælder det specielle ved brug af den indbyggede
tegn-generator at kun basis-linien kan ændres ved kald af plotsettext
og desuden at det er uden effekt blot at ændre standardvariablene.
Kønne bogstaver
---------------
Som standard tegnes bogstaver og tal med rette linier givet på
et 5 x 8 gitter. Ved at sætte standardvariablen "plotspline" således:
plotspline:=true;
opnås at alle bogstaver herefter tegnes optimalt runde ved brug af
splines. Algoritmen er ret regnetidskrævende og medfører en hel del
transporter fra baggrundslageret, hvorfor den kun anbefales til brug
ved publikationstegninger.
Enheder
-------
Standardenheden i systemet er givet ved variablen "plotunit" og
er for calcomp tegnemaskinerne 100 skridt svarende til 1 cm. Ændres
"plotunit" umiddelbart før et kald af plotform vil man opnå at den
efterfølgende tegning bliver forstørret/formindsket.
"plotunit" bør aldrig ændres andre steder.
Buffering
---------
Systemet opsamler normalt vektorer i en for brugerprogrammet
usynlig buffer. Nar denne er fuld overføres bufferen til tegnemaski-
nen og vektorerne tegnes.
Man kan i programmet synkronisere programafvikling og tegning ved
et kald af proceduren "plotend". Denne sender bufferen over til
tegnemaskinen og venter på at disse vektorer bliver tegnet færdig.
\f
▶EOF◀