all repos — taro @ d2a3e71fd656d630a289b5182b56a5085a79a751

mblaze frontend in uxn + crystal

taro-ctl: eliminate puts calls and don't convert from IO::Memory in MblazeProxy; taro-ls: various optimizations, reset scrollbar when changing mbox
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmQmT+AACgkQO3+8IhRO
Y5jDqhAAlx6plPrTBjxOFqO1YQcWc3VNR2prXievDondhA1Sk6PGUn5vDDBhsMa5
kFuZRfyPyig8/fb7BV9M8Oni65fs4HlTvoUJQ5U1HA9SgA32oo/U82zrAHHObDga
UV3E0JjhgsMgD7qRVu2okS+L0CA/qaG4NZZjMjT+o2Dk1O1hrZdDALH2gJqL5kDM
22GnfgKynKs+7CxqR1kw63DgZY+rUmHDd9fNxM4Us++Ovw3R+Lb4yW3wGkDQ08aa
1wHQRx75A9ScPigDRWRGuUoU+ppbxX/V/Y9LhOwAAoDUUX5y1cuM0gqIqoeLRlnL
jUyJRfXXsHDBs4tthnRzimCB6fZNYOC/kFBXpg0EtGJk0VwUYeBDURBRAtv02lql
lqmaFizfrbh+2KZBSeXa1tY45wejYndbxFBjCb7/fd6jW+mJLj9lpI/GKKfrXi+6
5Fv2b7rP5TAMoKAEEIJuTLXynwWjG2yBZok9X/rk1xOVKz/gJd4RJLaHGtJaB0TI
SmFXQKMYZt95ND5ynmhmCp8wfEjCPKeeEbYRJPOr+9D0/sm5CqyUz9zGQv0JnX3u
Q/X1tv2kV9717hVDinMOZ7Z3VflVpJcykXDw7wLZRy1X8kl8QsHPE6LaP4A8Cv72
9vDedhR1LDs8mYsECcZ4uk/B6PkKKrohPF2Dc7nKa3QR869ryeA=
=XtQs
-----END PGP SIGNATURE-----
commit

d2a3e71fd656d630a289b5182b56a5085a79a751

parent

62a4845edda44a9dd497cf4374dedb884d0c3a5c

2 files changed, 69 insertions(+), 71 deletions(-)

jump to
M taro-ctl.crtaro-ctl.cr

@@ -117,9 +117,7 @@ @lifetime

end def write_msg(msgtype : MsgType, data : Slice) - puts "original message size: " + data.size.to_s msgsz = UInt16.new(data.size > MSG_SIZES[msgtype] ? MSG_SIZES[msgtype] : data.size) - puts "truncated message size: " + msgsz.to_s msgtype.value.to_io(@stdin_w, IO::ByteFormat::BigEndian) msgsz.to_io(@stdin_w, IO::ByteFormat::BigEndian)

@@ -163,7 +161,6 @@ @szshort = 0

break end end - puts data return Mesg.new(msgType, data) end

@@ -181,14 +178,13 @@ def self.search_regex

@@search_regex end - private def run_cmd(cmdtxt : String) : String - puts cmdtxt + private def run_cmd(cmdtxt : String) : IO::Memory io = IO::Memory.new Process.run(cmdtxt, shell: true, output: io) - return io.to_s + return io end - def list_mail : String + def list_mail : IO::Memory if @@search_regex != "" return search_mail(@@search_regex, false, false) end

@@ -201,7 +197,7 @@

return run_cmd(cmd) end - def list_mboxes : String + def list_mboxes : IO::Memory cmd = "echo 'INBOX' ; for x in $(mdirs -a #{MBOX_ROOT} | sort | grep -v INBOX); do echo ${x##{MBOX_ROOT}/}; done" return run_cmd(cmd)

@@ -233,7 +229,7 @@ cmd = "mrefile #{range_start}:#{range_end} '#{MBOX_ROOT}/#{to_mbox}'"

run_cmd(cmd) end - def search_mail(query : String, body : Bool, case_sensitive : Bool) : String + def search_mail(query : String, body : Bool, case_sensitive : Bool) : IO::Memory query = query.gsub("'", "\'") @@search_regex = query cmd = "mlist #{MBOX_ROOT}/#{@@mailbox} | magrep #{case_sensitive ? "" : "-i"} #{body ? "/" : "*"}:'#{query}' | msort -dr | uniq | mseq -S | mscan"
M taro-ls.taltaro-ls.tal

@@ -58,7 +58,7 @@ |0000

@refresh [ &mboxes $1 &list $1 &fg $1 &btns $1 &textbox $1 &etc $1 ] @resizing [ $1 &x $2 &y $2 &dx $2 &dy $2 ] -@decoding [ $1 &msg_type $1 &counting $1 &count $2 &processed $2 ] +@decoding [ $1 &msg_type $1 &counting $1 &count $1 &count2 $1 &processed $2 ] @textbox [ &mode $1 &len $1 &cursor $1 &msg $2 &searching $1 ] @mboxes [ &bytes $2 &data $2 &len $2 &offset $2 &elem_offset $1 &top $2 &height $1 &select_index $2 &select_len $2

@@ -75,7 +75,7 @@ |0100 ( -> )

;metadata #06 DEO2 - ( theme ) + ( default theme ) #028d .System/r DEO2 #0a8d .System/g DEO2 #098d .System/b DEO2

@@ -164,7 +164,7 @@ #02 .decoding/counting STZ

BRK &count_2 - .Console/read DEI .decoding/count INC STZ + .Console/read DEI .decoding/count2 STZ #00 .decoding/counting STZ ( handle empty payload )

@@ -207,7 +207,7 @@ JMP2r

( -== message out ==- ) -@send_get_mbox ( -> ) +@send_get_mbox ( -- ) #01 .Console/write DEO ;selected_mbox strlen SWP .Console/write DEO .Console/write DEO

@@ -216,13 +216,15 @@

#0000 .list/select_index STZ2 #0001 .list/select_len STZ2 #0000 .list/top STZ2 + + .list update_sb_pos #00 .textbox/searching STZ #01 .refresh/etc STZ JMP2r -@send_mark_all_read ( -> ) +@send_mark_all_read ( -- ) MARK_ALL_READ .Console/write DEO #00 .Console/write DEOk DEO

@@ -230,7 +232,7 @@ ( message size is 0, no payload )

JMP2r -@send_search ( -> ) +@send_search ( -- ) SEARCH_MAIL .Console/write DEO ;textbox_text strlen SWP .Console/write DEO .Console/write DEO

@@ -240,7 +242,7 @@ #01 .refresh/etc STZ

JMP2r -@send_refile ( -> ) +@send_refile ( -- ) REFILE_MAIL .Console/write DEO #0004 ;textbox_text strlen ADD2 SWP .Console/write DEO .Console/write DEO

@@ -251,7 +253,7 @@ ;textbox_text send_str

JMP2r -@send_trash ( -> ) +@send_trash ( -- ) TRASH_MAIL .Console/write DEO #0004 SWP .Console/write DEO .Console/write DEO

@@ -261,7 +263,7 @@ SWP .Console/write DEO .Console/write DEO

JMP2r -@send_reader ( -> ) +@send_reader ( -- ) ( reset the mouse state since if a window opens over the uxn window mid-click and steals focus, the click never releases until we click the button again )

@@ -273,7 +275,7 @@ .list LB_SELECT_IDX LDZ2 INC2 SWP .Console/write DEO .Console/write DEO

JMP2r -@send_compose ( -> ) +@send_compose ( -- ) ( reset the mouse state since if a window opens over the uxn window mid-click and steals focus, the click never releases until we click the button again )

@@ -449,6 +451,7 @@ STHkr LB_TOP LDZ2 #0001 SUB2 STHkr LB_TOP STZ2

&no_scroll_up &end + STHrk update_sb_pos ( onchange ) STHr ROT ROT JSR2

@@ -457,7 +460,7 @@ #01 .refresh/list STZ

JMP2r -@handle_textbox ( -> ) +@handle_textbox ( -- ) .Controller/key DEI DUP #00 EQU ,&no_key JCN DUP check_enter_or_esc #01 EQU ,&no_btn JCN

@@ -497,21 +500,21 @@ ( if cursor = len, then just decrement both and add null byte )

.textbox/cursor LDZ .textbox/len LDZ NEQ ,&its_complicated JCN .textbox/cursor LDZ #01 SUB .textbox/cursor STZ .textbox/len LDZ #01 SUB .textbox/len STZ - #00 ;textbox_text .textbox/cursor LDZ #00 SWP ADD2 STA + #00 ;textbox_text #00 .textbox/cursor LDZ ADD2 STA JMP2r &its_complicated ( otherwise loop through characters from cursor to len, and copy them to their location - 1 ) - .textbox/len LDZ #01 ADD .textbox/cursor LDZ &loop EQUk ,&end JCN - DUP #00 SWP ;textbox_text ADD2 LDA STH + .textbox/len LDZ INC .textbox/cursor LDZ &loop EQUk ,&end JCN + #00 OVR ;textbox_text ADD2 LDA STH DUP #01 SUB STHr SWP #00 SWP ;textbox_text ADD2 STA INC ,&loop JMP &end POP2 ( and then decrement counters and set the null byte ) .textbox/cursor LDZ #01 SUB .textbox/cursor STZ .textbox/len LDZ #01 SUB .textbox/len STZ - #00 ;textbox_text .textbox/len LDZ #00 SWP ADD2 STA + #00 ;textbox_text #00 .textbox/len LDZ ADD2 STA JMP2r

@@ -521,9 +524,9 @@ STH

( if cursor = len, then add the charater, increment both counters, and add a null byte ) .textbox/cursor LDZ .textbox/len LDZ NEQ ,&its_complicated JCN STHr - ;textbox_text .textbox/cursor LDZ #00 SWP ADD2 STA + ;textbox_text #00 .textbox/cursor LDZ ADD2 STA .textbox/len LDZk INC SWP STZ - #00 ;textbox_text .textbox/len LDZ #00 SWP ADD2 STA + #00 ;textbox_text #00 .textbox/len LDZ ADD2 STA .textbox/cursor LDZk INC SWP STZ JMP2r

@@ -531,13 +534,13 @@ &its_complicated

( otherwise loop through characters from len to cursor, and copy them to their location + 1 ) .textbox/cursor LDZ #01 SUB .textbox/len LDZ &loop EQUk ,&end JCN - DUP #00 SWP ;textbox_text ADD2 LDA STH + #00 OVR ;textbox_text ADD2 LDA STH DUP INC STHr SWP #00 SWP ;textbox_text ADD2 STA #01 SUB ,&loop JMP &end POP2 STHr ( and put the character at the cursor locaton, then increment the counts ) - ;textbox_text .textbox/cursor LDZ #00 SWP ADD2 STA + ;textbox_text #00 .textbox/cursor LDZ ADD2 STA .textbox/len LDZk INC SWP STZ .textbox/cursor LDZk INC SWP STZ JMP2r

@@ -600,11 +603,9 @@ #01 .refresh/fg STZ

BRK -@mouse_event_buttons ( numBtns -- ) - - STH +@mouse_event_buttons ( numbtns -- ) - STHkr #00 &while EQUk ,&end JCN + STHk #00 &while EQUk ,&end JCN DUP .btn_colors ADD DUP LDZ #01 NEQ ,&continue JCN #01 .refresh/btns STZ

@@ -615,7 +616,7 @@ INC

,&while JMP &end POP2 .Mouse/x DEI2 #0008 LTH2 ,&done JCN - .Mouse/x DEI2 #0008 SUB2 [ STHkr #00 SWP #40 SFT2 #0001 SUB2 ] GTH2 ,&done JCN + .Mouse/x DEI2 #0008 SUB2 [ #00 STHkr #40 SFT2 #0001 SUB2 ] GTH2 ,&done JCN .Mouse/y DEI2 .Screen/height DEI2 #0030 SUB2 LTH2 ,&done JCN .Mouse/y DEI2 .Screen/height DEI2 #0020 SUB2 GTH2 ,&done JCN

@@ -666,7 +667,7 @@ .Mouse/state DEI

JMP2r -@mouse_event_list ( rightclickhanlder* clickhandler* list refresh ypos* multiselect -- ) +@mouse_event_list ( rightclickhanlder* clickhandler* list refresh ypos* multiselect_mask -- ) ,&multi STR ,&y STR2

@@ -721,7 +722,7 @@ POP2

JMP2r -@mouse_select_on_click ( multi ypos list -- ) +@mouse_select_on_click ( multi? ypos* list -- ) STH ,&y STR2

@@ -751,7 +752,7 @@ STHk

( clear the previous selection with null bytes ) #ff #00 &clear_mbox EQUk ,&ready JCN - DUP #00 SWP ;selected_mbox ADD2 #00 ROT ROT STA + #00 OVR ;selected_mbox ADD2 #00 ROT ROT STA INC ,&clear_mbox JMP &ready POP2 ( get position of the current selection )

@@ -778,14 +779,14 @@ send_get_mbox

JMP2r -@enter_search_mode ( -> ) +@enter_search_mode ( -- ) ENTRY_SEARCH reset_textbox ;search_lbl .textbox/msg STZ2 JMP2r -@enter_refile_mode ( -> ) +@enter_refile_mode ( -- ) ENTRY_REFILE reset_textbox ;refile_lbl .textbox/msg STZ2

@@ -816,8 +817,7 @@ JMP2r

@try_scroll_up_mouse ( list -- ) - STH - STHkr LB_LEN LDZ2 #00 STHkr LB_HEIGHT LDZ LTH2 ,&no_scroll_up JCN + STHk LB_LEN LDZ2 #00 STHkr LB_HEIGHT LDZ LTH2 ,&no_scroll_up JCN STHkr LB_TOP LDZ2 #0000 EQU2 ,&no_scroll_up JCN STHkr LB_TOP LDZ2 #0001 SUB2 STHkr LB_TOP STZ2 STHkr update_sb_pos

@@ -828,8 +828,7 @@ JMP2r

@try_scroll_down_mouse ( list -- ) - STH - STHkr LB_LEN LDZ2 #00 STHkr LB_HEIGHT LDZ LTH2 ,&no_scroll_down JCN + STHk LB_LEN LDZ2 #00 STHkr LB_HEIGHT LDZ LTH2 ,&no_scroll_down JCN STHkr LB_TOP LDZ2 #00 STHkr LB_HEIGHT LDZ ADD2 STHkr LB_LEN LDZ2 EQU2 ,&no_scroll_down JCN STHkr LB_TOP LDZ2k INC2 ROT STZ2 STHkr update_sb_pos

@@ -888,7 +887,7 @@ &no_fg

BRK -@draw_search_indicator ( -> ) +@draw_search_indicator ( -- ) .textbox/searching LDZ #00 EQU ,&nothing JCN ;search_indicator #0000 .Screen/height DEI2 #0008 SUB2 #01 draw_str

@@ -900,16 +899,16 @@ ;blank .Screen/addr DEO2

#01 .Screen/sprite DEO JMP2r -@draw_bone ( -> ) +@draw_bone ( -- ) - #0008 .textbox/cursor LDZ #00 SWP #30 SFT2 ADD2 .Screen/x DEO2 + #0008 #00 .textbox/cursor LDZ #30 SFT2 ADD2 .Screen/x DEO2 .Screen/height DEI2 #0018 SUB2 .Screen/y DEO2 ;bone .Screen/addr DEO2 #05 .Screen/sprite DEO JMP2r -@clear_textbox ( -> ) +@clear_textbox ( -- ) ;blank .Screen/addr DEO2 .Screen/width DEI2 #0008 &while EQU2k ,&end JCN

@@ -922,7 +921,7 @@ #0008 ADD2 ,&while JMP &end POP2 POP2

JMP2r -@clear_fg ( -> ) +@clear_fg ( -- ) ;blank .Screen/addr DEO2 .Screen/width DEI2 #0000 &whilex EQU2k ,&endx JCN

@@ -957,7 +956,7 @@ &x $2

&top $2 &height $2 -@draw_resize_handle ( -> ) +@draw_resize_handle ( -- ) .Screen/width DEI2 #0008 SUB2 .Screen/x DEO2 .Screen/height DEI2 #0008 SUB2 .Screen/y DEO2

@@ -976,9 +975,9 @@ JMP2r

@shouldnt_draw_word ( list -- bit ) - DUP LB_OFFSET LDZ2 DUP2 + DUP LB_OFFSET LDZ2 ( above top of view ) - STH2 ROT STHk LB_TOP LDZ2 LTH2 ,&clear_rtn JCN + STH2k ROT STHk LB_TOP LDZ2 LTH2 ,&clear_rtn JCN ( below bottom of view ) STHr DUP LB_TOP LDZ2 ROT LB_HEIGHT LDZ #00 SWP ADD2 #0001 SUB2 STH2r SWP2 GTH2 ,&no_draw JCN

@@ -1003,7 +1002,7 @@ STHr finish_line

JMP2r -@get_entry_color ( list -- colorByte ) +@get_entry_color ( list -- colorbyte ) STHk LB_OFFSET LDZ2 STHkr LB_SELECT_IDX LDZ2

@@ -1035,7 +1034,7 @@ POPr

JMP2r -@draw_listbox ( .list ypos* -- ) +@draw_listbox ( list ypos* -- ) #0000 .Screen/x DEO2 ( ypos ) .Screen/y DEO2

@@ -1068,7 +1067,7 @@ STHkr LB_OFFSET LDZ2 STHr LB_LEN STZ2 POP2 POP2

JMP2r -@draw_cursor ( -> ) +@draw_cursor ( -- ) .Mouse/x DEI2 .Screen/x DEO2 .Mouse/y DEI2 .Screen/y DEO2

@@ -1077,7 +1076,7 @@ #4f .Screen/sprite DEO

JMP2r -@draw_scrollbar ( list ypos -- ) +@draw_scrollbar ( list ypos* -- ) ,&y STR2 STH

@@ -1125,7 +1124,7 @@ LB_TOP LDZ2 ROT SB_STEP LDZ2 DIV2 ROT SB_POS STZ2

JMP2r -@draw_str ( addr x y color -- ) +@draw_str ( addr* x* y* color -- ) STH ( save color ) .Screen/y DEO2 ( set y )

@@ -1170,7 +1169,9 @@

JMP2r @debug_u8 ( byte -- ) + #00 SWP debug_u16 + JMP2r @debug_u16 ( short* -- )

@@ -1192,14 +1193,15 @@ JMP2r

@load_theme ( -- ) - ;theme_file .File0/name DEO2 - #0006 .File0/length DEO2 - ;theme_data .File0/read DEO2 - .File0/success DEI2 #0006 NEQ2 ,&no_theme_file JCN - ;theme_data LDA2 .System/r DEO2 - ;theme_data #0002 ADD2 LDA2 .System/g DEO2 - ;theme_data #0004 ADD2 LDA2 .System/b DEO2 + ;theme_file .File0/name DEO2 + #0006 .File0/length DEO2 + ;theme_data .File0/read DEO2 + .File0/success DEI2 #0006 NEQ2 ,&no_theme_file JCN + ;theme_data/r LDA2 .System/r DEO2 + ;theme_data/g LDA2 .System/g DEO2 + ;theme_data/b LDA2 .System/b DEO2 &no_theme_file + JMP2r @load_font ( -- )

@@ -1220,9 +1222,10 @@ @search_lbl "SEARCHING: 20 "type 20 "query 20 "and 20 "press 20 "{enter}; 20 "{esc} 20 "to 20 "go 20 "back 00

@refile_lbl "REFILING: 20 "type 20 "destination 20 "and 20 "press 20 "{enter}; 20 "{esc} 20 "to 20 "go 20 "back 00 @resize_handle [ e2c2 aa1a 3a02 fe00 ] -@cursor [ f8e0 e090 8804 0000 ] -@scrollbar [ 0707 0707 0707 0707 ] -@blank [ 0000 0000 0000 0000 ] +@cursor [ f8e0 e090 8804 0000 ] +@scrollbar [ 0707 0707 0707 0707 ] +@bone [ e040 4040 4040 40e0 ] +@blank [ 0000 0000 0000 0000 ] @refresh_button [ 0000 0708 1010 1000 0000 e010 3e1c 0800

@@ -1254,17 +1257,16 @@ 0010 107c 1010 0102 0000 0020 5088 1020

0408 191e 1d00 0000 4080 00a8 5000 0000 ] -@bone [ e040 4040 4040 40e0 ] - -@metadata 00 "taro 0a - "v0.2.0 0a +@metadata [ 00 "taro 0a + "v0.2.1 0a "GUI 20 "for 20 "mblaze 0a "Derek 20 "Stevens 20 "<nilix@nilfm.cc> 0a 00 +] @selected_mbox "INBOX 00 $f9 ( default mailbox is INBOX, total space #06 + #f9 = #ff bytes ) @font $300 -@theme_data $6 +@theme_data [ &r $2 &g $2 &b $2 ] @textbox_text $ff @word $ff -@list_data $8000 @mbox_data $1000 +@list_data $8000