From 612d666d5437f30dec7f3d265aa6b7c4f9da041c Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 25 Feb 2012 17:42:08 +0100 Subject: kbdfs: cleanup --- sys/src/cmd/aux/kbdfs/kbdfs.c | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/sys/src/cmd/aux/kbdfs/kbdfs.c b/sys/src/cmd/aux/kbdfs/kbdfs.c index 2ffa2c72e..6f110d88d 100644 --- a/sys/src/cmd/aux/kbdfs/kbdfs.c +++ b/sys/src/cmd/aux/kbdfs/kbdfs.c @@ -29,9 +29,8 @@ typedef struct Scan Scan; struct Key { int down; - int c; - Rune r; - Rune b; + Rune b; /* button, unshifted key */ + Rune r; /* rune, shifted key */ }; struct Scan { @@ -241,21 +240,21 @@ kbdputsc(Scan *scan, int c) } key.down = (c & 0x80) == 0; - key.c = c & 0x7f; + c &= 0x7f; - if(key.c >= Nscan) + if(c >= Nscan) return; if(scan->esc1) - key.r = kbtabesc1[key.c]; + key.r = kbtabesc1[c]; else if(scan->shift) - key.r = kbtabshift[key.c]; + key.r = kbtabshift[c]; else if(scan->altgr) - key.r = kbtabaltgr[key.c]; + key.r = kbtabaltgr[c]; else if(scan->ctl) - key.r = kbtabctl[key.c]; + key.r = kbtabctl[c]; else - key.r = kbtab[key.c]; + key.r = kbtab[c]; switch(key.r){ case Spec|0x60: @@ -272,7 +271,7 @@ kbdputsc(Scan *scan, int c) if(scan->esc1) key.b = key.r; else - key.b = kbtab[key.c]; + key.b = kbtab[c]; if(scan->caps && key.r<='z' && key.r>='a') key.r += 'A' - 'a'; @@ -363,8 +362,7 @@ utfconv(Rune *r, int n) void keyproc(void *) { - Rune rb[Nscan*2+1]; - int cb[Nscan]; + Rune rb[Nscan+1]; Key key; int i, nb; char *s; @@ -374,19 +372,16 @@ keyproc(void *) nb = 0; while(recv(keychan, &key) > 0){ rb[0] = 0; - for(i=0; iaux == nil){ f->aux = emalloc9p(sizeof(Scan)); @@ -1156,12 +1150,11 @@ fswrite(Req *r) } a = f->aux; /* - * handle ^X forms according to keymap, - * assign base and scancode if any + * handle ^X forms according to keymap and + * assign button. */ for(i=0; ishift && kbtabshift[i] == k.r) || (kbtab[i] == k.r)){ - k.c = i; k.b = kbtab[i]; if(a->shift) k.r = kbtabshift[i]; -- cgit v1.2.3 From 11e38d21c8cd381eb8861b9b0cb7d7f25d68b8b4 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 26 Feb 2012 13:43:50 +0100 Subject: kbdfs: ignoring fake shifts --- sys/src/cmd/aux/kbdfs/kbdfs.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/sys/src/cmd/aux/kbdfs/kbdfs.c b/sys/src/cmd/aux/kbdfs/kbdfs.c index 6f110d88d..58c4e8bba 100644 --- a/sys/src/cmd/aux/kbdfs/kbdfs.c +++ b/sys/src/cmd/aux/kbdfs/kbdfs.c @@ -127,7 +127,7 @@ Rune kbtab[Nscan] = [0x28] '\'', '`', Kshift, '\\', 'z', 'x', 'c', 'v', [0x30] 'b', 'n', 'm', ',', '.', '/', Kshift, '*', [0x38] Kalt, ' ', Kctl, KF|1, KF|2, KF|3, KF|4, KF|5, -[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Knum, Kscroll, '7', +[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Knum, Kscroll,'7', [0x48] '8', '9', '-', '4', '5', '6', '+', '1', [0x50] '2', '3', '0', '.', 0, 0, 0, KF|11, [0x58] KF|12, 0, 0, 0, 0, 0, 0, 0, @@ -147,7 +147,7 @@ Rune kbtabshift[Nscan] = [0x28] '"', '~', Kshift, '|', 'Z', 'X', 'C', 'V', [0x30] 'B', 'N', 'M', '<', '>', '?', Kshift, '*', [0x38] Kalt, ' ', Kctl, KF|1, KF|2, KF|3, KF|4, KF|5, -[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Knum, Kscroll, '7', +[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Knum, Kscroll,'7', [0x48] '8', '9', '-', '4', '5', '6', '+', '1', [0x50] '2', '3', '0', '.', 0, 0, 0, KF|11, [0x58] KF|12, 0, 0, 0, 0, 0, 0, 0, @@ -164,12 +164,12 @@ Rune kbtabesc1[Nscan] = [0x10] 0, 0, 0, 0, 0, 0, 0, 0, [0x18] 0, 0, 0, 0, '\n', Kctl, 0, 0, [0x20] 0, 0, 0, 0, 0, 0, 0, 0, -[0x28] 0, 0, Kshift, 0, 0, 0, 0, 0, +[0x28] 0, 0, 0, 0, 0, 0, 0, 0, [0x30] 0, 0, 0, 0, 0, '/', 0, Kprint, [0x38] Kaltgr, 0, 0, 0, 0, 0, 0, 0, [0x40] 0, 0, 0, 0, 0, 0, Kbreak, Khome, [0x48] Kup, Kpgup, 0, Kleft, 0, Kright, 0, Kend, -[0x50] Kdown, Kpgdown, Kins, Kdel, 0, 0, 0, 0, +[0x50] Kdown, Kpgdown,Kins, Kdel, 0, 0, 0, 0, [0x58] 0, 0, 0, 0, 0, 0, 0, 0, [0x60] 0, 0, 0, 0, 0, 0, 0, 0, [0x68] 0, 0, 0, 0, 0, 0, 0, 0, @@ -189,7 +189,7 @@ Rune kbtabaltgr[Nscan] = [0x38] Kaltgr, 0, 0, 0, 0, 0, 0, 0, [0x40] 0, 0, 0, 0, 0, 0, Kbreak, Khome, [0x48] Kup, Kpgup, 0, Kleft, 0, Kright, 0, Kend, -[0x50] Kdown, Kpgdown, Kins, Kdel, 0, 0, 0, 0, +[0x50] Kdown, Kpgdown,Kins, Kdel, 0, 0, 0, 0, [0x58] 0, 0, 0, 0, 0, 0, 0, 0, [0x60] 0, 0, 0, 0, 0, 0, 0, 0, [0x68] 0, 0, 0, 0, 0, 0, 0, 0, @@ -228,15 +228,18 @@ kbdputsc(Scan *scan, int c) Key key; /* - * e0's is the first of a 2 character sequence, e1 the first + * e0's is the first of a 2 character sequence, e1 and e2 the first * of a 3 character sequence (on the safari) */ - if(c == 0xe0){ - scan->esc1 = 1; + if(scan->esc2){ + scan->esc2--; return; - } else if(c == 0xe1){ + } else if(c == 0xe1 || c == 0xe2){ scan->esc2 = 2; return; + } else if(c == 0xe0){ + scan->esc1 = 1; + return; } key.down = (c & 0x80) == 0; @@ -268,7 +271,7 @@ kbdputsc(Scan *scan, int c) break; } - if(scan->esc1) + if(scan->esc1 || kbtab[c] == 0) key.b = key.r; else key.b = kbtab[c]; @@ -279,12 +282,8 @@ kbdputsc(Scan *scan, int c) if(scan->ctl && scan->alt && key.r == Kdel) reboot(); - send(keychan, &key); - - if(scan->esc1) - scan->esc1 = 0; - else if(scan->esc2) - scan->esc2--; + if(key.b) + send(keychan, &key); switch(key.r){ case Kshift: @@ -306,6 +305,7 @@ kbdputsc(Scan *scan, int c) scan->caps ^= key.down; break; } + scan->esc1 = 0; } void @@ -1155,7 +1155,8 @@ fswrite(Req *r) */ for(i=0; ishift && kbtabshift[i] == k.r) || (kbtab[i] == k.r)){ - k.b = kbtab[i]; + if(kbtab[i]) + k.b = kbtab[i]; if(a->shift) k.r = kbtabshift[i]; else if(a->altgr) @@ -1165,7 +1166,8 @@ fswrite(Req *r) break; } } - send(keychan, &k); + if(k.b) + send(keychan, &k); if(k.r == Kshift) a->shift = k.down; else if(k.r == Kaltgr) -- cgit v1.2.3 From cbb83c4fcee19d89d7b4927dcad734af02d24f24 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 26 Feb 2012 20:19:58 +0100 Subject: kbdfs: properly handle zero length write to kbdin --- sys/src/cmd/aux/kbdfs/kbdfs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/src/cmd/aux/kbdfs/kbdfs.c b/sys/src/cmd/aux/kbdfs/kbdfs.c index 58c4e8bba..90e22484b 100644 --- a/sys/src/cmd/aux/kbdfs/kbdfs.c +++ b/sys/src/cmd/aux/kbdfs/kbdfs.c @@ -1114,9 +1114,9 @@ fswrite(Req *r) case Qkbdin: p = r->ifcall.data; n = r->ifcall.count; - if(n <= 0) - n = 0; r->ofcall.count = n; + if(n == 0) + break; if(p[n-1] != 0){ /* * old format as used by bitsy keyboard: -- cgit v1.2.3 From cb3fdfb70fef1a06e902e1993e9f09774acc4238 Mon Sep 17 00:00:00 2001 From: stanley lieber Date: Mon, 27 Feb 2012 20:15:37 -0600 Subject: paint: open existing files for editing --- sys/man/1/paint | 5 ++++- sys/src/cmd/paint.c | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/sys/man/1/paint b/sys/man/1/paint index 54959cb53..27bc0bc7e 100644 --- a/sys/man/1/paint +++ b/sys/man/1/paint @@ -3,7 +3,7 @@ .SH NAME paint \- create image files by drawing with a mouse or other pointing device .SH SYNOPSIS -.B paint +.B paint [file] .SH DESCRIPTION .I Paint provides a window upon which can be drawn lines by moving the cursor while @@ -25,6 +25,9 @@ in the pop-up box and hit enter. .B c Clear the screen. Any unsaved work will be lost. .TP +.B o +Open a bitmap image file for editing. +.TP .B s Save the current screen as a bitmap image. A pop-up box appears suggesting a default filename of diff --git a/sys/src/cmd/paint.c b/sys/src/cmd/paint.c index f09a597c0..46c89608f 100644 --- a/sys/src/cmd/paint.c +++ b/sys/src/cmd/paint.c @@ -10,6 +10,22 @@ eresized(int) sysfatal("resize failed"); } +void +loadimg(char *name) +{ + Image *b; + int fd; + + fd=open(name, OREAD); + if(fd==-1) + sysfatal("can't open file"); + if((b=readimage(display, fd, 0)) == nil) + sysfatal("can't read image"); + draw(screen, screen->r, b, 0, b->r.min); + flushimage(display, 1); + close(fd); +} + /* stolen from mothra */ void screendump(char *name, int full) @@ -35,7 +51,7 @@ screendump(char *name, int full) } void -main() +main(int argc, char *argv[]) { Event e; Point last; @@ -52,6 +68,23 @@ main() einit(Emouse | Ekeyboard); draw(screen, screen->r, display->white, 0, ZP); flushimage(display, 1); + + ARGBEGIN{ + default: + goto Usage; + }ARGEND + switch(argc){ + default: + Usage: + fprint(2, "Usage: [file]\n"); + exits("usage"); + case 0: + break; + case 1: + loadimg(argv[0]); + break; + } + while(1){ switch(event(&e)){ case Emouse: @@ -79,6 +112,11 @@ main() } if(e.kbdc == 'c') draw(screen, screen->r, display->white, 0, ZP); + if(e.kbdc == 'o'){ + if(eenter("Open file", file, sizeof(file), &e.mouse) <= 0) + break; + loadimg(file); + } if(e.kbdc == 'q') exits(nil); if(e.kbdc == 's'){ -- cgit v1.2.3