Library was made in Fortran programming language for simpler and faster picture drawing in PostScript.
Postscript ima določene grafične in jezikovne značilnosti.
Med grafičnimi je pomemben prostor, ki je odvisen od tiskalnika (device
space), uporabniški prostor, trenutna transformacijska matrika, pot,
trenutna pot, ...
V programu lahko zapisujemo komentarje, številčne vrednosti, nize vrednosti, znakovne vrednosti, operatorje, transliramo, rotiramo, transliramo,....
Postscript omogoča tudi oblikovanje posameznih strani tako, da lahko poleg slik pišemo tudi tekst, določamo obseg strani...
Za branje postscript dokumenta na nakaterih tiskalnikih je potrebno sam dokument oblikovati po DSF standardu (Document Structuring convention), ki predpisuje določeno obliko dokumenta. Pri tej obliki je pomembna 'glava dokumenta' katera vsebuje podatke o dokumentu (o kreatorju, ime dokumenta, dimenzije izrisa, število strani...)
Kordinate, ki jih vnašamo so v milimetrih in ne v točkah, kar je osnovna enota postscripta. Knjižnica tudi omogoča premikanje objekta, rotacijo objekta okoli izhodišča koordinatnega sistema in povečevanje oz. zmanjševanje objkta.
Zadnjo in prvo točko narisanega lika je mogoče tudi skleniti, sklenjen lik pa je mogoče zapolniti tako, da ni izris narejen iz črt in krogov ampak kot poln objekt.
Za sam črten izris je mogoče nastaviti debelino, ter barvo. Kot barvo določamo odtenke sive barve od črne pa do bele.
Knjižnica je narejena tako, da definiramo objekte, ki pa lahko vsebujejo po en ali več elementov. Ta lastnost je velikega pomena pri translaciji, rotaciji in skalaciji objektov, ker bi morali sicer geometrijske transformacije izvajati na vsakem elementu posebej.
Objekt je mogoče pred izvajanjem geometrijskih transformacij shraniti in ga po izvedbi le teh zopet izrisati v prvotni obliki. Vnasprotnem primeru bi morali izvesti obratne transformacije za ponoven izris in nadalnjo manipulacijo osnovnega objekta.
Na voljo nam je tudi pisanje teksta, katerega pa lahko kot vse objekte tudi transliramo, skaliramo in rotiramo. Na voljo nam je pisava Tmes-Roman, vendar pa jo lahko z enostavno spremembo knjižnice nadomestimo z drugo.
Vedno se glavni program prične z klicanjem podprograma, ki priredi velikost izrisanega objekta dejanski vrednosti na zaslonu ali listu, ter poskrbi ta potrebno rotacijo le tega. Izvede se tudi sprememba poscript dolžinskih enot v milimetre.
Vsak od ostalih podprogramov ima ravno tako nalogo da izpiše del kode ki pa v celoti pomeni postscript datoteko, katero lahko kot sliko ali tekst predstavimo na zaslonu ali tiskalniku.
V glavnem programu je potrebno pred vsakim začetkom definiranja novega objekta izpisati njegovo ime. V nadaljevanju pisanja programa ni več potrebno za izvajanje določenih operacij na tem objektu pisati vseh elementov, ki ga sestavlljajo ampak zapišemo samo ime objekta. Velika prednost takega definiranja se pokaže predvsem pri kompliciranih objektih, ki so sestavljeni iz veliko elementov.


Pravilno podajanje točk slike na izhodnem formatu je bistvenega pomena za pravilno lego slike.
Znakovna spremenljivka i, ki sledi koordinatam slike je ime datoteke v katero se zapisuje programska koda.
Naloga navedenega ukaza je tudi ta, da spreminja postscript dolžinske enote v milimetre. tako so vse koordinate navedene v milimetrih.
Pomembna naloga ukaza pa je izpis glave postscript datoteke v DSC formatu.








SUBROUTINE Sklenitev_lika()
Write(1,*)' closepath'
END
SUBROUTINE Zapolnitev()
Write(1,*)'fill'
END
SUBROUTINE Sivina_izrisa(b)
REAL b
Write(1,1)b
1 FORMAT(F14.2,' setgray')
END
SUBROUTINE Debelina_izrisa(c)
INTEGER c
Write(1,*)c,' setlinewidth'
END
SUBROUTINE Definiranje_objekta(e)
character e*20
Write(1,2)e
2 FORMAT('/',A20)
WRITE(1,*)' { newpath'
END
SUBROUTINE Konec_objekta()
Write(1,*)'} def'
END
SUBROUTINE Risanje_objekta(e)
character e*20
Write(1,2)e
2 FORMAT(A20)
END
SUBROUTINE Izris_Objekta()
Write(1,*)'stroke'
END
SUBROUTINE Prikaz_strani()
Write(1,*)'showpage'
END
SUBROUTINE Nastavitev_formata(x1,y1,x2,y2,x3,y3,x4,y4,i)
Integer x1,y1,x2,y2,x3,y3,x4,y4,x11,y11,x12,y12,x13,y13
REAL dx1,dy1,dx2,dy2,xs,ys,tx,ty
CHARACTER i*20
OPEN(1,file=i)
Write(1,200)
200 FORMAT('%!PS-Adobe-2.0 EPSF-2.0')
Write(1,300)
300 FORMAT('%%Creator: psdraw - by Leon Kos')
Write(1,400)i
400 FORMAT('%%DocumentFonts: ',A20)
Write(1,500)x3,y3,x4,y4
500 FORMAT('%%BoundingBox:',I6,I6,I5,I5)
Write(1,600)
600 FORMAT('%%Pages: (atend)')
Write(1,700)
700 FORMAT('%%EndComments\n%%EndProlog\n%%Page: 1 1\ngsave')
Write(1,800)
800 FORMAT('% Program izpisuje like, daljice in tekst')
Write(1,900)
900 FORMAT('% v PostScript kodi.')
Write(1,*)'/mm { 72 25.4 div mul } def'
IF((x3.le.x4).and.(y3.le.y4))then
goto 50
ELSEIF((x3.ge.x4).and.(y3.le.y4))then
goto 51
ELSEIF((x3.ge.x4).and.(y3.ge.y4))then
goto 52
ELSEIF((x3.le.x4).and.(y3.ge.y4))then
goto 53
ENDIF
53 dx1=x2-x1
dy1=y2-y1
dx2=x4-x3
dy2=y3-y4
xs=(dx2)/(dx1)
ys=(dy2)/(dy1)
IF (xs.gt.ys)then
goto 13
else
goto 23
ENDIF
13 Write(1,27)ys,ys
27 FORMAT(F7.3,F7.3,' scale')
goto 33
23 Write(1,28)xs,xs
28 FORMAT(F7.3,F7.3,' scale')
33 continue
x11=-x1
y11=-y1
Write(1,211)x11,y11
211 FORMAT(I6,' mm',I6,' mm translate')
Write(1,210)
210 FORMAT('270 rotate')
x12=-y1-x1
y12=x1-y1
Write(1,212)x12,y12
212 FORMAT(I6,' mm',I6,' mm translate')
IF(dx1.ge.dy1)then
y13=dx1/2-dy1/2
goto 47
else
y13=-dx1/2+dy1/2
endif
47 continue
x13=-dy1/2-dx1/2
Write(1,213)x13,y13
213 FORMAT(I6,' mm',I6,' mm translate')
ty=(x4/xs)-(dx2/xs)
tx=-(y4/ys)
Write(1,29)tx,ty
29 FORMAT(F9.3,' mm',F9.3,' mm translate')
GOTO 100
52 dx1=x2-x1
dy1=y2-y1
dx2=x3-x4
dy2=y3-y4
xs=(dx2)/(dx1)
ys=(dy2)/(dy1)
IF (xs.gt.ys)then
goto 12
else
goto 22
ENDIF
12 Write(1,9)ys,ys
9 FORMAT(F7.3,F7.3,' scale')
goto 32
22 Write(1,18)xs,xs
18 FORMAT(F7.3,F7.3,' scale')
32 continue
x11=-x1
y11=-y1
Write(1,215)x11,y11
215 FORMAT(I6,' mm',I6,' mm translate')
Write(1,214)
214 FORMAT('180 rotate')
x12=-2*x1
y12=-2*y1
Write(1,216)x12,y12
216 FORMAT(I6,' mm',I6,' mm translate')
x13=-dx1
y13=-dy1
Write(1,217)x13,y13
217 FORMAT(I6,' mm',I6,' mm translate')
ty=-(x4/xs)
tx=-(y4/ys)
Write(1,19)tx,ty
19 FORMAT(F9.3,' mm',F9.3,' mm translate')
GOTO 100
51 dx1=x2-x1
dy1=y2-y1
dx2=x3-x4
dy2=y4-y3
xs=(dx2)/(dx1)
ys=(dy2)/(dy1)
IF (xs.gt.ys)then
goto 11
else
goto 21
ENDIF
11 Write(1,6)ys,ys
6 FORMAT(F7.3,F7.3,' scale')
goto 31
21 Write(1,7)xs,xs
7 FORMAT(F7.3,F7.3,' scale')
31 continue
x11=-x1
y11=-y1
Write(1,218)x11,y11
218 FORMAT(I6,' mm',I6,' mm translate')
Write(1,221)
221 FORMAT('90 rotate')
x12=y1-x1
y12=-x1-y1
Write(1,219)x12,y12
219 FORMAT(I6,' mm',I6,' mm translate')
IF(dx1.ge.dy1)then
x13=dx1/2-dy1/2
goto 48
else
x13=-dx1/2+dy1/2
endif
48 continue
y13=-dy1/2-dx1/2
Write(1,220)x13,y13
220 FORMAT(I6,' mm',I6,' mm translate')
ty=-(x4/xs)
tx=(y4/ys)-(dy2/ys)
Write(1,8)tx,ty
8 FORMAT(F9.3,' mm',F9.3,' mm translate')
GOTO 100
50 dx1=x2-x1
dy1=y2-y1
dx2=x4-x3
dy2=y4-y3
xs=(dx2)/(dx1)
ys=(dy2)/(dy1)
IF (xs.gt.ys)then
goto 10
else
goto 20
ENDIF
10 Write(1,2)ys,ys
2 FORMAT(F7.3,F7.3,' scale')
goto 30
20 Write(1,3)xs,xs
3 FORMAT(F7.3,F7.3,' scale')
30 continue
x11=-x1
y11=-y1
Write(1,223)x11,y11
223 FORMAT(I6,' mm',I6,' mm translate')
tx=(x4/xs)-(dx2/xs)
ty=(y4/ys)-(dy2/ys)
Write(1,4)tx,ty
4 FORMAT(F9.3,' mm',F9.3,' mm translate')
100 continue
end
SUBROUTINE Rotacija_Objekta(a,e)
INTEGER a
character e*20
Write(1,3)a
3 FORMAT(I5,' rotate')
Write(1,2)e
2 FORMAT('0 0 ',A20)
END
SUBROUTINE Translacija_Objekta(x,y,e)
INTEGER x,y
character*100 e
Write(1,3)x,y
3 FORMAT(I5,' mm',I5,' mm translate')
Write(1,2)e
2 FORMAT('0 0 ',A20)
END
SUBROUTINE Save()
Write(1,*)'gsave'
END
SUBROUTINE Restore()
Write(1,*)'grestore'
END
SUBROUTINE Skalacija_Objekta(x,y,e)
REAL x,y
character*100 e
Write(1,4)x,y
4 FORMAT(F7.3,/,F7.3,' scale')
Write(1,2)e
2 FORMAT('0 0 ',A20)
end
SUBROUTINE Daljica(x1,y1,x2,y2)
Integer x1,y1,x2,y2
Write(1,2)x1,y1
2 FORMAT(I5,' mm',I5,' mm moveto')
Write(1,3)x2,y2
3 FORMAT(I5,' mm',I5,' mm lineto')
END
SUBROUTINE Krog(x,y,r)
INTEGER x,y,r,a1,a2
a1=0
a2=360
Write(1,2)x,y,r,a1,a2
2 FORMAT(I5,' mm ',I5,' mm ',I4,' mm ',I4,I4,' arc')
END
SUBROUTINE Lok(x,y,r,a1,a2)
INTEGER x,y,a1,a2,r
Write(1,2)x,y,r,a1,a2
2 FORMAT(I5,' mm ',I5,' mm ',I4,' mm ',I4,I4,' arc')
END
SUBROUTINE Tekst(w,x,y,g)
INTEGER x,y,w
character g*100
Write(1,2)
2 FORMAT('/Times-Roman findfont')
Write(1,3)w
3 FORMAT(I5,' scalefont')
Write(1,4)
4 FORMAT('setfont')
Write(1,5)
5 FORMAT('newpath')
Write(1,6)x,y
6 FORMAT(I5,' mm',I5,' mm moveto')
Write(1,7)g
7 FORMAT('(',A100,') show')
END
Program KVADRAT1
Character*100 e
Character*20 i
i='kvadrat.ps'
CALL Nastavitev_formata(0,0,600,800,150,290,210,200,i)
e='kvadrat'
CALL Definiranje_Objekta(e)
CALL Daljica(100,100,400,100)
CALL Daljica(400,100,400,400)
CALL Daljica(400,400,100,400)
CALL Daljica(100,400,100,100)
CALL Konec_Objekta()
CALL Risanje_Objekta(e)
CALL Izris_Objekta()
CALL Prikaz_strani()
end
Program KVADRAT1.FOR Pomanjša format risanja ter sliko pzicionira na predvideno mesto (rotacija za 270 stopinj). V programu je definiran objekt, ki je sestavljen iz štirih daljic.
PROGRAM Krog1
Character*100 e
Character*20 i
i='krog.ps'
CALL Nastavitev_formata(0,0,50,80,10,20,100,120,i)
e='krog'
CALL Definiranje_Objekta(e)
CALL Krog(30,20,15)
CALL Konec_Objekta()
CALL Risanje_Objekta(e)
CALL Zapolnitev()
CALL Izris_Objekta()
CALL Save()
CALL Skalacija_Objekta(1.5,1.2,e)
CALL Izris_Objekta()
CALL Restore()
CALL Prikaz_strani()
end
Program KROG1.FOR Riše sliko formata 50x80 in jo pozicionira na izhodni format. Na sliki jepredstavljen izris kroga, ter njegova skalacija. Ocitno le da nastane zaradi razlicne povecave v x in y smeri do elipticnega izrisa kroga.Predstavljen je tudi ukaz za zapolnjevanje objektov.
PROGRAM Lok1
Character*100 e
Character*20 i
i='lok.ps'
CALL Nastavitev_formata(0,0,50,80,10,20,100,120,i)
e='loki'
CALL Definiranje_Objekta(e)
CALL Lok(30,20,15,0,90)
CALL Konec_Objekta()
CALL Risanje_Objekta(e)
CALL Sivina_Izrisa(0.0)
CALL Debelina_izrisa(4)
CALL Izris_Objekta()
CALL Save()
CALL Rotacija_Objekta(25,e)
CALL Izris_Objekta()
CALL Restore()
CALL Prikaz_strani()
end
Program LOK1.FOR predstavlja izris loka ter negovo rotacijo. Viden je tudi vpliv debeline izpisa.
Program Tekst1
Character*100 g
Character*20 i,e
i='tekst.ps'
CALL Nastavitev_formata(100,100,400,600,50,290,210,50,i)
g='pa je konec'
e='tekst'
CALL Definiranje_Objekta(e)
CALL Tekst(50,200,200,g)
CALL Konec_Objekta() !pisanje teksta
CALL Risanje_Objekta(e)
CALL Sivina_Izrisa(0.0)
CALL Debelina_izrisa(1)
CALL Izris_Objekta()
CALL Save()
CALL Translacija_Objekta(-50,-80,e)
CALL Restore()
CALL Izris_Objekta()
CALL Prikaz_strani()
end
Program TEKST1.FOR rotira sliko za 270 stopinj in izpiše tekst, ter ga nato še translira.
Telephone: +386 (061) 1 77 14 36