Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Added avatar display |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
c50e5d02db9725a5ea757ed2b80cc8dc |
| User & Date: | bernd 2019-03-19 22:48:59.879 |
Context
|
2019-03-20
| ||
| 13:13 | Markdown viewer update check-in: ea0d5baddd user: bernd tags: trunk | |
|
2019-03-19
| ||
| 22:48 | Added avatar display check-in: c50e5d02db user: bernd tags: trunk | |
|
2019-03-18
| ||
| 22:54 | Improvement in social network display check-in: d9332e3ec1 user: bernd tags: trunk | |
Changes
Changes to dvcs.fs.
| ︙ | ︙ | |||
886 887 888 889 890 891 892 893 894 |
dvcs:dispose-dvcs o> ;
: dvcs-revert ( -- ) \ restore to last revision
dvcs:new-dvcs >o
pull-readin dvcs:oldid$ $@ 2dup dvcs:id$ $!
id>branches co-rest
dvcs:dispose-dvcs o> ;
: hash-in ( addr u -- hash u )
| > > > | > | 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 |
dvcs:dispose-dvcs o> ;
: dvcs-revert ( -- ) \ restore to last revision
dvcs:new-dvcs >o
pull-readin dvcs:oldid$ $@ 2dup dvcs:id$ $!
id>branches co-rest
dvcs:dispose-dvcs o> ;
hash#128 buffer: hash-save
: hash-in ( addr u -- hash u )
2dup >file-hash hash-save hash#128 smove
write-enc-hashed 2drop
hash-save hash#128 ;
: hash-add ( addr u -- )
slurp-file hash-in 2drop ;
: hash-out ( addr u -- )
base85>$ 2dup 2>r read-enc-hashed patch-in$ $@ 2r> hash-85 spit-file ;
\ pull and sync a database
|
| ︙ | ︙ |
Changes to gui.fs.
| ︙ | ︙ | |||
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 |
$0000FFFF color, sf,
$0000FFFF color, sf,
$00FFFFFF color, sf,
: nick[] ( box o:nick -- box )
[: data >o ." clicked on " ke-nick $. cr o> ;] o click[] ;
: show-nick ( o:key -- )
ke-imports @ [ 1 import#provisional lshift ]L and ?EXIT
ke-imports @ >im-color# sfloats { ki }
{{ glue*l imports#rgb-bg ki + sf@ slide-frame dup .button1
{{
{{ \large imports#rgb-fg ki + sf@ to x-color
ke-sk sec@ nip IF \bold ELSE \regular THEN \sans
['] .nick-base $tmp }}text 25%b
ke-pets[] $[]# IF
{{ glue*l $00FF0020 color, slide-frame dup .button3
['] .pet-base $tmp }}text 25%b
}}z
THEN
| > > > > > > > > > > > > > > > > > > > > > > > > > | 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 |
$0000FFFF color, sf,
$0000FFFF color, sf,
$00FFFFFF color, sf,
: nick[] ( box o:nick -- box )
[: data >o ." clicked on " ke-nick $. cr o> ;] o click[] ;
Hash: avatar#
glue new Constant glue*avatar
glue*avatar >o pixelsize# 64 fm* 0e 0g glue-dup hglue-c glue! vglue-c glue! 0glue dglue-c glue! o>
: show-avatar ( addr u -- o )
2dup avatar# #@ nip 0= IF
2dup ?read-enc-hashed
patch-in$ $@ mem>thumb atlas-region 2swap avatar# #!
ELSE 2drop THEN
thumbnail new >o
"avatar" to name$
white# to frame-color
last# cell+ $@ drop to frame#
glue*avatar to tile-glue o o>
>r {{ r> }}v 40%b ;
: ?avatar ( addr u -- o / )
key# #@ IF
cell+ .ke-avatar $@ dup IF
show-avatar
ELSE 2drop THEN
ELSE drop THEN ;
: show-nick ( o:key -- )
ke-imports @ [ 1 import#provisional lshift ]L and ?EXIT
ke-imports @ >im-color# sfloats { ki }
{{ glue*l imports#rgb-bg ki + sf@ slide-frame dup .button1
{{
{{ \large imports#rgb-fg ki + sf@ to x-color
ke-avatar $@ dup IF show-avatar ELSE 2drop THEN
ke-sk sec@ nip IF \bold ELSE \regular THEN \sans
['] .nick-base $tmp }}text 25%b
ke-pets[] $[]# IF
{{ glue*l $00FF0020 color, slide-frame dup .button3
['] .pet-base $tmp }}text 25%b
}}z
THEN
|
| ︙ | ︙ | |||
662 663 664 665 666 667 668 669 |
to post-frame
: display-title { d: prj | ki -- }
prj key>o ?dup-IF .ke-imports @ >im-color# sfloats to ki THEN
{{
glue*l imports#rgb-bg ki + sf@ slide-frame dup .button1
{{
\large imports#rgb-fg ki + sf@ to x-color
| > | | | 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 |
to post-frame
: display-title { d: prj | ki -- }
prj key>o ?dup-IF .ke-imports @ >im-color# sfloats to ki THEN
{{
glue*l imports#rgb-bg ki + sf@ slide-frame dup .button1
{{
prj key| ?avatar
\large imports#rgb-fg ki + sf@ to x-color
prj key| ['] .key-id? $tmp }}text 25%b
glue*ll }}glue
\small prj drop keysize + le-64@ [: .ticks space ;] $tmp }}text 25%b
\normal blackish
}}h box[]
}}z box[] project-vp .child+ ;
: display-file { d: prj -- }
prj display-title
prj [ keysize $10 + ]L safe/string
|
| ︙ | ︙ | |||
737 738 739 740 741 742 743 |
pk startdate@ add-dtms
pk key| last-bubble-pk $! otr to last-otr? text-color!
{{
{{ glue*l }}glue
{{ \sans \normal
{{
glue*l }}glue
| > > > | | | > | | 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 |
pk startdate@ add-dtms
pk key| last-bubble-pk $! otr to last-otr? text-color!
{{
{{ glue*l }}glue
{{ \sans \normal
{{
glue*l }}glue
0 pk key| ?avatar dup IF nip
pk ['] .key-id $tmp 2drop
ELSE drop
\bold pk ['] .key-id $tmp }}text 25%b
>o imports#rgb-fg last-ki >im-color# sfloats + sf@
to text-color o o>
THEN
me? IF swap THEN
\regular
}}h
glue*l imports#rgb-bg last-ki >im-color# sfloats + sf@
slide-frame dup .button2
swap
}}z me? 0= IF chatname-tab THEN
}}v
|
| ︙ | ︙ | |||
910 911 912 913 914 915 916 |
[IFDEF] android also android [THEN]
: chat-edit-enter ( o:edit-w -- )
text$ dup IF do-chat-cmd? 0= IF avalanche-text THEN
ELSE 2drop THEN
64#-1 line-date 64! $lastline $free ;
| | | 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 |
[IFDEF] android also android [THEN]
: chat-edit-enter ( o:edit-w -- )
text$ dup IF do-chat-cmd? 0= IF avalanche-text THEN
ELSE 2drop THEN
64#-1 line-date 64! $lastline $free ;
\ +db click( \ )
\ +db gui( \ )
{{ $80FFFFFF color, pres-frame
{{
{{
glue*l $000000FF color, slide-frame dup .button1
{{
|
| ︙ | ︙ |
Changes to keys.fs.
| ︙ | ︙ | |||
62 63 64 65 66 67 68 |
ke-sksig sec-free
ke-pk $free
ke-nick $free
ke-selfsig $free
ke-chat $free
ke-sigs[] $[]free
ke-pets[] $[]free
| | > | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
ke-sksig sec-free
ke-pk $free
ke-nick $free
ke-selfsig $free
ke-chat $free
ke-sigs[] $[]free
ke-pets[] $[]free
ke-pets# $free
ke-avatar $free ;
\ key class
0
enum key#anon
enum key#user
enum key#group
|
| ︙ | ︙ | |||
358 359 360 361 362 363 364 365 366 367 368 369 370 371 |
." perm: " ke-mask @ .perm cr ;
: .key-rest ( o:key -- o:key )
ke-pk $@ key| .import85
ke-wallet sec@ nip IF
wallet( space ke-wallet sec@ .black85 )else( ." W" )
ELSE wallet( $15 )else( 2 ) spaces THEN
ke-selfsig $@ space .sigdates
ke-groups $@ 2dup .in-groups groups>mask invert
space ke-mask @ and -1 swap .permandor
#tab emit ke-imports @ .imports
space .nick+pet ;
: .key-list ( o:key -- o:key )
ke-imports @ [ 1 import#provisional lshift ]L and ?EXIT
ke-offset 64@ 64>d keypack-all# fm/mod nip 3 .r space
| > | 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 |
." perm: " ke-mask @ .perm cr ;
: .key-rest ( o:key -- o:key )
ke-pk $@ key| .import85
ke-wallet sec@ nip IF
wallet( space ke-wallet sec@ .black85 )else( ." W" )
ELSE wallet( $15 )else( 2 ) spaces THEN
ke-selfsig $@ space .sigdates
ke-avatar $@ dup IF space 85type ELSE 2drop THEN
ke-groups $@ 2dup .in-groups groups>mask invert
space ke-mask @ and -1 swap .permandor
#tab emit ke-imports @ .imports
space .nick+pet ;
: .key-list ( o:key -- o:key )
ke-imports @ [ 1 import#provisional lshift ]L and ?EXIT
ke-offset 64@ 64>d keypack-all# fm/mod nip 3 .r space
|
| ︙ | ︙ |
Changes to kregion.fs.
| ︙ | ︙ | |||
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
\ You should have received a copy of the GNU Affero General Public License
\ along with this program. If not, see <http://www.gnu.org/licenses/>.
2Variable kregion \ current region pointer + remainder
Variable kfree64' \ free list for 64 bytes keys
$4000 Constant /kregion
$20 Constant crypt-align
: kalign ( addr -- addr' )
[ crypt-align 1- ]L + [ crypt-align negate ]L and ;
: kalloc ( len -- addr )
\G allocate a len byte block of non-swappable stuff
kalign >r
r@ /kregion u> !!kr-size!!
kregion 2@ dup r@ u< IF
| > > > > > > | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
\ You should have received a copy of the GNU Affero General Public License
\ along with this program. If not, see <http://www.gnu.org/licenses/>.
2Variable kregion \ current region pointer + remainder
Variable kfree64' \ free list for 64 bytes keys
$4000 Constant /kregion
$10000 Constant /kregion-max \ the usual maximum locked memory is pathetic
$20 Constant crypt-align
0 Value /kregion#
: kalign ( addr -- addr' )
[ crypt-align 1- ]L + [ crypt-align negate ]L and ;
: kalloc ( len -- addr )
\G allocate a len byte block of non-swappable stuff
kalign >r
r@ /kregion u> !!kr-size!!
kregion 2@ dup r@ u< IF
/kregion +to /kregion# 2drop /kregion
\ we have to fall back to alloc+guard if we want more than 64k
/kregion# /kregion-max u> IF alloc+guard ELSE alloc+lock THEN
/kregion 2dup kregion 2! THEN
over swap r> safe/string kregion 2! ( kalloc( ." kalloc: " dup hex. cr ) ;
:noname defers 'image #0. kregion 2! 0 to /kregion# kfree64' off ; is 'image
\ fixed size secrets are assumed to be all 64 bytes long
\ if they are just 32 bytes, the second half is all zero
: kalloc64 ( -- addr )
kfree64' @ ?dup-if dup @ kfree64' ! dup off exit then
64 kalloc ;
|
| ︙ | ︙ |