From 7e86c01285e50008148bb359c61f64640a812303 Mon Sep 17 00:00:00 2001 From: Yaroslav Kolomiiets Date: Thu, 18 Aug 2016 15:23:32 +0300 Subject: acme: handle Home, End keys --- appl/acme/ecmd.b | 2 +- appl/acme/look.b | 4 ++-- appl/acme/row.b | 2 +- appl/acme/text.b | 34 ++++++++++++++++++++++++---------- appl/acme/text.m | 2 +- appl/acme/util.b | 2 +- appl/acme/wind.b | 2 +- appl/acme/xfid.b | 8 ++++---- dis/acme.dis | Bin 24374 -> 24374 bytes dis/acme/acme.dis | Bin 24374 -> 24374 bytes dis/acme/buff.dis | Bin 3426 -> 3426 bytes dis/acme/col.dis | Bin 9113 -> 9113 bytes dis/acme/dat.dis | Bin 587 -> 587 bytes dis/acme/disk.dis | Bin 1501 -> 1501 bytes dis/acme/ecmd.dis | Bin 15443 -> 15448 bytes dis/acme/edit.dis | Bin 6827 -> 6827 bytes dis/acme/elog.dis | Bin 3064 -> 3064 bytes dis/acme/exec.dis | Bin 19072 -> 19072 bytes dis/acme/file.dis | Bin 3490 -> 3490 bytes dis/acme/frame.dis | Bin 13561 -> 13561 bytes dis/acme/fsys.dis | Bin 9031 -> 9031 bytes dis/acme/graph.dis | Bin 633 -> 633 bytes dis/acme/gui.dis | Bin 1598 -> 1598 bytes dis/acme/look.dis | Bin 9778 -> 9790 bytes dis/acme/regx.dis | Bin 11415 -> 11415 bytes dis/acme/row.dis | Bin 12127 -> 12133 bytes dis/acme/scrl.dis | Bin 1984 -> 1984 bytes dis/acme/text.dis | Bin 19148 -> 19443 bytes dis/acme/time.dis | Bin 804 -> 804 bytes dis/acme/util.dis | Bin 5715 -> 5721 bytes dis/acme/wind.dis | Bin 8655 -> 8660 bytes dis/acme/xfid.dis | Bin 15877 -> 15900 bytes 32 files changed, 35 insertions(+), 21 deletions(-) diff --git a/appl/acme/ecmd.b b/appl/acme/ecmd.b index c31643f1..e05c4e47 100644 --- a/appl/acme/ecmd.b +++ b/appl/acme/ecmd.b @@ -772,7 +772,7 @@ nl_cmd(t: ref Text, cp: ref Cmd): int addr = lineaddr(1, a, 1); } } - t.show(addr.r.q0, addr.r.q1); + t.show(addr.r.q0, addr.r.q1, TRUE); return TRUE; } diff --git a/appl/acme/look.b b/appl/acme/look.b index 1004b803..ca288d0a 100644 --- a/appl/acme/look.b +++ b/appl/acme/look.b @@ -273,7 +273,7 @@ search(ct : ref Text, r : string, n : int) : int } if(n <= nb && s.s[b:b+n] == r[0:n]){ if(ct.w != nil){ - ct.show(q, q+n); + ct.show(q, q+n, TRUE); ct.w.settag(); }else{ ct.q0 = q; @@ -698,7 +698,7 @@ openfile(t : ref Text, e : Expand) : (ref Window, Expand) r.q0 = t.q0; r.q1 = t.q1; } - t.show(r.q0, r.q1); + t.show(r.q0, r.q1, TRUE); t.w.settag(); seltext = t; if(e.jump) diff --git a/appl/acme/row.b b/appl/acme/row.b index 478ec930..5e1a3775 100644 --- a/appl/acme/row.b +++ b/appl/acme/row.b @@ -714,7 +714,7 @@ Row.loadx(row : self ref Row, file : string, initing : int) } if(q0>w.body.file.buf.nc || q1>w.body.file.buf.nc || q0>q1) q0 = q1 = 0; - w.body.show(q0, q1); + w.body.show(q0, q1, TRUE); w.maxlines = min(w.body.frame.nlines, max(w.maxlines, w.body.frame.maxlines)); } b.close(); diff --git a/appl/acme/text.b b/appl/acme/text.b index 953a08ea..32c31ee6 100644 --- a/appl/acme/text.b +++ b/appl/acme/text.b @@ -130,8 +130,10 @@ KF : con 16rF000; Kup : con KF | 16r0E; Kleft : con KF | 16r11; Kright : con KF | 16r12; +Kend : con KF | 16r18; Kdown : con 16r80; + nulltext : Text; newtext() : ref Text @@ -181,7 +183,7 @@ Text.redraw(t : self ref Text, r : Rect, f : ref Draw->Font, b : ref Image, odx if(t.frame.maxlines > 0){ t.reset(); t.columnate(t.w.dlp, t.w.ndl); - t.show(0, 0); + t.show(0, 0, TRUE); } }else{ t.fill(); @@ -712,19 +714,27 @@ Text.typex(t : self ref Text, r : int, echomode : int) q0 = t.backnl(t.org, n); t.setorigin(q0, FALSE); return; + Keyboard->Home => + t.commit(TRUE); + t.show(0, 0, FALSE); + return; + Kend or Keyboard->End => + t.commit(TRUE); + t.show(t.file.buf.nc, t.file.buf.nc, FALSE); + return; Kleft or Keyboard->Left => t.commit(TRUE); if(t.q0 != t.q1) - t.show(t.q0, t.q0); + t.show(t.q0, t.q0, TRUE); else if(t.q0 != 0) - t.show(t.q0-1, t.q0-1); + t.show(t.q0-1, t.q0-1, TRUE); return; Kright or Keyboard->Right => t.commit(TRUE); if(t.q0 != t.q1) - t.show(t.q1, t.q1); + t.show(t.q1, t.q1, TRUE); else if(t.q1 != t.file.buf.nc) - t.show(t.q1+1, t.q1+1); + t.show(t.q1+1, t.q1+1, TRUE); return; } if(t.what == Body){ @@ -737,11 +747,11 @@ Text.typex(t : self ref Text, r : int, echomode : int) exec->cut(t, t, TRUE, TRUE); t.eq0 = ~0; if (r == 16r08 || r == 16r7f){ # erase character : odd if a char then erased - t.show(t.q0, t.q0); + t.show(t.q0, t.q0,TRUE); return; } } - t.show(t.q0, t.q0); + t.show(t.q0, t.q0, TRUE); case(r){ 16r1B => if(t.eq0 != ~0) @@ -1007,17 +1017,21 @@ Text.select(t : self ref Text, double : int) } } -Text.show(t : self ref Text, q0 : int, q1 : int) +Text.show(t : self ref Text, q0 : int, q1 : int, doselect : int) { qe : int; nl : int; q : int; - if(t.what != Body) + if(t.what != Body){ + if(doselect) + t.setselect(q0, q1); return; + } if(t.w!=nil && t.frame.maxlines==0) t.col.grow(t.w, 1, 0); - t.setselect(q0, q1); + if(doselect) + t.setselect(q0, q1); qe = t.org+t.frame.nchars; if(t.org<=q0 && (q0scrdraw(t); w.owner = owner; diff --git a/appl/acme/wind.b b/appl/acme/wind.b index aa4e1950..96b7cb62 100644 --- a/appl/acme/wind.b +++ b/appl/acme/wind.b @@ -267,7 +267,7 @@ Window.undo(w : self ref Window, isundo : int) w.utflastqid = -1; body = w.body; (body.q0, body.q1) = body.file.undo(isundo, body.q0, body.q1); - body.show(body.q0, body.q1); + body.show(body.q0, body.q1, TRUE); f = body.file; for(i=0; inoscroll, but that didn't seem right in practice t.show(min(w.wrselrange.q0, t.file.buf.nc), - min(w.wrselrange.q1, t.file.buf.nc)); + min(w.wrselrange.q1, t.file.buf.nc), TRUE); scrdraw(t); QWconsctl=> w.echomode = EM_NORMAL; @@ -535,7 +535,7 @@ Xfid.write(x : self ref Xfid) if(tq1 >= q0) tq1 += nr; if(!t.w.noscroll) - t.show(tq0, tq1); + t.show(tq0, tq1, TRUE); scrdraw(t); w.settag(); r = nil; @@ -586,7 +586,7 @@ Xfid.write(x : self ref Xfid) } (q0, nr) = t.bsinsert(q0, r, nr, TRUE); if(qid!=QWwrsel && !t.w.noscroll) - t.show(q0+nr, q0+nr); + t.show(q0+nr, q0+nr, TRUE); scrdraw(t); }else t.insert(q0, r, nr, TRUE, 0); @@ -642,7 +642,7 @@ loop : }else if(strncmp(p, "show", 4) == 0){ # show dot t = w.body; - t.show(t.q0, t.q1); + t.show(t.q0, t.q1, TRUE); m = 4; }else if(strncmp(p, "name ", 5) == 0){ # set file name diff --git a/dis/acme.dis b/dis/acme.dis index 2695ae4b..1cecd618 100644 Binary files a/dis/acme.dis and b/dis/acme.dis differ diff --git a/dis/acme/acme.dis b/dis/acme/acme.dis index 2695ae4b..1cecd618 100644 Binary files a/dis/acme/acme.dis and b/dis/acme/acme.dis differ diff --git a/dis/acme/buff.dis b/dis/acme/buff.dis index ab4080fa..b0ce8cd2 100644 Binary files a/dis/acme/buff.dis and b/dis/acme/buff.dis differ diff --git a/dis/acme/col.dis b/dis/acme/col.dis index 13095a98..aa5ef7a9 100644 Binary files a/dis/acme/col.dis and b/dis/acme/col.dis differ diff --git a/dis/acme/dat.dis b/dis/acme/dat.dis index 20c9d895..364d37cc 100644 Binary files a/dis/acme/dat.dis and b/dis/acme/dat.dis differ diff --git a/dis/acme/disk.dis b/dis/acme/disk.dis index a68f0c29..a31cc952 100644 Binary files a/dis/acme/disk.dis and b/dis/acme/disk.dis differ diff --git a/dis/acme/ecmd.dis b/dis/acme/ecmd.dis index 1285f17f..5794e5b3 100644 Binary files a/dis/acme/ecmd.dis and b/dis/acme/ecmd.dis differ diff --git a/dis/acme/edit.dis b/dis/acme/edit.dis index 5fbd24da..e412bf02 100644 Binary files a/dis/acme/edit.dis and b/dis/acme/edit.dis differ diff --git a/dis/acme/elog.dis b/dis/acme/elog.dis index cc7ef681..dee3acd3 100644 Binary files a/dis/acme/elog.dis and b/dis/acme/elog.dis differ diff --git a/dis/acme/exec.dis b/dis/acme/exec.dis index a9e17a78..a7f39e1a 100644 Binary files a/dis/acme/exec.dis and b/dis/acme/exec.dis differ diff --git a/dis/acme/file.dis b/dis/acme/file.dis index 5658d5b7..62e7367b 100644 Binary files a/dis/acme/file.dis and b/dis/acme/file.dis differ diff --git a/dis/acme/frame.dis b/dis/acme/frame.dis index 5f786c4e..2582f867 100644 Binary files a/dis/acme/frame.dis and b/dis/acme/frame.dis differ diff --git a/dis/acme/fsys.dis b/dis/acme/fsys.dis index a7513375..4ccfdaae 100644 Binary files a/dis/acme/fsys.dis and b/dis/acme/fsys.dis differ diff --git a/dis/acme/graph.dis b/dis/acme/graph.dis index af56722c..87949cee 100644 Binary files a/dis/acme/graph.dis and b/dis/acme/graph.dis differ diff --git a/dis/acme/gui.dis b/dis/acme/gui.dis index 04288ef5..90535d6f 100644 Binary files a/dis/acme/gui.dis and b/dis/acme/gui.dis differ diff --git a/dis/acme/look.dis b/dis/acme/look.dis index 7a820e42..1d03b1fd 100644 Binary files a/dis/acme/look.dis and b/dis/acme/look.dis differ diff --git a/dis/acme/regx.dis b/dis/acme/regx.dis index 3d10e557..88e990c8 100644 Binary files a/dis/acme/regx.dis and b/dis/acme/regx.dis differ diff --git a/dis/acme/row.dis b/dis/acme/row.dis index b5165023..5ec6dd27 100644 Binary files a/dis/acme/row.dis and b/dis/acme/row.dis differ diff --git a/dis/acme/scrl.dis b/dis/acme/scrl.dis index 121dfdc2..8f2c2ef2 100644 Binary files a/dis/acme/scrl.dis and b/dis/acme/scrl.dis differ diff --git a/dis/acme/text.dis b/dis/acme/text.dis index 750cd219..ef06f6f2 100644 Binary files a/dis/acme/text.dis and b/dis/acme/text.dis differ diff --git a/dis/acme/time.dis b/dis/acme/time.dis index f422b832..dce289a1 100644 Binary files a/dis/acme/time.dis and b/dis/acme/time.dis differ diff --git a/dis/acme/util.dis b/dis/acme/util.dis index bb157a1a..4fedf6b5 100644 Binary files a/dis/acme/util.dis and b/dis/acme/util.dis differ diff --git a/dis/acme/wind.dis b/dis/acme/wind.dis index aa744258..aacb6c4b 100644 Binary files a/dis/acme/wind.dis and b/dis/acme/wind.dis differ diff --git a/dis/acme/xfid.dis b/dis/acme/xfid.dis index f02bd302..35c96111 100644 Binary files a/dis/acme/xfid.dis and b/dis/acme/xfid.dis differ -- cgit v1.2.3 From d5877ddecc352815bcddca0f1214d6b1d0ca4019 Mon Sep 17 00:00:00 2001 From: Yaroslav Kolomiiets Date: Fri, 4 Nov 2016 13:35:03 +0200 Subject: acme: hande Pgup, Pgdown keys --- appl/acme/text.b | 14 ++++++++++++-- dis/acme/text.dis | Bin 19443 -> 19736 bytes 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/appl/acme/text.b b/appl/acme/text.b index 32c31ee6..0aa0d482 100644 --- a/appl/acme/text.b +++ b/appl/acme/text.b @@ -705,12 +705,22 @@ Text.typex(t : self ref Text, r : int, echomode : int) } return; Kdown or Keyboard->Down => - n = t.frame.maxlines/2; + n = t.frame.maxlines/3; + q0 = t.org+frcharofpt(t.frame, (t.frame.r.min.x, t.frame.r.min.y+n*t.frame.font.height)); + t.setorigin(q0, FALSE); + return; + Keyboard->Pgdown => + n = 2*t.frame.maxlines/3; q0 = t.org+frcharofpt(t.frame, (t.frame.r.min.x, t.frame.r.min.y+n*t.frame.font.height)); t.setorigin(q0, FALSE); return; Kup or Keyboard->Up => - n = t.frame.maxlines/2; + n = t.frame.maxlines/3; + q0 = t.backnl(t.org, n); + t.setorigin(q0, FALSE); + return; + Keyboard->Pgup => + n = 2*t.frame.maxlines/3; q0 = t.backnl(t.org, n); t.setorigin(q0, FALSE); return; diff --git a/dis/acme/text.dis b/dis/acme/text.dis index ef06f6f2..09c28b5d 100644 Binary files a/dis/acme/text.dis and b/dis/acme/text.dis differ -- cgit v1.2.3 From e55a4b3ea53f63053bb15b924dfd15bd49e823a6 Mon Sep 17 00:00:00 2001 From: Yaroslav Kolomiiets Date: Fri, 4 Nov 2016 13:42:07 +0200 Subject: double-up image pool to fit modern resolutions --- emu/port/alloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emu/port/alloc.c b/emu/port/alloc.c index e2206c3f..333f4fa3 100644 --- a/emu/port/alloc.c +++ b/emu/port/alloc.c @@ -50,7 +50,7 @@ struct { { "main", 0, 32*1024*1024, 31, 512*1024, 0, 31*1024*1024 }, { "heap", 1, 32*1024*1024, 31, 512*1024, 0, 31*1024*1024 }, - { "image", 2, 32*1024*1024+256, 31, 4*1024*1024, 1, 31*1024*1024 }, + { "image", 2, 64*1024*1024+256, 31, 4*1024*1024, 1, 63*1024*1024 }, } }; -- cgit v1.2.3 From ddf161d27871e47d85fd56e8403c715af8ce43c8 Mon Sep 17 00:00:00 2001 From: Yaroslav Kolomiiets Date: Fri, 4 Nov 2016 13:43:45 +0200 Subject: allow 21-bit subfont ranges --- libdraw/buildfont.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdraw/buildfont.c b/libdraw/buildfont.c index f86fdc81..ef861a8d 100644 --- a/libdraw/buildfont.c +++ b/libdraw/buildfont.c @@ -70,7 +70,7 @@ buildfont(Display *d, char *buf, char *name) } max = strtol(s, &s, 0); s = skip(s); - if(*s==0 || min>=65536 || max>=65536 || min>max){ + if(*s==0 || min>=Runemax || max>=Runemax || min>max){ kwerrstr("illegal subfont range"); Err3: freefont(fnt); -- cgit v1.2.3 From 39d2105807e5fdd337df2cb2907631b2ba5afad3 Mon Sep 17 00:00:00 2001 From: Yaroslav Kolomiiets Date: Fri, 4 Nov 2016 14:08:41 +0200 Subject: acme: handle ^A, ^E keys --- appl/acme/text.b | 15 +++++++++++++++ dis/acme/text.dis | Bin 19736 -> 20063 bytes 2 files changed, 15 insertions(+) diff --git a/appl/acme/text.b b/appl/acme/text.b index 0aa0d482..7fdce3f3 100644 --- a/appl/acme/text.b +++ b/appl/acme/text.b @@ -746,6 +746,21 @@ Text.typex(t : self ref Text, r : int, echomode : int) else if(t.q1 != t.file.buf.nc) t.show(t.q1+1, t.q1+1, TRUE); return; + 1 => # ^A: beginning of line + t.commit(TRUE); + # go to where ^U would erase, if not already at BOL + nnb = 0; + if(t.q0>0 && t.readc(t.q0-1)!='\n') + nnb = t.bswidth(16r15); + t.show(t.q0-nnb, t.q0-nnb, TRUE); + return; + 5 => # ^E: end of line + t.commit(TRUE); + q0 = t.q0; + while(q0