From 045a1ac38596ed939aab96967ba2138144c60ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=A8Rene=20Richarz?= Date: Fri, 26 Apr 2019 16:29:39 +0200 Subject: [PATCH] GIN mode added and tested --- main.c | 10 +++++-- main.h | 1 + tek4010 | Bin 40816 -> 45328 bytes tek4010.c | 78 +++++++++++++++++++++++++++++++++++++++++++++------ tube.c | 22 +++++++++++++-- tube.h | 2 ++ versions.txt | 5 ++++ 7 files changed, 106 insertions(+), 12 deletions(-) diff --git a/main.c b/main.c index da15b86..c720c43 100644 --- a/main.c +++ b/main.c @@ -45,6 +45,7 @@ #include #include "main.h" +#include "tube.h" extern FILE *putKeys; @@ -156,7 +157,7 @@ static void do_drawing(cairo_t *cr, GtkWidget *widget) static void on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { int ch; - // printf("key pressed, state =%04X, keyval=%04X\r\n", event->state, event->keyval); + // printf("key pressed, state =%04X, keyval=%04X, isGinMode = %d\r\n", event->state, event->keyval, isGinMode); if ((event->keyval == 0xFF50) || // "home" key (event->keyval == 0xFF55) || // "page up" key @@ -196,8 +197,13 @@ static void on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_da ch = event->keyval & 0x7F; else return; + + if (isGinMode) { // need to pass key to GIN mode handling, not to child process + isGinMode = ch; + gtk_widget_queue_draw(widget); + } - if (putKeys) + else if (putKeys) putc(ch,putKeys); // pipe key to child process, if stream open } diff --git a/main.h b/main.h index 4ecb85a..89bdcf1 100644 --- a/main.h +++ b/main.h @@ -3,6 +3,7 @@ void tube_init(int argc, char* argv[]); void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first); +void tek4010_clicked(int x, int y); int tube_on_timer_event(); int tube_clicked(int button, int x, int y); void tube_quit(); diff --git a/tek4010 b/tek4010 index 6bb838e7e1eec9bb747537cc16aa6fea92866926..5d72464acfff347ba79b80b69b24a511db996f23 100755 GIT binary patch delta 15702 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 delta 14269 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 diff --git a/tek4010.c b/tek4010.c index aa34fdc..2d01a2d 100755 --- a/tek4010.c +++ b/tek4010.c @@ -62,12 +62,14 @@ // // mode 40 incremental plot mode; is ignored until exit from incremental plot received // mode 50 special point plot mode; not yet implemented +// mode 60 crosshair mode // mode 101 ignore until group separator int mode, savemode; int penDown = 1; extern int leftmargin; +extern FILE *putKeys; static long startPaintTime; static int xh,xl,yh,yl,xy4014; @@ -105,13 +107,65 @@ void tek4010_checkLimits() void tek4010_bell() { - // bell function, delay 0.1 sec + // bell function, delay 0.05 sec tube_u100ResetSeconds(1); usleep(50000); showCursor=0; todo = 0; } +void sendCoordinates() +{ + // send 4 coordinate bytes + putc((tube_x0 >> 5) + 0xa0,putKeys); + putc((tube_x0 & 31) + 0xa0,putKeys); + putc((tube_y0 >> 5) + 0xa0,putKeys); + putc((tube_y0 & 31) + 0xa0,putKeys); +} + +void enqMode() +{ + // activated by sending ESC ENQ + int status; + status = 0xa0; + if (leftmargin == 0) status += 2; + if (mode == 0) status += 4; + putc(status,putKeys); // send status byte + sendCoordinates(); + putc(13 + 128, putKeys); // cr, bit 8 set + // cannot send a EOT here +} + +void ginMode(cairo_t *cr, cairo_t *cr2) +{ + // activated by sending ESC SUB + if (DEBUG) printf("GIN, mode = %d\n", mode); + tube_crosshair(cr, cr2); + mode = 60; + todo = 0; + showCursor = 0; + isGinMode = 1; +} + +void ginSend(int ch) +{ + // user has stoken a key during GIN mode + if (DEBUG) printf("ginSend, ch = %d\n", ch); + putc(ch + 128,putKeys); + sendCoordinates(); + putc(13+128,putKeys); // cr, bit 8 set + // cannot send a EOT here +} + +void tek4010_clicked(int x, int y) +{ + if (DEBUG) printf("Clicked, mode = %d\n", mode); + if (mode == 60) { + tube_x0 = x; + tube_y0 = y; + } +} + void tek4010_escapeCodeHandler(cairo_t *cr, cairo_t *cr2, int ch) // handle escape sequencies, see 4014 user manual, table page G-1 // codes identical for all modes are handled elsewhere @@ -120,8 +174,7 @@ void tek4010_escapeCodeHandler(cairo_t *cr, cairo_t *cr2, int ch) case 0: break; // ignore filler 0 case 5: // ENQ: ask for status and position - // not yet implemented, needs to send 7 bytes - if (DEBUG) printf("ENQ not supported, ignored\n"); + enqMode(); mode = 0; break; case 6: break; @@ -153,8 +206,7 @@ void tek4010_escapeCodeHandler(cairo_t *cr, cairo_t *cr2, int ch) case 23: system("scrot --focussed"); mode= 0; break; case 26: // sub - if (DEBUG) printf("GIN mode not supported, ignored\n"); - mode = 0; + ginMode(cr, cr2); break; // modes 27 and 29 - 31 are identical in all modes @@ -276,7 +328,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) todo = 4 * TODO; // for text speed else todo = TODO; - + do { ch = tube_getInputChar(); @@ -286,7 +338,7 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) if (ch == -1) { if ((mode == 0) && showCursor) tube_doCursor(cr2); - return; // no char available, need to allow for updates + if (mode != 60) return; // no char available, need to allow for updates } if (DEBUG) { @@ -517,7 +569,17 @@ void tek4010_draw(cairo_t *cr, cairo_t *cr2, int first) intensity = intensityTable[ch - 32]; if (DEBUG) printf("defocussed = %d, intensity = %d%%\n", defocussed, intensity); mode = 5; // coordinates follow - break; + break; + case 60:// crosshair mode + if (isGinMode > 1) { // key stroken by user + ginSend(isGinMode); + mode = 0; + todo = 0; + isGinMode = 0; + } + else + ginMode(cr, cr2); + break; case 101: if (DEBUG) printf("Ignore until group separator, ch = %02x\n", ch); if (ch == 29) mode = 1; diff --git a/tube.c b/tube.c index 4b0ed70..8782873 100755 --- a/tube.c +++ b/tube.c @@ -74,6 +74,7 @@ double dashset[] = {2,6,2,2,6,3,3,3,6,6}; int plotPointMode = 0; // plot point mode int writeThroughMode = 0; // write through mode +int isGinMode = 0; // set if GIN mode is active int tube_doClearPersistent; int specialPlotMode = 0; @@ -178,7 +179,7 @@ void tube_init(int argc, char* argv[]) char *argv2[20]; size_t bufsize = 127; int firstArg = 1; - printf("tek4010 version 1.2.5\n"); + printf("tek4010 version 1.2.6\n"); windowName = "Tektronix 4010/4014 emulator"; if ((argc<2) || (argc>19)) { printf("Error:number of arguments\n"); @@ -377,7 +378,12 @@ int tube_clicked(int button, int x, int y) // x and y are the coordinates // if the function returns 1, the window is redrawn by calling applicatin_draw { - return 1; + if (argARDS) return 0; + if (button == 1) { + tek4010_clicked(x, y); + return 1; + } + return 0; } void tube_quit() @@ -534,6 +540,18 @@ void tube_drawPoint(cairo_t *cr, cairo_t *cr2) isBrightSpot = 1; } +void tube_crosshair(cairo_t *cr, cairo_t *cr2) +{ + // printf("crosshair at %d,%d\n", tube_x0, tube_y0); + cairo_set_line_width (cr2, 1); + cairo_set_source_rgb(cr2, 0.0, WRITE_TROUGH_INTENSITY, 0.0); + cairo_move_to(cr2, tube_x0, 0); + cairo_line_to(cr2, tube_x0, windowHeight); + cairo_move_to(cr2, 0, tube_y0); + cairo_line_to(cr2, windowWidth, tube_y0); + cairo_stroke (cr2); +} + void tube_drawVector(cairo_t *cr, cairo_t *cr2) { if (DEBUG) { diff --git a/tube.h b/tube.h index 23b695a..c92ccb0 100644 --- a/tube.h +++ b/tube.h @@ -19,6 +19,7 @@ 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 isGinMode; // set if GIN mode is active extern int specialPlotMode; extern int defocussed; @@ -37,6 +38,7 @@ extern void tube_clearSecond(cairo_t *cr2); extern int tube_isInput(); extern int tube_getInputChar(); extern void tube_emulateDeflectionTime(); +extern void tube_crosshair(cairo_t *cr, cairo_t *cr2); extern void tube_drawVector(cairo_t *cr, cairo_t *cr2); extern void tube_drawCharacter(cairo_t *cr, cairo_t *cr2, char ch); extern void tube_drawPoint(cairo_t *cr, cairo_t *cr2); diff --git a/versions.txt b/versions.txt index 5c38312..9ec28f0 100644 --- a/versions.txt +++ b/versions.txt @@ -1,3 +1,8 @@ +Version 1.2.6 April 26, 2019 +============================ +New features +- GIN mode added, Tek4014 emulation is now complete + Version 1.2.5 April 19, 2019 ============================ Bug fixes