From 24ddb744a5d40284a91ffcb7f7680225957807e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=A8Rene=20Richarz?= <¨rene.richarz@bluewin.ch¨> Date: Sun, 14 Apr 2019 08:29:29 +0200 Subject: [PATCH] Tektronix emulation complete, including greyscale --- README.md | 33 ++++++++----- .../isco36.plt => 08_isco36.plt} | 0 pltfiles/08_warandpeace.plt | Bin 1465 -> 0 bytes tek4010 | Bin 39592 -> 40428 bytes tek4010.c | 43 ++++++++++++----- tektests/greyscaletest.plt | 2 + {tests => tektests}/incremental.c | 0 {tests => tektests}/incremental.plt | 0 tests/incremental.png | Bin 16254 -> 0 bytes tube.c | 45 +++++++++++------- tube.h | 4 ++ versions.txt | 11 +++-- 12 files changed, 94 insertions(+), 44 deletions(-) rename pltfiles/{More_pltfiles/isco36.plt => 08_isco36.plt} (100%) delete mode 100644 pltfiles/08_warandpeace.plt create mode 100644 tektests/greyscaletest.plt rename {tests => tektests}/incremental.c (100%) rename {tests => tektests}/incremental.plt (100%) delete mode 100644 tests/incremental.png diff --git a/README.md b/README.md index eb3c528..979430d 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,29 @@ [![Build Status](https://travis-ci.org/rricharz/Tek4010.svg?branch=master)](https://travis-ci.org/rricharz/Tek4010) -# Tektronix 4010 and 4014 Terminal Emulator +# Tektronix 4010 and 4014 Storage Tube Terminal Emulator This is a [Tektronix 4010 and 4014](https://en.wikipedia.org/wiki/Tektronix_4010) terminal emulator for the Raspberry Pi and other Linux systems. It can also be used on Windows and Macintosh systems with [Virtualbox](https://www.virtualbox.org/) and [Ubuntu](https://www.ubuntu.com/). +It can also display historical data for the +[MIT Project MAC](https://en.wikipedia.org/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory#Project_MAC) +'s ARDS (Advanced Remote Display Station). + ![screen_shot](screendump.png?raw=true "tek4010 screendump") -It attempts to emulate the storage tube display of the Tektronix 4010, including the bright -drawing spot. +It attempts to emulate the [storage tube display](https://en.wikipedia.org/wiki/Storage_tube) +of the Tektronix 4010, including the bright drawing spot. -To the best of my knowledge this is the only Tektronix 4010 emulator, which makes an effort -to emulate the storage tube behavior of the 4010. If the look and feel is not important, you can -use ["xterm"](https://en.wikipedia.org/wiki/Xterm) instead. "xterm" does not support the -"write through" mode. - -This tek4010 emulator is currently in beta-testing and updated frequently. +To the best of my knowledge this is the only Tektronix 4010/4014 emulator, which makes an effort +to emulate the storage tube behavior. If the look and feel is not important, you can +use ["xterm"](https://en.wikipedia.org/wiki/Xterm) instead. "xterm" does not support all +graphics modes of the 4014. It can be used to log into a historical Unix system such as [2.11 BSD](https://en.wikipedia.org/wiki/Berkeley_Software_Distribution) on the [pidp11](http://obsolescence.wixsite.com/obsolescence/pidp-11) -or a real historical system. +or a real historical system. At can also be used to display historical plot data. This [video of a tek4010 demo](https://youtu.be/ioYiu6oUT88) was generated using [simplescreenrecorder](https://www.maartenbaert.be/simplescreenrecorder). There is also a @@ -232,7 +234,9 @@ tek4010 has the following options: -full in this mode the tek4010 emulator creates a full screen window, and uses the full resolution of the 4014 with the enhanced graphics module installed, scaled down to the actual window size. Use control-q to - close the tek4010 window. This option is experimental. + close the tek4010 window. This option is experimental. + + -ARDS display ARDS data **Reporting problems** @@ -277,4 +281,11 @@ There is a make file in the repo. See [versions.txt](versions.txt) +**Contributors** + +The storage tube emulator and the Tektronix 4010/4014 decoder were witten by Rene Richarz. +The ARDS decoder was written by Lars Brinkhoff. +The historical plot data for the Tektronix 4014 was obtained from Jos Dreesen. +Thanks to many others who contributed important ideas and helped with the debugging. + diff --git a/pltfiles/More_pltfiles/isco36.plt b/pltfiles/08_isco36.plt similarity index 100% rename from pltfiles/More_pltfiles/isco36.plt rename to pltfiles/08_isco36.plt diff --git a/pltfiles/08_warandpeace.plt b/pltfiles/08_warandpeace.plt deleted file mode 100644 index e2bf363730306381f67ae83ed55032be26967501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1465 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 delta 12399 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 diff --git a/tek4010.c b/tek4010.c index 4d6b18e..b8ea98b 100755 --- a/tek4010.c +++ b/tek4010.c @@ -73,6 +73,16 @@ static long startPaintTime; static int xh,xl,yh,yl,xy4014; static long todo; +// table for special plot point mode +// 4014 manual page F-9 +int intensityTable[] = {14,16,17,19, 20,22,23,25, 28,31,34,38, 41,33,47,50, + 56,62,69,75, 81,88,94,100, 56,62,69,75, 81,88,96,100, + 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 5, 5, 5, 6, 6, 7, 8, 9,10, 11,12,12,13, + 14,16,17,19, 20,22,23,25, 28,31,34,38, 41,44,47,50, + 56,62,69,75, 81,88,94,100, 56,63,69,75, 81,88}; + + void tek4010_checkLimits() /* check whether char is in visibel space */ { @@ -147,9 +157,12 @@ void tek4010_escapeCodeHandler(cairo_t *cr, cairo_t *cr2, int ch) break; // modes 27 and 29 - 31 are identical in all modes - case 28: // record sepatator - if (DEBUG) printf("Special point plot mode not supported, ignored\n"); - mode = 50; + case 28: // record separator + /*if (DEBUG)*/ printf("Special point plot mode, mode=%d\n",savemode); + mode = 50; // for the intensity/focus character + specialPlotMode = 1; + double intensity = 1.0; + int defocussed = 0; break; case '8': tube_changeCharacterSize(cr, cr2, 74, 35, (int)(efactor * 18)); break; @@ -215,6 +228,7 @@ int tek4010_checkReturnToAlpha(int ch) todo = 0; } plotPointMode = 0; + specialPlotMode = 0; return 1; } else return 0; @@ -225,7 +239,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) // cr is used for persistent drawing, cr2 for temporary drawing { - int ch; + int ch, tag; refreshCount++; @@ -332,7 +346,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) plotPointMode = 0; goto endDo; case 30: // record separator >> incremental plot mode - if (DEBUG) printf("Incremental point plot mode not supported, ignored\n"); + if (DEBUG) printf("Incremental point plot mode\n"); penDown = 1; mode = 40; goto endDo; @@ -346,7 +360,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) // this cannot be done in switch(mode) below, because multiple bytes // can be skipped and the current byte must be executed after a mode change - int tag = (ch >> 5) & 3; + tag = (ch >> 5) & 3; if ((mode >= 1) && (mode <= 8)) { @@ -483,9 +497,9 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) showCursor = 0; tube_x0 = tube_x2; // prepare for additional vectors - tube_y0 = tube_y2; - mode = 5; - + tube_y0 = tube_y2; + if (specialPlotMode) mode = 50; // another intensity/focus char follows + else mode = 5; break; case 30: // escape code handler tek4010_escapeCodeHandler(cr, cr2, ch); @@ -507,8 +521,15 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) } else if (DEBUG) printf("Illegal byte 0x%02X in incremental plot\n", ch); break; - case 50: // special plot mode, not implemented - tek4010_checkReturnToAlpha(ch); // check for exit + case 50:// special plot mode, not implemented + // ignore the value for now + tag = ch >> 5; + if ((ch < 32) || (ch >= 126)) return; + if (DEBUG) printf("intensity/focus control = %c: %d: ", ch, tag); + defocussed = (tag == 1); + intensity = intensityTable[ch - 32]; + if (DEBUG) printf("defocussed = %d, intensity = %d%%\n", defocussed, intensity); + mode = 5; // coordinates follow break; case 101: if (DEBUG) printf("Ignore until group separator, ch = %02x\n", ch); diff --git a/tektests/greyscaletest.plt b/tektests/greyscaletest.plt new file mode 100644 index 0000000..83c19df --- /dev/null +++ b/tektests/greyscaletest.plt @@ -0,0 +1,2 @@ +$v)L1fL &hL!P"T#X$\%h*@&D'H(L)P*T+X,\-h+@.D/H0L1P2T3X4\5h,@6D7H8L9P:T;X<\=h-@>D?H@LAPBTCXD\Eh.@FDGHHLIPJTKXL\Mh/@NDOHPLQPRTSXT\Uh0@VDWHXLYPZT[X\\]h1@^D_H`LaPbTcXd\eh2@fDgHhLiPjTkXl\mh3@nDoHpLqPrTsXt\uh4@vDwHxLyPzT{X|\}h5@~DH k)L!P"T#X$\%k*@&D'H(L)P*T+X,\-k+@.D/H0L1P2T3X4\5k,@6D7H8L9P:T;X<\=k-@>D?H@LAPBTCXD\Ek.@FDGHHLIPJTKXL\Mk/@NDOHPLQPRTSXT\Uk0@VDWHXLYPZT[X\\]k1@^D_H`LaPbTcXd\ek2@fDgHhLiPjTkXl\mk3@nDoHpLqPrTsXt\uk4@vDwHxLyPzT{X|\}k5@~DH n)L!P"T#X$\%n*@&D'H(L)P*T+X,\-n+@.D/H0L1P2T3X4\5n,@6D7H8L9P:T;X<\=n-@>D?H@LAPBTCXD\En.@FDGHHLIPJTKXL\Mn/@NDOHPLQPRTSXT\Un0@VDWHXLYPZT[X\\]n1@^D_H`LaPbTcXd\en2@fDgHhLiPjTkXl\mn3@nDoHpLqPrTsXt\un4@vDwHxLyPzT{X|\}n5@~DH q)L!P"T#X$\%q*@&D'H(L)P*T+X,\-q+@.D/H0L1P2T3X4\5q,@6D7H8L9P:T;X<\=q-@>D?H@LAPBTCXD\Eq.@FDGHHLIPJTKXL\Mq/@NDOHPLQPRTSXT\Uq0@VDWHXLYPZT[X\\]q1@^D_H`LaPbTcXd\eq2@fDgHhLiPjTkXl\mq3@nDoHpLqPrTsXt\uq4@vDwHxLyPzT{X|\}q5@~DH t)L!P"T#X$\%t*@&D'H(L)P*T+X,\-t+@.D/H0L1P2T3X4\5t,@6D7H8L9P:T;X<\=t-@>D?H@LAPBTCXD\Et.@FDGHHLIPJTKXL\Mt/@NDOHPLQPRTSXT\Ut0@VDWHXLYPZT[X\\]t1@^D_H`LaPbTcXd\et2@fDgHhLiPjTkXl\mt3@nDoHpLqPrTsXt\ut4@vDwHxLyPzT{X|\}t5@~DH w)L!P"T#X$\%w*@&D'H(L)P*T+X,\-w+@.D/H0L1P2T3X4\5w,@6D7H8L9P:T;X<\=w-@>D?H@LAPBTCXD\Ew.@FDGHHLIPJTKXL\Mw/@NDOHPLQPRTSXT\Uw0@VDWHXLYPZT[X\\]w1@^D_H`LaPbTcXd\ew2@fDgHhLiPjTkXl\mw3@nDoHpLqPrTsXt\uw4@vDwHxLyPzT{X|\}w5@~DH z)L!P"T#X$\%z*@&D'H(L)P*T+X,\-z+@.D/H0L1P2T3X4\5z,@6D7H8L9P:T;X<\=z-@>D?H@LAPBTCXD\Ez.@FDGHHLIPJTKXL\Mz/@NDOHPLQPRTSXT\Uz0@VDWHXLYPZT[X\\]z1@^D_H`LaPbTcXd\ez2@fDgHhLiPjTkXl\mz3@nDoHpLqPrTsXt\uz4@vDwHxLyPzT{X|\}z5@~DH })L!P"T#X$\%}*@&D'H(L)P*T+X,\-}+@.D/H0L1P2T3X4\5},@6D7H8L9P:T;X<\=}-@>D?H@LAPBTCXD\E}.@FDGHHLIPJTKXL\M}/@NDOHPLQPRTSXT\U}0@VDWHXLYPZT[X\\]}1@^D_H`LaPbTcXd\e}2@fDgHhLiPjTkXl\m}3@nDoHpLqPrTsXt\u}4@vDwHxLyPzT{X|\}}5@~DH '`)L!P"T#X$\%`*@&D'H(L)P*T+X,\-`+@.D/H0L1P2T3X4\5`,@6D7H8L9P:T;X<\=`-@>D?H@LAPBTCXD\E`.@FDGHHLIPJTKXL\M`/@NDOHPLQPRTSXT\U`0@VDWHXLYPZT[X\\]`1@^D_H`LaPbTcXd\e`2@fDgHhLiPjTkXl\m`3@nDoHpLqPrTsXt\u`4@vDwHxLyPzT{X|\}`5@~DH c)L!P"T#X$\%c*@&D'H(L)P*T+X,\-c+@.D/H0L1P2T3X4\5c,@6D7H8L9P:T;X<\=c-@>D?H@LAPBTCXD\Ec.@FDGHHLIPJTKXL\Mc/@NDOHPLQPRTSXT\Uc0@VDWHXLYPZT[X\\]c1@^D_H`LaPbTcXd\ec2@fDgHhLiPjTkXl\mc3@nDoHpLqPrTsXt\uc4@vDwHxLyPzT{X|\}c5@~DH f)L!P"T#X$\%f*@&D'H(L)P*T+X,\-f+@.D/H0L1P2T3X4\5f,@6D7H8L9P:T;X<\=f-@>D?H@LAPBTCXD\Ef.@FDGHHLIPJTKXL\Mf/@NDOHPLQPRTSXT\Uf0@VDWHXLYPZT[X\\]f1@^D_H`LaPbTcXd\ef2@fDgHhLiPjTkXl\mf3@nDoHpLqPrTsXt\uf4@vDwHxLyPzT{X|\}f5@~DH i)L!P"T#X$\%i*@&D'H(L)P*T+X,\-i+@.D/H0L1P2T3X4\5i,@6D7H8L9P:T;X<\=i-@>D?H@LAPBTCXD\Ei.@FDGHHLIPJTKXL\Mi/@NDOHPLQPRTSXT\Ui0@VDWHXLYPZT[X\\]i1@^D_H`LaPbTcXd\ei2@fDgHhLiPjTkXl\mi3@nDoHpLqPrTsXt\ui4@vDwHxLyPzT{X|\}i5@~DH l)L!P"T#X$\%l*@&D'H(L)P*T+X,\-l+@.D/H0L1P2T3X4\5l,@6D7H8L9P:T;X<\=l-@>D?H@LAPBTCXD\El.@FDGHHLIPJTKXL\Ml/@NDOHPLQPRTSXT\Ul0@VDWHXLYPZT[X\\]l1@^D_H`LaPbTcXd\el2@fDgHhLiPjTkXl\ml3@nDoHpLqPrTsXt\ul4@vDwHxLyPzT{X|\}l5@~DH o)L!P"T#X$\%o*@&D'H(L)P*T+X,\-o+@.D/H0L1P2T3X4\5o,@6D7H8L9P:T;X<\=o-@>D?H@LAPBTCXD\Eo.@FDGHHLIPJTKXL\Mo/@NDOHPLQPRTSXT\Uo0@VDWHXLYPZT[X\\]o1@^D_H`LaPbTcXd\eo2@fDgHhLiPjTkXl\mo3@nDoHpLqPrTsXt\uo4@vDwHxLyPzT{X|\}o5@~DH r)L!P"T#X$\%r*@&D'H(L)P*T+X,\-r+@.D/H0L1P2T3X4\5r,@6D7H8L9P:T;X<\=r-@>D?H@LAPBTCXD\Er.@FDGHHLIPJTKXL\Mr/@NDOHPLQPRTSXT\Ur0@VDWHXLYPZT[X\\]r1@^D_H`LaPbTcXd\er2@fDgHhLiPjTkXl\mr3@nDoHpLqPrTsXt\ur4@vDwHxLyPzT{X|\}r5@~DH u)L!P"T#X$\%u*@&D'H(L)P*T+X,\-u+@.D/H0L1P2T3X4\5u,@6D7H8L9P:T;X<\=u-@>D?H@LAPBTCXD\Eu.@FDGHHLIPJTKXL\Mu/@NDOHPLQPRTSXT\Uu0@VDWHXLYPZT[X\\]u1@^D_H`LaPbTcXd\eu2@fDgHhLiPjTkXl\mu3@nDoHpLqPrTsXt\uu4@vDwHxLyPzT{X|\}u5@~DH x)L!P"T#X$\%x*@&D'H(L)P*T+X,\-x+@.D/H0L1P2T3X4\5x,@6D7H8L9P:T;X<\=x-@>D?H@LAPBTCXD\Ex.@FDGHHLIPJTKXL\Mx/@NDOHPLQPRTSXT\Ux0@VDWHXLYPZT[X\\]x1@^D_H`LaPbTcXd\ex2@fDgHhLiPjTkXl\mx3@nDoHpLqPrTsXt\ux4@vDwHxLyPzT{X|\}x5@~DH {)L!P"T#X$\%{*@&D'H(L)P*T+X,\-{+@.D/H0L1P2T3X4\5{,@6D7H8L9P:T;X<\={-@>D?H@LAPBTCXD\E{.@FDGHHLIPJTKXL\M{/@NDOHPLQPRTSXT\U{0@VDWHXLYPZT[X\\]{1@^D_H`LaPbTcXd\e{2@fDgHhLiPjTkXl\m{3@nDoHpLqPrTsXt\u{4@vDwHxLyPzT{X|\}{5@~DH ~)L!P"T#X$\%~*@&D'H(L)P*T+X,\-~+@.D/H0L1P2T3X4\5~,@6D7H8L9P:T;X<\=~-@>D?H@LAPBTCXD\E~.@FDGHHLIPJTKXL\M~/@NDOHPLQPRTSXT\U~0@VDWHXLYPZT[X\\]~1@^D_H`LaPbTcXd\e~2@fDgHhLiPjTkXl\m~3@nDoHpLqPrTsXt\u~4@vDwHxLyPzT{X|\}~5@~DH (a)L!P"T#X$\%a*@&D'H(L)P*T+X,\-a+@.D/H0L1P2T3X4\5a,@6D7H8L9P:T;X<\=a-@>D?H@LAPBTCXD\Ea.@FDGHHLIPJTKXL\Ma/@NDOHPLQPRTSXT\Ua0@VDWHXLYPZT[X\\]a1@^D_H`LaPbTcXd\ea2@fDgHhLiPjTkXl\ma3@nDoHpLqPrTsXt\ua4@vDwHxLyPzT{X|\}a5@~DH d)L!P"T#X$\%d*@&D'H(L)P*T+X,\-d+@.D/H0L1P2T3X4\5d,@6D7H8L9P:T;X<\=d-@>D?H@LAPBTCXD\Ed.@FDGHHLIPJTKXL\Md/@NDOHPLQPRTSXT\Ud0@VDWHXLYPZT[X\\]d1@^D_H`LaPbTcXd\ed2@fDgHhLiPjTkXl\md3@nDoHpLqPrTsXt\ud4@vDwHxLyPzT{X|\}d5@~DH g)L!P"T#X$\%g*@&D'H(L)P*T+X,\-g+@.D/H0L1P2T3X4\5g,@6D7H8L9P:T;X<\=g-@>D?H@LAPBTCXD\Eg.@FDGHHLIPJTKXL\Mg/@NDOHPLQPRTSXT\Ug0@VDWHXLYPZT[X\\]g1@^D_H`LaPbTcXd\eg2@fDgHhLiPjTkXl\mg3@nDoHpLqPrTsXt\ug4@vDwHxLyPzT{X|\}g5@~DH j)L!P"T#X$\%j*@&D'H(L)P*T+X,\-j+@.D/H0L1P2T3X4\5j,@6D7H8L9P:T;X<\=j-@>D?H@LAPBTCXD\Ej.@FDGHHLIPJTKXL\Mj/@NDOHPLQPRTSXT\Uj0@VDWHXLYPZT[X\\]j1@^D_H`LaPbTcXd\ej2@fDgHhLiPjTkXl\mj3@nDoHpLqPrTsXt\uj4@vDwHxLyPzT{X|\}j5@~DH m)L!P"T#X$\%m*@&D'H(L)P*T+X,\-m+@.D/H0L1P2T3X4\5m,@6D7H8L9P:T;X<\=m-@>D?H@LAPBTCXD\Em.@FDGHHLIPJTKXL\Mm/@NDOHPLQPRTSXT\Um0@VDWHXLYPZT[X\\]m1@^D_H`LaPbTcXd\em2@fDgHhLiPjTkXl\mm3@nDoHpLqPrTsXt\um4@vDwHxLyPzT{X|\}m5@~DH p)L!P"T#X$\%p*@&D'H(L)P*T+X,\-p+@.D/H0L1P2T3X4\5p,@6D7H8L9P:T;X<\=p-@>D?H@LAPBTCXD\Ep.@FDGHHLIPJTKXL\Mp/@NDOHPLQPRTSXT\Up0@VDWHXLYPZT[X\\]p1@^D_H`LaPbTcXd\ep2@fDgHhLiPjTkXl\mp3@nDoHpLqPrTsXt\up4@vDwHxLyPzT{X|\}p5@~DH s)L!P"T#X$\%s*@&D'H(L)P*T+X,\-s+@.D/H0L1P2T3X4\5s,@6D7H8L9P:T;X<\=s-@>D?H@LAPBTCXD\Es.@FDGHHLIPJTKXL\Ms/@NDOHPLQPRTSXT\Us0@VDWHXLYPZT[X\\]s1@^D_H`LaPbTcXd\es2@fDgHhLiPjTkXl\ms3@nDoHpLqPrTsXt\us4@vDwHxLyPzT{X|\}s5@~DH v)L!P"T#X$\%v*@&D'H(L)P*T+X,\-v+@.D/H0L1P2T3X4\5v,@6D7H8L9P:T;X<\=v-@>D?H@LAPBTCXD\Ev.@FDGHHLIPJTKXL\Mv/@NDOHPLQPRTSXT\Uv0@VDWHXLYPZT[X\\]v1@^D_H`LaPbTcXd\ev2@fDgHhLiPjTkXl\mv3@nDoHpLqPrTsXt\uv4@vDwHxLyPzT{X|\}v5@~DH y)L!P"T#X$\%y*@&D'H(L)P*T+X,\-y+@.D/H0L1P2T3X4\5y,@6D7H8L9P:T;X<\=y-@>D?H@LAPBTCXD\Ey.@FDGHHLIPJTKXL\My/@NDOHPLQPRTSXT\Uy0@VDWHXLYPZT[X\\]y1@^D_H`LaPbTcXd\ey2@fDgHhLiPjTkXl\my3@nDoHpLqPrTsXt\uy4@vDwHxLyPzT{X|\}y5@~DH |)L!P"T#X$\%|*@&D'H(L)P*T+X,\-|+@.D/H0L1P2T3X4\5|,@6D7H8L9P:T;X<\=|-@>D?H@LAPBTCXD\E|.@FDGHHLIPJTKXL\M|/@NDOHPLQPRTSXT\U|0@VDWHXLYPZT[X\\]|1@^D_H`LaPbTcXd\e|2@fDgHhLiPjTkXl\m|3@nDoHpLqPrTsXt\u|4@vDwHxLyPzT{X|\}|5@~DH )L!P"T#X$\%*@&D'H(L)P*T+X,\-+@.D/H0L1P2T3X4\5,@6D7H8L9P:T;X<\=-@>D?H@LAPBTCXD\E.@FDGHHLIPJTKXL\M/@NDOHPLQPRTSXT\U0@VDWHXLYPZT[X\\]1@^D_H`LaPbTcXd\e2@fDgHhLiPjTkXl\m3@nDoHpLqPrTsXt\u4@vDwHxLyPzT{X|\}5@~DH )b)L!P"T#X$\%b*@&D'H(L)P*T+X,\-b+@.D/H0L1P2T3X4\5b,@6D7H8L9P:T;X<\=b-@>D?H@LAPBTCXD\Eb.@FDGHHLIPJTKXL\Mb/@NDOHPLQPRTSXT\Ub0@VDWHXLYPZT[X\\]b1@^D_H`LaPbTcXd\eb2@fDgHhLiPjTkXl\mb3@nDoHpLqPrTsXt\ub4@vDwHxLyPzT{X|\}b5@~DH e)L!P"T#X$\%e*@&D'H(L)P*T+X,\-e+@.D/H0L1P2T3X4\5e,@6D7H8L9P:T;X<\=e-@>D?H@LAPBTCXD\Ee.@FDGHHLIPJTKXL\Me/@NDOHPLQPRTSXT\Ue0@VDWHXLYPZT[X\\]e1@^D_H`LaPbTcXd\ee2@fDgHhLiPjTkXl\me3@nDoHpLqPrTsXt\ue4@vDwHxLyPzT{X|\}e5@~DH h)L!P"T#X$\%h*@&D'H(L)P*T+X,\-h+@.D/H0L1P2T3X4\5h,@6D7H8L9P:T;X<\=h-@>D?H@LAPBTCXD\Eh.@FDGHHLIPJTKXL\Mh/@NDOHPLQPRTSXT\Uh0@VDWHXLYPZT[X\\]h1@^D_H`LaPbTcXd\eh2@fDgHhLiPjTkXl\mh3@nDoHpLqPrTsXt\uh4@vDwHxLyPzT{X|\}h5@~DH k)L!P"T#X$\%k*@&D'H(L)P*T+X,\-k+@.D/H0L1P2T3X4\5k,@6D7H8L9P:T;X<\=k-@>D?H@LAPBTCXD\Ek.@FDGHHLIPJTKXL\Mk/@NDOHPLQPRTSXT\Uk0@VDWHXLYPZT[X\\]k1@^D_H`LaPbTcXd\ek2@fDgHhLiPjTkXl\mk3@nDoHpLqPrTsXt\uk4@vDwHxLyPzT{X|\}k5@~DH n)L!P"T#X$\%n*@&D'H(L)P*T+X,\-n+@.D/H0L1P2T3X4\5n,@6D7H8L9P:T;X<\=n-@>D?H@LAPBTCXD\En.@FDGHHLIPJTKXL\Mn/@NDOHPLQPRTSXT\Un0@VDWHXLYPZT[X\\]n1@^D_H`LaPbTcXd\en2@fDgHhLiPjTkXl\mn3@nDoHpLqPrTsXt\un4@vDwHxLyPzT{X|\}n5@~DH q)L!P"T#X$\%q*@&D'H(L)P*T+X,\-q+@.D/H0L1P2T3X4\5q,@6D7H8L9P:T;X<\=q-@>D?H@LAPBTCXD\Eq.@FDGHHLIPJTKXL\Mq/@NDOHPLQPRTSXT\Uq0@VDWHXLYPZT[X\\]q1@^D_H`LaPbTcXd\eq2@fDgHhLiPjTkXl\mq3@nDoHpLqPrTsXt\uq4@vDwHxLyPzT{X|\}q5@~DH t)L!P"T#X$\%t*@&D'H(L)P*T+X,\-t+@.D/H0L1P2T3X4\5t,@6D7H8L9P:T;X<\=t-@>D?H@LAPBTCXD\Et.@FDGHHLIPJTKXL\Mt/@NDOHPLQPRTSXT\Ut0@VDWHXLYPZT[X\\]t1@^D_H`LaPbTcXd\et2@fDgHhLiPjTkXl\mt3@nDoHpLqPrTsXt\ut4@vDwHxLyPzT{X|\}t5@~DH w)L!P"T#X$\%w*@&D'H(L)P*T+X,\-w+@.D/H0L1P2T3X4\5w,@6D7H8L9P:T;X<\=w-@>D?H@LAPBTCXD\Ew.@FDGHHLIPJTKXL\Mw/@NDOHPLQPRTSXT\Uw0@VDWHXLYPZT[X\\]w1@^D_H`LaPbTcXd\ew2@fDgHhLiPjTkXl\mw3@nDoHpLqPrTsXt\uw4@vDwHxLyPzT{X|\}w5@~DH z)L!P"T#X$\%z*@&D'H(L)P*T+X,\-z+@.D/H0L1P2T3X4\5z,@6D7H8L9P:T;X<\=z-@>D?H@LAPBTCXD\Ez.@FDGHHLIPJTKXL\Mz/@NDOHPLQPRTSXT\Uz0@VDWHXLYPZT[X\\]z1@^D_H`LaPbTcXd\ez2@fDgHhLiPjTkXl\mz3@nDoHpLqPrTsXt\uz4@vDwHxLyPzT{X|\}z5@~DH })L!P"T#X$\%}*@&D'H(L)P*T+X,\-}+@.D/H0L1P2T3X4\5},@6D7H8L9P:T;X<\=}-@>D?H@LAPBTCXD\E}.@FDGHHLIPJTKXL\M}/@NDOHPLQPRTSXT\U}0@VDWHXLYPZT[X\\]}1@^D_H`LaPbTcXd\e}2@fDgHhLiPjTkXl\m}3@nDoHpLqPrTsXt\u}4@vDwHxLyPzT{X|\}}5@~DH *`)L!P"T#X$\%`*@&D'H(L)P*T+X,\-`+@.D/H0L1P2T3X4\5`,@6D7H8L9P:T;X<\=`-@>D?H@LAPBTCXD\E`.@FDGHHLIPJTKXL\M`/@NDOHPLQPRTSXT\U`0@VDWHXLYPZT[X\\]`1@^D_H`LaPbTcXd\e`2@fDgHhLiPjTkXl\m`3@nDoHpLqPrTsXt\u`4@vDwHxLyPzT{X|\}`5@~DH c)L!P"T#X$\%c*@&D'H(L)P*T+X,\-c+@.D/H0L1P2T3X4\5c,@6D7H8L9P:T;X<\=c-@>D?H@LAPBTCXD\Ec.@FDGHHLIPJTKXL\Mc/@NDOHPLQPRTSXT\Uc0@VDWHXLYPZT[X\\]c1@^D_H`LaPbTcXd\ec2@fDgHhLiPjTkXl\mc3@nDoHpLqPrTsXt\uc4@vDwHxLyPzT{X|\}c5@~DH f)L!P"T#X$\%f*@&D'H(L)P*T+X,\-f+@.D/H0L1P2T3X4\5f,@6D7H8L9P:T;X<\=f-@>D?H@LAPBTCXD\Ef.@FDGHHLIPJTKXL\Mf/@NDOHPLQPRTSXT\Uf0@VDWHXLYPZT[X\\]f1@^D_H`LaPbTcXd\ef2@fDgHhLiPjTkXl\mf3@nDoHpLqPrTsXt\uf4@vDwHxLyPzT{X|\}f5@~DH i)L!P"T#X$\%i*@&D'H(L)P*T+X,\-i+@.D/H0L1P2T3X4\5i,@6D7H8L9P:T;X<\=i-@>D?H@LAPBTCXD\Ei.@FDGHHLIPJTKXL\Mi/@NDOHPLQPRTSXT\Ui0@VDWHXLYPZT[X\\]i1@^D_H`LaPbTcXd\ei2@fDgHhLiPjTkXl\mi3@nDoHpLqPrTsXt\ui4@vDwHxLyPzT{X|\}i5@~DH l)L!P"T#X$\%l*@&D'H(L)P*T+X,\-l+@.D/H0L1P2T3X4\5l,@6D7H8L9P:T;X<\=l-@>D?H@LAPBTCXD\El.@FDGHHLIPJTKXL\Ml/@NDOHPLQPRTSXT\Ul0@VDWHXLYPZT[X\\]l1@^D_H`LaPbTcXd\el2@fDgHhLiPjTkXl\ml3@nDoHpLqPrTsXt\ul4@vDwHxLyPzT{X|\}l5@~DH o)L!P"T#X$\%o*@&D'H(L)P*T+X,\-o+@.D/H0L1P2T3X4\5o,@6D7H8L9P:T;X<\=o-@>D?H@LAPBTCXD\Eo.@FDGHHLIPJTKXL\Mo/@NDOHPLQPRTSXT\Uo0@VDWHXLYPZT[X\\]o1@^D_H`LaPbTcXd\eo2@fDgHhLiPjTkXl\mo3@nDoHpLqPrTsXt\uo4@vDwHxLyPzT{X|\}o5@~DH r)L!P"T#X$\%r*@&D'H(L)P*T+X,\-r+@.D/H0L1P2T3X4\5r,@6D7H8L9P:T;X<\=r-@>D?H@LAPBTCXD\Er.@FDGHHLIPJTKXL\Mr/@NDOHPLQPRTSXT\Ur0@VDWHXLYPZT[X\\]r1@^D_H`LaPbTcXd\er2@fDgHhLiPjTkXl\mr3@nDoHpLqPrTsXt\ur4@vDwHxLyPzT{X|\}r5@~DH u)L!P"T#X$\%u*@&D'H(L)P*T+X,\-u+@.D/H0L1P2T3X4\5u,@6D7H8L9P:T;X<\=u-@>D?H@LAPBTCXD\Eu.@FDGHHLIPJTKXL\Mu/@NDOHPLQPRTSXT\Uu0@VDWHXLYPZT[X\\]u1@^D_H`LaPbTcXd\eu2@fDgHhLiPjTkXl\mu3@nDoHpLqPrTsXt\uu4@vDwHxLyPzT{X|\}u5@~DH x)L!P"T#X$\%x*@&D'H(L)P*T+X,\-x+@.D/H0L1P2T3X4\5x,@6D7H8L9P:T;X<\=x-@>D?H@LAPBTCXD\Ex.@FDGHHLIPJTKXL\Mx/@NDOHPLQPRTSXT\Ux0@VDWHXLYPZT[X\\]x1@^D_H`LaPbTcXd\ex2@fDgHhLiPjTkXl\mx3@nDoHpLqPrTsXt\ux4@vDwHxLyPzT{X|\}x5@~DH {)L!P"T#X$\%{*@&D'H(L)P*T+X,\-{+@.D/H0L1P2T3X4\5{,@6D7H8L9P:T;X<\={-@>D?H@LAPBTCXD\E{.@FDGHHLIPJTKXL\M{/@NDOHPLQPRTSXT\U{0@VDWHXLYPZT[X\\]{1@^D_H`LaPbTcXd\e{2@fDgHhLiPjTkXl\m{3@nDoHpLqPrTsXt\u{4@vDwHxLyPzT{X|\}{5@~DH ~)L!P"T#X$\%~*@&D'H(L)P*T+X,\-~+@.D/H0L1P2T3X4\5~,@6D7H8L9P:T;X<\=~-@>D?H@LAPBTCXD\E~.@FDGHHLIPJTKXL\M~/@NDOHPLQPRTSXT\U~0@VDWHXLYPZT[X\\]~1@^D_H`LaPbTcXd\e~2@fDgHhLiPjTkXl\m~3@nDoHpLqPrTsXt\u~4@vDwHxLyPzT{X|\}~5@~DH +a)L!P"T#X$\%a*@&D'H(L)P*T+X,\-a+@.D/H0L1P2T3X4\5a,@6D7H8L9P:T;X<\=a-@>D?H@LAPBTCXD\Ea.@FDGHHLIPJTKXL\Ma/@NDOHPLQPRTSXT\Ua0@VDWHXLYPZT[X\\]a1@^D_H`LaPbTcXd\ea2@fDgHhLiPjTkXl\ma3@nDoHpLqPrTsXt\ua4@vDwHxLyPzT{X|\}a5@~DH d)L!P"T#X$\%d*@&D'H(L)P*T+X,\-d+@.D/H0L1P2T3X4\5d,@6D7H8L9P:T;X<\=d-@>D?H@LAPBTCXD\Ed.@FDGHHLIPJTKXL\Md/@NDOHPLQPRTSXT\Ud0@VDWHXLYPZT[X\\]d1@^D_H`LaPbTcXd\ed2@fDgHhLiPjTkXl\md3@nDoHpLqPrTsXt\ud4@vDwHxLyPzT{X|\}d5@~DH g)L!P"T#X$\%g*@&D'H(L)P*T+X,\-g+@.D/H0L1P2T3X4\5g,@6D7H8L9P:T;X<\=g-@>D?H@LAPBTCXD\Eg.@FDGHHLIPJTKXL\Mg/@NDOHPLQPRTSXT\Ug0@VDWHXLYPZT[X\\]g1@^D_H`LaPbTcXd\eg2@fDgHhLiPjTkXl\mg3@nDoHpLqPrTsXt\ug4@vDwHxLyPzT{X|\}g5@~DH j)L!P"T#X$\%j*@&D'H(L)P*T+X,\-j+@.D/H0L1P2T3X4\5j,@6D7H8L9P:T;X<\=j-@>D?H@LAPBTCXD\Ej.@FDGHHLIPJTKXL\Mj/@NDOHPLQPRTSXT\Uj0@VDWHXLYPZT[X\\]j1@^D_H`LaPbTcXd\ej2@fDgHhLiPjTkXl\mj3@nDoHpLqPrTsXt\uj4@vDwHxLyPzT{X|\}j5@~DH m)L!P"T#X$\%m*@&D'H(L)P*T+X,\-m+@.D/H0L1P2T3X4\5m,@6D7H8L9P:T;X<\=m-@>D?H@LAPBTCXD\Em.@FDGHHLIPJTKXL\Mm/@NDOHPLQPRTSXT\Um0@VDWHXLYPZT[X\\]m1@^D_H`LaPbTcXd\em2@fDgHhLiPjTkXl\mm3@nDoHpLqPrTsXt\um4@vDwHxLyPzT{X|\}m5@~DH p)L!P"T#X$\%p*@&D'H(L)P*T+X,\-p+@.D/H0L1P2T3X4\5p,@6D7H8L9P:T;X<\=p-@>D?H@LAPBTCXD\Ep.@FDGHHLIPJTKXL\Mp/@NDOHPLQPRTSXT\Up0@VDWHXLYPZT[X\\]p1@^D_H`LaPbTcXd\ep2@fDgHhLiPjTkXl\mp3@nDoHpLqPrTsXt\up4@vDwHxLyPzT{X|\}p5@~DH s)L!P"T#X$\%s*@&D'H(L)P*T+X,\-s+@.D/H0L1P2T3X4\5s,@6D7H8L9P:T;X<\=s-@>D?H@LAPBTCXD\Es.@FDGHHLIPJTKXL\Ms/@NDOHPLQPRTSXT\Us0@VDWHXLYPZT[X\\]s1@^D_H`LaPbTcXd\es2@fDgHhLiPjTkXl\ms3@nDoHpLqPrTsXt\us4@vDwHxLyPzT{X|\}s5@~DH v)L!P"T#X$\%v*@&D'H(L)P*T+X,\-v+@.D/H0L1P2T3X4\5v,@6D7H8L9P:T;X<\=v-@>D?H@LAPBTCXD\Ev.@FDGHHLIPJTKXL\Mv/@NDOHPLQPRTSXT\Uv0@VDWHXLYPZT[X\\]v1@^D_H`LaPbTcXd\ev2@fDgHhLiPjTkXl\mv3@nDoHpLqPrTsXt\uv4@vDwHxLyPzT{X|\}v5@~DH y)L!P"T#X$\%y*@&D'H(L)P*T+X,\-y+@.D/H0L1P2T3X4\5y,@6D7H8L9P:T;X<\=y-@>D?H@LAPBTCXD\Ey.@FDGHHLIPJTKXL\My/@NDOHPLQPRTSXT\Uy0@VDWHXLYPZT[X\\]y1@^D_H`LaPbTcXd\ey2@fDgHhLiPjTkXl\my3@nDoHpLqPrTsXt\uy4@vDwHxLyPzT{X|\}y5@~DH |)L!P"T#X$\%|*@&D'H(L)P*T+X,\-|+@.D/H0L1P2T3X4\5|,@6D7H8L9P:T;X<\=|-@>D?H@LAPBTCXD\E|.@FDGHHLIPJTKXL\M|/@NDOHPLQPRTSXT\U|0@VDWHXLYPZT[X\\]|1@^D_H`LaPbTcXd\e|2@fDgHhLiPjTkXl\m|3@nDoHpLqPrTsXt\u|4@vDwHxLyPzT{X|\}|5@~DH )L!P"T#X$\%*@&D'H(L)P*T+X,\-+@.D/H0L1P2T3X4\5,@6D7H8L9P:T;X<\=-@>D?H@LAPBTCXD\E.@FDGHHLIPJTKXL\M/@NDOHPLQPRTSXT\U0@VDWHXLYPZT[X\\]1@^D_H`LaPbTcXd\e2@fDgHhLiPjTkXl\m3@nDoHpLqPrTsXt\u4@vDwHxLyPzT{X|\}5@~DH ,b)L!P"T#X$\%b*@&D'H(L)P*T+X,\-b+@.D/H0L1P2T3X4\5b,@6D7H8L9P:T;X<\=b-@>D?H@LAPBTCXD\Eb.@FDGHHLIPJTKXL\Mb/@NDOHPLQPRTSXT\Ub0@VDWHXLYPZT[X\\]b1@^D_H`LaPbTcXd\eb2@fDgHhLiPjTkXl\mb3@nDoHpLqPrTsXt\ub4@vDwHxLyPzT{X|\}b5@~DH e)L!P"T#X$\%e*@&D'H(L)P*T+X,\-e+@.D/H0L1P2T3X4\5e,@6D7H8L9P:T;X<\=e-@>D?H@LAPBTCXD\Ee.@FDGHHLIPJTKXL\Me/@NDOHPLQPRTSXT\Ue0@VDWHXLYPZT[X\\]e1@^D_H`LaPbTcXd\ee2@fDgHhLiPjTkXl\me3@nDoHpLqPrTsXt\ue4@vDwHxLyPzT{X|\}e5@~DH h)L!P"T#X$\%h*@&D'H(L)P*T+X,\-h+@.D/H0L1P2T3X4\5h,@6D7H8L9P:T;X<\=h-@>D?H@LAPBTCXD\Eh.@FDGHHLIPJTKXL\Mh/@NDOHPLQPRTSXT\Uh0@VDWHXLYPZT[X\\]h1@^D_H`LaPbTcXd\eh2@fDgHhLiPjTkXl\mh3@nDoHpLqPrTsXt\uh4@vDwHxLyPzT{X|\}h5@~DH k)L!P"T#X$\%k*@&D'H(L)P*T+X,\-k+@.D/H0L1P2T3X4\5k,@6D7H8L9P:T;X<\=k-@>D?H@LAPBTCXD\Ek.@FDGHHLIPJTKXL\Mk/@NDOHPLQPRTSXT\Uk0@VDWHXLYPZT[X\\]k1@^D_H`LaPbTcXd\ek2@fDgHhLiPjTkXl\mk3@nDoHpLqPrTsXt\uk4@vDwHxLyPzT{X|\}k5@~DH n)L!P"T#X$\%n*@&D'H(L)P*T+X,\-n+@.D/H0L1P2T3X4\5n,@6D7H8L9P:T;X<\=n-@>D?H@LAPBTCXD\En.@FDGHHLIPJTKXL\Mn/@NDOHPLQPRTSXT\Un0@VDWHXLYPZT[X\\]n1@^D_H`LaPbTcXd\en2@fDgHhLiPjTkXl\mn3@nDoHpLqPrTsXt\un4@vDwHxLyPzT{X|\}n5@~DH q)L!P"T#X$\%q*@&D'H(L)P*T+X,\-q+@.D/H0L1P2T3X4\5q,@6D7H8L9P:T;X<\=q-@>D?H@LAPBTCXD\Eq.@FDGHHLIPJTKXL\Mq/@NDOHPLQPRTSXT\Uq0@VDWHXLYPZT[X\\]q1@^D_H`LaPbTcXd\eq2@fDgHhLiPjTkXl\mq3@nDoHpLqPrTsXt\uq4@vDwHxLyPzT{X|\}q5@~DH t)L!P"T#X$\%t*@&D'H(L)P*T+X,\-t+@.D/H0L1P2T3X4\5t,@6D7H8L9P:T;X<\=t-@>D?H@LAPBTCXD\Et.@FDGHHLIPJTKXL\Mt/@NDOHPLQPRTSXT\Ut0@VDWHXLYPZT[X\\]t1@^D_H`LaPbTcXd\et2@fDgHhLiPjTkXl\mt3@nDoHpLqPrTsXt\ut4@vDwHxLyPzT{X|\}t5@~DH w)L!P"T#X$\%w*@&D'H(L)P*T+X,\-w+@.D/H0L1P2T3X4\5w,@6D7H8L9P:T;X<\=w-@>D?H@LAPBTCXD\Ew.@FDGHHLIPJTKXL\Mw/@NDOHPLQPRTSXT\Uw0@VDWHXLYPZT[X\\]w1@^D_H`LaPbTcXd\ew2@fDgHhLiPjTkXl\mw3@nDoHpLqPrTsXt\uw4@vDwHxLyPzT{X|\}w5@~DH z)L!P"T#X$\%z*@&D'H(L)P*T+X,\-z+@.D/H0L1P2T3X4\5z,@6D7H8L9P:T;X<\=z-@>D?H@LAPBTCXD\Ez.@FDGHHLIPJTKXL\Mz/@NDOHPLQPRTSXT\Uz0@VDWHXLYPZT[X\\]z1@^D_H`LaPbTcXd\ez2@fDgHhLiPjTkXl\mz3@nDoHpLqPrTsXt\uz4@vDwHxLyPzT{X|\}z5@~DH })L!P"T#X$\%}*@&D'H(L)P*T+X,\-}+@.D/H0L1P2T3X4\5},@6D7H8L9P:T;X<\=}-@>D?H@LAPBTCXD\E}.@FDGHHLIPJTKXL\M}/@NDOHPLQPRTSXT\U}0@VDWHXLYPZT[X\\]}1@^D_H`LaPbTcXd\e}2@fDgHhLiPjTkXl\m}3@nDoHpLqPrTsXt\u}4@vDwHxLyPzT{X|\}}5@~DH -`)L!P"T#X$\%`*@&D'H(L)P*T+X,\-`+@.D/H0L1P2T3X4\5`,@6D7H8L9P:T;X<\=`-@>D?H@LAPBTCXD\E`.@FDGHHLIPJTKXL\M`/@NDOHPLQPRTSXT\U`0@VDWHXLYPZT[X\\]`1@^D_H`LaPbTcXd\e`2@fDgHhLiPjTkXl\m`3@nDoHpLqPrTsXt\u`4@vDwHxLyPzT{X|\}`5@~DH c)L!P"T#X$\%c*@&D'H(L)P*T+X,\-c+@.D/H0L1P2T3X4\5c,@6D7H8L9P:T;X<\=c-@>D?H@LAPBTCXD\Ec.@FDGHHLIPJTKXL\Mc/@NDOHPLQPRTSXT\Uc0@VDWHXLYPZT[X\\]c1@^D_H`LaPbTcXd\ec2@fDgHhLiPjTkXl\mc3@nDoHpLqPrTsXt\uc4@vDwHxLyPzT{X|\}c5@~DH f)L!P"T#X$\%f*@&D'H(L)P*T+X,\-f+@.D/H0L1P2T3X4\5f,@6D7H8L9P:T;X<\=f-@>D?H@LAPBTCXD\Ef.@FDGHHLIPJTKXL\Mf/@NDOHPLQPRTSXT\Uf0@VDWHXLYPZT[X\\]f1@^D_H`LaPbTcXd\ef2@fDgHhLiPjTkXl\mf3@nDoHpLqPrTsXt\uf4@vDwHxLyPzT{X|\}f5@~DH i)L!P"T#X$\%i*@&D'H(L)P*T+X,\-i+@.D/H0L1P2T3X4\5i,@6D7H8L9P:T;X<\=i-@>D?H@LAPBTCXD\Ei.@FDGHHLIPJTKXL\Mi/@NDOHPLQPRTSXT\Ui0@VDWHXLYPZT[X\\]i1@^D_H`LaPbTcXd\ei2@fDgHhLiPjTkXl\mi3@nDoHpLqPrTsXt\ui4@vDwHxLyPzT{X|\}i5@~DH l)L!P"T#X$\%l*@&D'H(L)P*T+X,\-l+@.D/H0L1P2T3X4\5l,@6D7H8L9P:T;X<\=l-@>D?H@LAPBTCXD\El.@FDGHHLIPJTKXL\Ml/@NDOHPLQPRTSXT\Ul0@VDWHXLYPZT[X\\]l1@^D_H`LaPbTcXd\el2@fDgHhLiPjTkXl\ml3@nDoHpLqPrTsXt\ul4@vDwHxLyPzT{X|\}l5@~DH o)L!P"T#X$\%o*@&D'H(L)P*T+X,\-o+@.D/H0L1P2T3X4\5o,@6D7H8L9P:T;X<\=o-@>D?H@LAPBTCXD\Eo.@FDGHHLIPJTKXL\Mo/@NDOHPLQPRTSXT\Uo0@VDWHXLYPZT[X\\]o1@^D_H`LaPbTcXd\eo2@fDgHhLiPjTkXl\mo3@nDoHpLqPrTsXt\uo4@vDwHxLyPzT{X|\}o5@~DH r)L!P"T#X$\%r*@&D'H(L)P*T+X,\-r+@.D/H0L1P2T3X4\5r,@6D7H8L9P:T;X<\=r-@>D?H@LAPBTCXD\Er.@FDGHHLIPJTKXL\Mr/@NDOHPLQPRTSXT\Ur0@VDWHXLYPZT[X\\]r1@^D_H`LaPbTcXd\er2@fDgHhLiPjTkXl\mr3@nDoHpLqPrTsXt\ur4@vDwHxLyPzT{X|\}r5@~DH u)L!P"T#X$\%u*@&D'H(L)P*T+X,\-u+@.D/H0L1P2T3X4\5u,@6D7H8L9P:T;X<\=u-@>D?H@LAPBTCXD\Eu.@FDGHHLIPJTKXL\Mu/@NDOHPLQPRTSXT\Uu0@VDWHXLYPZT[X\\]u1@^D_H`LaPbTcXd\eu2@fDgHhLiPjTkXl\mu3@nDoHpLqPrTsXt\uu4@vDwHxLyPzT{X|\}u5@~DH x)L!P"T#X$\%x*@&D'H(L)P*T+X,\-x+@.D/H0L1P2T3X4\5x,@6D7H8L9P:T;X<\=x-@>D?H@LAPBTCXD\Ex.@FDGHHLIPJTKXL\Mx/@NDOHPLQPRTSXT\Ux0@VDWHXLYPZT[X\\]x1@^D_H`LaPbTcXd\ex2@fDgHhLiPjTkXl\mx3@nDoLxLqPsVsXt\ux4@vDwHxLyPzT{X|\}x5@~DH {)L!P"T#X$\%{*@&D'H(L)P*T+X,\-{+@.D/H0L1P2T3X4\5{,@6D7H8L9P:T;X<\={-@>D?H@LAPBTCXD\E{.@FDGHHLIPJTKXL\M{/@NDOHPLQPRTSXT\U{0@VDWHXLYPZT[X\\]{1@^D_H`LaPbTcXd\e{2@fDgHhLiPjTkXl\m{3@nDoHpLqPrTsXt\u{4@vDwHxLyPzT{X|\}{5@~DH ~)L!P"T#X$\%~*@&D'H(L)P*T+X,\-~+@.D/H0L1P2T3X4\5~,@6D7H8L9P:T;X<\=~-@>D?H@LAPBTCXD\E~.@FDGHHLIPJTKXL\M~/@NDOHPLQPRTSXT\U~0@VDWHXLYPZT[X\\]~1@^D_H`LaPbTcXd\e~2@fDgHhLiPjTkXl\m~3@nDoHpLqPrTsXt\u~4@vDwHxLyPzT{X|\}~5@~DH .a)L!P"T#X$\%a*@&D'H(L)P*T+X,\-a+@.D/H0L1P2T3X4\5a,@6D7H8L9P:T;X<\=a-@>D?H@LAPBTCXD\Ea.@FDGHHLIPJTKXL\Ma/@NDOHPLQPRTSXT\Ua0@VDWHXLYPZT[X\\]a1@^D_H`LaPbTcXd\ea2@fDgHhLiPjTkXl\ma3@nDoHpLqPrTsXt\ua4@vDwHxLyPzT{X|\}a5@~DH d)L!P"T#X$\%d*@&D'H(L)P*T+X,\-d+@.D/H0L1P2T3X4\5d,@6D7H8L9P:T;X<\=d-@>D?H@LAPBTCXD\Ed.@FDGHHLIPJTKXL\Md/@NDOHPLQPRTSXT\Ud0@VDWHXLYPZT[X\\]d1@^D_H`LaPbTcXd\ed2@fDgHhLiPjTkXl\md3@nDoHpLqPrTsXt\ud4@vDwHxLyPzT{X|\}d5@~DH g)L!P"T#X$\%g*@&D'H(L)P*T+X,\-g+@.D/H0L1P2T3X4\5g,@6D7H8L9P:T;X<\=g-@>D?H@LAPBTCXD\Eg.@FDGHHLIPJTKXL\Mg/@NDOHPLQPRTSXT\Ug0@VDWHXLYPZT[X\\]g1@^D_H`LaPbTcXd\eg2@fDgHhLiPjTkXl\mg3@nDoHpLqPrTsXt\ug4@vDwHxLyPzT{X|\}g5@~DH j)L!P"T#X$\%j*@&D'H(L)P*T+X,\-j+@.D/H0L1P2T3X4\5j,@6D7H8L9P:T;X<\=j-@>D?H@LAPBTCXD\Ej.@FDGHHLIPJTKXL\Mj/@NDOHPLQPRTSXT\Uj0@VDWHXLYPZT[X\\]j1@^D_H`LaPbTcXd\ej2@fDgHhLiPjTkXl\mj3@nDoHpLqPrTsXt\uj4@vDwHxLyPzT{X|\}j5@~DH m)L!P"T#X$\%m*@&D'H(L)P*T+X,\-m+@.D/H0L1P2T3X4\5m,@6D7H8L9P:T;X<\=m-@>D?H@LAPBTCXD\Em.@FDGHHLIPJTKXL\Mm/@NDOHPLQPRTSXT\Um0@VDWHXLYPZT[X\\]m1@^D_H`LaPbTcXd\em2@fDgHhLiPjTkXl\mm3@nDoHpLqPrTsXt\um4@vDwHxLyPzT{X|\}m5@~DH p)L!P"T#X$\%p*@&D'H(L)P*T+X,\-p+@.D/H0L1P2T3X4\5p,@6D7H8L9P:T;X<\=p-@>D?H@LAPBTCXD\Ep.@FDGHHLIPJTKXL\Mp/@NDOHPLQPRTSXT\Up0@VDWHXLYPZT[X\\]p1@^D_H`LaPbTcXd\ep2@fDgHhLiPjTkXl\mp3@nDoHpLqPrTsXt\up4@vDwHxLyPzT{X|\}p5@~DH s)L!P"T#X$\%s*@&D'H(L)P*T+X,\-s+@.D/H0L1P2T3X4\5s,@6D7H8L9P:T;X<\=s-@>D?H@LAPBTCXD\Es.@FDGHHLIPJTKXL\Ms/@NDOHPLQPRTSXT\Us0@VDWHXLYPZT[X\\]s1@^D_H`LaPbTcXd\es2@fDgHhLiPjTkXl\ms3@nDoHpLqPrTsXt\us4@vDwHxLyPzT{X|\}s5@~DH v)L!P"T#X$\%v*@&D'H(L)P*T+X,\-v+@.D/H0L1P2T3X4\5v,@6D7H8L9P:T;X<\=v-@>D?H@LAPBTCXD\Ev.@FDGHHLIPJTKXL\Mv/@NDOHPLQPRTSXT\Uv0@VDWHXLYPZT[X\\]v1@^D_H`LaPbTcXd\ev2@fDgHhLiPjTkXl\mv3@nDoHpLqPrTsXt\uv4@vDwHxLyPzT{X|\}v5@~DH y)L!P"T#X$\%y*@&D'H(L)P*T+X,\-y+@.D/H0L1P2T3X4\5y,@6D7H8L9P:T;X<\=y-@>D?H@LAPBTCXD\Ey.@FDGHHLIPJTKXL\My/@NDOHPLQPRTSXT\Uy0@VDWHXLYPZT[X\\]y1@^D_H`LaPbTcXd\ey2@fDgHhLiPjTkXl\my3@nDoHpLqPrTsXt\uy4@vDwHxLyPzT{X|\}y5@~DH |)L!P"T#X$\%|*@&D'H(L)P*T+X,\-|+@.D/H0L1P2T3X4\5|,@6D7H8L9P:T;X<\=|-@>D?H@LAPBTCXD\E|.@FDGHHLIPJTKXL\M|/@NDOHPLQPRTSXT\U|0@VDWHXLYPZT[X\\]|1@^D_H`LaPbTcXd\e|2@fDgHhLiPjTkXl\m|3@nDoHpLqPrTsXt\u|4@vDwHxLyPzT{X|\}|5@~DH )L!P"T#X$\%*@&D'H(L)P*T+X,\-+@.D/H0L1P2T3X4\5,@6D7H8L9P:T;X<\=-@>D?H@LAPBTCXD\E.@FDGHHLIPJTKXL\M/@NDOHPLQPRTSXT\U0@VDWHXLYPZT[X\\]1@^D_H`LaPbTcXd\e2@fDgHhLiPjTkXl\m3@nDoHpLqPrTsXt\u4@vDwHxLyPzT{X|\}5@~DH /b)L!P"T#X$\%b*@&D'H(L)P*T+X,\-b+@.D/H0L1P2T3X4\5b,@6D7H8L9P:T;X<\=b-@>D?H@LAPBTCXD\Eb.@FDGHHLIPJTKXL\Mb/@NDOHPLQPRTSXT\Ub0@VDWHXLYPZT[X\\]b1@^D_H`LaPbTcXd\eb2@fDgHhLiPjTkXl\mb3@nDoHpLqPrTsXt\ub4@vDwHxLyPzT{X|\}b5@~DH e)L!P"T#X$\%e*@&D'H(L)P*T+X,\-e+@.D/H0L1P2T3X4\5e,@6D7H8L9P:T;X<\=e-@>D?H@LAPBTCXD\Ee.@FDGHHLIPJTKXL\Me/@NDOHPLQPRTSXT\Ue0@VDWHXLYPZT[X\\]e1@^D_H`LaPbTcXd\ee2@fDgHhLiPjTkXl\me3@nDoHpLqPrTsXt\ue4@vDwHxLyPzT{X|\}e5@~DH h)L!P"T#X$\%h*@&D'H(L)P*T+X,\-h+@.D/H0L1P2T3X4\5h,@6D7H8L9P:T;X<\=h-@>D?H@LAPBTCXD\Eh.@FDGHHLIPJTKXL\Mh/@NDOHPLQPRTSXT\Uh0@VDWHXLYPZT[X\\]h1@^D_H`LaPbTcXd\eh2@fDgHhLiPjTkXl\mh3@nDoHpLqPrTsXt\uh4@vDwHxLyPzT{X|\}h5@~DH k)L!P"T#X$\%k*@&D'H(L)P*T+X,\-k+@.D/H0L1P2T3X4\5k,@6D7H8L9P:T;X<\=k-@>D?H@LAPBTCXD\Ek.@FDGHHLIPJTKXL\Mk/@NDOHPLQPRTSXT\Uk0@VDWHXLYPZT[X\\]k1@^D_H`LaPbTcXd\ek2@fDgHhLiPjTkXl\mk3@nDoHpLqPrTsXt\uk4@vDwHxLyPzT{X|\}k5@~DH n)L!P"T#X$\%n*@&D'H(L)P*T+X,\-n+@.D/H0L1P2T3X4\5n,@6D7H8L9P:T;X<\=n-@>D?H@LAPBTCXD\En.@FDGHHLIPJTKXL\Mn/@NDOHPLQPRTSXT\Un0@VDWHXLYPZT[X\\]n1@^D_H`LaPbTcXd\en2@fDgHhLiPjTkXl\mn3@nDoHpLqPrTsXt\un4@vDwHxLyPzT{X|\}n5@~DH q)L!P"T#X$\%q*@&D'H(L)P*T+X,\-q+@.D/H0L1P2T3X4\5q,@6D7H8L9P:T;X<\=q-@>D?H@LAPBTCXD\Eq.@FDGHHLIPJTKXL\Mq/@NDOHPLQPRTSXT\Uq0@VDWHXLYPZT[X\\]q1@^D_H`LaPbTcXd\eq2@fDgHhLiPjTkXl\mq3@nDoHpLqPrTsXt\uq4@vDwHxLyPzT{X|\}q5@~DH t)L!P"T#X$\%t*@&D'H(L)P*T+X,\-t+@.D/H0L1P2T3X4\5t,@6D7H8L9P:T;X<\=t-@>D?H@LAPBTCXD\Et.@FDGHHLIPJTKXL\Mt/@NDOHPLQPRTSXT\Ut0@VDWHXLYPZT[X\\]t1@^D_H`LaPbTcXd\et2@fDgHhLiPjTkXl\mt3@nDoHpLqPrTsXt\ut4@vDwHxLyPzT{X|\}t5@~DH#d#Dd/T + diff --git a/tests/incremental.c b/tektests/incremental.c similarity index 100% rename from tests/incremental.c rename to tektests/incremental.c diff --git a/tests/incremental.plt b/tektests/incremental.plt similarity index 100% rename from tests/incremental.plt rename to tektests/incremental.plt diff --git a/tests/incremental.png b/tests/incremental.png deleted file mode 100644 index f7c944e9e14ce171d96e9aeb4f7ba402e3e6743f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16254 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 { printf("Error:number of arguments\n"); @@ -409,13 +413,16 @@ void tube_clearPersistent(cairo_t *cr, cairo_t *cr2) tube_y2 = tube_y0; leftmargin = 0; cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); - cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); + cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR, BRIGHT_SPOT_COLOR, BRIGHT_SPOT_COLOR); cairo_paint(cr2); isBrightSpot = 1; plotPointMode = 0; ltype = SOLID; xlast = 0; - ylast = 0; + ylast = 0; + specialPlotMode = 0; + defocussed = 0; + intensity = 100; } void tube_clearSecond(cairo_t *cr2) @@ -475,12 +482,12 @@ void tube_drawCharacter(cairo_t *cr, cairo_t *cr2, char ch) else { // draw the character - cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); + cairo_set_source_rgb(cr, 0, (NORMAL_INTENSITY * intensity) / 100, 0); cairo_move_to(cr, tube_x0 + eoffx, windowHeight - tube_y0); cairo_show_text(cr, s); // draw the bright spot - cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); + cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR, BRIGHT_SPOT_COLOR, BRIGHT_SPOT_COLOR); cairo_move_to(cr2, tube_x0 + eoffx, windowHeight - tube_y0); cairo_show_text(cr2, s); } @@ -504,7 +511,8 @@ void tube_emulateDeflectionTime() void tube_drawPoint(cairo_t *cr, cairo_t *cr2) { #define PI2 6.283185307 - cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); + cairo_set_line_width (cr, 1 + defocussed); + cairo_set_source_rgb(cr, 0, (NORMAL_INTENSITY * intensity) / 100, 0); cairo_move_to(cr, tube_x2 + eoffx, windowHeight - tube_y2); cairo_line_to(cr, tube_x2 + 1 + eoffx, windowHeight - tube_y2); cairo_stroke (cr); @@ -515,10 +523,11 @@ void tube_drawPoint(cairo_t *cr, cairo_t *cr2) if (((tube_x2 - xlast) > 2) || ((xlast - tube_x2) > 2) || ((tube_y2 - ylast) > 2) || ((ylast - tube_y2) > 2)) { - // draw the bright spot, higher intensity + // draw the bright spot cairo_set_line_width (cr2, 0.1); - cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); - cairo_arc(cr2, tube_x2 + eoffx, windowHeight - tube_y2, 2, 0, PI2); + double bsc = (BRIGHT_SPOT_COLOR * intensity) / 100; + cairo_set_source_rgb(cr2, bsc, bsc, bsc); + cairo_arc(cr2, tube_x2 + eoffx, windowHeight - tube_y2, 2 + defocussed, 0, PI2); cairo_fill(cr2); xlast = tube_x2; @@ -549,23 +558,25 @@ void tube_drawVector(cairo_t *cr, cairo_t *cr2) else { // draw the actual vector on permanent surface - cairo_set_line_width (cr, 1); - cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); + cairo_set_line_width (cr, 1 + defocussed); + cairo_set_source_rgb(cr, 0, (NORMAL_INTENSITY * intensity) / 100, 0); tube_line_type(cr, cr2, ltype); cairo_move_to(cr, tube_x0 + eoffx, windowHeight - tube_y0); cairo_line_to(cr, tube_x2 + eoffx, windowHeight - tube_y2); cairo_stroke (cr); //draw the bright spot, half intensity - cairo_set_line_width (cr2, 6); - cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR_HALF); + cairo_set_line_width (cr2, 6 + 2 * defocussed); + double bsc = (BRIGHT_SPOT_COLOR_HALF * intensity) / 100; + cairo_set_source_rgb(cr2, bsc, bsc, bsc); cairo_move_to(cr2, tube_x0 + eoffx, windowHeight - tube_y0); cairo_line_to(cr2, tube_x2 + eoffx, windowHeight - tube_y2); cairo_stroke (cr2); // draw the bright spot, high intensity - cairo_set_line_width (cr2, 3); - cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); + cairo_set_line_width (cr2, 3 + 2 * defocussed); + bsc = (BRIGHT_SPOT_COLOR * intensity) / 100; + cairo_set_source_rgb(cr2, bsc, bsc, bsc); cairo_move_to(cr2, tube_x0 + eoffx, windowHeight - tube_y0); cairo_line_to(cr2, tube_x2 + eoffx, windowHeight - tube_y2); cairo_stroke(cr2); diff --git a/tube.h b/tube.h index 3329f46..bc0aeb4 100644 --- a/tube.h +++ b/tube.h @@ -20,6 +20,10 @@ extern long refreshCount; extern int showCursor; // set of cursor is shown (not set in graphics mode) extern int isBrightSpot; // set if there is currently a bright spot on the screen +extern int specialPlotMode; +extern int defocussed; +extern int intensity; + extern int plotPointMode; extern int writeThroughMode; diff --git a/versions.txt b/versions.txt index f40a1af..bff9d9f 100644 --- a/versions.txt +++ b/versions.txt @@ -1,12 +1,13 @@ -Next version t.b.b -================== +Next version t.b.d. +=================== New features -- variable character size, set with ESC sequencies, reset if screen is cleared -- incremental plot implemented +- variable character size +- incremental plot mode +- ARDS mode +- special plot mode with greyscale Bug fixes - vertical position of characters corrected - full implementation of Tektronix 4014 decoder -Appearance: Version 1.1 April 12, 2019 ==========================