mirror of
https://github.com/rricharz/Tek4010.git
synced 2026-01-13 15:27:31 +00:00
demo added
This commit is contained in:
parent
0799b327d3
commit
8c1e87a4aa
20
README.md
20
README.md
@ -1,4 +1,4 @@
|
||||
# Tektronix 4010 Emulator
|
||||
# Tektronix 4010 Terminal Emulator
|
||||
|
||||
This is a [Tektronix 4010](https://en.wikipedia.org/wiki/Tektronix_4010) terminal emulator
|
||||
for the Raspberry Pi.
|
||||
@ -54,12 +54,12 @@ If you want to test text output, type for example
|
||||
|
||||
./tek4010 head -n 32 tek4010.c -noexit
|
||||
|
||||
Don't forget the LAST argument "-noexit", which tells
|
||||
tek4010 to stay alive after cat has finished so that you have a chance to look at the output.
|
||||
By the way, the "-noexit" as the last argument might also be helpful if you want to
|
||||
experiment with other commands. Let me know if you find anything which works and makes sense.
|
||||
Because tek4010 pipes from stdout of that program and into stdin of that program, some
|
||||
programs will not work.
|
||||
Don't forget the LAST argument "-noexit", which tells tek4010 to stay alive after cat or
|
||||
head has finished so that you have a chance to look at the output.
|
||||
|
||||
If you want to see a demo of historical Tektronix 4014 plot files, type
|
||||
|
||||
./tek4010 ./demo.sh
|
||||
|
||||
The emulator does use "rsh" or "telnet", because historical Unix systems do not support
|
||||
the secure ssh protocol, and because ssh does not allow using a virtual emulator such as tek4010
|
||||
@ -198,9 +198,9 @@ Pack it with zip or something else to make sure that the mailing program does no
|
||||
|
||||
**Screen resolution**
|
||||
|
||||
This tek4010 emulator creates a graphics window of 1024x768 points, which is the display size
|
||||
of the Tektronix 4010 terminal according to the manual from Tektronix. Some sources claim
|
||||
that actual terminals could display up to 780 points vertically. The Raspberry Pi can handle
|
||||
This tek4010 emulator creates a graphics window of 1024x780 points, which is the display size
|
||||
of the Tektronix 4010 terminaland the Tektronix 4014 terminal without enhanced graphics module.
|
||||
The Raspberry Pi can handle
|
||||
sufficiently high refresh rates at this resolution. This emulator makes an attempt to filter
|
||||
Tektronix 4014 graphics code with the enhanced graphics module installed, so that such
|
||||
graphics codes can be displayed using this terminal emulator, but the lowest two bits of
|
||||
|
||||
21
demo.sh
Executable file
21
demo.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
# rricharz 2019
|
||||
|
||||
for filename in pltfiles/*.plt
|
||||
do
|
||||
# erase screen
|
||||
printf '\033\014'
|
||||
|
||||
echo tek4010 is displaying "$filename"
|
||||
|
||||
cat "$filename"
|
||||
|
||||
# let tek4010 wait 5 seconds (not this script, which just shuffles stuff into the buffer!)
|
||||
for i in {1..100}
|
||||
do
|
||||
printf '\007'
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
|
||||
1
pltfiles/barchart.plt
Normal file
1
pltfiles/barchart.plt
Normal file
@ -0,0 +1 @@
|
||||
7 @&y&T#}@}'H&yHy&@#}@$q@@#}T%e@@#}'H%y&@@$q'H&m&@@%e'HH&y&H%y'HH&y&\m'H#}&@}'_})G-sGs'_#}_$q__#}(S%e'__#})G%y'__$q)G&m'__%e)G'a'__%y)G'u'__&m)G(i'__'a)G(}'__'u)G)q'__(i)G*e'__(})G*y'__)q)G+m'__*e)G,a'__*y)G,u'__+m)G-i'__,a)GG-s(I,u)GG-s(]i)G#}'_})]}+E({E{)]#}]$q]]#}*Q%e)]]#}+E%y)]]$q+E&m)]]%e+E'a)]]%y+E'u)]]&m+E(i)]]'a+EE({)_'u+EE({*Si+E#})]}+\}-D0D}+\#\$q\\#},P%e+\\#}-D%y+\\$q-D&m+\\%e-D'a+\\%y-D'u+\\&m-D(i+\\'a-D(}+\\'u-D)q+\\(i-D*e+\\(}-D*y+\\)q-D+m+\\*e-D,a+\\*y-D,u+\\+m-D-i+\\,a-D-}+\\,u-D.q+\\-i-D/e+\\-}-D/y+\\.q-F0m+\\/e-DD0},@/y-DD0},Tm-D#}+\}-Z}/B-sBs-Z#}Z$qZZ#}.N%e-ZZ#}/B%y-ZZ$q/B&m-ZZ%e/B'a-ZZ%y/B'u-ZZ&m/B(i-ZZ'a/B(}-ZZ'u/B)q-ZZ(i/B*e-ZZ(}/B*y-ZZ)q/B+m-ZZ*e/B,a-ZZ*y/B,u-ZZ+m/B-i-ZZ,a/BB-s.D,u/BB-s.Xi/B#}-Z}/Y}1A*`A`/Y#}Y$qYY#}0M%e/YY#}1A%y/YY$q1A&m/YY%e1A'a/YY%y1A'u/YY&m1A(i/YY'a1A(}/YY'u1A)q/YY(i1AA*`/^(}1AA*`0R)q1A#}/Y}1W}2_(e_e1W#}W$qWW#}2K%e1WW#}2_%y1WW$q2_&m1WW%e2_'a1WW%y2_'u1WW&m2__(e1['a2__(eO'u_#}1W}3V}4^,a^a3V#}V$qVV#}4J%e3VV#}4^%y3VV$q4^&m3VV%e4^'a3VV%y4^'u3VV&m4^(i3VV'a4^(}3VV'u4^)q3VV(i4^*e3VV(}4^*y3VV)q4^+m3VV*e4^,a3VV*y4^^,aJ+m^#}3V}5T}6\.v\v5T#}T$qTT#}6H%e5TT#}6\%y5TT$q6\&m5TT%e6\'a5TT%y6\'u5TT&m6\(i5TT'a6\(}5TT'u6\)q5TT(i6\*e5TT(}6\*y5TT)q6\+m5TT*e6\,a5TT*y6\,u5TT+m6\-i5TT,a6\-}5TT,u6\.q5TT-i6\\.vC-}\\.vWq\#}5T}7S}8[2q[q7S#}S$qSS#}8G%e7SS#}8[%y7SS$q8[&m7SS%e8['a7SS%y8['u7SS&m8[(i7SS'a8[(}7SS'u8[)q7SS(i8[*e7SS(}8[*y7SS)q8[+m7SS*e8[,a7SS*y8[,u7SS+m8[-i7SS,a8[-}7SS,u8[.q7SS-i8[/e7SS-}8[/y7SS.q8[0m7SS/e8[1a7SS/y8[1u7SS0m8[2i7SS1a8[[2q7_1u8[[2qSi[#}7S}9Q}:Y/yYy9Q#}Q$qQQ#}:E%e9QQ#}:Y%y9QQ$q:Y&m9QQ%e:Y'a9QQ%y:Y'u9QQ&m:Y(i9QQ'a:Y(}9QQ'u:Y)q9QQ(i:Y*e9QQ(}:Y*y9QQ)q:Y+m9QQ*e:Y,a9QQ*y:Y,u9QQ+m:Y-i9QQ,a:Y-}9QQ,u:Y.q9QQ-i:Y/e9QQ-}:Y/y9QQ.q:YY/yEeY#}9Q};P}<D-|D|;P#}P$qPP#}<D%e;PP$q<D%y;PPe<D&m;PP%y<D'a;PP&m<D'u;PPa<D(i;PP'u<D(};PPi<D)q;PP(}<D*e;PP)q<D*y;PPe<D+m;PP*y<D,a;PP+m<D,u;PPa<D-i;PP,u<DD-|;Qi<D#};P5|$V#}VB}<D&d$LV(lBl<D*t$LV,|B|<D/d$LV1lBl<D3t$LV5|B|<D#}$V}<D"t$Q0"t(N2"t,K4"t0H6"t4E8"t7[10"t;X12#v"U200(e"U400,u"U6001e"U8005u"G1000
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
pltfiles/usmap.tek
Normal file
BIN
pltfiles/usmap.tek
Normal file
Binary file not shown.
BIN
pltfiles/warandpeace.plt
Normal file
BIN
pltfiles/warandpeace.plt
Normal file
Binary file not shown.
1
pltfiles/wizard.plt
Normal file
1
pltfiles/wizard.plt
Normal file
@ -0,0 +1 @@
|
||||
h e G7yGy=T eTe G"l!Xl"G[l0Xw1HpW#b^"x2E{R#fU$`GpG|Qq]cP#|Y$`3BiFoLpXgY#{Es2_m3CnNeL"{2_u3JV#d4@n3YyXv4HnMvV$cUmYl5S#yUuK"|@{O#v^w6RiOdZ$gZ`7MsI%g6QsSk7@tG&aDt_i8L%x7[kZv8OkU$xBoJg7^b8S}]%p9Wc_$zWmBdDSo[u:OkShGb;@#vCs:Yy9[qUi^m;Ii<@"nLl;Z|:\{IeQfD|9_#aJsIz8]oNa["w\FtBoKpYf9F!vF8O"oBx7MfIaCw6ZyGkGhAt5JoDx4NlJj5CbH!{6ArKp5\xJ~3_"jYlLfF!yGr2_yY"pXrL!~E"f1@l0Yl-\p.G|T#lOo-]l,\`["n-Xl\l'HoSyZ#fWmLm&NdB"yFl'H#d&_bT"|Ww_{'F#aFd&^s%Fs._f-XeP"M{U^#a.Bf-X%m&XgC$m%R#~]|'Z|+Y$sTt\z,@%a+\bPiOwP{X{,IoFo+_iY$p,FfA#~Dz/Ai^e0Sl1EvK$sN|H~Az0]lYg^l1AvAqEiH#wDu0^zW%f/ZmEk.V$~-PxIt,^xZ|Z%`-IfQjPnMBsBzF&`Fu/U0D'|^(d2Gm1ZoHs0\|L)}/I*nA}GUx0Gc1F)pV*sMlV)}2C~G*oBe3AgFlE}2@w3JxO}N+dGi2Bn1\r2En3JqOvJ}2Qz1V,`Rx^-a_dW,~OcEp/M-sMqRiTeVnW{U.tLgY-{[v^w0B.`Cx/]/cV{.\yO2b-TtVj.\j/ErI4f,QgJbA3v+Y0n*RaQ/NtPrKsHyDoCs)XlZhXRc*@.y)^hF-q(\,|ZtXqPd'SJ`F+&X/kAgGaLcRkPlG{%^0b&JRfSlLdAm%VwU|V1cK0~IwOmPdLCf$^iZbX/}\0`_/w%InHjKeLfH.~EyKO}P/gT+&Ls%VmRfTi&Ta%Z*{XxZw_x&I+a[*xOv%\nZj]k&EsPkGeJcPn]eR)|Xm]p'D*fAs])y(Ub]d)A*a(^o)EsJtO(kQ%g*TkLjGbG$|KzTq_pZsM%e)Ef(H`'W$|MuDo&NsEyB}C%`G$~N%gYmXw+Jt*[iZ`+KvH},SgRm[_S'g0LjYqUk\o1Dy0\p1EqM~IwQyV(`T'{W_(b^'h0D}C(h/]nJm.WhObPe/@'|PpUgT&~E.]'fPbO&yVt/@]'g0C(p1E`0Wk[jHrOx/Z)`PiNcT(~^~0K)`-\h.F({R)iPm[p]qR*aM)vFx-ZvZo.B(-\*p.V+aWa/Dl.WyXpRyGfK`-^*|.E+aP*}RtSpV+v/[u0L,bQ+wUz^qY*}\+fT*}J+hHv/[,sMdHfEpEzC+}.TR,sT+~IyA,cBjBb-\+wXvU,`O+mL*wP+z,Y*Ye-Kl,_+mA*|BbJ{+T+nK*J+r*Y*v^+lI,l)\`Z+h*@)K,zEgEhAu(Y.`)D-zEwJw*^z+Rn-MrVzY.eVgZeMp.Z-z/GqEn.\sGkAdAd-ZgTeQaTeIk,_i\`\,}\-jH`Dj+T,yS-dGC,xBw*_}Y-dXfT,|Q-mH,}E-a)\n[gImE|B.rVmShVe^g*Nd+Oe,@cHlOtM}+\/kSpNsR0`N/wWx\0a[/x,D0`I/wLS|YuZ_}-DrDwQnQk^gOj,[aW.zFA/h@jFeI.~EA{*AZ/h^x[rXuPgGcDaIeKgG0l+KwTn_yX1c,A`+UpN`N0*]z+LlK1gHqB2mLk[c,F1xMtLIzB|+RvJmHgH3a,EeQ2|W3gUl\nVvUrNuEmJcEh-F2sViOm,Sr.GzMoO/{Jt-^o.@nOgE.RxW\pZSmMhKcOT,h(W+zO}'[r(JdCjO*}X+pXw)Gy(U,jW*o*PcIg)_)}*GmEuMgUlZzU*a]TnPc,V)yOzArJcEiQ`WlZt-Cy,Y*cV(k+]qPoAh*U'{NlMaT&z^u+Sw]'a,B&+Y'dEn*^x_(d+Rf]k]d-L'qFn,[g-C&v,_'a-H&uS'dOp\M(dL*s']+lN,`Fc1B+wFpD*oO#s%EzEz.Ww_s]&u/Uu2V(dGd5T-a1_a3T/{.\y3[4f,Rf/H1c%Kc)K2r/Ir3P%m&Xm)[&u3Tu4I ` @
|
||||
8
pltfiles/wizidd.plt
Normal file
8
pltfiles/wizidd.plt
Normal file
@ -0,0 +1,8 @@
|
||||
`7l @ Tektronix 4010/PDP11 Graphic Editor
|
||||
|
||||
*lw%D+pC,tE-xL.zX/z&F0xZ1t'R2k(L3`)Jp*H|+J4c,Me-Pc.T3{/Tp0V`1V2m2S1u3NiXeFjB2`2Ir1N3b0Qm/Ps.Qu-Pt,Om+Na*N2q)P1(Vi'\0oF/r&S.tE-t%Z,rT+pRaS%u'_a(V$n)R#*Pt+On,Qk-Rn.Ru/S$a0Rp1Q%c2Ly3E&rZ'o4L(m[)n5G*oL+rN,cMd[+q]*mZ)iT(gI'g4Y&iE%o3O$w2Ub1X#r0Xf/W".T}-R,O#f+Kq*J$a)Kv(M%k'T1h3SrJ2h2P{1U3k0Vw/T~.S4`-Q3~,Nw+Kk*K2{)Mh(P1q'V0u&_/wK.x%]-vR,sJ+pH*zI~O+pN,tO-uW.v&A/tP0r'C1mZ2c(Sw)O3g*Mr+My,Oz-Qx.Rr/Rf0S2x1Re2M1m3GfM,c5S+qT*nR)mL(k@'l4R&o3_%uI$~2Ok1T#}0Up/Ui.Se-Sg,Rn+Nz*O$g)Q}(T%r'\oX$z(Qd)N#u*Mi+Nc,Pa-Sd.Tj/Wv0W$g1Wz2P%r3L&l4C'iV(j5F)P*mW+qY,dX~%G.}"T/gLwL1~Y4m#RuXw$A5h&Nr)@oG3v*YqO5f(^4}&Pk$Dh#^1{D/t"Xj\-l%J/d#Sq"_1y#K3iY2z$K/d#S3c$Nr#\4`$BcJ3uXcNw%E4h$T5a(V4n)I3w%E0v&Y2m$X}[1`'BlK3m%HpV1s'R'g4Y%l6[d_${_v7DqDn@iAa6\#xZvSlQiGaFc5]"|[~SzQJ~Ez@|4W$w2Uh7Bf6\`\%d3E#~4P$kV%l3N&s4M%n5Uv6E'`4U"~5E#g4]m[p5@z@}G$fGiMsPtW~\~6C%eGcNgReQY${_%eYmWoQKj@$u5H#x4WkUdWe5AaKiAlDeMaKkNuCyFqPkNwT~J$dL#|WwT$d\lRpUh_d\m6Fu5\{6@qImFuO}G%aK$xSuOyZ%`QbV$z^yZ#rB{@$cGdN#O{FuJrBr2Vq_n3IiSdZ"}_s4DiF!GuFkDa3_ zZuSqIm2_lVmLqBu1XzR!aMkIuED"iEsI}M#dRiXn2BqLrV!cA"{A]z3AxFtJlKfJcF!B|FxJqLcLc2_p_s^x]zZLcLA"LrLZp^l_g^cZL#kVj_f3IbQ"{Xs\i4@!Au@k3\cX ~QzIv2_uVvLzB~1Z!cVkRuNM"iNsR{V#bZf2BjLkV$w8P&k3Qk*NtAo)T{NtHv(]~['p)G{G(d(^'|Tr_mXpPwM{H{']u]m(MgScOdF&}HvSrIr'_}W'd]k]iPdLiDrEyBy&LkJiS&w\vO'iCj%R`T&}K'uKp$[~_(l%StQnFu@~C)k$LcA(wOnPv#_nZa$J'{CuMr#[(eSr"]iVb]'y#OsM@{"ZIxFvPr![iXg"AkZf_`Wc!S`@&m Vl!Ew^v"NgGhRwV{#H'gIlSd$@&{#UtTy$FqJnBo#VhK%|K&c_n$Jt[h_d%DtKu[k[i&@qSnYt'KlNj&YeU`@%z%Xx&D~S&b'Xj]l(HhM%LzSX&oXp)BbHh*GkkMll,[oRwG'bKd[b-V&zWm,_l[l2NnDu1^~2A'cJc3C&}MuJl2N}U{^w\tUvO{O}V'g4Eg+^&~,_}-FyHvAv,Z{V~_(p2[l3M'y[oRm1^m.T~XQ(bNgQh[m\w[zUFqIOmT'{ItMoJl+\`D&}*R'bCi)^~\(d*AeGbJ'yMuIyG(`G'|CwAjDiIlO(k+GpYn,Fe-FaK'~U(aXdXgKkEnFpHQtQyN}N)l+Ls*_*gIm)GsRt*AwK}X+u+V,`\kWlLg*\+yBk)U,d]+UuJG,aK+z(Q|MM,k)Mg(IEkFpLs)KwPzHw(IyE|I-a^,)U-cXtN{M}Tx[f*Co+R.gRfN`L-}K.dJmL~SuHmGiDjAp@/aEiKz,AxK1k-Bx@q,Aq+YvV2{.@|ExMpT0g/T/~U|XuVsZt]x0@qAtJoIlJOiDbE.vYf1B-wDqEoLf2DLcO[/n3NlIgEi@nBoIzQ~G@0a2_e3E`NfXmXqXv4ArBm3]f]`4@GaLcO/~Q{M}KwBpCnAj@kCeFbAb3]e]lY-cE,zXv[qYs2^n3TjVgTPHn2Xg3CfR`T+~RK,dB+~IzGyB,`2W+z3@t2[iWkQ{S,d1\+rHbAc0^w1@,a0ZdVeR*rP(l/SnZ^h^dZbS'|J{N~Y(j0Zk1Sg2AdI'Q{3C~K(bMeMgIeCl2Zp[w/@uMmNg._v/B{-^l_pW|T^)x*XzMQ{K~D*eK)C)]*h*@d)YeUjWfTMkN)y*_*h+@oEtUs,EoKkKm+]gP)LxLrYs,@xKuKoFk+]sEx@*u*CjOrLq\vV{+G+`PgQbL*D*Y+`,[fS*}I+gKiAk@lIwMpSq]p]kV`[,bFnEn+Zu,EDxIRqOmZjTnKkIeHbF|+G|*X-eT,}QIyMkKqRkZs\|+G-qRfVhYoYv[a,GIqGbQ,W-fVjVe[,}_|-A-cF,vIgFYlY+zJT,v.MjL+xE,jXw_l/@zOfJu\-l0GcI,sD-cUvZhZi^r1D.p0[lZjVj/Jl.Zd-Hf@l,^t-@u,]t-H{,Bl+WfYd,AgRbW-}W]-B}E{B}K.bT`V-zVxV.a.G-zJ.aX-uY}/CFtGJxO}O~SwU.c]-x_{0G.dH-W.cZm]}LyOvLtEu/Xs.\tNrGyA~C/eQnYr]tZ}]wUQ~RwJ}FwDw-^zYuXT{PsPwEpEn,Zl-FnWg[b.IhiLoMqHmEhIiLkb0Dlf/NlJwMsOuVl^i0@g/\jZl^0e._mXgOoUvMsW]s]s/Ko._e_x/BG1s._rRlIdCaDFfLgZc/@0}BxB2a.Jd@1}-[2e\iVj[p\m.BoJiEbJf-N1w@pFs^v,R|MtK/zPuZqXpKlTfIaEA.{BHyMvOrKG-i1F,M-a^,zQpWtMkExE}0Y1H-jF,a/V+y\|0Du/^i_oYeRiNrRwKS,`V+y-[r.AMmEbJg@`-[iXnPrYy[*r.Pv[t/HoRfX)|YtSoJl.YmPtLsTv/E}J*dJm.ZnPrPm-I)N}WxPlTtLlCvF,[-H*mI,d1\u2H-cOkf*B,l}BxDkd)\'lg4FlFl,Ej+^g,@)l+Ll(Z*m)Gm&K-{)M{(A/z,Az']2{-_{+V0v4Av0U1v+Vv(D(p2[p0H)l(Al'O7j![j"WI5yIy#EE7jEj$H5yH6uHu#Eu%Ru$V7j%Yj$V5yVy%Y7j'X5y_6n(FM5yT7j[j)Wj*Ej)^5y^Wy*E7jZj+]5y*Zy+]y,R7j-@5yN6n,Yn-G5y\\7j\j.Xc_6|_uXu-\u.Q5y_y/MM7jMj0IcP6`P5yIy/M7j3Kj2VcO6`O5yVy3K6`R7cRjK5y4@@7j@j5C6u4\@7j7P^W5yWP^y8SS7jSj9OcV6`V5yOy8Sy:DD7jDj;@cG6`G5y@y:Dy;U7 @
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1
pltfiles/wizwarp.plt
Normal file
1
pltfiles/wizwarp.plt
Normal file
File diff suppressed because one or more lines are too long
46
tek4010.c
46
tek4010.c
@ -246,6 +246,15 @@ int tek4010_on_timer_event()
|
||||
// or there is still a bright spot, return 1 to ask for
|
||||
// one more redraw
|
||||
|
||||
// is child process still running?
|
||||
|
||||
int status;
|
||||
if ((!noexit) && (isInput() == 0) && (waitpid(-1, &status, WNOHANG))) {
|
||||
tek4010_quit();
|
||||
gtk_main_quit();
|
||||
printf("Process has been terminated\n");
|
||||
exit(0);
|
||||
}
|
||||
return (isBrightSpot || isInput());
|
||||
}
|
||||
|
||||
@ -306,6 +315,15 @@ void clearPersistent(cairo_t *cr, cairo_t *cr2)
|
||||
plotPointMode = 0;
|
||||
}
|
||||
|
||||
void clearSecond(cairo_t *cr2)
|
||||
// clear second surface
|
||||
{
|
||||
cairo_set_source_rgba(cr2, 0, 0, 0, 0);
|
||||
cairo_set_operator(cr2, CAIRO_OPERATOR_SOURCE);
|
||||
cairo_paint(cr2);
|
||||
cairo_set_operator(cr2, CAIRO_OPERATOR_OVER);
|
||||
}
|
||||
|
||||
|
||||
void tek4010_draw(cairo_t *cr, cairo_t *cr2, int width, int height, int first)
|
||||
// draw onto the main window using cairo
|
||||
@ -321,10 +339,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int width, int height, int first)
|
||||
showCursor = 1;
|
||||
isBrightSpot = 0;
|
||||
|
||||
cairo_set_source_rgba(cr2, 0, 0, 0, 0); // second surface is cleared each time
|
||||
cairo_set_operator(cr2, CAIRO_OPERATOR_SOURCE);
|
||||
cairo_paint(cr2);
|
||||
cairo_set_operator(cr2, CAIRO_OPERATOR_OVER);
|
||||
clearSecond(cr2);
|
||||
|
||||
// clear persistent surface, if necessary
|
||||
if (globalClearPersistent) {
|
||||
@ -345,14 +360,15 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int width, int height, int first)
|
||||
|
||||
do {
|
||||
ch = getInputChar();
|
||||
if (isInput() == 0) todo = 0;
|
||||
|
||||
// fade away last bright spot vector
|
||||
if (vectorTable.intensity > 0.1) {
|
||||
cairo_set_line_width (cr2, vectorTable.linewidth);
|
||||
cairo_set_source_rgb(cr2, 0.25, 0.7, 0.25);
|
||||
cairo_set_source_rgb(cr2, 0.45, 0.8, 0.45);
|
||||
cairo_move_to(cr2, vectorTable.x0, WINDOW_HEIGHT - vectorTable.y0);
|
||||
cairo_line_to(cr2, vectorTable.x2, WINDOW_HEIGHT - vectorTable.y2);
|
||||
cairo_stroke (cr2);
|
||||
cairo_stroke(cr2);
|
||||
vectorTable.intensity = 0.0;
|
||||
isBrightSpot = 1;
|
||||
}
|
||||
@ -569,7 +585,13 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int width, int height, int first)
|
||||
break;
|
||||
default: switch (ch) {
|
||||
case 0: break;
|
||||
case EOF: break;
|
||||
case 7: // bell function, delay 0.1 sec
|
||||
// cannot delay if bright spot is on, needs to be turned off first
|
||||
clearSecond(cr2);
|
||||
usleep(50000);
|
||||
showCursor=0;
|
||||
todo = 0;
|
||||
break;
|
||||
case 8: // backspace
|
||||
x0 -= hDotsPerChar;
|
||||
if (x0<leftmargin) x0 = leftmargin;
|
||||
@ -633,14 +655,4 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int width, int height, int first)
|
||||
// display cursor
|
||||
|
||||
if (showCursor) doCursor(cr2);
|
||||
|
||||
// is child process still running?
|
||||
|
||||
int status;
|
||||
if ((! noexit) && (waitpid(-1, &status, WNOHANG))) { // Is child process terminated?
|
||||
tek4010_quit();
|
||||
gtk_main_quit();
|
||||
printf("Child process has been terminated\n");
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
|
||||
#define WINDOW_WIDTH 1024 // proposed width of main window
|
||||
#define WINDOW_HEIGHT 768 // proposed height of main window (as per Tektronix manual)
|
||||
#define WINDOW_HEIGHT 780 // proposed height of main window (as per Tektronix manual)
|
||||
#define WINDOW_NAME "Tektronix 4010" // name of main window
|
||||
#define ICON_NAME "" // path to icon for window
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user