From 3f9ef54a7f1ceba78d3637f43df0ed2db9c26e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=A8Rene=20Richarz?= <¨rene.richarz@bluewin.ch¨> Date: Tue, 9 Apr 2019 10:57:49 +0200 Subject: [PATCH] version 1.01, see versions.txt --- README.md | 5 +++- demo.sh | 2 +- tek4010 | Bin 34656 -> 34756 bytes tek4010.c | 73 ++++++++++++++++++++++++++++++++------------------- versions.txt | 12 +++++++++ 5 files changed, 63 insertions(+), 29 deletions(-) create mode 100644 versions.txt diff --git a/README.md b/README.md index 2de06f9..c4b01b5 100644 --- a/README.md +++ b/README.md @@ -238,7 +238,7 @@ As this software is still in beta test, there will be problems. If everything works properly for you, but your graphics application produces garbage on the tek4010 emulator, you can send me your data as follows: On a historical Unix system, type - your_graphics_program > captured_data + your_graphics_program > captured_data.plt I don't know how this can be done on other operating systems. You can then mail your captured_data file together with a description of the problem to rricharz77@gmail.com. @@ -270,4 +270,7 @@ If you want to compile the project, you need to install "libgtk-3-dev": There is a make file in the repo. +**Version** +See [versions.txt](versions.txt) + diff --git a/demo.sh b/demo.sh index c1506c3..aab44b9 100755 --- a/demo.sh +++ b/demo.sh @@ -20,7 +20,7 @@ cat pltfiles/00README.txt wait5s wait5s -cat captured_data +cat dodekagon.plt wait5s diff --git a/tek4010 b/tek4010 index d08336f9d6bf03ebbec33dddac66bea2cbb2cb84..cfa7f49a9c4495ed5a0d929b0c89c720a65bfbd8 100755 GIT binary patch delta 11033 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

7+#UD|P&8 z7YKB_Ruw#|6F8*7Hgw_*4WhQ;e#b!ngUeNLXti!J9@OnBcx1b(Xm;p??EwzL~(AJs(7U&MA3k#I_8W>$t4W;xQ>&aJxz zGt230>#R9q2rs|?Z+C93E?-%`eP{W$YFyE%a$D)1N2a#*)LxOKbNqt?u~TR-z_sej z1G59@C=pc5*l8Z~c&xwtFR48Dal1bq-Fn(~JZ_P28+-hTN9NkXa6iJJ-a?}3r$s>i cibXZ~Ss!NXBA@f5J(^b delta 10737 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 { printf("Error:number of arguments\n"); exit(1); @@ -259,7 +268,7 @@ void tek4010_init(int argc, char* argv[]) exit(1); } - characterInterval = 80000 / argBaud; // in 100 usecs + characterInterval = 100000 / argBaud; // in 100 usecs, assuming 1 start and 1 stop bit. if (DEBUG) printf("character_interval = %0.1f msec\n",(double)characterInterval/10.0); @@ -407,7 +416,7 @@ int checkExitFromGraphics(int ch) void doCursor(cairo_t *cr2) { - cairo_set_source_rgb(cr2, 0, 0.8, 0); + cairo_set_source_rgb(cr2, 0, CURSOR_INTENSITY, 0); cairo_set_line_width (cr2, 1); cairo_rectangle(cr2, x0 + eoffx, windowHeight - y0 - vDotsPerChar + 8, hDotsPerChar - 3, vDotsPerChar - 3); @@ -419,14 +428,16 @@ void clearPersistent(cairo_t *cr, cairo_t *cr2) // clear the persistant surface // flash using the second surface { - cairo_set_source_rgb(cr, 0, 0, 0); + cairo_set_source_rgb(cr, BLACK_COLOR); cairo_paint(cr); globalClearPersistent = 0; x0 = 0; y0 = windowHeight - vDotsPerChar; + x2 = x0; + y2 = y0; leftmargin = 0; - cairo_set_source_rgb(cr, 0, 0.7, 0); - cairo_set_source_rgb(cr2, 0.1, 1, 0.1); + cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); + cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); cairo_paint(cr2); isBrightSpot = 1; plotPointMode = 0; @@ -479,36 +490,30 @@ void drawVector(cairo_t *cr, cairo_t *cr2) if ((x2 == x0) && (y2 == y0)) x0++; // cairo cannot draw a dot if (writeThroughMode) { cairo_set_line_width (cr2, 2); - cairo_set_source_rgb(cr2, 0.0, 1.0, 0.0); + cairo_set_source_rgb(cr2, 0.0, WRITE_TROUGH_INTENSITY, 0.0); cairo_move_to(cr2, x0 + eoffx, windowHeight - y0); cairo_line_to(cr2, x2 + eoffx, windowHeight - y2); cairo_stroke (cr2); } else { + // draw the actual vector on permanent surface cairo_set_line_width (cr2, 1); tek4010_line_type(cr, cr2, ltype); cairo_move_to(cr, x0 + eoffx, windowHeight - y0); cairo_line_to(cr, x2 + eoffx, windowHeight - y2); cairo_stroke (cr); - //draw the bright spot, lower intensity - cairo_set_line_width (cr2, 9); - cairo_set_source_rgb(cr2, 0.1, 0.3, 0.1); - cairo_move_to(cr2, x0 + eoffx, windowHeight - y0); - cairo_line_to(cr2, x2 + eoffx, windowHeight - y2); - cairo_stroke (cr2); - - //draw the bright spot, medium intensity + //draw the bright spot, half intensity cairo_set_line_width (cr2, 6); - cairo_set_source_rgb(cr2, 0.3, 0.6, 0.3); + cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR_HALF); cairo_move_to(cr2, x0 + eoffx, windowHeight - y0); cairo_line_to(cr2, x2 + eoffx, windowHeight - y2); cairo_stroke (cr2); - // draw the bright spot, higher intensity - cairo_set_line_width (cr2, 4); - cairo_set_source_rgb(cr2, 1, 1, 1); + // draw the bright spot, high intensity + cairo_set_line_width (cr2, 3); + cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); cairo_move_to(cr2, x0 + eoffx, windowHeight - y0); cairo_line_to(cr2, x2 + eoffx, windowHeight - y2); cairo_stroke(cr2); @@ -608,6 +613,18 @@ void checkLimits() if (y0 > (windowHeight - vDotsPerChar)) y0 = windowHeight - vDotsPerChar; } +void emulateDeflectionTime() +{ + // find length of longer component + int l = x2 - x0; + if ((x0-x2) > l) l = x0 - x2; + if ((y2-y0) > l) l = y2 - y0; + if ((y0-y2) > l) l = y0 - y2; + if (l > 300) { // the 300 accounts for other overheads + usleep((l - 300) * 2); // roughly 2 usec per dot + } +} + void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) // draw onto the main window using cairo // width is the actual width of the main window @@ -646,7 +663,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) // printf("Refresh interval: %d\n",refresh_interval); } - long startPaintTime = mSeconds(); // start to measure time for this draw operation + startPaintTime = mSeconds(); // start to measure time for this draw operation showCursor = 1; isBrightSpot = 0; @@ -661,7 +678,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST); cairo_set_line_width (cr, 1); - cairo_set_source_rgb(cr, 0, 0.7, 0); + cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); cairo_select_font_face(cr, "Monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_select_font_face(cr2, "Monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); @@ -808,8 +825,9 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) } else x0 = xh + xl; mode++; + emulateDeflectionTime(); if (DEBUG) printf("setting xl to %d\n", xl); - if (DEBUG) printf("******************************************** Moving to (%d,%d)\n",x0,y0); + if (DEBUG) printf("******************************************** Moving to (%d,%d)\n",x0,y0); break; case 5: if (ch == 29) { if (DEBUG) printf("setting mode to 1\n"); @@ -843,7 +861,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) if (plotPointMode>0.0) { // draw the point - cairo_set_source_rgb(cr, 0, 7, 0); + cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); cairo_move_to(cr, x2 + eoffx, windowHeight - y2); cairo_line_to(cr, x2 + 1 + eoffx, windowHeight - y2); cairo_stroke (cr); @@ -856,7 +874,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) // draw the bright spot, higher intensity cairo_set_line_width (cr2, 0.1); - cairo_set_source_rgb(cr2, 1, 1, 1); + cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); cairo_arc(cr2, x2 + eoffx, windowHeight - y2, 2, 0, PI2); cairo_fill(cr2); @@ -870,7 +888,8 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) } else { - cairo_set_source_rgb(cr, 0, 0.7, 0); + cairo_set_source_rgb(cr, 0, WRITE_TROUGH_INTENSITY, 0); + emulateDeflectionTime(); drawVector(cr,cr2); todo--; @@ -945,19 +964,19 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) s[1] = 0; if (writeThroughMode) { // draw the write-through character - cairo_set_source_rgb(cr2, 0, 0.7, 0); + cairo_set_source_rgb(cr2, 0, WRITE_TROUGH_INTENSITY, 0); cairo_move_to(cr2, x0 + eoffx, windowHeight - y0 + 4); cairo_show_text(cr2, s); } else { // draw the character - cairo_set_source_rgb(cr, 0, 0.7, 0); + cairo_set_source_rgb(cr, 0, NORMAL_INTENSITY, 0); cairo_move_to(cr, x0 + eoffx, windowHeight - y0 + 4); cairo_show_text(cr, s); // draw the bright spot - cairo_set_source_rgb(cr2, 1, 1, 1); + cairo_set_source_rgb(cr2, BRIGHT_SPOT_COLOR); cairo_move_to(cr2, x0 + eoffx, windowHeight - y0 + 4); cairo_show_text(cr2, s); } diff --git a/versions.txt b/versions.txt new file mode 100644 index 0000000..5a3c860 --- /dev/null +++ b/versions.txt @@ -0,0 +1,12 @@ +Version 1.01 April 9, 2019 +========================== +Phase: beta test +New features: +- Baud rate emulation accounts for 1 start and 1 stop bit +- Deflection time emulation added +- Reduced intensity of write-through mode +- Added dark green background caused by flood gun +- Added version number on console +- Added versions.txt +Bug fixes: +- fixed demo.sh to display dodekagon.plt instead of captured_data \ No newline at end of file