scope

signal visualizer for plan9
git clone git://nsmpr.xyz/scope.git
Log | Files | Refs

commit 902005ab22e18dddf6b58ff1ddda4b0e6c487cde
parent 6c8586171e5f913e3dd1d451d20c7f8a7465a40a
Author: glenda <glenda@9front.local>
Date:   Wed, 25 Nov 2020 21:06:23 +0000

commiting whats here, but somehow menuhit doesnt work

Diffstat:
Mscope.c | 100+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 72 insertions(+), 28 deletions(-)

diff --git a/scope.c b/scope.c @@ -4,16 +4,16 @@ #include <draw.h> #include <mouse.h> #include <cursor.h> -// #include <keyboard.h> +#include <keyboard.h> #define LMAX 1024 #define RBUF 1024 #define DFPS 60 enum { - C_BG = 0xffffffff, + C_BG = 0x3f3f3fff, C_GG = 0x000000ff, - C_FG = 0x000000ff, + C_FG = 0xffff00ff, }; Point P[LMAX]; @@ -24,12 +24,15 @@ struct Readctl { Channel *c; }; -Image *Im, *Ibg, *Igg, *Ifg; +Image *Im, *Ibg, *Igg, *Ifg, *Igrid; Rectangle R; int rh; void (*dlines)(void); + + + void usage(void) { @@ -45,6 +48,27 @@ dclear(void) } void +dgrid(void) +{ + const int div = 8; + int i; + Rectangle r; + Point p; + /* horizontal */ + r =Rect(0,0,rh,1); + for (i = 0; i <= div; i++){ + p = Pt(0, i * (rh-1)/div); + draw(Igrid, rectaddpt(r, p), Igg, 0, ZP); + } + /* vertical */ + r = Rect(0,0,1,rh); + for (i = 0; i <= div; i++){ + p = Pt(i * (rh-1)/div, 0); + draw(Igrid, rectaddpt(r, p), Igg, 0, ZP); + } +} + +void dfade(void) { draw(screen, R, Ibg, Im, ZP); @@ -56,10 +80,10 @@ dXY(void) int i; Point p; for (i = 0; i < LMAX; i++){ - p = addpt(P[i], addpt(R.min, Pt(rh/2, rh/2))); + p = Pt(P[i].x, -P[i].y); + p = addpt(p, addpt(R.min, Pt(rh/2, rh/2))); draw(screen, Rpt(p, addpt(p, Pt(1,1))), Ifg, 0, ZP); } - //poly(screen, P, LMAX, 0, 0, 0, Ifg, ZP); } void @@ -69,9 +93,9 @@ dboth(void) Point p0, p1; for (i = 0; i < LMAX; i++){ p0.x = R.min.x + i * rh / LMAX; - p0.y = R.min.y + rh/4 + P[i].x/2; + p0.y = R.min.y + rh/4 - P[i].x/2; p1.x = p0.x; - p1.y = R.min.y + (3 * rh)/4 + P[i].y/2; + p1.y = R.min.y + (3 * rh)/4 - P[i].y/2; draw(screen, Rpt(p0, addpt(p0, Pt(1,1))), Ifg, 0, ZP); draw(screen, Rpt(p1, addpt(p1, Pt(1,1))), Ifg, 0, ZP); } @@ -85,7 +109,7 @@ dmono(int c) for (i = 0; i < LMAX; i++){ p.x = R.min.x + i * rh / LMAX; p.y = R.min.y + rh/2; - p.y += c ? P[i].x : P[i].y; + p.y += c ? -P[i].x : -P[i].y; draw(screen, Rpt(p, addpt(p, Pt(1,1))), Ifg, 0, ZP); } } @@ -155,16 +179,20 @@ getdrawrect(void) void threadmain(int argc, char **argv) { + long pp; Mousectl *mctl; + Keyboardctl *kctl; + Rune kv; Mouse mv; int rv[2]; Channel *supc; int sv; Readctl *rctl; s16int prv[2]; - - dlines = dXY; + dlines = dXY; + pp = 0; + ARGBEGIN { case 'l': dlines = dleft; @@ -184,12 +212,12 @@ threadmain(int argc, char **argv) if (argc > 0) usage(); if (initdraw(nil, nil, "scope") < 0) sysfatal("initdraw failed: %r"); if ((mctl = initmouse(0, 0)) == nil) sysfatal("initmouse failed: %r"); - + if ((kctl = initkeyboard(0)) == nil) sysfatal("initkeyboard failed: %r"); supc = chancreate(sizeof(int), 0); - Ibg = allocimage(display, Rect(0,0,1,1), RGBA32, 1, C_BG); - Igg = allocimage(display, Rect(0,0,1,1), RGBA32, 1, C_GG); - Ifg = allocimage(display, Rect(0,0,1,1), RGBA32, 1, C_FG); + Ibg = allocimage(display, Rect(0,0,1,1), RGB24, 1, C_BG); + Igg = allocimage(display, Rect(0,0,1,1), RGB24, 1, C_GG); + Ifg = allocimage(display, Rect(0,0,1,1), RGB24, 1, C_FG); Im = allocimage(display, Rect(0,0,1,1), RGBA32, 1, 0xffffff1f); rctl = malloc(sizeof(Readctl)); rctl->c = chancreate(sizeof(s16int) * 2, LMAX); @@ -197,12 +225,20 @@ threadmain(int argc, char **argv) threadcreate(threadupdate, supc, 8 * 1024); proccreate(procread, rctl, 64*1024); + char *menustr[2] = { + "left", + nil, + }; + + Menu menu = {menustr, nil, 0}; + R = getdrawrect(); + Igrid = allocimage(display, Rect(0,0,rh,rh), RGB24, 0, C_BG); + dgrid(); dclear(); - - Alt alts[5] = { - //{0, 0, CHANNOP}, - //{0, 0, CHANNOP}, + flushimage(display, 1); + Alt alts[6] = { + {kctl->c, &kv, CHANRCV}, {mctl->c, &mv, CHANRCV}, {mctl->resizec, rv, CHANRCV}, {supc, &sv, CHANRCV}, @@ -211,23 +247,31 @@ threadmain(int argc, char **argv) }; for(;;){ switch(alt(alts)){ - case 0: /* mouse */ + case 0: /* keyboard */ + if (kv == 'q') threadexitsall(0); + if (kv == 0x7f) threadexitsall(0); break; - case 1: /* resize */ + case 1: /* mouse */ + if (mv.buttons == 1) { + menuhit(1, mctl, &menu, 0); + } + break; + case 2: /* resize */ if(getwindow(display, Refnone) < 0) sysfatal("resize failed: %r"); R = getdrawrect(); + freeimage(Igrid); + Igrid = allocimage(display, Rect(0,0,rh,rh), RGB24, 0, C_BG); + dgrid(); dclear(); - case 2: /* update screen */ - dclear(); + case 3: /* update screen */ + draw(screen, R, Igrid, 0, ZP); dlines(); flushimage(display, 1); break; - case 3: /* read input */ - memmove(P+1, P, sizeof(Point) * (LMAX - 1)); - P[0] = //addpt( - //addpt(Pt(rh/2, rh/2), R.min), - (Pt(prv[0] * rh / 0xffff, prv[1] * rh / 0xffff)); + case 4: /* read input */ + P[pp] = (Pt(prv[0] * rh / 0xffff, prv[1] * rh / 0xffff)); + pp = (pp+1)%LMAX; break; } }