PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/home/htlwork.com/www/dev/magento/vendor/thecodingmachine/safe/generated/
Upload File :
Current File : /home/htlwork.com/www/dev/magento/vendor/thecodingmachine/safe/generated/ps.php
<?php

namespace Safe;

use Safe\Exceptions\PsException;

/**
 * Places a hyperlink at the given position pointing to a file program
 * which is being started when clicked on. The hyperlink's source position
 * is a rectangle
 * with its lower left corner at (llx, lly) and its upper right corner at
 * (urx, ury). The rectangle has by default a thin blue border.
 *
 * The note will not be visible if the document
 * is printed or viewed but it will show up if the document is converted to
 * pdf by either Acrobat Distiller™ or Ghostview.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $llx The x-coordinate of the lower left corner.
 * @param float $lly The y-coordinate of the lower left corner.
 * @param float $urx The x-coordinate of the upper right corner.
 * @param float $ury The y-coordinate of the upper right corner.
 * @param string $filename The path of the program to be started, when the link is clicked on.
 * @throws PsException
 *
 */
function ps_add_launchlink($psdoc, float $llx, float $lly, float $urx, float $ury, string $filename): void
{
    error_clear_last();
    $result = \ps_add_launchlink($psdoc, $llx, $lly, $urx, $ury, $filename);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Places a hyperlink at the given position pointing to a page in the same
 * document. Clicking on the link will jump to the given page. The first page
 * in a document has number 1.
 *
 * The hyperlink's source position is a rectangle with its lower left corner at
 * (llx, lly) and its upper
 * right corner at (urx, ury).
 * The rectangle has by default a thin blue border.
 *
 * The note will not be visible if the document
 * is printed or viewed but it will show up if the document is converted to
 * pdf by either Acrobat Distiller™ or Ghostview.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $llx The x-coordinate of the lower left corner.
 * @param float $lly The y-coordinate of the lower left corner.
 * @param float $urx The x-coordinate of the upper right corner.
 * @param float $ury The y-coordinate of the upper right corner.
 * @param int $page The number of the page displayed when clicking on the link.
 * @param string $dest The parameter dest determines how the document
 * is being viewed. It can be fitpage,
 * fitwidth, fitheight, or
 * fitbbox.
 * @throws PsException
 *
 */
function ps_add_locallink($psdoc, float $llx, float $lly, float $urx, float $ury, int $page, string $dest): void
{
    error_clear_last();
    $result = \ps_add_locallink($psdoc, $llx, $lly, $urx, $ury, $page, $dest);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Adds a note at a certain position on the page. Notes are like little
 * rectangular sheets with text on it, which can be placed anywhere on
 * a page. They
 * are shown either folded or unfolded. If folded, the specified icon
 * is used as a placeholder.
 *
 * The note will not be visible if the document
 * is printed or viewed but it will show up if the document is converted to
 * pdf by either Acrobat Distiller™ or Ghostview.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $llx The x-coordinate of the lower left corner.
 * @param float $lly The y-coordinate of the lower left corner.
 * @param float $urx The x-coordinate of the upper right corner.
 * @param float $ury The y-coordinate of the upper right corner.
 * @param string $contents The text of the note.
 * @param string $title The title of the note as displayed in the header of the note.
 * @param string $icon The icon shown if the note is folded. This parameter can be set
 * to comment, insert,
 * note, paragraph,
 * newparagraph, key, or
 * help.
 * @param int $open If open is unequal to zero the note will
 * be shown unfolded after opening the document with a pdf viewer.
 * @throws PsException
 *
 */
function ps_add_note($psdoc, float $llx, float $lly, float $urx, float $ury, string $contents, string $title, string $icon, int $open): void
{
    error_clear_last();
    $result = \ps_add_note($psdoc, $llx, $lly, $urx, $ury, $contents, $title, $icon, $open);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Places a hyperlink at the given position pointing to a second pdf document.
 * Clicking on the link will branch to the document at the given page. The
 * first page in a document has number 1.
 *
 * The hyperlink's source position is a rectangle with its lower left corner at
 * (llx, lly) and its upper
 * right corner at (urx, ury).
 * The rectangle has by default a thin blue border.
 *
 * The note will not be visible if the document
 * is printed or viewed but it will show up if the document is converted to
 * pdf by either Acrobat Distiller™ or Ghostview.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $llx The x-coordinate of the lower left corner.
 * @param float $lly The y-coordinate of the lower left corner.
 * @param float $urx The x-coordinate of the upper right corner.
 * @param float $ury The y-coordinate of the upper right corner.
 * @param string $filename The name of the pdf document to be opened when clicking on
 * this link.
 * @param int $page The page number of the destination pdf document
 * @param string $dest The parameter dest determines how the document
 * is being viewed. It can be fitpage,
 * fitwidth, fitheight, or
 * fitbbox.
 * @throws PsException
 *
 */
function ps_add_pdflink($psdoc, float $llx, float $lly, float $urx, float $ury, string $filename, int $page, string $dest): void
{
    error_clear_last();
    $result = \ps_add_pdflink($psdoc, $llx, $lly, $urx, $ury, $filename, $page, $dest);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Places a hyperlink at the given position pointing to a web page. The
 * hyperlink's source position is a rectangle with its lower left corner at
 * (llx, lly) and
 * its upper right corner at (urx,
 * ury). The rectangle has by default a thin
 * blue border.
 *
 * The note will not be visible if the document
 * is printed or viewed but it will show up if the document is converted to
 * pdf by either Acrobat Distiller™ or Ghostview.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $llx The x-coordinate of the lower left corner.
 * @param float $lly The y-coordinate of the lower left corner.
 * @param float $urx The x-coordinate of the upper right corner.
 * @param float $ury The y-coordinate of the upper right corner.
 * @param string $url The url of the hyperlink to be opened when clicking on
 * this link, e.g. http://www.php.net.
 * @throws PsException
 *
 */
function ps_add_weblink($psdoc, float $llx, float $lly, float $urx, float $ury, string $url): void
{
    error_clear_last();
    $result = \ps_add_weblink($psdoc, $llx, $lly, $urx, $ury, $url);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Draws a portion of a circle with at middle point at
 * (x, y). The arc starts at an
 * angle of alpha and ends at an angle of
 * beta. It is drawn counterclockwise (use
 * ps_arcn to draw clockwise). The subpath added
 * to the current path starts on the arc at angle alpha
 * and ends on the arc at angle beta.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x The x-coordinate of the circle's middle point.
 * @param float $y The y-coordinate of the circle's middle point.
 * @param float $radius The radius of the circle
 * @param float $alpha The start angle given in degrees.
 * @param float $beta The end angle given in degrees.
 * @throws PsException
 *
 */
function ps_arc($psdoc, float $x, float $y, float $radius, float $alpha, float $beta): void
{
    error_clear_last();
    $result = \ps_arc($psdoc, $x, $y, $radius, $alpha, $beta);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Draws a portion of a circle with at middle point at
 * (x, y). The arc starts at an
 * angle of alpha and ends at an angle of
 * beta. It is drawn clockwise (use
 * ps_arc to draw counterclockwise). The subpath added to
 * the current path starts on the arc at angle beta and
 * ends on the arc at angle alpha.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x The x-coordinate of the circle's middle point.
 * @param float $y The y-coordinate of the circle's middle point.
 * @param float $radius The radius of the circle
 * @param float $alpha The starting angle given in degrees.
 * @param float $beta The end angle given in degrees.
 * @throws PsException
 *
 */
function ps_arcn($psdoc, float $x, float $y, float $radius, float $alpha, float $beta): void
{
    error_clear_last();
    $result = \ps_arcn($psdoc, $x, $y, $radius, $alpha, $beta);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Starts a new page. Although the parameters width
 * and height imply a different page size for each
 * page, this is not possible in PostScript. The first call of
 * ps_begin_page will set the page size for the whole
 * document. Consecutive calls will have no effect, except for creating a new
 * page. The situation is different if you intent to convert the PostScript
 * document into PDF. This function places pdfmarks into the document which
 * can set the size for each page indiviually. The resulting PDF document will
 * have different page sizes.
 *
 * Though PostScript does not know different page sizes, pslib places
 * a bounding box for each page into the document. This size is evaluated
 * by some PostScript viewers and will have precedence over the BoundingBox
 * in the Header of the document. This can lead to unexpected results when
 * you set a BoundingBox whose lower left corner is not (0, 0), because the
 * bounding box of the page will always have a lower left corner (0, 0)
 * and overwrites the global setting.
 *
 * Each page is encapsulated into save/restore. This means, that most of the
 * settings made on one page will not be retained on the next page.
 *
 * If there is up to the first call of ps_begin_page no
 * call of ps_findfont, then the header of the PostScript
 * document will be output and the bounding box will be set to the size of
 * the first page. The lower left corner of the bounding box is set to (0, 0).
 * If ps_findfont was called before, then the
 * header has been output already, and the document will not have a valid
 * bounding box. In order to prevent this, one should call
 * ps_set_info to set the info field
 * BoundingBox and possibly Orientation
 * before any ps_findfont or
 * ps_begin_page calls.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $width The width of the page in pixel, e.g. 596 for A4 format.
 * @param float $height The height of the page in pixel, e.g. 842 for A4 format.
 * @throws PsException
 *
 */
function ps_begin_page($psdoc, float $width, float $height): void
{
    error_clear_last();
    $result = \ps_begin_page($psdoc, $width, $height);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Starts a new pattern. A pattern is like a page containing e.g. a drawing
 * which can be used for filling areas. It is used like a color by calling
 * ps_setcolor and setting the color space to
 * pattern.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $width The width of the pattern in pixel.
 * @param float $height The height of the pattern in pixel.
 * @param float $xstep The distance in pixel of placements of the pattern in
 * horizontal direction.
 * @param float $ystep The distance in pixel of placements of the pattern in
 * vertical direction.
 * @param int $painttype Must be 1 or 2.
 * @return int The identifier of the pattern.
 * @throws PsException
 *
 */
function ps_begin_pattern($psdoc, float $width, float $height, float $xstep, float $ystep, int $painttype): int
{
    error_clear_last();
    $result = \ps_begin_pattern($psdoc, $width, $height, $xstep, $ystep, $painttype);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
    return $result;
}


/**
 * Starts a new template. A template is called a form in the postscript
 * language. It is created similar to a pattern but used like an image.
 * Templates are often used for drawings which are placed several times
 * through out the document, e.g. like a company logo. All drawing functions
 * may be used within a template. The template will not be drawn until
 * it is placed by ps_place_image.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $width The width of the template in pixel.
 * @param float $height The height of the template in pixel.
 * @return int Returns TRUE on success.
 * @throws PsException
 *
 */
function ps_begin_template($psdoc, float $width, float $height): int
{
    error_clear_last();
    $result = \ps_begin_template($psdoc, $width, $height);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
    return $result;
}


/**
 * Draws a circle with its middle point at (x,
 * y). The circle starts and ends at position
 * (x+radius,
 * y). If this function is called outside a path it
 * will start a new path. If it is called within a path it will add the circle
 * as a subpath. If the last drawing operation does not end in point
 * (x+radius,
 * y) then there will be a gap in the path.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x The x-coordinate of the circle's middle point.
 * @param float $y The y-coordinate of the circle's middle point.
 * @param float $radius The radius of the circle
 * @throws PsException
 *
 */
function ps_circle($psdoc, float $x, float $y, float $radius): void
{
    error_clear_last();
    $result = \ps_circle($psdoc, $x, $y, $radius);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Takes the current path and uses it to define the border of a clipping area.
 * Everything drawn outside of that area will not be visible.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_clip($psdoc): void
{
    error_clear_last();
    $result = \ps_clip($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Closes an image and frees its resources. Once an image is closed
 * it cannot be used anymore.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $imageid Resource identifier of the image as returned by
 * ps_open_image or
 * ps_open_image_file.
 * @throws PsException
 *
 */
function ps_close_image($psdoc, int $imageid): void
{
    error_clear_last();
    $result = \ps_close_image($psdoc, $imageid);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Closes the PostScript document.
 *
 * This function writes the trailer of the PostScript document.
 * It also writes the bookmark tree. ps_close does
 * not free any resources, which is done by ps_delete.
 *
 * This function is also called by ps_delete if it
 * has not been called before.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_close($psdoc): void
{
    error_clear_last();
    $result = \ps_close($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Connects the last point with first point of a path and draws the resulting
 * closed line.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_closepath_stroke($psdoc): void
{
    error_clear_last();
    $result = \ps_closepath_stroke($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Connects the last point with the first point of a path. The resulting
 * path can be used for stroking, filling, clipping, etc..
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_closepath($psdoc): void
{
    error_clear_last();
    $result = \ps_closepath($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Output a text one line below the last line. The line spacing is
 * taken from the value "leading" which must be set with
 * ps_set_value. The actual position of the
 * text is determined by the values "textx" and "texty" which can be requested
 * with ps_get_value
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $text The text to output.
 * @throws PsException
 *
 */
function ps_continue_text($psdoc, string $text): void
{
    error_clear_last();
    $result = \ps_continue_text($psdoc, $text);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Add a section of a cubic Bézier curve described by the three given control
 * points to the current path.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x1 x-coordinate of first control point.
 * @param float $y1 y-coordinate of first control point.
 * @param float $x2 x-coordinate of second control point.
 * @param float $y2 y-coordinate of second control point.
 * @param float $x3 x-coordinate of third control point.
 * @param float $y3 y-coordinate of third control point.
 * @throws PsException
 *
 */
function ps_curveto($psdoc, float $x1, float $y1, float $x2, float $y2, float $x3, float $y3): void
{
    error_clear_last();
    $result = \ps_curveto($psdoc, $x1, $y1, $x2, $y2, $x3, $y3);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Mainly frees memory used by the document. Also closes a file, if it was not
 * closed before with ps_close. You should in any case
 * close the file with ps_close before, because
 * ps_close not just closes the file but also outputs a
 * trailor containing PostScript comments like the number of pages in the
 * document and adding the bookmark hierarchy.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_delete($psdoc): void
{
    error_clear_last();
    $result = \ps_delete($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Ends a page which was started with ps_begin_page.
 * Ending a page will leave the current drawing context, which e.g. requires
 * to reload fonts if they were loading within the page, and to set many
 * other drawing parameters like the line width, or color..
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_end_page($psdoc): void
{
    error_clear_last();
    $result = \ps_end_page($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Ends a pattern which was started with ps_begin_pattern.
 * Once a pattern has been ended, it can be used like a color to fill
 * areas.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_end_pattern($psdoc): void
{
    error_clear_last();
    $result = \ps_end_pattern($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Ends a template which was started with ps_begin_template.
 * Once a template has been ended, it can be used like an image.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_end_template($psdoc): void
{
    error_clear_last();
    $result = \ps_end_template($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Fills and draws the path constructed with previously called drawing
 * functions like ps_lineto.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_fill_stroke($psdoc): void
{
    error_clear_last();
    $result = \ps_fill_stroke($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Fills the path constructed with previously called drawing functions like
 * ps_lineto.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_fill($psdoc): void
{
    error_clear_last();
    $result = \ps_fill($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Gets several parameters which were directly set by
 * ps_set_parameter or indirectly by one of the other
 * functions. Parameters are by definition string
 * values. This function cannot be used to retrieve resources which were also
 * set by ps_set_parameter.
 *
 * The parameter name can have the following values.
 *
 *
 *
 * fontname
 *
 *
 * The name of the currently active font or the font whose
 * identifier is passed in parameter modifier.
 *
 *
 *
 *
 * fontencoding
 *
 *
 * The encoding of the currently active font.
 *
 *
 *
 *
 * dottedversion
 *
 *
 * The version of the underlying pslib library in the format
 * &lt;major&gt;.&lt;minor&gt;.&lt;subminor&gt;
 *
 *
 *
 *
 * scope
 *
 *
 * The current drawing scope. Can be object, document, null, page,
 * pattern, path, template, prolog, font, glyph.
 *
 *
 *
 *
 * ligaturedisolvechar
 *
 *
 * The character which dissolves a ligature. If your are using a font
 * which contains the ligature `ff' and `|' is the char to dissolve the
 * ligature, then `f|f' will result in two `f' instead of the ligature `ff'.
 *
 *
 *
 *
 * imageencoding
 *
 *
 * The encoding used for encoding images. Can be either
 * hex or 85. hex encoding
 * uses two bytes in the postscript file each byte in the image.
 * 85 stand for Ascii85 encoding.
 *
 *
 *
 *
 * linenumbermode
 *
 *
 * Set to paragraph if lines are numbered
 * within a paragraph or box if they are
 * numbered within the surrounding box.
 *
 *
 *
 *
 * linebreak
 *
 *
 * Only used if text is output with ps_show_boxed.
 * If set to TRUE a carriage return will add a line
 * break.
 *
 *
 *
 *
 * parbreak
 *
 *
 * Only used if text is output with ps_show_boxed.
 * If set to TRUE a carriage return will start
 * a new paragraph.
 *
 *
 *
 *
 * hyphenation
 *
 *
 * Only used if text is output with ps_show_boxed.
 * If set to TRUE the paragraph will be hyphenated
 * if a hypen dictionary is set and exists.
 *
 *
 *
 *
 * hyphendict
 *
 *
 * Filename of the dictionary used for hyphenation pattern.
 *
 *
 *
 *
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $name Name of the parameter.
 * @param float $modifier An identifier needed if a parameter of a resource is requested,
 * e.g. the size of an image. In such a case the resource id is
 * passed.
 * @return string Returns the value of the parameter.
 * @throws PsException
 *
 */
function ps_get_parameter($psdoc, string $name, float $modifier = null): string
{
    error_clear_last();
    if ($modifier !== null) {
        $result = \ps_get_parameter($psdoc, $name, $modifier);
    } else {
        $result = \ps_get_parameter($psdoc, $name);
    }
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
    return $result;
}


/**
 * Hyphenates the passed word. ps_hyphenate evaluates the
 * value hyphenminchars (set by ps_set_value) and
 * the parameter hyphendict (set by ps_set_parameter).
 * hyphendict must be set before calling this function.
 *
 * This function requires the locale category LC_CTYPE to be set properly.
 * This is done when the extension is initialized by using the environment
 * variables. On Unix systems read the man page of locale for more information.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $text text should not contain any non alpha
 * characters. Possible positions for breaks are returned in an array of
 * interger numbers. Each number is the position of the char in
 * text after which a hyphenation can take place.
 * @return array An array of integers indicating the position of possible breaks in
 * the text.
 * @throws PsException
 *
 */
function ps_hyphenate($psdoc, string $text): array
{
    error_clear_last();
    $result = \ps_hyphenate($psdoc, $text);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
    return $result;
}


/**
 * This function is
 * currently not documented; only its argument list is available.
 *
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $file
 * @throws PsException
 *
 */
function ps_include_file($psdoc, string $file): void
{
    error_clear_last();
    $result = \ps_include_file($psdoc, $file);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Adds a straight line from the current point to the given coordinates to the
 * current path. Use ps_moveto to set the starting point
 * of the line.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x x-coordinate of the end point of the line.
 * @param float $y y-coordinate of the end point of the line.
 * @throws PsException
 *
 */
function ps_lineto($psdoc, float $x, float $y): void
{
    error_clear_last();
    $result = \ps_lineto($psdoc, $x, $y);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets the current point to new coordinates. If this is the first call of
 * ps_moveto after a previous path has been ended then it
 * will start a new path. If this function is called in the middle of a path
 * it will just set the current point and start a subpath.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x x-coordinate of the point to move to.
 * @param float $y y-coordinate of the point to move to.
 * @throws PsException
 *
 */
function ps_moveto($psdoc, float $x, float $y): void
{
    error_clear_last();
    $result = \ps_moveto($psdoc, $x, $y);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Creates a new document instance. It does not create the file on disk or in
 * memory, it just sets up everything. ps_new is usually
 * followed by a call of ps_open_file to actually create
 * the postscript document.
 *
 * @return resource Resource of PostScript document. The return value
 * is passed to all other functions as the first argument.
 * @throws PsException
 *
 */
function ps_new()
{
    error_clear_last();
    $result = \ps_new();
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
    return $result;
}


/**
 * Creates a new file on disk and writes the PostScript document into it. The
 * file will be closed when ps_close is called.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $filename The name of the postscript file.
 * If filename is not passed the document will be
 * created in memory and all output will go straight to the browser.
 * @throws PsException
 *
 */
function ps_open_file($psdoc, string $filename = null): void
{
    error_clear_last();
    if ($filename !== null) {
        $result = \ps_open_file($psdoc, $filename);
    } else {
        $result = \ps_open_file($psdoc);
    }
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Places a formerly loaded image on the page. The image can be scaled.
 * If the image shall be rotated as well, you will have to rotate the
 * coordinate system before with ps_rotate.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $imageid The resource identifier of the image as returned by
 * ps_open_image or
 * ps_open_image_file.
 * @param float $x x-coordinate of the lower left corner of the image.
 * @param float $y y-coordinate of the lower left corner of the image.
 * @param float $scale The scaling factor for the image. A scale of 1.0 will result
 * in a resolution of 72 dpi, because each pixel is equivalent to
 * 1 point.
 * @throws PsException
 *
 */
function ps_place_image($psdoc, int $imageid, float $x, float $y, float $scale): void
{
    error_clear_last();
    $result = \ps_place_image($psdoc, $imageid, $x, $y, $scale);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Draws a rectangle with its lower left corner at (x,
 * y). The rectangle starts and ends in its lower left
 * corner. If this function is called outside a path it will start a new path.
 * If it is called within a path it will add the rectangle as a subpath. If
 * the last drawing operation does not end in the lower left corner then there
 * will be a gap in the path.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x x-coordinate of the lower left corner of the rectangle.
 * @param float $y y-coordinate of the lower left corner of the rectangle.
 * @param float $width The width of the image.
 * @param float $height The height of the image.
 * @throws PsException
 *
 */
function ps_rect($psdoc, float $x, float $y, float $width, float $height): void
{
    error_clear_last();
    $result = \ps_rect($psdoc, $x, $y, $width, $height);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Restores a previously saved graphics context. Any call of
 * ps_save must be accompanied by a call to
 * ps_restore. All coordinate transformations, line
 * style settings, color settings, etc. are being restored to the state
 * before the call of ps_save.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_restore($psdoc): void
{
    error_clear_last();
    $result = \ps_restore($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets the rotation of the coordinate system.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $rot Angle of rotation in degree.
 * @throws PsException
 *
 */
function ps_rotate($psdoc, float $rot): void
{
    error_clear_last();
    $result = \ps_rotate($psdoc, $rot);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Saves the current graphics context, containing colors, translation and
 * rotation settings and some more. A saved context can be restored with
 * ps_restore.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_save($psdoc): void
{
    error_clear_last();
    $result = \ps_save($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets horizontal and vertical scaling of the coordinate system.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x Scaling factor in horizontal direction.
 * @param float $y Scaling factor in vertical direction.
 * @throws PsException
 *
 */
function ps_scale($psdoc, float $x, float $y): void
{
    error_clear_last();
    $result = \ps_scale($psdoc, $x, $y);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Links added with one of the functions ps_add_weblink,
 * ps_add_pdflink, etc. will be displayed with a
 * surounded rectangle when the postscript document is converted to
 * pdf and viewed in a pdf viewer. This rectangle is not visible in
 * the postscript document.
 * This function sets the color of the rectangle's border line.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $red The red component of the border color.
 * @param float $green The green component of the border color.
 * @param float $blue The blue component of the border color.
 * @throws PsException
 *
 */
function ps_set_border_color($psdoc, float $red, float $green, float $blue): void
{
    error_clear_last();
    $result = \ps_set_border_color($psdoc, $red, $green, $blue);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Links added with one of the functions ps_add_weblink,
 * ps_add_pdflink, etc. will be displayed with a
 * surounded rectangle when the postscript document is converted to
 * pdf and viewed in a pdf viewer. This rectangle is not visible in
 * the postscript document.
 * This function sets the length of the black and white portion of a
 * dashed border line.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $black The length of the dash.
 * @param float $white The length of the gap between dashes.
 * @throws PsException
 *
 */
function ps_set_border_dash($psdoc, float $black, float $white): void
{
    error_clear_last();
    $result = \ps_set_border_dash($psdoc, $black, $white);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Links added with one of the functions ps_add_weblink,
 * ps_add_pdflink, etc. will be displayed with a
 * surounded rectangle when the postscript document is converted to
 * pdf and viewed in a pdf viewer. This rectangle is not visible in
 * the postscript document.
 * This function sets the appearance and width of the border line.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $style style can be solid or
 * dashed.
 * @param float $width The line width of the border.
 * @throws PsException
 *
 */
function ps_set_border_style($psdoc, string $style, float $width): void
{
    error_clear_last();
    $result = \ps_set_border_style($psdoc, $style, $width);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets certain information fields of the document. This fields will be shown
 * as a comment in the header of the PostScript file. If the document is
 * converted to pdf this fields will also be used for the document
 * information.
 *
 * The BoundingBox is usually set to the value given to the
 * first page. This only works if ps_findfont has not
 * been called before. In such cases the BoundingBox would be left unset
 * unless you set it explicitly with this function.
 *
 * This function will have no effect anymore when the header of the postscript
 * file has been already written. It must be called before the first page
 * or the first call of ps_findfont.
 *
 * @param resource $p Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $key The name of the information field to set. The values which can be
 * set are Keywords, Subject,
 * Title, Creator,
 * Author, BoundingBox, and
 * Orientation. Be aware that some of them has a
 * meaning to PostScript viewers.
 * @param string $val The value of the information field. The field
 * Orientation can be set to either
 * Portrait or Landscape. The
 * BoundingBox is a string consisting of four numbers.
 * The first two numbers are the coordinates of the lower left corner of
 * the page. The last two numbers are the coordinates of the upper
 * right corner.
 *
 * Up to version 0.2.6 of pslib, the BoundingBox and Orientation
 * will be overwritten by ps_begin_page,
 * unless ps_findfont has been called before.
 * @throws PsException
 *
 */
function ps_set_info($p, string $key, string $val): void
{
    error_clear_last();
    $result = \ps_set_info($p, $key, $val);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets several parameters which are used by many functions. Parameters are by
 * definition string values.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $name For a list of possible names see ps_get_parameter.
 * @param string $value The value of the parameter.
 * @throws PsException
 *
 */
function ps_set_parameter($psdoc, string $name, string $value): void
{
    error_clear_last();
    $result = \ps_set_parameter($psdoc, $name, $value);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Set the position for the next text output. You may alternatively set the x
 * and y value separately by calling ps_set_value and
 * choosing textx respectively texty as
 * the value name.
 *
 * If you want to output text at a certain position it is more convenient
 * to use ps_show_xy instead of setting the text position
 * and calling ps_show.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x x-coordinate of the new text position.
 * @param float $y y-coordinate of the new text position.
 * @throws PsException
 *
 */
function ps_set_text_pos($psdoc, float $x, float $y): void
{
    error_clear_last();
    $result = \ps_set_text_pos($psdoc, $x, $y);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets several values which are used by many functions. Parameters are by
 * definition float values.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $name The name can be one of the following:
 *
 *
 * textrendering
 *
 *
 * The way how text is shown.
 *
 *
 *
 *
 * textx
 *
 *
 * The x coordinate for text output.
 *
 *
 *
 *
 * texty
 *
 *
 * The y coordinate for text output.
 *
 *
 *
 *
 * wordspacing
 *
 *
 * The distance between words relative to the width of a space.
 *
 *
 *
 *
 * leading
 *
 *
 * The distance between lines in pixels.
 *
 *
 *
 *
 *
 * The way how text is shown.
 *
 * The x coordinate for text output.
 *
 * The y coordinate for text output.
 *
 * The distance between words relative to the width of a space.
 *
 * The distance between lines in pixels.
 * @param float $value The way how text is shown.
 * @throws PsException
 *
 */
function ps_set_value($psdoc, string $name, float $value): void
{
    error_clear_last();
    $result = \ps_set_value($psdoc, $name, $value);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets the color for drawing, filling, or both.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $type The parameter type can be
 * both, fill, or
 * fillstroke.
 * @param string $colorspace The colorspace should be one of gray,
 * rgb, cmyk,
 * spot, pattern. Depending on the
 * colorspace either only the first, the first three or all parameters
 * will be used.
 * @param float $c1 Depending on the colorspace this is either the red component (rgb),
 * the cyan component (cmyk), the gray value (gray), the identifier of
 * the spot color or the identifier of the pattern.
 * @param float $c2 Depending on the colorspace this is either the green component (rgb),
 * the magenta component (cmyk).
 * @param float $c3 Depending on the colorspace this is either the blue component (rgb),
 * the yellow component (cmyk).
 * @param float $c4 This must only be set in cmyk colorspace and specifies the black
 * component.
 * @throws PsException
 *
 */
function ps_setcolor($psdoc, string $type, string $colorspace, float $c1, float $c2, float $c3, float $c4): void
{
    error_clear_last();
    $result = \ps_setcolor($psdoc, $type, $colorspace, $c1, $c2, $c3, $c4);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets the length of the black and white portions of a dashed line.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $on The length of the dash.
 * @param float $off The length of the gap between dashes.
 * @throws PsException
 *
 */
function ps_setdash($psdoc, float $on, float $off): void
{
    error_clear_last();
    $result = \ps_setdash($psdoc, $on, $off);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * This function is
 * currently not documented; only its argument list is available.
 *
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $value The value must be between 0.2 and 1.
 * @throws PsException
 *
 */
function ps_setflat($psdoc, float $value): void
{
    error_clear_last();
    $result = \ps_setflat($psdoc, $value);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets a font, which has to be loaded before with
 * ps_findfont. Outputting text without setting a font
 * results in an error.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $fontid The font identifier as returned by ps_findfont.
 * @param float $size The size of the font.
 * @throws PsException
 *
 */
function ps_setfont($psdoc, int $fontid, float $size): void
{
    error_clear_last();
    $result = \ps_setfont($psdoc, $fontid, $size);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets the gray value for all following drawing operations.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $gray The value must be between 0 (white) and 1 (black).
 * @throws PsException
 *
 */
function ps_setgray($psdoc, float $gray): void
{
    error_clear_last();
    $result = \ps_setgray($psdoc, $gray);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets how line ends look like.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $type The type of line ends. Possible values are
 * PS_LINECAP_BUTT,
 * PS_LINECAP_ROUND, or
 * PS_LINECAP_SQUARED.
 * @throws PsException
 *
 */
function ps_setlinecap($psdoc, int $type): void
{
    error_clear_last();
    $result = \ps_setlinecap($psdoc, $type);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets how lines are joined.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $type The way lines are joined. Possible values are
 * PS_LINEJOIN_MITER,
 * PS_LINEJOIN_ROUND, or
 * PS_LINEJOIN_BEVEL.
 * @throws PsException
 *
 */
function ps_setlinejoin($psdoc, int $type): void
{
    error_clear_last();
    $result = \ps_setlinejoin($psdoc, $type);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets the line width for all following drawing operations.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $width The width of lines in points.
 * @throws PsException
 *
 */
function ps_setlinewidth($psdoc, float $width): void
{
    error_clear_last();
    $result = \ps_setlinewidth($psdoc, $width);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * If two lines join in a small angle and the line join is set to
 * PS_LINEJOIN_MITER, then
 * the resulting spike will be very long. The miter limit is the maximum
 * ratio of the miter length (the length of the spike) and the line width.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $value The maximum ratio between the miter length and the line width. Larger
 * values (&gt; 10) will result in very long spikes when two lines meet
 * in a small angle. Keep the default unless you know what you are doing.
 * @throws PsException
 *
 */
function ps_setmiterlimit($psdoc, float $value): void
{
    error_clear_last();
    $result = \ps_setmiterlimit($psdoc, $value);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * This function is
 * currently not documented; only its argument list is available.
 *
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $mode
 * @throws PsException
 *
 */
function ps_setoverprintmode($psdoc, int $mode): void
{
    error_clear_last();
    $result = \ps_setoverprintmode($psdoc, $mode);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets the length of the black and white portions of a dashed line.
 * ps_setpolydash is used to set more complicated dash
 * patterns.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $arr arr is a list of length elements alternately for
 * the black and white portion.
 * @throws PsException
 *
 */
function ps_setpolydash($psdoc, float $arr): void
{
    error_clear_last();
    $result = \ps_setpolydash($psdoc, $arr);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Creates a pattern based on a shading, which has to be created before with
 * ps_shading. Shading patterns can be used like regular
 * patterns.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $shadingid The identifier of a shading previously created with
 * ps_shading.
 * @param string $optlist This argument is not currently used.
 * @return int The identifier of the pattern.
 * @throws PsException
 *
 */
function ps_shading_pattern($psdoc, int $shadingid, string $optlist): int
{
    error_clear_last();
    $result = \ps_shading_pattern($psdoc, $shadingid, $optlist);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
    return $result;
}


/**
 * Creates a shading, which can be used by ps_shfill or
 * ps_shading_pattern.
 *
 * The color of the shading can be in any color space except for
 * pattern.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $type The type of shading can be either radial or
 * axial. Each shading starts with the current fill
 * color and ends with the given color values passed in the parameters
 * c1 to c4
 * (see ps_setcolor for their meaning).
 * @param float $x0 The coordinates x0, y0,
 * x1, y1 are the start and
 * end point of the shading. If the type of shading is
 * radial the two points are the middle points of
 * a starting and ending circle.
 * @param float $y0 See ps_setcolor for their meaning.
 * @param float $x1 If the shading is of type radial the
 * optlist must also contain the parameters
 * r0 and r1 with the radius of the
 * start and end circle.
 * @param float $y1
 * @param float $c1
 * @param float $c2
 * @param float $c3
 * @param float $c4
 * @param string $optlist
 * @return int Returns the identifier of the pattern.
 * @throws PsException
 *
 */
function ps_shading($psdoc, string $type, float $x0, float $y0, float $x1, float $y1, float $c1, float $c2, float $c3, float $c4, string $optlist): int
{
    error_clear_last();
    $result = \ps_shading($psdoc, $type, $x0, $y0, $x1, $y1, $c1, $c2, $c3, $c4, $optlist);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
    return $result;
}


/**
 * Fills an area with a shading, which has to be created before with
 * ps_shading. This is an alternative way to creating
 * a pattern from a shading ps_shading_pattern and using
 * the pattern as the filling color.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $shadingid The identifier of a shading previously created with
 * ps_shading.
 * @throws PsException
 *
 */
function ps_shfill($psdoc, int $shadingid): void
{
    error_clear_last();
    $result = \ps_shfill($psdoc, $shadingid);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Output a text at the given text position.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $text The text to be output.
 * @param float $x x-coordinate of the lower left corner of the box surrounding the text.
 * @param float $y y-coordinate of the lower left corner of the box surrounding the text.
 * @throws PsException
 *
 */
function ps_show_xy($psdoc, string $text, float $x, float $y): void
{
    error_clear_last();
    $result = \ps_show_xy($psdoc, $text, $x, $y);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * This function is
 * currently not documented; only its argument list is available.
 *
 *
 * @param resource $psdoc
 * @param string $text
 * @param int $len
 * @param float $xcoor
 * @param float $ycoor
 * @throws PsException
 *
 */
function ps_show_xy2($psdoc, string $text, int $len, float $xcoor, float $ycoor): void
{
    error_clear_last();
    $result = \ps_show_xy2($psdoc, $text, $len, $xcoor, $ycoor);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Output a text at the current text position. The text position can be set
 * by storing the x and y coordinates into the values textx
 * and texty with the function
 * ps_set_value. The function will issue an
 * error if a font was not set before with ps_setfont.
 *
 * ps_show evaluates the following parameters and values
 * as set by ps_set_parameter and
 * ps_set_value.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $text The text to be output.
 * @throws PsException
 *
 */
function ps_show($psdoc, string $text): void
{
    error_clear_last();
    $result = \ps_show($psdoc, $text);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Output text at the current position. Do not print more than len characters.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param string $text The text to be output.
 * @param int $len The maximum number of characters to print.
 * @throws PsException
 *
 */
function ps_show2($psdoc, string $text, int $len): void
{
    error_clear_last();
    $result = \ps_show2($psdoc, $text, $len);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Draws the path constructed with previously called drawing functions like
 * ps_lineto.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @throws PsException
 *
 */
function ps_stroke($psdoc): void
{
    error_clear_last();
    $result = \ps_stroke($psdoc);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Output the glyph at position ord in the font
 * encoding vector of the current font. The font encoding for a font can be
 * set when loading the font with ps_findfont.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param int $ord The position of the glyph in the font encoding vector.
 * @throws PsException
 *
 */
function ps_symbol($psdoc, int $ord): void
{
    error_clear_last();
    $result = \ps_symbol($psdoc, $ord);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}


/**
 * Sets a new initial point of the coordinate system.
 *
 * @param resource $psdoc Resource identifier of the postscript file
 * as returned by ps_new.
 * @param float $x x-coordinate of the origin of the translated coordinate system.
 * @param float $y y-coordinate of the origin of the translated coordinate system.
 * @throws PsException
 *
 */
function ps_translate($psdoc, float $x, float $y): void
{
    error_clear_last();
    $result = \ps_translate($psdoc, $x, $y);
    if ($result === false) {
        throw PsException::createFromPhpError();
    }
}