ref: 2663fd26c74a163a30328f9fecbe8b5f46c977f6
dir: /vdir-tweaks/
diff d57a09f05c237d004770493258c206bbe9916681 uncommitted --- a/icons.h +++ b/icons.h @@ -420,3 +420,181 @@ 0x46, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, }; + +uchar backdata[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; + +uchar refdata[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; --- a/theme.c +++ b/theme.c @@ -21,64 +21,57 @@ return i; } -Theme* -loadtheme(void) +void +loadtheme(Theme *theme) { - Theme *theme; Biobuf *bp; char *s; if(access("/dev/theme", AREAD) < 0) - return 0; + return; bp = Bopen("/dev/theme", OREAD); if(bp == nil) - return 0; - theme = malloc(sizeof *theme); - if(theme == nil){ - Bterm(bp); - return nil; - } + return; for(;;){ s = Brdstr(bp, '\n', 1); if(s == nil) break; if(strncmp(s, "back", 4) == 0) - theme->back = ereadcol(s+5); + theme->back = strtoul(s+5, nil, 16); else if(strncmp(s, "high", 4) == 0) - theme->high = ereadcol(s+5); + theme->high = strtoul(s+5, nil, 16); else if(strncmp(s, "border", 6) == 0) - theme->border = ereadcol(s+7); + theme->border = strtoul(s+7, nil, 16); else if(strncmp(s, "text", 4) == 0) - theme->text = ereadcol(s+5); + theme->text = strtoul(s+5, nil, 16); else if(strncmp(s, "htext", 5) == 0) - theme->htext = ereadcol(s+6); + theme->htext = strtoul(s+6, nil, 16); else if(strncmp(s, "title", 5) == 0) - theme->title = ereadcol(s+6); + theme->title = strtoul(s+6, nil, 16); else if(strncmp(s, "ltitle", 6) == 0) - theme->ltitle = ereadcol(s+7); + theme->ltitle = strtoul(s+7, nil, 16); else if(strncmp(s, "hold", 4) == 0) - theme->hold = ereadcol(s+5); + theme->hold = strtoul(s+5, nil, 16); else if(strncmp(s, "lhold", 5) == 0) - theme->lhold = ereadcol(s+6); + theme->lhold = strtoul(s+6, nil, 16); else if(strncmp(s, "palehold", 8) == 0) - theme->palehold = ereadcol(s+9); + theme->palehold = strtoul(s+9, nil, 16); else if(strncmp(s, "paletext", 8) == 0) - theme->paletext = ereadcol(s+9); + theme->paletext = strtoul(s+9, nil, 16); else if(strncmp(s, "size", 4) == 0) - theme->size = ereadcol(s+5); + theme->size = strtoul(s+5, nil, 16); else if(strncmp(s, "menuback", 8) == 0) - theme->menuback = ereadcol(s+9); + theme->menuback = strtoul(s+9, nil, 16); else if(strncmp(s, "menuhigh", 8) == 0) - theme->menuhigh = ereadcol(s+9); + theme->menuhigh = strtoul(s+9, nil, 16); else if(strncmp(s, "menubord", 8) == 0) - theme->menubord = ereadcol(s+9); + theme->menubord = strtoul(s+9, nil, 16); else if(strncmp(s, "menutext", 8) == 0) - theme->menutext = ereadcol(s+9); + theme->menutext = strtoul(s+9, nil, 16); else if(strncmp(s, "menuhtext", 5) == 0) - theme->menuhtext = ereadcol(s+6); + theme->menuhtext = strtoul(s+6, nil, 16); free(s); } Bterm(bp); - return theme; } --- a/theme.h +++ b/theme.h @@ -2,24 +2,25 @@ struct Theme { - Image *back; - Image *high; - Image *border; - Image *text; - Image *htext; - Image *title; - Image *ltitle; - Image *hold; - Image *lhold; - Image *palehold; - Image *paletext; - Image *size; - Image *menubar; - Image *menuback; - Image *menuhigh; - Image *menubord; - Image *menutext; - Image *menuhtext; + u32int back; + u32int high; + u32int border; + u32int text; + u32int htext; + u32int title; + u32int ltitle; + u32int hold; + u32int lhold; + u32int palehold; + u32int paletext; + u32int size; + u32int menubar; + u32int menuback; + u32int menuhigh; + u32int menubord; + u32int menutext; + u32int menuhtext; }; -Theme* loadtheme(void); +void loadtheme(Theme*); +Image* ereadcol(char*); --- a/vdir.c +++ b/vdir.c @@ -21,6 +21,13 @@ Slowscroll = 10, }; +enum{ + Nback = 64, +}; +char *backlist[Nback]; +int backoff[Nback]; +int backp = -1; + enum { Emouse, @@ -50,6 +57,8 @@ Rectangle homer; Rectangle upr; Rectangle cdr; +Rectangle refr; +Rectangle backr; Rectangle newdirr; Rectangle newfiler; Rectangle viewr; @@ -63,6 +72,8 @@ Image *iup; Image *inewfile; Image *inewfolder; +Image *iref; +Image *iback; Image *toolbg; Image *toolfg; Image *viewbg; @@ -71,6 +82,7 @@ Image *selfg; Image *scrollbg; Image *scrollfg; +Image *fb; Image *high; int sizew; int lineh; @@ -124,8 +136,10 @@ return 1; } +int scrollclamp(int); + void -loaddirs(void) +loaddirs(int fixoff) { int fd, i; vlong m; @@ -138,14 +152,11 @@ if(dirs!=nil) free(dirs); ndirs = dirreadall(fd, &dirs); - if(ndirs > 0) - qsort(dirs, ndirs, sizeof *dirs, (int(*)(void*,void*))dircmp); - else{ - if(ndirs < 0) - showerrstr("Unable to read directory"); - ndirs = 0; - } - offset = 0; + qsort(dirs, ndirs, sizeof *dirs, (int(*)(void*,void*))dircmp); + if(!fixoff) + scrollclamp(offset); + else + offset = 0; close(fd); m = 1; for(i=0; i < ndirs; i++){ @@ -152,14 +163,47 @@ if(dirs[i].length>m) m=dirs[i].length; } - sizew = m == 0 ? 3 : 1+1+log(m)/log(10); + sizew = 1+1+log(m)/log(10); } void +pushback(void) +{ + if(strlen(path) < 1) + return; + if(backp == Nback-1) + memmove(backlist, backlist+1, (Nback-1) * sizeof *backlist); + else + backp++; + if((backlist[backp] = strdup(path)) == nil) + sysfatal("strdup: %r"); + backoff[backp] = offset; +} + +int +back(void) +{ + char *p; + + if(backp < 0) + return 0; + offset = backoff[backp]; + backoff[backp] = 0; + p = backlist[backp]; + backlist[backp] = nil; + backp--; + strecpy(path, path+sizeof path, p); + free(p); + loaddirs(0); + return 1; +} + +void up(void) { + pushback(); snprint(path, sizeof path, abspath(path, "..")); - loaddirs(); + loaddirs(1); } void @@ -167,6 +211,7 @@ { char newpath[4096] = {0}; + pushback(); if(dir == nil) snprint(newpath, sizeof newpath, home); else if(dir[0] == '/') @@ -177,7 +222,7 @@ showerrstr("Directory does not exist"); else snprint(path, sizeof path, abspath(path, newpath)); - loaddirs(); + loaddirs(1); } void @@ -197,7 +242,7 @@ goto cleanup; } close(fd); - loaddirs(); + loaddirs(0); cleanup: free(p); } @@ -219,7 +264,7 @@ goto cleanup; } close(fd); - loaddirs(); + loaddirs(0); cleanup: free(p); } @@ -272,11 +317,11 @@ return; p = smprint("%s/%s", path, d.name); qp = quotestrdup(p); - snprint(cmd, sizeof cmd, "rm -r %s >/dev/null >[2=1]", qp); + snprint(cmd, sizeof cmd, "rm -r \'%s\' >/dev/null >[2=1]", qp); if(doexec(cmd) < 0) showerrstr("Cannot remove file/directory"); else - loaddirs(); + loaddirs(0); free(qp); free(p); } @@ -292,11 +337,11 @@ qfp = quotestrdup(fp); qtp = quotestrdup(tp); - snprint(cmd, sizeof cmd, "mv %s %s >/dev/null >[2=1]", qfp, qtp); + snprint(cmd, sizeof cmd, "mv \'%s\' \'%s\' >/dev/null >[2=1]", qfp, qtp); if(doexec(cmd) < 0) showerrstr("Cannot rename file/directory"); else - loaddirs(); + loaddirs(0); free(qtp); free(qfp); free(tp); @@ -304,7 +349,7 @@ } int -plumbfile(char *path, char *name) +plumbfile(char *path, char *name, int isdir) { char *f; int e; @@ -311,11 +356,14 @@ f = smprint("%s/%s", path, name); e = access(f, 0)==0; - if(e) - plumbsendtext(plumbfd, "vdir", nil, path, name); - else{ + if(e){ + if(isdir) + plumbsendtext(plumbfd, "vdir", nil, nil, f); + else + plumbsendtext(plumbfd, "vdir", nil, path, name); + }else{ alert("File does not exist anymore", nil, mctl, kctl); - loaddirs(); + loaddirs(0); redraw(); } free(f); @@ -325,30 +373,22 @@ void initcolors(void) { - Theme *theme; + Theme theme; - theme = loadtheme(); - if(theme == nil){ - toolbg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0xEFEFEFFF); - toolfg = display->black; - viewbg = display->white; - viewfg = display->black; - selbg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0xEFEFEFFF); - selfg = display->black; - scrollbg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, 0x999999FF); - scrollfg = display->white; - high = allocimage(display, Rect(0,0,1,1), screen->chan, 1, DGreygreen); - }else{ - toolbg = theme->back; - toolfg = theme->text; - viewbg = theme->back; - viewfg = theme->text; - selbg = theme->border; - selfg = theme->text; - scrollbg = theme->border; - scrollfg = theme->back; - high = theme->high; - } + memset(&theme, 0, sizeof theme); + theme.back = 0xEFEFEF; + theme.text = 0; + theme.border = 0x999999; + loadtheme(&theme); + toolbg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.back << 8 | 0xff); + toolfg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.text << 8 | 0xff); + viewbg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.back << 8 | 0xff); + viewfg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.text << 8 | 0xff); + selbg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.border << 8 | 0xff); + selfg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.text << 8 | 0xff); + scrollbg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.border << 8 | 0xff); + scrollfg = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.back << 8 | 0xff); + high = allocimage(display, Rect(0,0,1,1), screen->chan, 1, theme.high << 8 | 0xff); } Image* @@ -379,6 +419,8 @@ iup = loadicon(big, updata, sizeof updata); inewfile = loadicon(big, newfiledata, sizeof newfiledata); inewfolder = loadicon(big, newfolderdata, sizeof newfolderdata); + iref = loadicon(big, refdata, sizeof refdata); + iback = loadicon(big, backdata, sizeof backdata); } char* @@ -399,7 +441,7 @@ p->x += Toolpadding; r = Rect(p->x, p->y, p->x+16, p->y+16); - draw(screen, r, c, i, ZP); + draw(fb, r, c, i, ZP); p->x += 16+Toolpadding; return r; } @@ -412,12 +454,12 @@ s = t; if(*s && (p.x+stringwidth(font, s)) > n){ - p = string(screen, p, i, ZP, font, ellipsis); + p = string(fb, p, i, ZP, font, ellipsis); while (*s && (p.x+stringwidth(font, s)) > n) s++; } for( ; *s; s++){ s += chartorune(&rn, s) - 1; - p = runestringn(screen, p, i, ZP, font, &rn, 1); + p = runestringn(fb, p, i, ZP, font, &rn, 1); } return p; } @@ -440,7 +482,7 @@ p = addpt(viewr.min, Pt(Toolpadding, Toolpadding)); p.y += n*lineh; r = Rpt(p, addpt(p, Pt(Dx(viewr)-2*Toolpadding, lineh))); - draw(screen, r, bg, nil, ZP); + draw(fb, r, bg, nil, ZP); t = mdate(d); snprint(buf, sizeof buf, "%*lld %s", sizew, d.length, t); free(t); @@ -447,12 +489,12 @@ img = (d.qid.type&QTDIR) ? folder : file; p.y -= Padding; dy = (lineh-12)/2; - draw(screen, Rect(p.x, p.y+dy, p.x+12, p.y+dy+12), fg, img, ZP); + draw(fb, Rect(p.x, p.y+dy, p.x+12, p.y+dy+12), fg, img, ZP); p.x += 12+4+Padding; p.y += Padding; p = drawtext(p, fg, d.name, viewr.max.x - stringwidth(font, buf) - 2*Padding - Toolpadding); p.x = viewr.max.x - stringwidth(font, buf) - 2*Padding - Toolpadding; - string(screen, p, fg, ZP, font, buf); + string(fb, p, fg, ZP, font, buf); } void @@ -473,22 +515,25 @@ Point p; int i, h, y; - draw(screen, screen->r, viewbg, nil, ZP); - p = addpt(screen->r.min, Pt(0, Toolpadding)); - draw(screen, toolr, toolbg, nil, ZP); - line(screen, Pt(toolr.min.x, toolr.max.y), toolr.max, 0, 0, 0, toolfg, ZP); + draw(fb, fb->r, viewbg, nil, ZP); + p = Pt(0, Toolpadding); + draw(fb, toolr, toolbg, nil, ZP); + line(fb, Pt(toolr.min.x, toolr.max.y), toolr.max, 0, 0, 0, toolfg, ZP); homer = drawbutton(&p, toolfg, ihome); cdr = drawbutton(&p, toolfg, icd); + backr = drawbutton(&p, toolfg, iback); upr = drawbutton(&p, toolfg, iup); + refr = drawbutton(&p, toolfg, iref); + p.x += Toolpadding; p.y = toolr.min.y + (Toolpadding+16+Toolpadding-font->height)/2; pathr = Rect(p.x, p.y, p.x + stringwidth(font, path), p.y + font->height); - p = drawtext(p, toolfg, path, screen->r.max.x - 2*(Toolpadding+16+Toolpadding)); - p.x = screen->r.max.x - 2*(Toolpadding+16+Toolpadding); - p.y = screen->r.min.y + Toolpadding; + p = drawtext(p, toolfg, path, fb->r.max.x - 2*(Toolpadding+16+Toolpadding)); + p.x = fb->r.max.x - 2*(Toolpadding+16+Toolpadding); + p.y = fb->r.min.y + Toolpadding; newdirr = drawbutton(&p, toolfg, inewfolder); newfiler = drawbutton(&p, toolfg, inewfile); - draw(screen, scrollr, scrollbg, nil, ZP); + draw(fb, scrollr, scrollbg, nil, ZP); if(ndirs>0){ h = ((double)nlines/ndirs)*Dy(scrollr); y = ((double)offset/ndirs)*Dy(scrollr); @@ -495,10 +540,11 @@ scrposr = Rect(scrollr.min.x, scrollr.min.y+y, scrollr.max.x-1, scrollr.min.y+y+h); }else scrposr = Rect(scrollr.min.x, scrollr.min.y, scrollr.max.x-1, scrollr.max.y); - draw(screen, scrposr, scrollfg, nil, ZP); + draw(fb, scrposr, scrollfg, nil, ZP); for(i = 0; i<nlines && offset+i<ndirs; i++){ drawdir(i, 0); } + draw(screen, screen->r, fb, nil, ZP); flushimage(display, 1); } @@ -539,18 +585,42 @@ } void +scroll(Mouse m) +{ + int dy; + + if(m.buttons & 1){ + dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr)); + scrollup(dy); + }else if(m.buttons & 2){ + if(nlines<ndirs){ + offset = scrollclamp((m.xy.y-Dy(scrposr)/2 - (scrollr.min.y)) * ndirs/Dy(scrollr)); + redraw(); + } + }else if(m.buttons & 4){ + dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr)); + scrolldown(dy); + } +} + +void evtresize(void) { if(getwindow(display, Refnone)<0) sysfatal("cannot reattach: %r"); lineh = Padding+font->height+Padding; - toolr = screen->r; + freeimage(fb); + if((fb = allocimage(display, + Rect(0,0,Dx(screen->r),Dy(screen->r)), + screen->chan, 0, DNofill)) == nil) + sysfatal("allocimage: %r"); + toolr = fb->r; toolr.max.y = toolr.min.y+16+2*Toolpadding; - scrollr = screen->r; + scrollr = fb->r; scrollr.min.y = toolr.max.y+1; scrollr.max.x = scrollr.min.x + Scrollwidth; scrollr = insetrect(scrollr, 1); - viewr = screen->r; + viewr = fb->r; viewr.min.x += Scrollwidth; viewr.min.y = toolr.max.y+1; nlines = Dy(viewr)/lineh; @@ -571,17 +641,38 @@ case Kpgdown: scrolldown(nlines); break; + case 'k': + case Kup: + scrollup(1); + break; + case 'j': + case Kdown: + scrolldown(1); + break; case Khome: - cd(nil); + scrollup(ndirs); + break; + case Kend: + scrolldown(ndirs); + break; + case 'r': + case Kesc: + loaddirs(0); redraw(); break; - case Kup: + case 'h': up(); redraw(); break; - case 0x20: - plumbsendtext(plumbfd, "vdir", nil, nil, path); + case 'b': + case Kbs: + back(); + redraw(); break; + case 'l': + case 0x0a: + plumbsendtext(plumbfd, "vdirw", nil, nil, path); + break; } } @@ -590,9 +681,8 @@ { Point p; - p = screen->r.min; - p.x += (Dx(screen->r)-stringwidth(font, text)-4)/2; - p.y += (Dy(screen->r)-font->height-4)/2; + p.x = (Dx(fb->r)-stringwidth(font, text)-4)/2; + p.y = (Dy(fb->r)-font->height-4)/2; return p; } @@ -612,66 +702,36 @@ void evtmouse(Mouse m) { - int n, dy; + int n; Dir d; char buf[4096] = {0}; - if(oldbuttons == 0 && m.buttons != 0 && ptinrect(m.xy, scrollr)) + m.xy = subpt(m.xy, screen->r.min); + if(m.buttons != 0 && (ptinrect(m.xy, scrollr) || scrolling)){ scrolling = 1; - else if(m.buttons == 0) + scroll(m); + }else scrolling = 0; - if(m.buttons&1){ - if(scrolling){ - dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr)); - scrollup(dy); - } - }else if(m.buttons&2){ - if(ptinrect(m.xy, viewr)){ - n = indexat(m.xy); - if(n==-1) - return; - d = dirs[offset+n]; - switch(menuhit(2, mctl, &menu2, nil)){ - case Mdelete: - rm(d); - redraw(); - break; - case Mrename: - snprint(buf, sizeof buf, "%s", d.name); - if(enter("Rename to", buf, sizeof buf, mctl, kctl, nil)>0){ - mv(d.name, buf); - redraw(); - } - break; - } - }else if(scrolling){ - if(nlines<ndirs){ - offset = scrollclamp((m.xy.y - scrollr.min.y) * ndirs/Dy(scrollr)); - redraw(); - } - }else if(ptinrect(m.xy, pathr)){ - loaddirs(); - redraw(); - } - }if((m.buttons&4) && oldbuttons == 0){ - if(scrolling){ - dy = 1+nlines*((double)(m.xy.y - scrollr.min.y)/Dy(scrollr)); - scrolldown(dy); - }else if(ptinrect(m.xy, homer)){ + if(m.buttons&1 && oldbuttons == 0){ + if(ptinrect(m.xy, homer)){ cd(nil); redraw(); }else if(ptinrect(m.xy, upr)){ up(); redraw(); - }else if(ptinrect(m.xy, cdr)){ + }else if(ptinrect(m.xy, refr)){ + loaddirs(0); + redraw(); + }else if(ptinrect(m.xy, backr)){ + if(back()) + redraw(); + }else if(ptinrect(m.xy, cdr) || ptinrect(m.xy, pathr)){ m.xy = cept("Go to directory"); if(enter("Go to directory", buf, sizeof buf, mctl, kctl, nil)>0){ cd(buf); redraw(); } - }else if(ptinrect(m.xy, pathr)){ - plumbsendtext(plumbfd, "vdir", nil, nil, path); }else if(ptinrect(m.xy, newdirr)){ m.xy = cept("Create directory"); if(enter("Create directory", buf, sizeof buf, mctl, kctl, nil)>0){ @@ -692,11 +752,40 @@ if(d.qid.type & QTDIR){ cd(d.name); redraw(); - }else{ - if(plumbfile(path, d.name)) - flash(n); } } + }else if(m.buttons&2 && oldbuttons == 0){ + if(ptinrect(m.xy, viewr)){ + n = indexat(m.xy); + if(n==-1) + return; + d = dirs[offset+n]; + menu2.lasthit = 0; + switch(menuhit(2, mctl, &menu2, nil)){ + case Mdelete: + rm(d); + redraw(); + break; + case Mrename: + snprint(buf, sizeof buf, "%s", d.name); + if(enter("Rename to", buf, sizeof buf, mctl, kctl, nil)>0){ + mv(d.name, buf); + redraw(); + } + break; + } + } + }if((m.buttons&4) && oldbuttons == 0){ + if(ptinrect(m.xy, pathr)){ + plumbsendtext(plumbfd, "vdirw", nil, nil, path); + }else if(ptinrect(m.xy, viewr)){ + n = indexat(m.xy); + if(n==-1) + return; + d = dirs[offset+n]; + if(plumbfile(path, d.name, d.qid.type & QTDIR)) + flash(n); + } }else if(m.buttons&8) scrollup(Slowscroll); else if(m.buttons&16) @@ -795,7 +884,7 @@ alts[Eplumb].c = chancreate(sizeof(d), 1); proccreate(plumbdir, alts[Eplumb].c, 4096); readhome(); - loaddirs(); + loaddirs(1); initcolors(); initimages(); evtresize();