0000: 5c 20 6e 65 74 32 6f 20 47 55 49 0a 0a 5c 20 43 \ net2o GUI..\ C
0010: 6f 70 79 72 69 67 68 74 20 28 43 29 20 32 30 31 opyright (C) 201
0020: 38 20 20 20 42 65 72 6e 64 20 50 61 79 73 61 6e 8 Bernd Paysan
0030: 0a 0a 5c 20 54 68 69 73 20 70 72 6f 67 72 61 6d ..\ This program
0040: 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 is free softwar
0050: 65 3a 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 e: you can redis
0060: 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f tribute it and/o
0070: 72 20 6d 6f 64 69 66 79 0a 5c 20 69 74 20 75 6e r modify.\ it un
0080: 64 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 der the terms of
0090: 20 74 68 65 20 47 4e 55 20 41 66 66 65 72 6f 20 the GNU Affero
00a0: 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c General Public L
00b0: 69 63 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 icense as publis
00c0: 68 65 64 20 62 79 0a 5c 20 74 68 65 20 46 72 65 hed by.\ the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
00e0: 61 74 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 ation, either ve
00f0: 72 73 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c rsion 3 of the L
0100: 69 63 65 6e 73 65 2c 20 6f 72 0a 5c 20 28 61 74 icense, or.\ (at
0110: 20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e your option) an
0120: 79 20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e y later version.
0130: 0a 0a 5c 20 54 68 69 73 20 70 72 6f 67 72 61 6d ..\ This program
0140: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20 is distributed
0150: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74 in the hope that
0160: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66 it will be usef
0170: 75 6c 2c 0a 5c 20 62 75 74 20 57 49 54 48 4f 55 ul,.\ but WITHOU
0180: 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 T ANY WARRANTY;
0190: 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 without even the
01a0: 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e 74 implied warrant
01b0: 79 20 6f 66 0a 5c 20 4d 45 52 43 48 41 4e 54 41 y of.\ MERCHANTA
01c0: 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 53 BILITY or FITNES
01d0: 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c S FOR A PARTICUL
01e0: 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53 65 65 AR PURPOSE. See
01f0: 20 74 68 65 0a 5c 20 47 4e 55 20 41 66 66 65 72 the.\ GNU Affer
0200: 6f 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 o General Public
0210: 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 License for mor
0220: 65 20 64 65 74 61 69 6c 73 2e 0a 0a 5c 20 59 6f e details...\ Yo
0230: 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 u should have re
0240: 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 ceived a copy of
0250: 20 74 68 65 20 47 4e 55 20 41 66 66 65 72 6f 20 the GNU Affero
0260: 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c General Public L
0270: 69 63 65 6e 73 65 0a 5c 20 61 6c 6f 6e 67 20 77 icense.\ along w
0280: 69 74 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d ith this program
0290: 2e 20 20 49 66 20 6e 6f 74 2c 20 73 65 65 20 3c . If not, see <
02a0: 68 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f http://www.gnu.o
02b0: 72 67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a rg/licenses/>...
02c0: 72 65 71 75 69 72 65 20 6d 69 6e 6f 73 32 2f 77 require minos2/w
02d0: 69 64 67 65 74 73 2e 66 73 0a 0a 61 6c 73 6f 20 idgets.fs..also
02e0: 6d 69 6e 6f 73 0a 0a 63 74 78 20 30 3d 20 5b 49 minos..ctx 0= [I
02f0: 46 5d 20 20 77 69 6e 64 6f 77 2d 69 6e 69 74 20 F] window-init
0300: 20 5b 54 48 45 4e 5d 0a 0a 72 65 71 75 69 72 65 [THEN]..require
0310: 20 6d 69 6e 6f 73 32 2f 66 6f 6e 74 2d 73 74 79 minos2/font-sty
0320: 6c 65 2e 66 73 0a 0a 3a 20 73 6c 69 64 65 2d 66 le.fs..: slide-f
0330: 72 61 6d 65 20 28 20 67 6c 75 65 20 63 6f 6c 6f rame ( glue colo
0340: 72 20 2d 2d 20 6f 20 29 0a 20 20 20 20 66 6f 6e r -- o ). fon
0350: 74 2d 73 69 7a 65 23 20 37 30 25 20 66 2a 20 7d t-size# 70% f* }
0360: 7d 66 72 61 6d 65 20 3b 0a 3a 20 62 61 72 2d 66 }frame ;.: bar-f
0370: 72 61 6d 65 20 28 20 67 6c 75 65 20 63 6f 6c 6f rame ( glue colo
0380: 72 20 2d 2d 20 6f 20 29 0a 20 20 20 20 66 6f 6e r -- o ). fon
0390: 74 2d 73 69 7a 65 23 20 32 30 25 20 66 2a 20 7d t-size# 20% f* }
03a0: 7d 66 72 61 6d 65 20 64 75 70 20 2e 62 75 74 74 }frame dup .butt
03b0: 6f 6e 33 20 3b 0a 3a 20 75 70 64 61 74 65 2d 73 on3 ;.: update-s
03c0: 69 7a 65 23 20 28 20 2d 2d 20 29 0a 20 20 20 20 ize# ( -- ).
03d0: 73 63 72 65 65 6e 2d 70 77 68 20 6d 61 78 20 73 screen-pwh max s
03e0: 3e 66 0a 20 20 20 20 64 65 66 61 75 6c 74 2d 64 >f. default-d
03f0: 69 61 67 20 73 63 72 65 65 6e 2d 64 69 61 67 20 iag screen-diag
0400: 66 2f 20 66 73 71 72 74 20 64 65 66 61 75 6c 74 f/ fsqrt default
0410: 2d 73 63 61 6c 65 20 66 2a 20 31 2f 66 20 23 34 -scale f* 1/f #4
0420: 38 20 66 6d 2a 0a 20 20 20 20 66 2f 20 66 72 6f 8 fm*. f/ fro
0430: 75 6e 64 20 74 6f 20 66 6f 6e 74 2d 73 69 7a 65 und to font-size
0440: 23 0a 20 20 20 20 66 6f 6e 74 2d 73 69 7a 65 23 #. font-size#
0450: 20 31 33 33 25 20 66 2a 20 66 72 6f 75 6e 64 20 133% f* fround
0460: 74 6f 20 62 61 73 65 6c 69 6e 65 23 0a 20 20 20 to baseline#.
0470: 20 66 6f 6e 74 2d 73 69 7a 65 23 20 33 32 65 20 font-size# 32e
0480: 66 2f 20 74 6f 20 70 69 78 65 6c 73 69 7a 65 23 f/ to pixelsize#
0490: 20 3b 0a 0a 75 70 64 61 74 65 2d 73 69 7a 65 23 ;..update-size#
04a0: 0a 0a 72 65 71 75 69 72 65 20 6d 69 6e 6f 73 32 ..require minos2
04b0: 2f 74 65 78 74 2d 73 74 79 6c 65 2e 66 73 0a 72 /text-style.fs.r
04c0: 65 71 75 69 72 65 20 6d 69 6e 6f 73 32 2f 6d 64 equire minos2/md
04d0: 2d 76 69 65 77 65 72 2e 66 73 0a 0a 67 6c 75 65 -viewer.fs..glue
04e0: 20 6e 65 77 20 43 6f 6e 73 74 61 6e 74 20 67 6c new Constant gl
04f0: 75 65 2d 73 6c 65 66 74 0a 67 6c 75 65 20 6e 65 ue-sleft.glue ne
0500: 77 20 43 6f 6e 73 74 61 6e 74 20 67 6c 75 65 2d w Constant glue-
0510: 73 72 69 67 68 74 0a 67 6c 75 65 20 27 20 6e 65 sright.glue ' ne
0520: 77 20 73 74 61 74 69 63 2d 61 20 77 69 74 68 2d w static-a with-
0530: 61 6c 6c 6f 63 61 74 65 72 20 43 6f 6e 73 74 61 allocater Consta
0540: 6e 74 20 67 6c 75 65 2d 6c 65 66 74 0a 67 6c 75 nt glue-left.glu
0550: 65 20 27 20 6e 65 77 20 73 74 61 74 69 63 2d 61 e ' new static-a
0560: 20 77 69 74 68 2d 61 6c 6c 6f 63 61 74 65 72 20 with-allocater
0570: 43 6f 6e 73 74 61 6e 74 20 67 6c 75 65 2d 72 69 Constant glue-ri
0580: 67 68 74 0a 0a 3a 20 67 6c 75 65 30 20 28 20 2d ght..: glue0 ( -
0590: 2d 20 29 20 30 65 20 66 64 75 70 0a 20 20 20 20 - ) 0e fdup.
05a0: 5b 20 67 6c 75 65 2d 6c 65 66 74 20 20 2e 68 67 [ glue-left .hg
05b0: 6c 75 65 2d 63 20 5d 4c 20 64 66 21 0a 20 20 20 lue-c ]L df!.
05c0: 20 5b 20 67 6c 75 65 2d 72 69 67 68 74 20 2e 68 [ glue-right .h
05d0: 67 6c 75 65 2d 63 20 5d 4c 20 64 66 21 20 3b 0a glue-c ]L df! ;.
05e0: 67 6c 75 65 30 0a 0a 56 61 72 69 61 62 6c 65 20 glue0..Variable
05f0: 73 6c 69 64 65 73 5b 5d 0a 56 61 72 69 61 62 6c slides[].Variabl
0600: 65 20 73 6c 69 64 65 23 0a 0a 3a 20 3e 73 6c 69 e slide#..: >sli
0610: 64 65 73 20 28 20 6f 20 2d 2d 20 29 20 73 6c 69 des ( o -- ) sli
0620: 64 65 73 5b 5d 20 3e 73 74 61 63 6b 20 3b 0a 0a des[] >stack ;..
0630: 3a 20 21 73 6c 69 64 65 73 20 28 20 6e 70 72 65 : !slides ( npre
0640: 76 20 6e 20 2d 2d 20 29 0a 20 20 20 20 6f 76 65 v n -- ). ove
0650: 72 20 73 6c 69 64 65 23 20 21 0a 20 20 20 20 73 r slide# !. s
0660: 6c 69 64 65 73 5b 5d 20 24 5b 5d 20 40 20 2f 66 lides[] $[] @ /f
0670: 6c 69 70 20 64 72 6f 70 0a 20 20 20 20 73 6c 69 lip drop. sli
0680: 64 65 73 5b 5d 20 24 5b 5d 20 40 20 2f 66 6c 6f des[] $[] @ /flo
0690: 70 20 64 72 6f 70 20 67 6c 75 65 30 20 3b 0a 3a p drop glue0 ;.:
06a0: 20 61 6e 69 6d 21 73 6c 69 64 65 73 20 28 20 72 anim!slides ( r
06b0: 30 2e 2e 31 20 6e 20 2d 2d 20 29 0a 20 20 20 20 0..1 n -- ).
06c0: 73 6c 69 64 65 73 5b 5d 20 24 5b 5d 20 40 20 2f slides[] $[] @ /
06d0: 66 6c 6f 70 20 64 72 6f 70 0a 20 20 20 20 66 64 flop drop. fd
06e0: 75 70 20 66 6e 65 67 61 74 65 20 64 70 79 2d 77 up fnegate dpy-w
06f0: 20 40 20 66 6d 2a 20 67 6c 75 65 2d 6c 65 66 74 @ fm* glue-left
0700: 20 20 2e 68 67 6c 75 65 2d 63 20 64 66 21 0a 20 .hglue-c df!.
0710: 20 20 20 2d 31 65 20 66 2b 20 20 20 20 20 20 20 -1e f+
0720: 64 70 79 2d 77 20 40 20 66 6d 2a 20 67 6c 75 65 dpy-w @ fm* glue
0730: 2d 72 69 67 68 74 20 2e 68 67 6c 75 65 2d 63 20 -right .hglue-c
0740: 64 66 21 20 3b 0a 0a 3a 20 70 72 65 76 2d 61 6e df! ;..: prev-an
0750: 69 6d 20 28 20 6e 20 72 30 2e 2e 31 20 2d 2d 20 im ( n r0..1 --
0760: 29 0a 20 20 20 20 64 75 70 20 30 3c 3d 20 49 46 ). dup 0<= IF
0770: 20 20 64 72 6f 70 20 66 64 72 6f 70 20 20 45 58 drop fdrop EX
0780: 49 54 20 20 54 48 45 4e 0a 20 20 20 20 66 64 75 IT THEN. fdu
0790: 70 20 31 65 20 66 3e 3d 20 49 46 20 20 66 64 72 p 1e f>= IF fdr
07a0: 6f 70 0a 09 64 75 70 20 31 2d 20 73 77 61 70 20 op..dup 1- swap
07b0: 21 73 6c 69 64 65 73 20 2b 73 79 6e 63 20 2b 72 !slides +sync +r
07c0: 65 73 69 7a 65 20 20 45 58 49 54 0a 20 20 20 20 esize EXIT.
07d0: 54 48 45 4e 0a 20 20 20 20 31 65 20 66 73 77 61 THEN. 1e fswa
07e0: 70 20 66 2d 20 31 2d 20 73 69 6e 2d 74 20 61 6e p f- 1- sin-t an
07f0: 69 6d 21 73 6c 69 64 65 73 20 2b 73 79 6e 63 20 im!slides +sync
0800: 2b 72 65 73 69 7a 65 20 3b 0a 0a 3a 20 6e 65 78 +resize ;..: nex
0810: 74 2d 61 6e 69 6d 20 28 20 6e 20 72 30 2e 2e 31 t-anim ( n r0..1
0820: 20 2d 2d 20 29 0a 20 20 20 20 64 75 70 20 73 6c -- ). dup sl
0830: 69 64 65 73 5b 5d 20 24 5b 5d 23 20 31 2d 20 75 ides[] $[]# 1- u
0840: 3e 3d 20 49 46 20 20 64 72 6f 70 20 66 64 72 6f >= IF drop fdro
0850: 70 20 20 45 58 49 54 20 20 54 48 45 4e 0a 20 20 p EXIT THEN.
0860: 20 20 66 64 75 70 20 31 65 20 66 3e 3d 20 49 46 fdup 1e f>= IF
0870: 20 20 66 64 72 6f 70 0a 09 64 75 70 20 31 2b 20 fdrop..dup 1+
0880: 73 77 61 70 20 21 73 6c 69 64 65 73 20 2b 73 79 swap !slides +sy
0890: 6e 63 20 2b 72 65 73 69 7a 65 20 20 45 58 49 54 nc +resize EXIT
08a0: 0a 20 20 20 20 54 48 45 4e 0a 20 20 20 20 31 2b . THEN. 1+
08b0: 20 73 69 6e 2d 74 20 61 6e 69 6d 21 73 6c 69 64 sin-t anim!slid
08c0: 65 73 20 2b 73 79 6e 63 20 2b 72 65 73 69 7a 65 es +sync +resize
08d0: 20 3b 0a 0a 30 2e 34 65 20 46 56 61 6c 75 65 20 ;..0.4e FValue
08e0: 73 6c 69 64 65 2d 74 69 6d 65 25 0a 0a 3a 20 70 slide-time%..: p
08f0: 72 65 76 2d 73 6c 69 64 65 20 28 20 2d 2d 20 29 rev-slide ( -- )
0900: 0a 20 20 20 20 73 6c 69 64 65 2d 74 69 6d 65 25 . slide-time%
0910: 20 61 6e 69 6d 73 5b 5d 20 24 40 6c 65 6e 20 49 anims[] $@len I
0920: 46 20 20 61 6e 69 6d 2d 65 6e 64 20 35 30 25 20 F anim-end 50%
0930: 66 2a 20 20 54 48 45 4e 0a 20 20 20 20 73 6c 69 f* THEN. sli
0940: 64 65 23 20 40 20 5b 27 5d 20 70 72 65 76 2d 61 de# @ ['] prev-a
0950: 6e 69 6d 20 3e 61 6e 69 6d 61 74 65 20 2b 74 65 nim >animate +te
0960: 78 74 75 72 65 73 20 2b 6c 61 6e 67 20 3b 0a 3a xtures +lang ;.:
0970: 20 6e 65 78 74 2d 73 6c 69 64 65 20 28 20 2d 2d next-slide ( --
0980: 20 29 0a 20 20 20 20 73 6c 69 64 65 2d 74 69 6d ). slide-tim
0990: 65 25 20 61 6e 69 6d 73 5b 5d 20 24 40 6c 65 6e e% anims[] $@len
09a0: 20 49 46 20 20 61 6e 69 6d 2d 65 6e 64 20 35 30 IF anim-end 50
09b0: 25 20 66 2a 20 20 54 48 45 4e 0a 20 20 20 20 73 % f* THEN. s
09c0: 6c 69 64 65 23 20 40 20 5b 27 5d 20 6e 65 78 74 lide# @ ['] next
09d0: 2d 61 6e 69 6d 20 3e 61 6e 69 6d 61 74 65 20 2b -anim >animate +
09e0: 74 65 78 74 75 72 65 73 20 2b 6c 61 6e 67 20 3b textures +lang ;
09f0: 0a 0a 5c 20 66 72 61 6d 65 73 0a 0a 30 20 56 61 ..\ frames..0 Va
0a00: 6c 75 65 20 70 77 2d 66 72 61 6d 65 0a 30 20 56 lue pw-frame.0 V
0a10: 61 6c 75 65 20 69 64 2d 66 72 61 6d 65 0a 30 20 alue id-frame.0
0a20: 56 61 6c 75 65 20 63 68 61 74 2d 66 72 61 6d 65 Value chat-frame
0a30: 0a 30 20 56 61 6c 75 65 20 70 6f 73 74 2d 66 72 .0 Value post-fr
0a40: 61 6d 65 0a 0a 5c 20 70 61 73 73 77 6f 72 64 20 ame..\ password
0a50: 73 63 72 65 65 6e 0a 0a 30 20 56 61 6c 75 65 20 screen..0 Value
0a60: 70 77 2d 65 72 72 0a 30 20 56 61 6c 75 65 20 70 pw-err.0 Value p
0a70: 77 2d 6e 75 6d 0a 30 20 56 61 6c 75 65 20 70 68 w-num.0 Value ph
0a80: 72 61 73 65 2d 75 6e 6c 6f 63 6b 0a 30 20 56 61 rase-unlock.0 Va
0a90: 6c 75 65 20 63 72 65 61 74 65 2d 6e 65 77 2d 69 lue create-new-i
0aa0: 64 0a 30 20 56 61 6c 75 65 20 70 68 72 61 73 65 d.0 Value phrase
0ab0: 2d 66 69 72 73 74 0a 30 20 56 61 6c 75 65 20 70 -first.0 Value p
0ac0: 68 72 61 73 65 2d 61 67 61 69 6e 0a 30 20 56 61 hrase-again.0 Va
0ad0: 6c 75 65 20 70 6c 75 73 2d 6c 6f 67 69 6e 0a 30 lue plus-login.0
0ae0: 20 56 61 6c 75 65 20 6d 69 6e 75 73 2d 6c 6f 67 Value minus-log
0af0: 69 6e 0a 30 20 56 61 6c 75 65 20 6e 69 63 6b 2d in.0 Value nick-
0b00: 65 64 69 74 0a 0a 3a 20 65 72 72 2d 66 61 64 65 edit..: err-fade
0b10: 20 28 20 72 20 61 64 64 72 20 2d 2d 20 29 0a 20 ( r addr -- ).
0b20: 20 20 20 31 65 20 66 6f 76 65 72 20 5b 20 70 69 1e fover [ pi
0b30: 20 66 32 2a 20 5d 20 46 6c 69 74 65 72 61 6c 20 f2* ] Fliteral
0b40: 66 2a 20 66 63 6f 73 20 31 65 20 66 2b 20 66 32 f* fcos 1e f+ f2
0b50: 2f 20 66 2d 0a 20 20 20 20 32 20 74 72 69 65 73 / f-. 2 tries
0b60: 23 20 40 20 6c 73 68 69 66 74 20 73 3e 66 20 66 # @ lshift s>f f
0b70: 2a 20 66 64 75 70 20 31 65 20 66 3e 20 49 46 20 * fdup 1e f> IF
0b80: 66 64 72 6f 70 20 31 65 20 45 4c 53 45 20 2b 73 fdrop 1e ELSE +s
0b90: 79 6e 63 20 2b 72 65 73 69 7a 65 20 54 48 45 4e ync +resize THEN
0ba0: 0a 20 20 20 20 2e 66 61 64 65 20 66 64 72 6f 70 . .fade fdrop
0bb0: 20 3b 0a 0a 3a 20 73 68 61 6b 65 2d 6c 72 20 28 ;..: shake-lr (
0bc0: 20 72 20 61 64 64 72 20 2d 2d 20 29 0a 20 20 20 r addr -- ).
0bd0: 20 5b 20 70 69 20 31 36 65 20 66 2a 20 5d 20 46 [ pi 16e f* ] F
0be0: 4c 69 74 65 72 61 6c 20 66 2a 20 66 73 69 6e 20 Literal f* fsin
0bf0: 66 32 2f 20 30 2e 35 65 20 66 2b 20 5c 20 38 20 f2/ 0.5e f+ \ 8
0c00: 74 69 6d 65 73 20 73 68 61 6b 65 0a 20 20 20 20 times shake.
0c10: 66 6f 6e 74 2d 73 69 7a 65 23 20 66 32 2f 20 66 font-size# f2/ f
0c20: 2a 20 66 6f 6e 74 2d 73 69 7a 65 23 20 66 32 2f * font-size# f2/
0c30: 20 66 6f 76 65 72 20 66 2d 0a 20 20 20 20 67 6c fover f-. gl
0c40: 75 65 2d 73 6c 65 66 74 20 20 3e 6f 20 30 67 20 ue-sleft >o 0g
0c50: 66 64 75 70 20 68 67 6c 75 65 2d 63 20 67 6c 75 fdup hglue-c glu
0c60: 65 21 20 6f 3e 0a 20 20 20 20 67 6c 75 65 2d 73 e! o>. glue-s
0c70: 72 69 67 68 74 20 3e 6f 20 30 67 20 66 64 75 70 right >o 0g fdup
0c80: 20 68 67 6c 75 65 2d 63 20 67 6c 75 65 21 20 6f hglue-c glue! o
0c90: 3e 20 2b 73 79 6e 63 20 2b 72 65 73 69 7a 65 20 > +sync +resize
0ca0: 64 72 6f 70 20 3b 0a 0a 30 65 20 30 20 73 68 61 drop ;..0e 0 sha
0cb0: 6b 65 2d 6c 72 0a 0a 3a 20 70 72 65 73 2d 66 72 ke-lr..: pres-fr
0cc0: 61 6d 65 20 28 20 63 6f 6c 6f 72 20 2d 2d 20 6f ame ( color -- o
0cd0: 31 20 6f 32 20 29 20 5c 20 64 72 6f 70 20 24 46 1 o2 ) \ drop $F
0ce0: 46 46 46 46 46 46 46 0a 20 20 20 20 67 6c 75 65 FFFFFFF. glue
0cf0: 2a 77 68 20 73 6c 69 64 65 2d 66 72 61 6d 65 20 *wh slide-frame
0d00: 64 75 70 20 2e 62 75 74 74 6f 6e 31 20 3b 0a 0a dup .button1 ;..
0d10: 3a 20 65 72 72 2d 66 61 64 65 3f 20 28 20 2d 2d : err-fade? ( --
0d20: 20 66 6c 61 67 20 29 20 30 20 7b 20 66 6c 61 67 flag ) 0 { flag
0d30: 20 7d 0a 20 20 20 20 61 6e 69 6d 73 40 20 30 20 }. anims@ 0
0d40: 3f 44 4f 0a 09 3e 6f 20 61 63 74 69 6f 6e 2d 6f ?DO..>o action-o
0d50: 66 20 61 6e 69 6d 61 74 65 20 5b 27 5d 20 65 72 f animate ['] er
0d60: 72 2d 66 61 64 65 20 3d 20 66 6c 61 67 20 6f 72 r-fade = flag or
0d70: 20 74 6f 20 66 6c 61 67 0a 09 6f 20 61 6e 69 6d to flag..o anim
0d80: 73 5b 5d 20 3e 73 74 61 63 6b 20 6f 3e 0a 20 20 s[] >stack o>.
0d90: 20 20 4c 4f 4f 50 20 20 66 6c 61 67 20 3b 0a 0a LOOP flag ;..
0da0: 66 6f 72 77 61 72 64 20 73 68 6f 77 2d 6e 69 63 forward show-nic
0db0: 6b 73 0a 66 6f 72 77 61 72 64 20 67 75 69 2d 6d ks.forward gui-m
0dc0: 73 67 73 0a 30 20 56 61 6c 75 65 20 74 69 74 6c sgs.0 Value titl
0dd0: 65 2d 76 70 0a 30 20 56 61 6c 75 65 20 70 77 2d e-vp.0 Value pw-
0de0: 66 69 65 6c 64 0a 30 20 56 61 6c 75 65 20 6e 69 field.0 Value ni
0df0: 63 6b 2d 66 69 65 6c 64 0a 30 20 56 61 6c 75 65 ck-field.0 Value
0e00: 20 6e 69 63 6b 2d 70 77 0a 30 20 56 61 6c 75 65 nick-pw.0 Value
0e10: 20 70 77 2d 62 61 63 6b 0a 0a 56 61 72 69 61 62 pw-back..Variab
0e20: 6c 65 20 6e 69 63 6b 24 0a 0a 3a 20 6e 69 63 6b le nick$..: nick
0e30: 2d 64 6f 6e 65 20 28 20 6d 61 78 20 73 70 61 6e -done ( max span
0e40: 20 61 64 64 72 20 70 6f 73 20 2d 2d 20 6d 61 78 addr pos -- max
0e50: 20 73 70 61 6e 20 61 64 64 72 20 70 6f 73 20 66 span addr pos f
0e60: 6c 61 67 20 29 0a 20 20 20 20 6f 76 65 72 20 33 lag ). over 3
0e70: 20 70 69 63 6b 20 6e 69 63 6b 24 20 24 21 0a 20 pick nick$ $!.
0e80: 20 20 20 30 65 20 70 77 2d 66 69 65 6c 64 20 5b 0e pw-field [
0e90: 3a 20 64 61 74 61 20 2e 65 6e 67 61 67 65 20 66 : data .engage f
0ea0: 64 72 6f 70 20 3b 5d 20 3e 61 6e 69 6d 61 74 65 drop ;] >animate
0eb0: 20 5c 20 65 6e 67 61 67 65 20 64 65 6c 61 79 65 \ engage delaye
0ec0: 64 0a 20 20 20 20 63 72 65 61 74 65 2d 6e 65 77 d. create-new
0ed0: 2d 69 64 20 2f 68 66 6c 69 70 0a 20 20 20 20 70 -id /hflip. p
0ee0: 68 72 61 73 65 2d 66 69 72 73 74 20 2f 66 6c 6f hrase-first /flo
0ef0: 70 20 2b 6c 61 6e 67 0a 20 20 20 20 31 20 74 6f p +lang. 1 to
0f00: 20 6e 69 63 6b 2d 70 77 20 20 74 72 75 65 20 3b nick-pw true ;
0f10: 0a 0a 3a 20 63 6c 65 61 72 2d 65 64 69 74 20 28 ..: clear-edit (
0f20: 20 6d 61 78 20 73 70 61 6e 20 61 64 64 72 20 70 max span addr p
0f30: 6f 73 20 2d 2d 20 6d 61 78 20 30 20 61 64 64 72 os -- max 0 addr
0f40: 20 30 20 74 72 75 65 20 29 0a 20 20 20 20 64 72 0 true ). dr
0f50: 6f 70 20 6e 69 70 20 30 20 74 75 63 6b 20 74 72 op nip 0 tuck tr
0f60: 75 65 20 3b 0a 0a 3a 20 64 6f 2d 73 68 61 6b 65 ue ;..: do-shake
0f70: 20 28 20 6d 61 78 20 73 70 61 6e 20 61 64 64 72 ( max span addr
0f80: 20 70 6f 73 20 2d 2d 20 6d 61 78 20 73 70 61 6e pos -- max span
0f90: 20 61 64 64 72 20 70 6f 73 20 66 6c 61 67 20 29 addr pos flag )
0fa0: 0a 20 20 20 20 6b 65 79 73 20 73 65 63 5b 5d 66 . keys sec[]f
0fb0: 72 65 65 0a 20 20 20 20 63 6c 65 61 72 2d 65 64 ree. clear-ed
0fc0: 69 74 20 69 6e 76 65 72 74 0a 20 20 20 20 31 65 it invert. 1e
0fd0: 20 6f 20 5b 27 5d 20 73 68 61 6b 65 2d 6c 72 20 o ['] shake-lr
0fe0: 3e 61 6e 69 6d 61 74 65 0a 20 20 20 20 31 20 74 >animate. 1 t
0ff0: 72 69 65 73 23 20 40 20 6c 73 68 69 66 74 20 73 ries# @ lshift s
1000: 3e 66 20 66 32 2f 20 70 77 2d 65 72 72 20 5b 27 >f f2/ pw-err ['
1010: 5d 20 65 72 72 2d 66 61 64 65 20 3e 61 6e 69 6d ] err-fade >anim
1020: 61 74 65 20 3b 0a 0a 3a 20 72 69 67 68 74 2d 70 ate ;..: right-p
1030: 68 72 61 73 65 20 28 20 6d 61 78 20 73 70 61 6e hrase ( max span
1040: 20 61 64 64 72 20 70 6f 73 20 2d 2d 20 6d 61 78 addr pos -- max
1050: 20 73 70 61 6e 20 61 64 64 72 20 70 6f 73 20 66 span addr pos f
1060: 6c 61 67 20 29 0a 20 20 20 20 5c 20 2e 22 20 52 lag ). \ ." R
1070: 69 67 68 74 20 70 61 73 73 70 68 72 61 73 65 22 ight passphrase"
1080: 20 63 72 0a 20 20 20 20 30 20 3e 6f 20 30 20 73 cr. 0 >o 0 s
1090: 65 63 72 65 74 2d 6b 65 79 20 69 6e 69 74 2d 63 ecret-key init-c
10a0: 6c 69 65 6e 74 20 3e 72 61 77 2d 6b 65 79 0a 20 lient >raw-key.
10b0: 20 20 20 72 65 61 64 2d 63 68 61 74 67 72 6f 75 read-chatgrou
10c0: 70 73 20 61 6e 6e 6f 75 6e 63 65 2d 6d 65 0a 20 ps announce-me.
10d0: 20 20 20 6f 3e 0a 20 20 20 20 73 68 6f 77 2d 6e o>. show-n
10e0: 69 63 6b 73 20 63 6c 65 61 72 2d 65 64 69 74 20 icks clear-edit
10f0: 3b 0a 0a 3a 20 70 77 2d 64 6f 6e 65 20 28 20 6d ;..: pw-done ( m
1100: 61 78 20 73 70 61 6e 20 61 64 64 72 20 70 6f 73 ax span addr pos
1110: 20 2d 2d 20 6d 61 78 20 73 70 61 6e 20 61 64 64 -- max span add
1120: 72 20 70 6f 73 20 66 6c 61 67 20 29 0a 20 20 20 r pos flag ).
1130: 20 63 61 73 65 20 6e 69 63 6b 2d 70 77 0a 09 31 case nick-pw..1
1140: 20 6f 66 0a 09 20 20 20 20 31 20 2b 74 6f 20 6e of.. 1 +to n
1150: 69 63 6b 2d 70 77 0a 09 20 20 20 20 6f 76 65 72 ick-pw.. over
1160: 20 33 20 70 69 63 6b 20 3e 70 61 73 73 70 68 72 3 pick >passphr
1170: 61 73 65 20 2b 6b 65 79 0a 09 20 20 20 20 70 68 ase +key.. ph
1180: 72 61 73 65 2d 66 69 72 73 74 20 2f 68 66 6c 69 rase-first /hfli
1190: 70 0a 09 20 20 20 20 70 68 72 61 73 65 2d 61 67 p.. phrase-ag
11a0: 61 69 6e 20 2f 66 6c 6f 70 0a 09 20 20 20 20 63 ain /flop.. c
11b0: 6c 65 61 72 2d 65 64 69 74 20 69 6e 76 65 72 74 lear-edit invert
11c0: 20 2b 6c 61 6e 67 0a 09 65 6e 64 6f 66 0a 09 32 +lang..endof..2
11d0: 20 6f 66 0a 09 20 20 20 20 6f 76 65 72 20 33 20 of.. over 3
11e0: 70 69 63 6b 20 3e 70 61 73 73 70 68 72 61 73 65 pick >passphrase
11f0: 20 6c 61 73 74 6b 65 79 40 20 73 74 72 3d 20 49 lastkey@ str= I
1200: 46 0a 09 09 5c 20 2e 22 20 43 72 65 61 74 65 20 F...\ ." Create
1210: 6e 69 63 6b 20 22 20 6e 69 63 6b 24 20 24 2e 20 nick " nick$ $.
1220: 2e 22 20 20 77 69 74 68 20 70 61 73 73 70 68 72 ." with passphr
1230: 61 73 65 20 28 68 61 73 68 65 64 29 20 22 20 6c ase (hashed) " l
1240: 61 73 74 6b 65 79 40 20 38 35 74 79 70 65 20 63 astkey@ 85type c
1250: 72 0a 09 09 67 65 6e 2d 6b 65 79 73 2d 64 69 72 r...gen-keys-dir
1260: 20 6e 69 63 6b 24 20 24 40 20 30 20 2e 6e 65 77 nick$ $@ 0 .new
1270: 2d 6b 65 79 2c 0a 09 09 72 69 67 68 74 2d 70 68 -key,...right-ph
1280: 72 61 73 65 0a 09 20 20 20 20 45 4c 53 45 0a 09 rase.. ELSE..
1290: 09 31 20 74 6f 20 6e 69 63 6b 2d 70 77 0a 09 09 .1 to nick-pw...
12a0: 70 68 72 61 73 65 2d 66 69 72 73 74 20 2f 66 6c phrase-first /fl
12b0: 6f 70 0a 09 09 70 68 72 61 73 65 2d 61 67 61 69 op...phrase-agai
12c0: 6e 20 2f 68 66 6c 69 70 20 2b 6c 61 6e 67 0a 09 n /hflip +lang..
12d0: 09 31 20 74 72 69 65 73 23 20 21 20 64 6f 2d 73 .1 tries# ! do-s
12e0: 68 61 6b 65 0a 09 20 20 20 20 54 48 45 4e 0a 09 hake.. THEN..
12f0: 65 6e 64 6f 66 0a 09 65 72 72 2d 66 61 64 65 3f endof..err-fade?
1300: 20 49 46 20 20 66 61 6c 73 65 20 20 45 58 49 54 IF false EXIT
1310: 20 20 54 48 45 4e 0a 09 64 72 6f 70 20 6f 76 65 THEN..drop ove
1320: 72 20 33 20 70 69 63 6b 20 3e 70 61 73 73 70 68 r 3 pick >passph
1330: 72 61 73 65 20 2b 6b 65 79 0a 09 72 65 61 64 2d rase +key..read-
1340: 6b 65 79 73 20 73 65 63 72 65 74 2d 6b 65 79 73 keys secret-keys
1350: 23 20 30 3d 20 49 46 0a 09 20 20 20 20 5c 20 2e # 0= IF.. \ .
1360: 22 20 57 72 6f 6e 67 20 70 61 73 73 70 68 72 61 " Wrong passphra
1370: 73 65 22 20 63 72 0a 09 20 20 20 20 31 20 74 72 se" cr.. 1 tr
1380: 69 65 73 23 20 2b 21 20 74 72 69 65 73 23 20 40 ies# +! tries# @
1390: 20 30 20 3c 23 20 23 73 20 23 3e 20 70 77 2d 6e 0 <# #s #> pw-n
13a0: 75 6d 20 3e 6f 20 74 6f 20 74 65 78 74 24 20 6f um >o to text$ o
13b0: 3e 0a 09 20 20 20 20 64 6f 2d 73 68 61 6b 65 0a >.. do-shake.
13c0: 09 45 4c 53 45 0a 09 20 20 20 20 72 69 67 68 74 .ELSE.. right
13d0: 2d 70 68 72 61 73 65 0a 09 54 48 45 4e 20 20 30 -phrase..THEN 0
13e0: 0a 20 20 20 20 65 6e 64 63 61 73 65 20 3b 0a 0a . endcase ;..
13f0: 3a 20 32 30 25 62 74 20 28 20 6f 20 2d 2d 20 6f : 20%bt ( o -- o
1400: 20 29 20 3e 6f 20 66 6f 6e 74 2d 73 69 7a 65 23 ) >o font-size#
1410: 20 32 30 25 20 66 2a 20 74 6f 20 62 6f 72 64 65 20% f* to borde
1420: 72 74 20 6f 20 6f 3e 20 3b 0a 3a 20 32 35 25 62 rt o o> ;.: 25%b
1430: 20 28 20 6f 20 2d 2d 20 6f 20 29 20 3e 6f 20 66 ( o -- o ) >o f
1440: 6f 6e 74 2d 73 69 7a 65 23 20 32 35 25 20 66 2a ont-size# 25% f*
1450: 20 74 6f 20 62 6f 72 64 65 72 20 6f 20 6f 3e 20 to border o o>
1460: 3b 0a 3a 20 32 35 25 62 76 20 28 20 6f 20 2d 2d ;.: 25%bv ( o --
1470: 20 6f 20 29 20 3e 6f 20 66 6f 6e 74 2d 73 69 7a o ) >o font-siz
1480: 65 23 20 32 35 25 20 66 2a 20 66 64 75 70 20 74 e# 25% f* fdup t
1490: 6f 20 62 6f 72 64 65 72 20 66 6e 65 67 61 74 65 o border fnegate
14a0: 20 74 6f 20 62 6f 72 64 65 72 76 20 6f 20 6f 3e to borderv o o>
14b0: 20 3b 0a 3a 20 34 30 25 62 20 28 20 6f 20 2d 2d ;.: 40%b ( o --
14c0: 20 6f 20 29 20 3e 6f 20 66 6f 6e 74 2d 73 69 7a o ) >o font-siz
14d0: 65 23 20 34 30 25 20 66 2a 20 74 6f 20 62 6f 72 e# 40% f* to bor
14e0: 64 65 72 20 6f 20 6f 3e 20 3b 0a 0a 5c 20 70 61 der o o> ;..\ pa
14f0: 73 73 77 6f 72 64 20 66 72 61 6d 65 0a 0a 74 65 ssword frame..te
1500: 78 3a 20 6e 65 74 32 6f 2d 6c 6f 67 6f 0a 0a 24 x: net2o-logo..$
1510: 46 46 30 30 34 30 46 46 20 74 65 78 74 2d 63 6f FF0040FF text-co
1520: 6c 6f 72 2c 20 46 56 61 6c 75 65 20 70 77 2d 6e lor, FValue pw-n
1530: 75 6d 2d 63 6f 6c 23 0a 24 36 36 36 36 36 36 46 um-col#.$666666F
1540: 46 20 74 65 78 74 2d 63 6f 6c 6f 72 2c 20 46 56 F text-color, FV
1550: 61 6c 75 65 20 70 77 2d 74 65 78 74 2d 63 6f 6c alue pw-text-col
1560: 23 0a 24 30 30 30 30 30 30 46 46 20 74 65 78 74 #.$000000FF text
1570: 2d 63 6f 6c 6f 72 2c 20 46 56 61 6c 75 65 20 73 -color, FValue s
1580: 68 6f 77 2d 73 69 67 6e 2d 63 6f 6c 6f 72 23 0a how-sign-color#.
1590: 24 46 46 43 43 43 43 46 46 20 24 34 34 46 46 34 $FFCCCCFF $44FF4
15a0: 34 46 46 20 66 61 64 65 2d 63 6f 6c 6f 72 2c 20 4FF fade-color,
15b0: 46 56 61 6c 75 65 20 70 77 2d 62 67 2d 63 6f 6c FValue pw-bg-col
15c0: 23 0a 24 30 30 30 30 42 46 46 46 20 6e 65 77 2d #.$0000BFFF new-
15d0: 63 6f 6c 6f 72 2c 20 46 56 61 6c 75 65 20 64 61 color, FValue da
15e0: 72 6b 2d 62 6c 75 65 23 0a 24 30 30 30 30 46 46 rk-blue#.$0000FF
15f0: 30 38 20 6e 65 77 2d 63 6f 6c 6f 72 2c 20 46 56 08 new-color, FV
1600: 61 6c 75 65 20 63 68 62 73 2d 63 6f 6c 23 0a 24 alue chbs-col#.$
1610: 46 46 46 46 46 46 46 46 20 6e 65 77 2d 63 6f 6c FFFFFFFF new-col
1620: 6f 72 2c 20 46 56 61 6c 75 65 20 6c 6f 67 69 6e or, FValue login
1630: 2d 62 67 2d 63 6f 6c 23 0a 24 46 46 30 30 30 30 -bg-col#.$FF0000
1640: 30 30 20 24 46 46 30 30 30 30 46 46 20 66 61 64 00 $FF0000FF fad
1650: 65 2d 63 6f 6c 6f 72 2c 20 46 56 61 6c 75 65 20 e-color, FValue
1660: 70 77 2d 65 72 72 2d 63 6f 6c 23 0a 24 30 30 30 pw-err-col#.$000
1670: 30 30 30 46 46 20 64 75 70 20 74 65 78 74 2d 65 000FF dup text-e
1680: 6d 6f 6a 69 2d 63 6f 6c 6f 72 3a 20 62 6c 61 63 moji-color: blac
1690: 6b 2d 65 6d 6f 6a 69 0a 24 30 30 30 30 30 30 46 k-emoji.$000000F
16a0: 46 20 6e 65 77 2d 63 6f 6c 6f 72 2c 20 46 56 61 F new-color, FVa
16b0: 6c 75 65 20 6f 74 72 2d 63 6f 6c 23 0a 24 46 46 lue otr-col#.$FF
16c0: 46 46 46 46 46 46 20 6e 65 77 2d 63 6f 6c 6f 72 FFFFFF new-color
16d0: 2c 20 46 56 61 6c 75 65 20 63 68 61 74 2d 63 6f , FValue chat-co
16e0: 6c 23 0a 24 38 30 46 46 46 46 46 46 20 6e 65 77 l#.$80FFFFFF new
16f0: 2d 63 6f 6c 6f 72 2c 20 46 56 61 6c 75 65 20 63 -color, FValue c
1700: 68 61 74 2d 62 67 2d 63 6f 6c 23 0a 24 46 46 46 hat-bg-col#.$FFF
1710: 46 46 46 46 46 20 6e 65 77 2d 63 6f 6c 6f 72 2c FFFFF new-color,
1720: 20 46 56 61 6c 75 65 20 70 6f 73 74 69 6e 67 2d FValue posting-
1730: 62 67 2d 63 6f 6c 23 0a 0a 3a 20 65 6e 74 72 6f bg-col#..: entro
1740: 70 79 2d 63 6f 6c 6f 72 69 7a 65 20 28 20 2d 2d py-colorize ( --
1750: 20 29 0a 20 20 20 20 70 72 65 76 2d 74 65 78 74 ). prev-text
1760: 24 20 65 72 61 73 65 20 20 61 64 64 72 20 70 72 $ erase addr pr
1770: 65 76 2d 74 65 78 74 24 20 24 66 72 65 65 0a 20 ev-text$ $free.
1780: 20 20 20 65 64 69 74 2d 77 20 2e 74 65 78 74 24 edit-w .text$
1790: 20 70 61 73 73 70 68 72 61 73 65 2d 65 6e 74 72 passphrase-entr
17a0: 6f 70 79 20 31 65 20 66 6d 69 6e 20 70 77 2d 62 opy 1e fmin pw-b
17b0: 67 2d 63 6f 6c 23 20 66 2b 0a 20 20 20 20 70 77 g-col# f+. pw
17c0: 2d 62 61 63 6b 20 3e 6f 20 74 6f 20 77 2d 63 6f -back >o to w-co
17d0: 6c 6f 72 20 6f 3e 20 3b 0a 3a 20 73 69 7a 65 2d lor o> ;.: size-
17e0: 6c 69 6d 69 74 20 28 20 2d 2d 20 29 0a 20 20 20 limit ( -- ).
17f0: 20 65 64 69 74 2d 77 20 2e 74 65 78 74 24 20 6e edit-w .text$ n
1800: 69 70 20 23 38 30 30 20 75 3e 20 49 46 0a 09 70 ip #800 u> IF..p
1810: 72 65 76 2d 74 65 78 74 24 20 65 64 69 74 2d 77 rev-text$ edit-w
1820: 20 3e 6f 20 74 6f 20 74 65 78 74 24 20 6f 3e 0a >o to text$ o>.
1830: 20 20 20 20 54 48 45 4e 20 3b 0a 0a 67 6c 75 65 THEN ;..glue
1840: 20 6e 65 77 20 43 6f 6e 73 74 61 6e 74 20 67 6c new Constant gl
1850: 75 65 2a 6c 6c 6c c2 b1 0a 67 6c 75 65 2a 6c 6c ue*lll±.glue*ll
1860: 6c c2 b1 20 3e 6f 20 31 4d 67 6c 75 65 20 66 6e l± >o 1Mglue fn
1870: 69 70 20 31 30 30 30 65 20 66 73 77 61 70 20 68 ip 1000e fswap h
1880: 67 6c 75 65 2d 63 20 67 6c 75 65 21 20 30 67 6c glue-c glue! 0gl
1890: 75 65 20 66 6e 69 70 20 31 66 69 6c 6c 6c 20 66 ue fnip 1filll f
18a0: 73 77 61 70 20 64 67 6c 75 65 2d 63 20 67 6c 75 swap dglue-c glu
18b0: 65 21 20 31 67 6c 75 65 20 76 67 6c 75 65 2d 63 e! 1glue vglue-c
18c0: 20 67 6c 75 65 21 20 6f 3e 0a 0a 67 6c 75 65 20 glue! o>..glue
18d0: 6e 65 77 20 43 6f 6e 73 74 61 6e 74 20 67 6c 75 new Constant glu
18e0: 65 2a 73 68 72 69 6e 6b 0a 67 6c 75 65 2a 73 68 e*shrink.glue*sh
18f0: 72 69 6e 6b 20 3e 6f 20 30 65 20 31 66 69 6c 6c rink >o 0e 1fill
1900: 6c 20 30 65 20 68 67 6c 75 65 2d 63 20 67 6c 75 l 0e hglue-c glu
1910: 65 21 20 31 67 6c 75 65 20 64 67 6c 75 65 2d 63 e! 1glue dglue-c
1920: 20 67 6c 75 65 21 20 31 67 6c 75 65 20 76 67 6c glue! 1glue vgl
1930: 75 65 2d 63 20 67 6c 75 65 21 20 6f 3e 0a 0a 27 ue-c glue! o>..'
1940: 20 64 61 72 6b 2d 62 6c 75 65 20 3e 62 6f 64 79 dark-blue >body
1950: 20 66 40 0a 0a 7b 7b 20 6c 6f 67 69 6e 2d 62 67 f@..{{ login-bg
1960: 2d 63 6f 6c 23 20 70 72 65 73 2d 66 72 61 6d 65 -col# pres-frame
1970: 0a 20 20 20 20 64 61 72 6b 2d 62 6c 75 65 23 20 . dark-blue#
1980: 27 20 64 61 72 6b 2d 62 6c 75 65 20 3e 62 6f 64 ' dark-blue >bod
1990: 79 20 66 21 0a 20 20 20 20 7b 7b 0a 09 7b 7b 20 y f!. {{..{{
19a0: 67 6c 75 65 2a 6c 6c 6c c2 b1 20 7d 7d 67 6c 75 glue*lll± }}glu
19b0: 65 20 7d 7d 76 0a 09 27 20 6e 65 74 32 6f 2d 6c e }}v..' net2o-l
19c0: 6f 67 6f 20 22 64 6f 63 2f 6e 65 74 32 6f 2e 70 ogo "doc/net2o.p
19d0: 6e 67 22 20 30 2e 36 36 36 65 20 7d 7d 69 6d 61 ng" 0.666e }}ima
19e0: 67 65 2d 66 69 6c 65 20 43 6f 6e 73 74 61 6e 74 ge-file Constant
19f0: 20 6e 65 74 32 6f 2d 67 6c 75 65 20 2f 63 65 6e net2o-glue /cen
1a00: 74 65 72 0a 09 21 69 31 38 6e 20 6c 22 20 6e 65 ter..!i18n l" ne
1a10: 74 32 6f 20 47 55 49 22 20 2f 74 69 74 6c 65 0a t2o GUI" /title.
1a20: 09 21 6c 69 74 0a 09 5c 66 6f 6f 74 6e 6f 74 65 .!lit..\footnote
1a30: 20 63 62 6c 20 64 61 72 6b 2d 62 6c 75 65 20 6e cbl dark-blue n
1a40: 65 74 32 6f 2d 76 65 72 73 69 6f 6e 20 7d 7d 74 et2o-version }}t
1a50: 65 78 74 20 2f 63 65 6e 74 65 72 0a 09 7b 7b 0a ext /center..{{.
1a60: 09 20 20 20 20 7b 7b 0a 09 09 67 6c 75 65 2a 6c . {{...glue*l
1a70: 6c 20 7d 7d 67 6c 75 65 0a 09 09 62 6c 61 63 6b l }}glue...black
1a80: 69 73 68 20 5c 6c 61 72 67 65 20 22 f0 9f 91 a4 ish \large "👤
1a90: 22 20 7d 7d 74 65 78 74 20 5c 6e 6f 72 6d 61 6c " }}text \normal
1aa0: 0a 09 09 7b 7b 0a 09 09 20 20 20 20 67 6c 75 65 ...{{... glue
1ab0: 2a 6c 20 70 77 2d 62 67 2d 63 6f 6c 23 20 66 6f *l pw-bg-col# fo
1ac0: 6e 74 2d 73 69 7a 65 23 20 66 32 2f 20 66 32 2f nt-size# f2/ f2/
1ad0: 20 7d 7d 66 72 61 6d 65 20 64 75 70 20 2e 62 75 }}frame dup .bu
1ae0: 74 74 6f 6e 33 0a 09 09 20 20 20 20 7b 7b 0a 09 tton3... {{..
1af0: 09 09 6e 74 0a 09 09 09 62 6c 61 63 6b 69 73 68 ..nt....blackish
1b00: 20 5c 62 6f 6c 64 0a 09 09 09 22 6e 69 63 6b 22 \bold...."nick"
1b10: 20 7d 7d 65 64 69 74 20 32 35 25 62 20 64 75 70 }}edit 25%b dup
1b20: 20 74 6f 20 6e 69 63 6b 2d 66 69 65 6c 64 0a 09 to nick-field..
1b30: 09 09 67 6c 75 65 2a 6c 6c 6c 20 7d 7d 67 6c 75 ..glue*lll }}glu
1b40: 65 20 5c 72 65 67 75 6c 61 72 0a 09 09 20 20 20 e \regular...
1b50: 20 7d 7d 68 20 62 78 2d 74 61 62 20 6e 69 63 6b }}h bx-tab nick
1b60: 2d 66 69 65 6c 64 20 27 20 6e 69 63 6b 2d 64 6f -field ' nick-do
1b70: 6e 65 20 65 64 69 74 5b 5d 0a 09 09 7d 7d 7a 20 ne edit[]...}}z
1b80: 62 6f 78 5b 5d 20 62 6c 61 63 6b 69 73 68 0a 09 box[] blackish..
1b90: 09 7b 7b 20 5c 6c 61 72 67 65 20 22 f0 9f 91 a4 .{{ \large "👤
1ba0: 22 20 7d 7d 74 65 78 74 20 5c 6e 6f 72 6d 61 6c " }}text \normal
1bb0: 20 7d 7d 68 20 2f 70 68 61 6e 74 6f 6d 0a 09 09 }}h /phantom...
1bc0: 67 6c 75 65 2a 6c 6c 20 7d 7d 67 6c 75 65 0a 09 glue*ll }}glue..
1bd0: 20 20 20 20 7d 7d 68 20 62 6f 78 5b 5d 0a 09 7d }}h box[]..}
1be0: 7d 76 20 62 6f 78 5b 5d 20 2f 76 66 6c 69 70 20 }v box[] /vflip
1bf0: 64 75 70 20 74 6f 20 6e 69 63 6b 2d 65 64 69 74 dup to nick-edit
1c00: 0a 09 7b 7b 0a 09 20 20 20 20 67 6c 75 65 2a 6c ..{{.. glue*l
1c10: 6c 6c 20 7d 7d 67 6c 75 65 0a 09 20 20 20 20 67 ll }}glue.. g
1c20: 6c 75 65 2d 73 6c 65 66 74 20 7d 7d 67 6c 75 65 lue-sleft }}glue
1c30: 0a 09 20 20 20 20 7b 7b 0a 09 09 5c 6c 61 72 67 .. {{...\larg
1c40: 65 20 5c 73 61 6e 73 20 22 f0 9f 94 90 22 20 7d e \sans "🔐" }
1c50: 7d 74 65 78 74 0a 09 09 5c 6c 61 72 67 65 20 70 }text...\large p
1c60: 77 2d 6e 75 6d 2d 63 6f 6c 23 20 74 6f 20 78 2d w-num-col# to x-
1c70: 63 6f 6c 6f 72 20 73 22 20 22 20 7d 7d 74 65 78 color s" " }}tex
1c80: 74 0a 09 09 32 35 25 62 20 64 75 70 20 74 6f 20 t...25%b dup to
1c90: 70 77 2d 6e 75 6d 20 2f 63 65 6e 74 65 72 0a 09 pw-num /center..
1ca0: 20 20 20 20 7d 7d 7a 0a 09 20 20 20 20 7b 7b 0a }}z.. {{.
1cb0: 09 09 67 6c 75 65 2a 6c 20 70 77 2d 62 67 2d 63 ..glue*l pw-bg-c
1cc0: 6f 6c 23 20 66 6f 6e 74 2d 73 69 7a 65 23 20 66 ol# font-size# f
1cd0: 32 2f 20 66 32 2f 20 7d 7d 66 72 61 6d 65 20 64 2/ f2/ }}frame d
1ce0: 75 70 20 2e 62 75 74 74 6f 6e 33 0a 09 09 64 75 up .button3...du
1cf0: 70 20 74 6f 20 70 77 2d 62 61 63 6b 0a 09 09 5c p to pw-back...\
1d00: 6d 6f 6e 6f 20 5c 6e 6f 72 6d 61 6c 0a 09 09 7b mono \normal...{
1d10: 7b 20 63 68 62 73 2d 63 6f 6c 23 20 74 6f 20 78 { chbs-col# to x
1d20: 2d 63 6f 6c 6f 72 20 22 43 6f 72 72 65 63 74 20 -color "Correct
1d30: 48 6f 72 73 65 20 42 61 74 74 65 72 79 20 53 74 Horse Battery St
1d40: 61 70 6c 65 22 20 7d 7d 74 65 78 74 20 32 35 25 aple" }}text 25%
1d50: 62 0a 09 09 67 6c 75 65 2a 6c 20 7d 7d 68 0a 09 b...glue*l }}h..
1d60: 09 7b 7b 0a 09 09 20 20 20 20 67 6c 75 65 2d 73 .{{... glue-s
1d70: 72 69 67 68 74 20 7d 7d 67 6c 75 65 0a 09 09 20 right }}glue...
1d80: 20 20 20 67 6c 75 65 2a 6c 20 7d 7d 67 6c 75 65 glue*l }}glue
1d90: 20 5c 62 6f 6c 64 0a 09 09 20 20 20 20 6c 22 20 \bold... l"
1da0: 77 72 6f 6e 67 20 70 61 73 73 70 68 72 61 73 65 wrong passphrase
1db0: 21 22 20 70 77 2d 65 72 72 2d 63 6f 6c 23 0a 09 !" pw-err-col#..
1dc0: 09 20 20 20 20 74 6f 20 78 2d 63 6f 6c 6f 72 20 . to x-color
1dd0: 7d 7d 69 31 38 6e 2d 74 65 78 74 20 5c 72 65 67 }}i18n-text \reg
1de0: 75 6c 61 72 0a 09 09 20 20 20 20 32 35 25 62 20 ular... 25%b
1df0: 64 75 70 20 74 6f 20 70 77 2d 65 72 72 0a 09 09 dup to pw-err...
1e00: 20 20 20 20 67 6c 75 65 2a 6c 20 7d 7d 67 6c 75 glue*l }}glu
1e10: 65 0a 09 09 20 20 20 20 67 6c 75 65 2d 73 6c 65 e... glue-sle
1e20: 66 74 20 7d 7d 67 6c 75 65 0a 09 09 7d 7d 68 0a ft }}glue...}}h.
1e30: 09 09 62 6c 61 63 6b 69 73 68 0a 09 09 7b 7b 0a ..blackish...{{.
1e40: 09 09 20 20 20 20 7b 7b 0a 09 09 09 70 77 2d 74 .. {{....pw-t
1e50: 65 78 74 2d 63 6f 6c 23 20 74 6f 20 78 2d 63 6f ext-col# to x-co
1e60: 6c 6f 72 0a 09 09 09 22 22 20 7d 7d 70 77 20 64 lor...."" }}pw d
1e70: 75 70 20 74 6f 20 70 77 2d 66 69 65 6c 64 0a 09 up to pw-field..
1e80: 09 09 32 35 25 62 20 3e 6f 20 63 6f 6e 66 69 67 ..25%b >o config
1e90: 3a 70 61 73 73 6d 6f 64 65 23 20 40 20 74 6f 20 :passmode# @ to
1ea0: 70 77 2d 6d 6f 64 65 20 6f 20 6f 3e 0a 09 09 09 pw-mode o o>....
1eb0: 67 6c 75 65 2a 6c 6c 6c 20 7d 7d 67 6c 75 65 0a glue*lll }}glue.
1ec0: 09 09 20 20 20 20 7d 7d 68 0a 09 09 20 20 20 20 .. }}h...
1ed0: 70 77 2d 66 69 65 6c 64 20 27 20 70 77 2d 64 6f pw-field ' pw-do
1ee0: 6e 65 20 65 64 69 74 5b 5d 20 27 20 65 6e 74 72 ne edit[] ' entr
1ef0: 6f 70 79 2d 63 6f 6c 6f 72 69 7a 65 20 66 69 6c opy-colorize fil
1f00: 74 65 72 5b 5d 0a 09 09 20 20 20 20 5c 6e 6f 72 ter[]... \nor
1f10: 6d 61 6c 20 5c 73 61 6e 73 20 77 68 69 74 65 23 mal \sans white#
1f20: 20 74 6f 20 78 2d 63 6f 6c 6f 72 0a 09 09 20 20 to x-color...
1f30: 20 20 22 ef 81 ae 22 20 7d 7d 74 65 78 74 20 62 "" }}text b
1f40: 6c 61 63 6b 69 73 68 0a 09 09 20 20 20 20 64 75 lackish... du
1f50: 70 20 76 61 6c 75 65 20 73 68 6f 77 2d 70 77 2d p value show-pw-
1f60: 73 69 67 6e 0a 09 09 20 20 20 20 5c 72 65 67 75 sign... \regu
1f70: 6c 61 72 0a 09 09 20 20 20 20 3a 20 70 77 2d 73 lar... : pw-s
1f80: 68 6f 77 2f 68 69 64 65 20 28 20 66 6c 61 67 20 how/hide ( flag
1f90: 2d 2d 20 29 0a 09 09 09 64 75 70 20 49 46 20 20 -- )....dup IF
1fa0: 22 ef 81 b0 22 20 20 45 4c 53 45 20 20 22 ef 81 "" ELSE "
1fb0: ae 22 20 20 54 48 45 4e 20 20 73 68 6f 77 2d 70 " THEN show-p
1fc0: 77 2d 73 69 67 6e 20 3e 6f 20 74 6f 20 74 65 78 w-sign >o to tex
1fd0: 74 24 20 6f 3e 0a 09 09 09 32 20 63 6f 6e 66 69 t$ o>....2 confi
1fe0: 67 3a 70 61 73 73 6d 6f 64 65 23 20 40 20 31 20 g:passmode# @ 1
1ff0: 6d 69 6e 20 72 6f 74 20 73 65 6c 65 63 74 20 70 min rot select p
2000: 77 2d 66 69 65 6c 64 20 3e 6f 20 74 6f 20 70 77 w-field >o to pw
2010: 2d 6d 6f 64 65 20 6f 3e 0a 09 09 09 70 77 2d 66 -mode o>....pw-f
2020: 69 65 6c 64 20 65 6e 67 61 67 65 20 2b 73 79 6e ield engage +syn
2030: 63 20 3b 0a 09 09 20 20 20 20 27 20 70 77 2d 73 c ;... ' pw-s
2040: 68 6f 77 2f 68 69 64 65 20 63 6f 6e 66 69 67 3a how/hide config:
2050: 70 61 73 73 6d 6f 64 65 23 20 40 20 31 20 3e 20 passmode# @ 1 >
2060: 74 6f 67 67 6c 65 5b 5d 0a 09 09 20 20 20 20 5c toggle[]... \
2070: 6e 6f 72 6d 61 6c 0a 09 09 7d 7d 68 20 62 6f 78 normal...}}h box
2080: 5b 5d 0a 09 20 20 20 20 7d 7d 7a 20 62 6f 78 5b [].. }}z box[
2090: 5d 20 62 78 2d 74 61 62 0a 09 20 20 20 20 7b 7b ] bx-tab.. {{
20a0: 0a 09 09 5c 6c 61 72 67 65 0a 09 09 22 f0 9f 94 ...\large..."
20b0: b4 22 20 7d 7d 74 65 78 74 20 5c 6e 6f 72 6d 61 " }}text \norma
20c0: 6c 20 20 3e 6f 20 66 6f 6e 74 2d 73 69 7a 65 23 l >o font-size#
20d0: 20 31 30 25 20 66 2a 20 74 6f 20 72 61 69 73 65 10% f* to raise
20e0: 20 6f 20 6f 3e 0a 09 09 22 e2 9e 95 22 20 7d 7d o o>..."➕" }}
20f0: 74 65 78 74 20 2f 63 65 6e 74 65 72 20 64 75 70 text /center dup
2100: 20 74 6f 20 70 6c 75 73 2d 6c 6f 67 69 6e 0a 09 to plus-login..
2110: 09 22 e2 9e 96 22 20 7d 7d 74 65 78 74 20 2f 63 ."➖" }}text /c
2120: 65 6e 74 65 72 20 64 75 70 20 74 6f 20 6d 69 6e enter dup to min
2130: 75 73 2d 6c 6f 67 69 6e 20 2f 76 66 6c 69 70 0a us-login /vflip.
2140: 09 09 5c 6c 61 72 67 65 0a 09 09 3a 20 69 64 2d ..\large...: id-
2150: 73 68 6f 77 2d 68 69 64 65 20 28 20 66 6c 61 67 show-hide ( flag
2160: 20 2d 2d 20 29 0a 09 09 20 20 20 20 49 46 0a 09 -- )... IF..
2170: 09 09 70 68 72 61 73 65 2d 75 6e 6c 6f 63 6b 20 ..phrase-unlock
2180: 2f 68 66 6c 69 70 0a 09 09 09 63 72 65 61 74 65 /hflip....create
2190: 2d 6e 65 77 2d 69 64 20 2f 66 6c 6f 70 0a 09 09 -new-id /flop...
21a0: 09 70 68 72 61 73 65 2d 66 69 72 73 74 20 2f 68 .phrase-first /h
21b0: 66 6c 69 70 0a 09 09 09 70 68 72 61 73 65 2d 61 flip....phrase-a
21c0: 67 61 69 6e 20 2f 68 66 6c 69 70 0a 09 09 09 70 gain /hflip....p
21d0: 6c 75 73 2d 6c 6f 67 69 6e 20 2f 66 6c 69 70 0a lus-login /flip.
21e0: 09 09 09 6d 69 6e 75 73 2d 6c 6f 67 69 6e 20 2f ...minus-login /
21f0: 66 6c 6f 70 0a 09 09 09 6e 69 63 6b 2d 65 64 69 flop....nick-edi
2200: 74 20 2f 66 6c 6f 70 0a 09 09 09 5b 20 78 2d 62 t /flop....[ x-b
2210: 61 73 65 6c 69 6e 65 20 5d 20 46 4c 69 74 65 72 aseline ] FLiter
2220: 61 6c 20 6e 69 63 6b 2d 65 64 69 74 20 3e 6f 0a al nick-edit >o.
2230: 09 09 09 66 64 75 70 20 67 61 70 25 20 66 2a 20 ...fdup gap% f*
2240: 74 6f 20 67 61 70 20 74 6f 20 62 61 73 65 6c 69 to gap to baseli
2250: 6e 65 20 6f 3e 0a 09 09 09 22 6e 69 63 6b 22 20 ne o>...."nick"
2260: 6e 69 63 6b 2d 66 69 65 6c 64 20 65 6e 67 61 67 nick-field engag
2270: 65 2d 65 64 69 74 0a 09 09 20 20 20 20 45 4c 53 e-edit... ELS
2280: 45 0a 09 09 09 70 68 72 61 73 65 2d 75 6e 6c 6f E....phrase-unlo
2290: 63 6b 20 2f 66 6c 6f 70 0a 09 09 09 63 72 65 61 ck /flop....crea
22a0: 74 65 2d 6e 65 77 2d 69 64 20 2f 68 66 6c 69 70 te-new-id /hflip
22b0: 0a 09 09 09 70 68 72 61 73 65 2d 66 69 72 73 74 ....phrase-first
22c0: 20 2f 68 66 6c 69 70 0a 09 09 09 70 68 72 61 73 /hflip....phras
22d0: 65 2d 61 67 61 69 6e 20 2f 68 66 6c 69 70 0a 09 e-again /hflip..
22e0: 09 09 70 6c 75 73 2d 6c 6f 67 69 6e 20 2f 66 6c ..plus-login /fl
22f0: 6f 70 0a 09 09 09 6d 69 6e 75 73 2d 6c 6f 67 69 op....minus-logi
2300: 6e 20 2f 66 6c 69 70 0a 09 09 09 6e 69 63 6b 2d n /flip....nick-
2310: 65 64 69 74 20 2f 76 66 6c 69 70 0a 09 09 09 30 edit /vflip....0
2320: 65 20 6e 69 63 6b 2d 65 64 69 74 20 3e 6f 20 74 e nick-edit >o t
2330: 6f 20 62 61 73 65 6c 69 6e 65 20 6f 3e 0a 09 09 o baseline o>...
2340: 09 70 77 2d 66 69 65 6c 64 20 65 6e 67 61 67 65 .pw-field engage
2350: 0a 09 09 20 20 20 20 54 48 45 4e 20 2b 72 65 73 ... THEN +res
2360: 69 7a 65 20 2b 6c 61 6e 67 20 3b 0a 09 09 5c 6e ize +lang ;...\n
2370: 6f 72 6d 61 6c 0a 09 20 20 20 20 7d 7d 7a 20 27 ormal.. }}z '
2380: 20 69 64 2d 73 68 6f 77 2d 68 69 64 65 20 66 61 id-show-hide fa
2390: 6c 73 65 20 74 6f 67 67 6c 65 5b 5d 20 64 75 70 lse toggle[] dup
23a0: 20 56 61 6c 75 65 20 69 64 2d 74 6f 67 67 6c 65 Value id-toggle
23b0: 72 0a 09 20 20 20 20 67 6c 75 65 2d 73 72 69 67 r.. glue-srig
23c0: 68 74 20 7d 7d 67 6c 75 65 0a 09 20 20 20 20 67 ht }}glue.. g
23d0: 6c 75 65 2a 6c 6c 6c 20 7d 7d 67 6c 75 65 0a 09 lue*lll }}glue..
23e0: 7d 7d 68 20 62 6f 78 5b 5d 20 5c 73 6b 69 70 20 }}h box[] \skip
23f0: 3e 62 6c 0a 09 5c 20 41 64 76 69 63 65 73 2c 20 >bl..\ Advices,
2400: 63 6f 6e 74 65 78 74 20 73 65 6e 73 69 74 69 76 context sensitiv
2410: 65 0a 09 7b 7b 20 20 5c 73 6d 61 6c 6c 20 64 61 e..{{ \small da
2420: 72 6b 2d 62 6c 75 65 20 21 69 31 38 6e 0a 09 20 rk-blue !i18n..
2430: 20 20 20 6c 22 20 45 6e 74 65 72 20 70 61 73 73 l" Enter pass
2440: 70 68 72 61 73 65 20 74 6f 20 75 6e 6c 6f 63 6b phrase to unlock
2450: 22 20 7d 7d 74 65 78 74 27 20 2f 63 65 6e 74 65 " }}text' /cente
2460: 72 20 64 75 70 20 74 6f 20 70 68 72 61 73 65 2d r dup to phrase-
2470: 75 6e 6c 6f 63 6b 0a 09 20 20 20 20 6c 22 20 43 unlock.. l" C
2480: 72 65 61 74 65 20 6e 65 77 20 49 44 22 20 7d 7d reate new ID" }}
2490: 74 65 78 74 27 20 2f 63 65 6e 74 65 72 20 64 75 text' /center du
24a0: 70 20 74 6f 20 63 72 65 61 74 65 2d 6e 65 77 2d p to create-new-
24b0: 69 64 20 2f 68 66 6c 69 70 0a 09 20 20 20 20 6c id /hflip.. l
24c0: 22 20 45 6e 74 65 72 20 6e 65 77 20 70 61 73 73 " Enter new pass
24d0: 70 68 72 61 73 65 22 20 7d 7d 74 65 78 74 27 20 phrase" }}text'
24e0: 2f 63 65 6e 74 65 72 20 64 75 70 20 74 6f 20 70 /center dup to p
24f0: 68 72 61 73 65 2d 66 69 72 73 74 20 2f 68 66 6c hrase-first /hfl
2500: 69 70 0a 09 20 20 20 20 6c 22 20 45 6e 74 65 72 ip.. l" Enter
2510: 20 6e 65 77 20 70 61 73 73 70 68 72 61 73 65 20 new passphrase
2520: 61 67 61 69 6e 22 20 7d 7d 74 65 78 74 27 20 2f again" }}text' /
2530: 63 65 6e 74 65 72 20 64 75 70 20 74 6f 20 70 68 center dup to ph
2540: 72 61 73 65 2d 61 67 61 69 6e 20 2f 68 66 6c 69 rase-again /hfli
2550: 70 0a 09 20 20 20 20 21 6c 69 74 0a 09 7d 7d 7a p.. !lit..}}z
2560: 20 62 6f 78 5b 5d 20 2f 63 65 6e 74 65 72 20 3e box[] /center >
2570: 62 6c 0a 09 7b 7b 20 67 6c 75 65 2a 6c 6c 6c 20 bl..{{ glue*lll
2580: 7d 7d 67 6c 75 65 20 7d 7d 76 0a 20 20 20 20 7d }}glue }}v. }
2590: 7d 76 20 62 6f 78 5b 5d 0a 7d 7d 7a 20 62 6f 78 }v box[].}}z box
25a0: 5b 5d 20 74 6f 20 70 77 2d 66 72 61 6d 65 0a 0a [] to pw-frame..
25b0: 27 20 64 61 72 6b 2d 62 6c 75 65 20 3e 62 6f 64 ' dark-blue >bod
25c0: 79 20 66 21 0a 0a 5c 20 69 64 20 66 72 61 6d 65 y f!..\ id frame
25d0: 0a 0a 30 20 56 61 6c 75 65 20 6d 79 6b 65 79 2d ..0 Value mykey-
25e0: 62 6f 78 0a 30 20 56 61 6c 75 65 20 67 72 6f 75 box.0 Value grou
25f0: 70 73 2d 62 6f 78 0a 30 20 56 61 6c 75 65 20 6e ps-box.0 Value n
2600: 69 63 6b 73 2d 62 6f 78 0a 30 20 56 61 6c 75 65 icks-box.0 Value
2610: 20 6d 73 67 73 2d 62 6f 78 0a 30 20 56 61 6c 75 msgs-box.0 Valu
2620: 65 20 6d 73 67 2d 62 6f 78 0a 30 20 56 61 6c 75 e msg-box.0 Valu
2630: 65 20 6d 73 67 2d 70 61 72 0a 30 20 56 61 6c 75 e msg-par.0 Valu
2640: 65 20 6d 73 67 2d 76 62 6f 78 0a 0a 30 20 56 61 e msg-vbox..0 Va
2650: 6c 75 65 20 67 72 6f 75 70 2d 6e 61 6d 65 0a 30 lue group-name.0
2660: 20 56 61 6c 75 65 20 67 72 6f 75 70 2d 6d 65 6d Value group-mem
2670: 62 65 72 73 0a 0a 6e 65 77 2d 68 74 61 62 20 74 bers..new-htab t
2680: 61 62 2d 67 6c 75 65 3a 20 6e 61 6d 65 2d 74 61 ab-glue: name-ta
2690: 62 0a 6e 65 77 2d 68 74 61 62 20 74 61 62 2d 67 b.new-htab tab-g
26a0: 6c 75 65 3a 20 70 6b 2d 74 61 62 0a 6e 65 77 2d lue: pk-tab.new-
26b0: 68 74 61 62 20 74 61 62 2d 67 6c 75 65 3a 20 67 htab tab-glue: g
26c0: 72 6f 75 70 2d 74 61 62 0a 6e 65 77 2d 68 74 61 roup-tab.new-hta
26d0: 62 20 74 61 62 2d 67 6c 75 65 3a 20 63 68 61 74 b tab-glue: chat
26e0: 6e 61 6d 65 2d 74 61 62 0a 0a 5b 49 46 55 4e 44 name-tab..[IFUND
26f0: 45 46 5d 20 63 68 69 6c 64 2b 0a 20 20 20 20 3a EF] child+. :
2700: 20 63 68 69 6c 64 2b 20 28 20 6f 20 2d 2d 20 29 child+ ( o -- )
2710: 20 6f 20 6f 76 65 72 20 3e 6f 20 74 6f 20 70 61 o over >o to pa
2720: 72 65 6e 74 2d 77 20 6f 3e 20 63 68 69 6c 64 73 rent-w o> childs
2730: 5b 5d 20 3e 73 74 61 63 6b 20 3b 0a 5b 54 48 45 [] >stack ;.[THE
2740: 4e 5d 0a 0a 43 72 65 61 74 65 20 6b 65 2d 69 6d N]..Create ke-im
2750: 70 6f 72 74 73 23 72 67 62 0a 0a 43 72 65 61 74 ports#rgb..Creat
2760: 65 20 69 6d 70 6f 72 74 73 23 72 67 62 2d 62 67 e imports#rgb-bg
2770: 0a 24 33 33 45 45 33 33 46 46 20 6e 65 77 2d 63 .$33EE33FF new-c
2780: 6f 6c 6f 72 2c 20 73 66 2c 20 5c 20 6d 79 73 65 olor, sf, \ myse
2790: 6c 66 20 69 73 20 70 72 65 74 74 79 20 67 72 65 lf is pretty gre
27a0: 65 6e 0a 24 42 42 44 44 36 36 46 46 20 6e 65 77 en.$BBDD66FF new
27b0: 2d 63 6f 6c 6f 72 2c 20 73 66 2c 20 5c 20 6d 61 -color, sf, \ ma
27c0: 6e 75 61 6c 6c 79 20 69 6d 70 6f 72 74 65 64 20 nually imported
27d0: 69 73 20 67 72 65 65 6e 2c 20 74 6f 6f 0a 24 35 is green, too.$5
27e0: 35 44 44 35 35 46 46 20 6e 65 77 2d 63 6f 6c 6f 5DD55FF new-colo
27f0: 72 2c 20 73 66 2c 20 5c 20 73 63 61 6e 6e 65 64 r, sf, \ scanned
2800: 20 69 73 20 6d 6f 72 65 20 67 72 65 65 6e 0a 24 is more green.$
2810: 43 43 45 45 35 35 46 46 20 6e 65 77 2d 63 6f 6c CCEE55FF new-col
2820: 6f 72 2c 20 73 66 2c 20 5c 20 73 65 65 6e 20 69 or, sf, \ seen i
2830: 6e 20 63 68 61 74 20 69 73 20 6d 6f 72 65 20 79 n chat is more y
2840: 65 6c 6c 6f 77 0a 24 45 45 43 43 35 35 46 46 20 ellow.$EECC55FF
2850: 6e 65 77 2d 63 6f 6c 6f 72 2c 20 73 66 2c 20 5c new-color, sf, \
2860: 20 69 6d 70 6f 72 74 65 64 20 66 72 6f 6d 20 44 imported from D
2870: 48 54 20 69 73 20 70 72 65 74 74 79 20 79 65 6c HT is pretty yel
2880: 6c 6f 77 0a 24 46 46 38 38 34 34 46 46 20 6e 65 low.$FF8844FF ne
2890: 77 2d 63 6f 6c 6f 72 2c 20 73 66 2c 20 5c 20 69 w-color, sf, \ i
28a0: 6e 76 69 74 65 64 20 69 73 20 76 65 72 79 20 79 nvited is very y
28b0: 65 6c 6c 6f 77 0a 24 46 46 36 36 30 30 46 46 20 ellow.$FF6600FF
28c0: 6e 65 77 2d 63 6f 6c 6f 72 2c 20 73 66 2c 20 5c new-color, sf, \
28d0: 20 70 72 6f 76 69 73 69 6f 6e 61 6c 20 69 73 20 provisional is
28e0: 76 65 72 79 20 6f 72 61 6e 67 65 0a 24 46 46 30 very orange.$FF0
28f0: 30 30 30 46 46 20 6e 65 77 2d 63 6f 6c 6f 72 2c 000FF new-color,
2900: 20 73 66 2c 20 5c 20 75 6e 74 72 75 73 74 65 64 sf, \ untrusted
2910: 20 69 73 20 6c 61 73 74 0a 43 72 65 61 74 65 20 is last.Create
2920: 69 6d 70 6f 72 74 73 23 72 67 62 2d 66 67 0a 24 imports#rgb-fg.$
2930: 30 30 33 33 30 30 46 46 20 74 65 78 74 2d 63 6f 003300FF text-co
2940: 6c 6f 72 2c 20 73 66 2c 0a 24 30 30 30 30 30 30 lor, sf,.$000000
2950: 46 46 20 74 65 78 74 2d 63 6f 6c 6f 72 2c 20 73 FF text-color, s
2960: 66 2c 0a 24 30 30 30 30 30 30 46 46 20 74 65 78 f,.$000000FF tex
2970: 74 2d 63 6f 6c 6f 72 2c 20 73 66 2c 0a 24 30 30 t-color, sf,.$00
2980: 30 30 30 30 46 46 20 74 65 78 74 2d 63 6f 6c 6f 0000FF text-colo
2990: 72 2c 20 73 66 2c 0a 24 30 30 30 30 46 46 46 46 r, sf,.$0000FFFF
29a0: 20 74 65 78 74 2d 63 6f 6c 6f 72 2c 20 73 66 2c text-color, sf,
29b0: 0a 24 30 30 30 30 46 46 46 46 20 74 65 78 74 2d .$0000FFFF text-
29c0: 63 6f 6c 6f 72 2c 20 73 66 2c 0a 24 30 30 30 30 color, sf,.$0000
29d0: 46 46 46 46 20 74 65 78 74 2d 63 6f 6c 6f 72 2c FFFF text-color,
29e0: 20 73 66 2c 0a 24 30 30 46 46 46 46 46 46 20 74 sf,.$00FFFFFF t
29f0: 65 78 74 2d 63 6f 6c 6f 72 2c 20 73 66 2c 0a 0a ext-color, sf,..
2a00: 5c 20 6d 6f 72 65 20 63 6f 6c 6f 72 73 0a 0a 24 \ more colors..$
2a10: 38 38 46 46 38 38 46 46 20 6e 65 77 2d 63 6f 6c 88FF88FF new-col
2a20: 6f 72 3a 20 6d 79 2d 73 69 67 6e 61 6c 0a 24 43 or: my-signal.$C
2a30: 43 46 46 43 43 46 46 20 6e 65 77 2d 63 6f 6c 6f CFFCCFF new-colo
2a40: 72 3a 20 6f 74 68 65 72 2d 73 69 67 6e 61 6c 0a r: other-signal.
2a50: 24 43 43 30 30 43 43 46 46 20 6e 65 77 2d 63 6f $CC00CCFF new-co
2a60: 6c 6f 72 3a 20 6d 79 2d 73 69 67 6e 61 6c 2d 6f lor: my-signal-o
2a70: 74 72 0a 24 38 38 30 30 38 38 46 46 20 6e 65 77 tr.$880088FF new
2a80: 2d 63 6f 6c 6f 72 3a 20 6f 74 68 65 72 2d 73 69 -color: other-si
2a90: 67 6e 61 6c 2d 6f 74 72 0a 24 34 34 34 34 43 43 gnal-otr.$4444CC
2aa0: 46 46 20 74 65 78 74 2d 63 6f 6c 6f 72 3a 20 6c FF text-color: l
2ab0: 69 6e 6b 2d 62 6c 75 65 0a 24 34 34 43 43 34 34 ink-blue.$44CC44
2ac0: 46 46 20 74 65 78 74 2d 63 6f 6c 6f 72 3a 20 72 FF text-color: r
2ad0: 65 2d 67 72 65 65 6e 0a 24 43 43 34 34 34 34 46 e-green.$CC4444F
2ae0: 46 20 74 65 78 74 2d 63 6f 6c 6f 72 3a 20 6f 62 F text-color: ob
2af0: 6a 2d 72 65 64 0a 24 30 30 42 46 46 46 46 46 20 j-red.$00BFFFFF
2b00: 74 65 78 74 2d 63 6f 6c 6f 72 3a 20 6c 69 67 68 text-color: ligh
2b10: 74 2d 62 6c 75 65 0a 24 34 34 46 46 34 34 46 46 t-blue.$44FF44FF
2b20: 20 74 65 78 74 2d 63 6f 6c 6f 72 3a 20 67 72 65 text-color: gre
2b30: 65 6e 69 73 68 0a 24 33 33 38 38 33 33 36 36 20 enish.$33883366
2b40: 6e 65 77 2d 63 6f 6c 6f 72 3a 20 64 61 79 2d 63 new-color: day-c
2b50: 6f 6c 6f 72 0a 24 38 38 33 33 33 33 36 36 20 6e olor.$88333366 n
2b60: 65 77 2d 63 6f 6c 6f 72 3a 20 68 6f 75 72 2d 63 ew-color: hour-c
2b70: 6f 6c 6f 72 0a 24 46 46 46 46 46 46 46 46 20 74 olor.$FFFFFFFF t
2b80: 65 78 74 2d 63 6f 6c 6f 72 3a 20 72 65 61 6c 77 ext-color: realw
2b90: 68 69 74 65 0a 24 46 46 46 46 46 46 46 46 20 6e hite.$FFFFFFFF n
2ba0: 65 77 2d 63 6f 6c 6f 72 3a 20 65 64 69 74 2d 62 ew-color: edit-b
2bb0: 67 0a 24 38 30 46 46 38 30 46 46 20 6e 65 77 2d g.$80FF80FF new-
2bc0: 63 6f 6c 6f 72 3a 20 73 65 6e 64 2d 63 6f 6c 6f color: send-colo
2bd0: 72 0a 24 30 30 46 46 30 30 32 30 20 6e 65 77 2d r.$00FF0020 new-
2be0: 63 6f 6c 6f 72 3a 20 70 65 74 2d 63 6f 6c 6f 72 color: pet-color
2bf0: 0a 24 46 46 46 46 38 30 46 46 20 6e 65 77 2d 63 .$FFFF80FF new-c
2c00: 6f 6c 6f 72 2c 20 66 76 61 6c 75 65 20 75 73 65 olor, fvalue use
2c10: 72 73 2d 63 6f 6c 6f 72 23 0a 0a 3a 20 6e 69 63 rs-color#..: nic
2c20: 6b 5b 5d 20 28 20 62 6f 78 20 6f 3a 6e 69 63 6b k[] ( box o:nick
2c30: 20 2d 2d 20 62 6f 78 20 29 0a 20 20 20 20 5b 3a -- box ). [:
2c40: 20 64 61 74 61 20 3e 6f 20 2e 22 20 63 6c 69 63 data >o ." clic
2c50: 6b 65 64 20 6f 6e 20 22 20 6b 65 2d 6e 69 63 6b ked on " ke-nick
2c60: 20 24 2e 20 63 72 20 6f 3e 20 3b 5d 20 6f 20 63 $. cr o> ;] o c
2c70: 6c 69 63 6b 5b 5d 20 3b 0a 0a 48 61 73 68 3a 20 lick[] ;..Hash:
2c80: 61 76 61 74 61 72 23 0a 0a 67 6c 75 65 20 6e 65 avatar#..glue ne
2c90: 77 20 43 6f 6e 73 74 61 6e 74 20 67 6c 75 65 2a w Constant glue*
2ca0: 61 76 61 74 61 72 0a 67 6c 75 65 2a 61 76 61 74 avatar.glue*avat
2cb0: 61 72 20 3e 6f 20 70 69 78 65 6c 73 69 7a 65 23 ar >o pixelsize#
2cc0: 20 36 34 20 66 6d 2a 20 30 65 20 30 67 20 67 6c 64 fm* 0e 0g gl
2cd0: 75 65 2d 64 75 70 20 68 67 6c 75 65 2d 63 20 67 ue-dup hglue-c g
2ce0: 6c 75 65 21 20 76 67 6c 75 65 2d 63 20 67 6c 75 lue! vglue-c glu
2cf0: 65 21 20 30 67 6c 75 65 20 64 67 6c 75 65 2d 63 e! 0glue dglue-c
2d00: 20 67 6c 75 65 21 20 6f 3e 0a 0a 3a 20 72 65 61 glue! o>..: rea
2d10: 64 2d 61 76 61 74 61 72 20 28 20 61 64 64 72 20 d-avatar ( addr
2d20: 75 20 2d 2d 20 61 64 64 72 27 20 75 27 20 29 0a u -- addr' u' ).
2d30: 20 20 20 20 3f 72 65 61 64 2d 65 6e 63 2d 68 61 ?read-enc-ha
2d40: 73 68 65 64 20 6d 65 6d 3e 74 68 75 6d 62 20 61 shed mem>thumb a
2d50: 74 6c 61 73 2d 72 65 67 69 6f 6e 20 3b 0a 3a 20 tlas-region ;.:
2d60: 73 68 6f 77 2d 61 76 61 74 61 72 20 28 20 61 64 show-avatar ( ad
2d70: 64 72 20 75 20 2d 2d 20 6f 20 29 0a 20 20 20 20 dr u -- o ).
2d80: 32 64 75 70 20 61 76 61 74 61 72 23 20 23 40 20 2dup avatar# #@
2d90: 6e 69 70 20 30 3d 20 49 46 0a 09 32 64 75 70 20 nip 0= IF..2dup
2da0: 72 65 61 64 2d 61 76 61 74 61 72 20 32 73 77 61 read-avatar 2swa
2db0: 70 20 61 76 61 74 61 72 23 20 23 21 0a 20 20 20 p avatar# #!.
2dc0: 20 45 4c 53 45 20 20 32 64 72 6f 70 20 20 54 48 ELSE 2drop TH
2dd0: 45 4e 0a 20 20 20 20 67 6c 75 65 2a 61 76 61 74 EN. glue*avat
2de0: 61 72 20 6c 61 73 74 23 20 63 65 6c 6c 2b 20 24 ar last# cell+ $
2df0: 40 20 64 72 6f 70 20 7d 7d 74 68 75 6d 62 0a 20 @ drop }}thumb.
2e00: 20 20 20 3e 72 20 7b 7b 20 72 3e 20 7d 7d 76 20 >r {{ r> }}v
2e10: 34 30 25 62 20 3b 0a 0a 3a 20 72 65 2d 61 76 61 40%b ;..: re-ava
2e20: 74 61 72 20 28 20 6c 61 73 74 23 20 2d 2d 20 29 tar ( last# -- )
2e30: 0a 20 20 20 20 3e 72 20 72 40 20 24 40 20 72 65 . >r r@ $@ re
2e40: 61 64 2d 61 76 61 74 61 72 20 72 3e 20 63 65 6c ad-avatar r> cel
2e50: 6c 2b 20 24 40 20 73 6d 6f 76 65 20 3b 0a 0a 3a l+ $@ smove ;..:
2e60: 6e 6f 6e 61 6d 65 20 64 65 66 65 72 73 20 66 72 noname defers fr
2e70: 65 65 2d 74 68 75 6d 62 73 0a 20 20 20 20 61 76 ee-thumbs. av
2e80: 61 74 61 72 23 20 5b 27 5d 20 72 65 2d 61 76 61 atar# ['] re-ava
2e90: 74 61 72 20 23 6d 61 70 20 3b 20 69 73 20 66 72 tar #map ; is fr
2ea0: 65 65 2d 74 68 75 6d 62 73 0a 0a 3a 20 3f 61 76 ee-thumbs..: ?av
2eb0: 61 74 61 72 20 28 20 61 64 64 72 20 75 20 2d 2d atar ( addr u --
2ec0: 20 6f 20 2f 20 29 0a 20 20 20 20 6b 65 79 23 20 o / ). key#
2ed0: 23 40 20 49 46 0a 09 63 65 6c 6c 2b 20 2e 6b 65 #@ IF..cell+ .ke
2ee0: 2d 61 76 61 74 61 72 20 24 40 20 64 75 70 20 49 -avatar $@ dup I
2ef0: 46 0a 09 20 20 20 20 73 68 6f 77 2d 61 76 61 74 F.. show-avat
2f00: 61 72 0a 09 45 4c 53 45 20 20 32 64 72 6f 70 20 ar..ELSE 2drop
2f10: 20 54 48 45 4e 0a 20 20 20 20 45 4c 53 45 20 20 THEN. ELSE
2f20: 64 72 6f 70 20 20 54 48 45 4e 20 3b 0a 0a 3a 20 drop THEN ;..:
2f30: 73 68 6f 77 2d 6e 69 63 6b 20 28 20 6f 3a 6b 65 show-nick ( o:ke
2f40: 79 20 2d 2d 20 29 0a 20 20 20 20 6b 65 2d 69 6d y -- ). ke-im
2f50: 70 6f 72 74 73 20 40 20 5b 20 31 20 69 6d 70 6f ports @ [ 1 impo
2f60: 72 74 23 70 72 6f 76 69 73 69 6f 6e 61 6c 20 6c rt#provisional l
2f70: 73 68 69 66 74 20 5d 4c 20 61 6e 64 20 3f 45 58 shift ]L and ?EX
2f80: 49 54 0a 20 20 20 20 6b 65 2d 69 6d 70 6f 72 74 IT. ke-import
2f90: 73 20 40 20 3e 69 6d 2d 63 6f 6c 6f 72 23 20 73 s @ >im-color# s
2fa0: 66 6c 6f 61 74 73 20 7b 20 6b 69 20 7d 0a 20 20 floats { ki }.
2fb0: 20 20 7b 7b 20 67 6c 75 65 2a 6c 20 69 6d 70 6f {{ glue*l impo
2fc0: 72 74 73 23 72 67 62 2d 62 67 20 6b 69 20 2b 20 rts#rgb-bg ki +
2fd0: 73 66 40 20 73 6c 69 64 65 2d 66 72 61 6d 65 20 sf@ slide-frame
2fe0: 64 75 70 20 2e 62 75 74 74 6f 6e 31 0a 09 7b 7b dup .button1..{{
2ff0: 0a 09 20 20 20 20 7b 7b 20 5c 6c 61 72 67 65 20 .. {{ \large
3000: 69 6d 70 6f 72 74 73 23 72 67 62 2d 66 67 20 6b imports#rgb-fg k
3010: 69 20 2b 20 73 66 40 20 74 6f 20 78 2d 63 6f 6c i + sf@ to x-col
3020: 6f 72 0a 09 09 6b 65 2d 61 76 61 74 61 72 20 24 or...ke-avatar $
3030: 40 20 64 75 70 20 49 46 20 20 73 68 6f 77 2d 61 @ dup IF show-a
3040: 76 61 74 61 72 20 20 45 4c 53 45 20 20 32 64 72 vatar ELSE 2dr
3050: 6f 70 20 20 54 48 45 4e 0a 09 09 6b 65 2d 73 6b op THEN...ke-sk
3060: 20 73 65 63 40 20 6e 69 70 20 49 46 20 20 5c 62 sec@ nip IF \b
3070: 6f 6c 64 20 20 45 4c 53 45 20 20 5c 72 65 67 75 old ELSE \regu
3080: 6c 61 72 20 20 54 48 45 4e 20 20 5c 73 61 6e 73 lar THEN \sans
3090: 0a 09 09 5b 27 5d 20 2e 6e 69 63 6b 2d 62 61 73 ...['] .nick-bas
30a0: 65 20 24 74 6d 70 20 7d 7d 74 65 78 74 20 32 35 e $tmp }}text 25
30b0: 25 62 0a 09 09 6b 65 2d 70 65 74 73 5b 5d 20 24 %b...ke-pets[] $
30c0: 5b 5d 23 20 49 46 0a 09 09 20 20 20 20 7b 7b 0a []# IF... {{.
30d0: 09 09 09 78 2d 63 6f 6c 6f 72 20 67 6c 75 65 2a ...x-color glue*
30e0: 6c 20 70 65 74 2d 63 6f 6c 6f 72 20 78 2d 63 6f l pet-color x-co
30f0: 6c 6f 72 20 73 6c 69 64 65 2d 66 72 61 6d 65 20 lor slide-frame
3100: 64 75 70 20 2e 62 75 74 74 6f 6e 33 20 74 6f 20 dup .button3 to
3110: 78 2d 63 6f 6c 6f 72 0a 09 09 09 5b 27 5d 20 2e x-color....['] .
3120: 70 65 74 2d 62 61 73 65 20 24 74 6d 70 20 7d 7d pet-base $tmp }}
3130: 74 65 78 74 20 32 35 25 62 0a 09 09 20 20 20 20 text 25%b...
3140: 7d 7d 7a 0a 09 09 54 48 45 4e 0a 09 20 20 20 20 }}z...THEN..
3150: 67 6c 75 65 2a 6c 20 7d 7d 67 6c 75 65 20 7d 7d glue*l }}glue }}
3160: 68 20 6e 61 6d 65 2d 74 61 62 0a 09 20 20 20 20 h name-tab..
3170: 7b 7b 0a 09 09 7b 7b 20 5c 73 61 6e 73 20 5c 73 {{...{{ \sans \s
3180: 63 72 69 70 74 20 6b 65 2d 73 65 6c 66 73 69 67 cript ke-selfsig
3190: 20 24 40 20 5b 27 5d 20 2e 73 69 67 64 61 74 65 $@ ['] .sigdate
31a0: 73 20 24 74 6d 70 20 7d 7d 74 65 78 74 20 67 6c s $tmp }}text gl
31b0: 75 65 2a 6c 20 7d 7d 67 6c 75 65 20 7d 7d 68 0a ue*l }}glue }}h.
31c0: 09 09 7b 7b 20 5c 6d 6f 6e 6f 20 5c 73 63 72 69 ..{{ \mono \scri
31d0: 70 74 20 6b 65 2d 70 6b 20 24 40 20 6b 65 79 7c pt ke-pk $@ key|
31e0: 20 5b 27 5d 20 38 35 74 79 70 65 20 24 74 6d 70 ['] 85type $tmp
31f0: 20 7d 7d 74 65 78 74 20 32 30 25 62 74 20 67 6c }}text 20%bt gl
3200: 75 65 2a 6c 20 7d 7d 67 6c 75 65 20 7d 7d 68 20 ue*l }}glue }}h
3210: 73 77 61 70 0a 09 20 20 20 20 7d 7d 76 20 70 6b swap.. }}v pk
3220: 2d 74 61 62 0a 09 67 6c 75 65 2a 6c 6c 6c 20 7d -tab..glue*lll }
3230: 7d 67 6c 75 65 20 7d 7d 68 0a 20 20 20 20 7d 7d }glue }}h. }}
3240: 7a 20 6e 69 63 6b 5b 5d 20 20 5c 72 65 67 75 6c z nick[] \regul
3250: 61 72 0a 20 20 20 20 6d 79 6b 65 79 2d 62 6f 78 ar. mykey-box
3260: 20 6e 69 63 6b 73 2d 62 6f 78 20 6b 65 2d 73 6b nicks-box ke-sk
3270: 20 73 65 63 40 20 6e 69 70 20 73 65 6c 65 63 74 sec@ nip select
3280: 20 2f 66 6c 6f 70 20 2e 63 68 69 6c 64 2b 20 3b /flop .child+ ;
3290: 0a 0a 3a 20 66 69 6c 6c 2d 6e 69 63 6b 73 20 28 ..: fill-nicks (
32a0: 20 2d 2d 20 29 0a 20 20 20 20 6b 65 79 73 3e 73 -- ). keys>s
32b0: 6f 72 74 5b 5d 0a 20 20 20 20 6b 65 79 2d 6c 69 ort[]. key-li
32c0: 73 74 5b 5d 20 24 40 20 62 6f 75 6e 64 73 20 3f st[] $@ bounds ?
32d0: 44 4f 0a 09 49 20 40 20 2e 73 68 6f 77 2d 6e 69 DO..I @ .show-ni
32e0: 63 6b 0a 20 20 20 20 63 65 6c 6c 20 2b 4c 4f 4f ck. cell +LOO
32f0: 50 20 3b 0a 0a 3a 20 72 65 66 72 65 73 68 2d 74 P ;..: refresh-t
3300: 6f 70 20 28 20 2d 2d 20 29 0a 20 20 20 20 2b 73 op ( -- ). +s
3310: 79 6e 63 20 2b 6c 61 6e 67 0a 20 20 20 20 74 6f ync +lang. to
3320: 70 2d 77 69 64 67 65 74 20 3e 6f 20 68 74 6f 70 p-widget >o htop
3330: 2d 72 65 73 69 7a 65 20 20 3c 64 72 61 77 2d 69 -resize <draw-i
3340: 6e 69 74 20 64 72 61 77 2d 69 6e 69 74 20 64 72 nit draw-init dr
3350: 61 77 2d 69 6e 69 74 3e 20 68 74 6f 70 2d 72 65 aw-init> htop-re
3360: 73 69 7a 65 0a 20 20 20 20 66 61 6c 73 65 20 74 size. false t
3370: 6f 20 67 72 61 62 2d 6d 6f 76 65 3f 20 6f 3e 20 o grab-move? o>
3380: 3b 0a 0a 3a 20 73 68 6f 77 2d 63 6f 6e 6e 65 63 ;..: show-connec
3390: 74 65 64 20 28 20 2d 2d 20 29 20 6d 61 69 6e 2d ted ( -- ) main-
33a0: 75 70 40 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2e up@ connection .
33b0: 77 61 69 74 2d 74 61 73 6b 20 21 20 3b 0a 0a 3a wait-task ! ;..:
33c0: 20 67 75 69 2d 63 68 61 74 2d 63 6f 6e 6e 65 63 gui-chat-connec
33d0: 74 73 20 28 20 2d 2d 20 29 0a 20 20 20 20 5b 3a ts ( -- ). [:
33e0: 20 75 70 40 20 77 61 69 74 2d 74 61 73 6b 20 21 up@ wait-task !
33f0: 20 3b 5d 20 49 53 20 64 6f 2d 63 6f 6e 6e 65 63 ;] IS do-connec
3400: 74 0a 20 20 20 20 5b 3a 20 63 68 61 74 2d 6b 65 t. [: chat-ke
3410: 79 73 20 5b 3a 0a 09 20 20 20 20 32 64 75 70 20 ys [:.. 2dup
3420: 73 65 61 72 63 68 2d 63 6f 6e 6e 65 63 74 20 3f search-connect ?
3430: 64 75 70 2d 49 46 20 20 3e 6f 20 2b 67 72 6f 75 dup-IF >o +grou
3440: 70 20 67 72 65 65 74 20 6f 3e 20 32 64 72 6f 70 p greet o> 2drop
3450: 20 20 45 58 49 54 20 20 54 48 45 4e 0a 09 20 20 EXIT THEN..
3460: 20 20 32 64 75 70 20 70 6b 2d 70 65 65 6b 3f 20 2dup pk-peek?
3470: 49 46 20 20 63 68 61 74 2d 63 6f 6e 6e 65 63 74 IF chat-connect
3480: 20 74 72 75 65 20 21 21 63 6f 6e 6e 65 63 74 65 true !!connecte
3490: 64 21 21 0a 09 20 20 20 20 45 4c 53 45 20 20 32 d!!.. ELSE 2
34a0: 64 72 6f 70 20 20 54 48 45 4e 20 3b 5d 20 24 5b drop THEN ;] $[
34b0: 5d 6d 61 70 20 3b 5d 20 63 61 74 63 68 0a 20 20 ]map ;] catch.
34c0: 20 20 5b 20 27 20 21 21 63 6f 6e 6e 65 63 74 65 [ ' !!connecte
34d0: 64 21 21 20 3e 62 6f 64 79 20 40 20 5d 4c 20 3d d!! >body @ ]L =
34e0: 20 49 46 20 20 73 68 6f 77 2d 63 6f 6e 6e 65 63 IF show-connec
34f0: 74 65 64 20 20 54 48 45 4e 20 3b 0a 0a 65 76 65 ted THEN ;..eve
3500: 6e 74 3a 20 3a 3e 21 63 6f 6e 6e 65 63 74 69 6f nt: :>!connectio
3510: 6e 20 20 20 20 74 6f 20 63 6f 6e 6e 65 63 74 69 n to connecti
3520: 6f 6e 20 3b 0a 65 76 65 6e 74 3a 20 3a 3e 63 68 on ;.event: :>ch
3530: 61 74 2d 63 6f 6e 6e 65 63 74 73 20 20 67 75 69 at-connects gui
3540: 2d 63 68 61 74 2d 63 6f 6e 6e 65 63 74 73 0a 20 -chat-connects.
3550: 20 20 20 3c 65 76 65 6e 74 20 63 6f 6e 6e 65 63 <event connec
3560: 74 69 6f 6e 20 64 75 70 20 65 6c 69 74 2c 20 3a tion dup elit, :
3570: 3e 21 63 6f 6e 6e 65 63 74 69 6f 6e 20 2e 77 61 >!connection .wa
3580: 69 74 2d 74 61 73 6b 20 40 20 65 76 65 6e 74 3e it-task @ event>
3590: 20 3b 0a 0a 66 61 6c 73 65 20 56 61 6c 75 65 20 ;..false Value
35a0: 69 6e 2d 67 72 6f 75 70 3f 0a 0a 3a 20 67 72 6f in-group?..: gro
35b0: 75 70 5b 5d 20 28 20 62 6f 78 20 67 72 6f 75 70 up[] ( box group
35c0: 20 2d 2d 20 62 6f 78 20 29 0a 20 20 20 20 5b 3a -- box ). [:
35d0: 20 20 69 6e 2d 67 72 6f 75 70 3f 20 3f 45 58 49 in-group? ?EXI
35e0: 54 20 20 74 72 75 65 20 74 6f 20 69 6e 2d 67 72 T true to in-gr
35f0: 6f 75 70 3f 0a 09 64 61 74 61 20 24 40 20 67 72 oup?..data $@ gr
3600: 6f 75 70 2d 6e 61 6d 65 20 3e 6f 20 74 6f 20 74 oup-name >o to t
3610: 65 78 74 24 20 6f 3e 0a 09 64 61 74 61 20 63 65 ext$ o>..data ce
3620: 6c 6c 2b 20 24 40 20 64 72 6f 70 20 63 65 6c 6c ll+ $@ drop cell
3630: 2b 20 3e 6f 20 67 72 6f 75 70 73 3a 69 64 24 20 + >o groups:id$
3640: 67 72 6f 75 70 73 3a 6d 65 6d 62 65 72 5b 5d 20 groups:member[]
3650: 6f 3e 0a 09 5b 3a 20 63 68 61 74 2d 6b 65 79 73 o>..[: chat-keys
3660: 20 24 2b 5b 5d 21 20 3b 5d 20 24 5b 5d 6d 61 70 $+[]! ;] $[]map
3670: 0a 09 67 75 69 2d 6d 73 67 73 20 20 3c 65 76 65 ..gui-msgs <eve
3680: 6e 74 20 3a 3e 63 68 61 74 2d 63 6f 6e 6e 65 63 nt :>chat-connec
3690: 74 73 20 3f 71 75 65 72 79 2d 74 61 73 6b 20 65 ts ?query-task e
36a0: 76 65 6e 74 3e 0a 09 6e 65 78 74 2d 73 6c 69 64 vent>..next-slid
36b0: 65 0a 20 20 20 20 3b 5d 20 73 77 61 70 20 63 6c e. ;] swap cl
36c0: 69 63 6b 5b 5d 20 3b 0a 0a 3a 20 73 68 6f 77 2d ick[] ;..: show-
36d0: 67 72 6f 75 70 20 28 20 6c 61 73 74 23 20 2d 2d group ( last# --
36e0: 20 29 0a 20 20 20 20 64 75 70 20 7b 20 67 20 2d ). dup { g -
36f0: 2d 20 7d 20 63 65 6c 6c 2b 20 24 40 20 64 72 6f - } cell+ $@ dro
3700: 70 20 63 65 6c 6c 2b 20 3e 6f 0a 20 20 20 20 7b p cell+ >o. {
3710: 7b 20 67 6c 75 65 2a 6c 20 63 68 61 74 2d 62 67 { glue*l chat-bg
3720: 2d 63 6f 6c 23 20 73 6c 69 64 65 2d 66 72 61 6d -col# slide-fram
3730: 65 20 64 75 70 20 2e 62 75 74 74 6f 6e 31 0a 09 e dup .button1..
3740: 7b 7b 0a 09 20 20 20 20 7b 7b 20 5c 6c 61 72 67 {{.. {{ \larg
3750: 65 20 62 6c 61 63 6b 69 73 68 0a 09 09 5c 72 65 e blackish...\re
3760: 67 75 6c 61 72 20 5c 73 61 6e 73 20 67 20 24 40 gular \sans g $@
3770: 20 7d 7d 74 65 78 74 20 32 35 25 62 0a 09 20 20 }}text 25%b..
3780: 20 20 67 6c 75 65 2a 6c 20 7d 7d 67 6c 75 65 20 glue*l }}glue
3790: 7d 7d 68 20 6e 61 6d 65 2d 74 61 62 0a 09 20 20 }}h name-tab..
37a0: 20 20 7b 7b 0a 09 09 7b 7b 0a 09 09 20 20 20 20 {{...{{...
37b0: 5c 6d 6f 6e 6f 20 5c 62 6f 6c 64 20 5c 73 63 72 \mono \bold \scr
37c0: 69 70 74 20 67 72 6f 75 70 73 3a 69 64 24 0a 09 ipt groups:id$..
37d0: 09 20 20 20 20 32 64 75 70 20 67 20 24 40 20 73 . 2dup g $@ s
37e0: 74 72 3d 20 30 3d 20 49 46 20 20 6b 65 79 7c 20 tr= 0= IF key|
37f0: 5b 27 5d 20 38 35 74 79 70 65 20 24 74 6d 70 20 ['] 85type $tmp
3800: 20 54 48 45 4e 0a 09 09 7d 7d 74 65 78 74 20 32 THEN...}}text 2
3810: 30 25 62 74 20 67 6c 75 65 2a 6c 20 7d 7d 67 6c 0%bt glue*l }}gl
3820: 75 65 20 7d 7d 68 0a 09 09 67 6c 75 65 2a 6c 20 ue }}h...glue*l
3830: 7d 7d 67 6c 75 65 0a 09 20 20 20 20 7d 7d 76 20 }}glue.. }}v
3840: 70 6b 2d 74 61 62 0a 09 67 6c 75 65 2a 6c 6c 6c pk-tab..glue*lll
3850: 20 7d 7d 67 6c 75 65 20 7d 7d 68 0a 20 20 20 20 }}glue }}h.
3860: 7d 7d 7a 20 67 20 67 72 6f 75 70 5b 5d 20 6f 3e }}z g group[] o>
3870: 0a 20 20 20 20 67 72 6f 75 70 73 2d 62 6f 78 20 . groups-box
3880: 2f 66 6c 6f 70 20 2e 63 68 69 6c 64 2b 20 3b 0a /flop .child+ ;.
3890: 0a 3a 20 66 69 6c 6c 2d 67 72 6f 75 70 73 20 28 .: fill-groups (
38a0: 20 2d 2d 20 29 0a 20 20 20 20 67 72 6f 75 70 73 -- ). groups
38b0: 3e 73 6f 72 74 5b 5d 0a 20 20 20 20 67 72 6f 75 >sort[]. grou
38c0: 70 2d 6c 69 73 74 5b 5d 20 24 40 20 62 6f 75 6e p-list[] $@ boun
38d0: 64 73 20 3f 44 4f 0a 09 49 20 40 20 73 68 6f 77 ds ?DO..I @ show
38e0: 2d 67 72 6f 75 70 0a 20 20 20 20 63 65 6c 6c 20 -group. cell
38f0: 2b 4c 4f 4f 50 20 3b 0a 0a 61 6c 73 6f 20 5b 69 +LOOP ;..also [i
3900: 66 64 65 66 5d 20 61 6e 64 72 6f 69 64 20 61 6e fdef] android an
3910: 64 72 6f 69 64 20 5b 74 68 65 6e 5d 0a 0a 74 65 droid [then]..te
3920: 78 3a 20 76 70 2d 74 69 74 6c 65 0a 0a 24 46 31 x: vp-title..$F1
3930: 31 30 20 43 6f 6e 73 74 61 6e 74 20 27 73 70 69 10 Constant 'spi
3940: 6e 6e 65 72 27 0a 24 46 30 31 32 20 43 6f 6e 73 nner'.$F012 Cons
3950: 74 61 6e 74 20 27 73 69 67 6e 61 6c 27 0a 24 46 tant 'signal'.$F
3960: 32 33 34 20 43 6f 6e 73 74 61 6e 74 20 27 75 73 234 Constant 'us
3970: 65 72 2d 70 6c 75 73 27 0a 24 46 35 30 33 20 43 er-plus'.$F503 C
3980: 6f 6e 73 74 61 6e 74 20 27 75 73 65 72 2d 6d 69 onstant 'user-mi
3990: 6e 75 73 27 0a 24 46 32 33 35 20 43 6f 6e 73 74 nus'.$F235 Const
39a0: 61 6e 74 20 27 75 73 65 72 2d 74 69 6d 65 73 27 ant 'user-times'
39b0: 0a 0a 30 20 56 61 6c 75 65 20 6f 6e 6c 69 6e 65 ..0 Value online
39c0: 2d 66 6c 61 67 0a 0a 3a 20 6f 6e 6c 69 6e 65 2d -flag..: online-
39d0: 73 79 6d 62 6f 6c 20 28 20 2d 2d 20 61 64 64 72 symbol ( -- addr
39e0: 20 75 20 29 0a 20 20 20 20 27 73 69 67 6e 61 6c u ). 'signal
39f0: 27 20 27 73 70 69 6e 6e 65 72 27 20 6f 6e 6c 69 ' 'spinner' onli
3a00: 6e 65 3f 20 73 65 6c 65 63 74 20 5b 27 5d 20 78 ne? select ['] x
3a10: 65 6d 69 74 20 24 74 6d 70 20 3b 0a 3a 20 21 6f emit $tmp ;.: !o
3a20: 6e 6c 69 6e 65 2d 73 79 6d 62 6f 6c 20 28 20 2d nline-symbol ( -
3a30: 2d 20 29 0a 20 20 20 20 6f 6e 6c 69 6e 65 2d 73 - ). online-s
3a40: 79 6d 62 6f 6c 20 6f 6e 6c 69 6e 65 2d 66 6c 61 ymbol online-fla
3a50: 67 20 3e 6f 20 74 6f 20 74 65 78 74 24 20 6f 3e g >o to text$ o>
3a60: 20 2b 73 79 6e 63 20 3b 0a 3a 6e 6f 6e 61 6d 65 +sync ;.:noname
3a70: 20 20 74 72 75 65 20 74 6f 20 6f 6e 6c 69 6e 65 true to online
3a80: 3f 20 5b 27 5d 20 61 6e 6e 6f 75 6e 63 65 2d 6d ? ['] announce-m
3a90: 65 20 63 61 74 63 68 20 30 3d 20 74 6f 20 6f 6e e catch 0= to on
3aa0: 6c 69 6e 65 3f 0a 20 20 20 20 21 6f 6e 6c 69 6e line?. !onlin
3ab0: 65 2d 73 79 6d 62 6f 6c 20 3b 20 69 73 20 61 64 e-symbol ; is ad
3ac0: 64 72 2d 63 68 61 6e 67 65 64 0a 0a 3a 20 6e 69 dr-changed..: ni
3ad0: 63 6b 73 2d 74 69 74 6c 65 20 28 20 2d 2d 20 29 cks-title ( -- )
3ae0: 0a 20 20 20 20 7b 7b 20 67 6c 75 65 2a 6c 20 62 . {{ glue*l b
3af0: 6c 61 63 6b 23 20 73 6c 69 64 65 2d 66 72 61 6d lack# slide-fram
3b00: 65 20 64 75 70 20 2e 62 75 74 74 6f 6e 31 0a 09 e dup .button1..
3b10: 7b 7b 0a 09 20 20 20 20 7b 7b 0a 09 09 7b 7b 0a {{.. {{...{{.
3b20: 09 09 20 20 20 20 7b 7b 20 5c 6c 61 72 67 65 20 .. {{ \large
3b30: 5c 62 6f 6c 64 20 5c 73 61 6e 73 20 72 65 61 6c \bold \sans real
3b40: 77 68 69 74 65 0a 09 09 20 20 20 20 6c 22 20 4e white... l" N
3b50: 69 63 6b 2b 50 65 74 22 20 7d 7d 69 31 38 6e 2d ick+Pet" }}i18n-
3b60: 74 65 78 74 20 32 35 25 62 20 67 6c 75 65 2a 6c text 25%b glue*l
3b70: 20 7d 7d 67 6c 75 65 20 7d 7d 68 20 6e 61 6d 65 }}glue }}h name
3b80: 2d 74 61 62 0a 09 09 20 20 20 20 7b 7b 0a 09 09 -tab... {{...
3b90: 09 7b 7b 20 5c 73 63 72 69 70 74 20 5c 6d 6f 6e .{{ \script \mon
3ba0: 6f 20 5c 62 6f 6c 64 20 6c 22 20 50 75 62 6b 65 o \bold l" Pubke
3bb0: 79 22 20 20 20 7d 7d 69 31 38 6e 2d 74 65 78 74 y" }}i18n-text
3bc0: 20 32 30 25 62 74 20 67 6c 75 65 2a 6c 20 7d 7d 20%bt glue*l }}
3bd0: 67 6c 75 65 20 7d 7d 68 0a 09 09 09 7b 7b 20 5c glue }}h....{{ \
3be0: 73 63 72 69 70 74 20 5c 73 61 6e 73 20 5c 62 6f script \sans \bo
3bf0: 6c 64 20 6c 22 20 4b 65 79 20 64 61 74 65 22 20 ld l" Key date"
3c00: 7d 7d 69 31 38 6e 2d 74 65 78 74 20 67 6c 75 65 }}i18n-text glue
3c10: 2a 6c 20 7d 7d 67 6c 75 65 20 7d 7d 68 0a 09 09 *l }}glue }}h...
3c20: 20 20 20 20 7d 7d 76 20 70 6b 2d 74 61 62 0a 09 }}v pk-tab..
3c30: 09 20 20 20 20 67 6c 75 65 2a 6c 6c 6c c2 b1 20 . glue*lll±
3c40: 7d 7d 67 6c 75 65 0a 09 09 7d 7d 68 20 62 6f 78 }}glue...}}h box
3c50: 5b 5d 0a 09 20 20 20 20 76 70 2d 74 69 74 6c 65 [].. vp-title
3c60: 20 67 6c 75 65 2a 6c 6c 6c 20 5b 27 5d 20 76 70 glue*lll ['] vp
3c70: 2d 74 69 74 6c 65 20 7d 7d 76 70 20 76 70 5b 5d -title }}vp vp[]
3c80: 20 64 75 70 20 74 6f 20 74 69 74 6c 65 2d 76 70 dup to title-vp
3c90: 0a 09 7d 7d 68 20 62 6f 78 5b 5d 0a 20 20 20 20 ..}}h box[].
3ca0: 7d 7d 7a 20 62 6f 78 5b 5d 20 3b 0a 0a 70 72 65 }}z box[] ;..pre
3cb0: 76 69 6f 75 73 0a 0a 7b 7b 20 75 73 65 72 73 2d vious..{{ users-
3cc0: 63 6f 6c 6f 72 23 20 70 72 65 73 2d 66 72 61 6d color# pres-fram
3cd0: 65 0a 20 20 20 20 7b 7b 0a 09 7b 7b 0a 09 20 20 e. {{..{{..
3ce0: 20 20 6e 69 63 6b 73 2d 74 69 74 6c 65 0a 09 20 nicks-title..
3cf0: 20 20 20 67 6c 75 65 2a 73 68 72 69 6e 6b 20 7d glue*shrink }
3d00: 7d 67 6c 75 65 0a 09 20 20 20 20 5c 4c 61 72 67 }glue.. \Larg
3d10: 65 0a 09 20 20 20 20 73 22 20 e2 9d 8c 22 20 24 e.. s" ❌" $
3d20: 34 34 34 34 34 34 46 46 20 6e 65 77 2d 63 6f 6c 444444FF new-col
3d30: 6f 72 2c 20 7d 7d 62 75 74 74 6f 6e 2d 6c 69 74 or, }}button-lit
3d40: 20 2f 68 66 69 78 20 5b 3a 20 2d 31 20 64 61 74 /hfix [: -1 dat
3d50: 61 20 2b 21 20 3b 5d 0a 09 20 20 20 20 5b 49 46 a +! ;].. [IF
3d60: 44 45 46 5d 20 61 6e 64 72 6f 69 64 20 61 6e 64 DEF] android and
3d70: 72 6f 69 64 3a 6c 65 76 65 6c 23 20 5b 45 4c 53 roid:level# [ELS
3d80: 45 5d 20 6c 65 76 65 6c 23 20 5b 54 48 45 4e 5d E] level# [THEN]
3d90: 20 63 6c 69 63 6b 5b 5d 0a 09 7d 7d 68 20 62 6f click[]..}}h bo
3da0: 78 5b 5d 20 2f 76 66 69 78 0a 09 7b 7b 0a 09 20 x[] /vfix..{{..
3db0: 20 20 20 7b 7b 0a 09 09 7b 7b 20 67 6c 75 65 2a {{...{{ glue*
3dc0: 6c 20 24 33 30 33 30 30 30 46 46 20 6e 65 77 2d l $303000FF new-
3dd0: 63 6f 6c 6f 72 2c 20 62 61 72 2d 66 72 61 6d 65 color, bar-frame
3de0: 0a 09 09 7b 7b 20 5c 73 63 72 69 70 74 20 6c 22 ...{{ \script l"
3df0: 20 4d 79 20 6b 65 79 22 20 7d 7d 69 31 38 6e 2d My key" }}i18n-
3e00: 74 65 78 74 20 32 35 25 62 20 67 6c 75 65 2a 6c text 25%b glue*l
3e10: 20 7d 7d 67 6c 75 65 20 7d 7d 68 20 7d 7d 7a 0a }}glue }}h }}z.
3e20: 09 09 7b 7b 20 7d 7d 76 20 62 6f 78 5b 5d 20 64 ..{{ }}v box[] d
3e30: 75 70 20 74 6f 20 6d 79 6b 65 79 2d 62 6f 78 0a up to mykey-box.
3e40: 09 09 7b 7b 20 67 6c 75 65 2a 6c 20 24 33 30 30 ..{{ glue*l $300
3e50: 30 33 30 46 46 20 6e 65 77 2d 63 6f 6c 6f 72 2c 030FF new-color,
3e60: 20 62 61 72 2d 66 72 61 6d 65 0a 09 09 7b 7b 20 bar-frame...{{
3e70: 5c 73 63 72 69 70 74 20 6c 22 20 4d 79 20 67 72 \script l" My gr
3e80: 6f 75 70 73 22 20 7d 7d 69 31 38 6e 2d 74 65 78 oups" }}i18n-tex
3e90: 74 20 32 35 25 62 20 67 6c 75 65 2a 6c 20 7d 7d t 25%b glue*l }}
3ea0: 67 6c 75 65 20 7d 7d 68 20 7d 7d 7a 0a 09 09 7b glue }}h }}z...{
3eb0: 7b 20 7d 7d 76 20 62 6f 78 5b 5d 20 64 75 70 20 { }}v box[] dup
3ec0: 74 6f 20 67 72 6f 75 70 73 2d 62 6f 78 20 2f 76 to groups-box /v
3ed0: 66 6c 69 70 0a 09 09 7b 7b 20 67 6c 75 65 2a 6c flip...{{ glue*l
3ee0: 20 24 30 30 33 30 33 30 46 46 20 6e 65 77 2d 63 $003030FF new-c
3ef0: 6f 6c 6f 72 2c 20 62 61 72 2d 66 72 61 6d 65 0a olor, bar-frame.
3f00: 09 09 7b 7b 20 5c 73 63 72 69 70 74 20 6c 22 20 ..{{ \script l"
3f10: 4d 79 20 70 65 65 72 73 22 20 7d 7d 69 31 38 6e My peers" }}i18n
3f20: 2d 74 65 78 74 20 32 35 25 62 20 67 6c 75 65 2a -text 25%b glue*
3f30: 6c 20 7d 7d 67 6c 75 65 20 7d 7d 68 20 7d 7d 7a l }}glue }}h }}z
3f40: 0a 09 09 7b 7b 20 7d 7d 76 20 62 6f 78 5b 5d 20 ...{{ }}v box[]
3f50: 64 75 70 20 74 6f 20 6e 69 63 6b 73 2d 62 6f 78 dup to nicks-box
3f60: 20 2f 76 66 6c 69 70 0a 09 09 67 6c 75 65 2a 6c /vflip...glue*l
3f70: 6c 6c 20 7d 7d 67 6c 75 65 0a 09 20 20 20 20 74 ll }}glue.. t
3f80: 65 78 3a 20 76 70 2d 6e 69 63 6b 73 20 76 70 2d ex: vp-nicks vp-
3f90: 6e 69 63 6b 73 20 67 6c 75 65 2a 6c 6c 6c 20 27 nicks glue*lll '
3fa0: 20 76 70 2d 6e 69 63 6b 73 20 7d 7d 76 70 20 76 vp-nicks }}vp v
3fb0: 70 5b 5d 20 64 75 70 20 76 61 6c 75 65 20 70 65 p[] dup value pe
3fc0: 65 72 73 2d 62 6f 78 0a 09 20 20 20 20 24 34 34 ers-box.. $44
3fd0: 34 34 34 34 46 46 20 6e 65 77 2d 63 6f 6c 6f 72 4444FF new-color
3fe0: 2c 20 74 6f 20 73 6c 69 64 65 72 2d 63 6f 6c 6f , to slider-colo
3ff0: 72 0a 09 20 20 20 20 24 43 43 43 43 43 43 46 46 r.. $CCCCCCFF
4000: 20 6e 65 77 2d 63 6f 6c 6f 72 2c 20 74 6f 20 73 new-color, to s
4010: 6c 69 64 65 72 2d 66 67 63 6f 6c 6f 72 0a 09 20 lider-fgcolor..
4020: 20 20 20 66 6f 6e 74 2d 73 69 7a 65 23 20 33 33 font-size# 33
4030: 25 20 66 2a 20 74 6f 20 73 6c 69 64 65 72 2d 62 % f* to slider-b
4040: 6f 72 64 65 72 0a 09 64 75 70 20 66 6f 6e 74 2d order..dup font-
4050: 73 69 7a 65 23 20 36 36 25 20 66 2a 20 66 64 75 size# 66% f* fdu
4060: 70 20 76 73 6c 69 64 65 72 20 7d 7d 68 20 62 6f p vslider }}h bo
4070: 78 5b 5d 0a 20 20 20 20 7d 7d 76 20 62 6f 78 5b x[]. }}v box[
4080: 5d 0a 7d 7d 7a 20 62 6f 78 5b 5d 20 74 6f 20 69 ].}}z box[] to i
4090: 64 2d 66 72 61 6d 65 0a 0a 3a 20 73 68 6f 77 2d d-frame..: show-
40a0: 6e 69 63 6b 73 20 28 20 2d 2d 20 29 0a 20 20 20 nicks ( -- ).
40b0: 20 66 69 6c 6c 2d 6e 69 63 6b 73 20 66 69 6c 6c fill-nicks fill
40c0: 2d 67 72 6f 75 70 73 20 21 6f 6e 6c 69 6e 65 2d -groups !online-
40d0: 73 79 6d 62 6f 6c 0a 20 20 20 20 6e 65 78 74 2d symbol. next-
40e0: 73 6c 69 64 65 0a 20 20 20 20 70 65 65 72 73 2d slide. peers-
40f0: 62 6f 78 20 30 2e 30 31 65 20 5b 3a 20 2e 76 70 box 0.01e [: .vp
4100: 2d 74 6f 70 20 66 64 72 6f 70 20 74 69 74 6c 65 -top fdrop title
4110: 2d 76 70 20 2e 76 70 2d 74 6f 70 20 2b 73 79 6e -vp .vp-top +syn
4120: 63 20 2b 72 65 73 69 7a 65 20 3b 5d 20 3e 61 6e c +resize ;] >an
4130: 69 6d 61 74 65 20 3b 0a 0a 5c 20 6d 65 73 73 61 imate ;..\ messa
4140: 67 65 73 0a 0a 6d 73 67 2d 63 6c 61 73 73 20 63 ges..msg-class c
4150: 6c 61 73 73 0a 65 6e 64 2d 63 6c 61 73 73 20 77 lass.end-class w
4160: 6d 73 67 2d 63 6c 61 73 73 0a 0a 56 61 72 69 61 msg-class..Varia
4170: 62 6c 65 20 6c 61 73 74 2d 62 75 62 62 6c 65 2d ble last-bubble-
4180: 70 6b 0a 30 20 56 61 6c 75 65 20 6c 61 73 74 2d pk.0 Value last-
4190: 6f 74 72 3f 0a 30 20 56 61 6c 75 65 20 6c 61 73 otr?.0 Value las
41a0: 74 2d 62 75 62 62 6c 65 0a 36 34 23 30 20 36 34 t-bubble.64#0 64
41b0: 56 61 6c 75 65 20 6c 61 73 74 2d 74 69 63 6b 0a Value last-tick.
41c0: 23 33 30 30 20 23 31 30 30 30 30 30 30 30 30 30 #300 #1000000000
41d0: 20 75 6d 2a 20 64 3e 36 34 20 36 34 43 6f 6e 73 um* d>64 64Cons
41e0: 74 61 6e 74 20 64 65 6c 74 61 2d 62 75 62 62 6c tant delta-bubbl
41f0: 65 0a 0a 3a 20 3e 62 75 62 62 6c 65 2d 62 6f 72 e..: >bubble-bor
4200: 64 65 72 20 28 20 6f 20 6d 65 3f 20 2d 2d 20 29 der ( o me? -- )
4210: 0a 20 20 20 20 73 77 61 70 20 3e 6f 20 66 6f 6e . swap >o fon
4220: 74 2d 73 69 7a 65 23 20 32 35 25 20 66 2a 0a 20 t-size# 25% f*.
4230: 20 20 20 49 46 0a 09 66 64 75 70 20 66 32 2a 20 IF..fdup f2*
4240: 74 6f 20 62 6f 72 64 65 72 0a 09 66 6e 65 67 61 to border..fnega
4250: 74 65 20 66 64 75 70 20 74 6f 20 62 6f 72 64 65 te fdup to borde
4260: 72 6c 20 66 64 75 70 20 74 6f 20 62 6f 72 64 65 rl fdup to borde
4270: 72 76 20 74 6f 20 62 6f 72 64 65 72 74 0a 20 20 rv to bordert.
4280: 20 20 45 4c 53 45 0a 09 66 64 75 70 20 66 32 2a ELSE..fdup f2*
4290: 20 74 6f 20 62 6f 72 64 65 72 0a 09 30 65 20 74 to border..0e t
42a0: 6f 20 62 6f 72 64 65 72 6c 20 66 6e 65 67 61 74 o borderl fnegat
42b0: 65 20 66 32 2a 20 74 6f 20 62 6f 72 64 65 72 74 e f2* to bordert
42c0: 20 30 65 20 74 6f 20 62 6f 72 64 65 72 76 0a 20 0e to borderv.
42d0: 20 20 20 54 48 45 4e 20 6f 20 6f 3e 20 3b 0a 3a THEN o o> ;.:
42e0: 20 61 64 64 2d 64 74 6d 73 20 28 20 74 69 63 6b add-dtms ( tick
42f0: 73 20 2d 2d 20 29 0a 20 20 20 20 5c 73 6d 61 6c s -- ). \smal
4300: 6c 20 62 6c 61 63 6b 69 73 68 0a 20 20 20 20 31 l blackish. 1
4310: 6e 20 66 6d 2a 20 3e 64 61 79 20 7b 20 64 61 79 n fm* >day { day
4320: 20 7d 20 64 61 79 20 6c 61 73 74 2d 64 61 79 20 } day last-day
4330: 3c 3e 20 49 46 0a 09 7b 7b 0a 09 20 20 20 20 78 <> IF..{{.. x
4340: 2d 63 6f 6c 6f 72 20 7b 20 66 3a 20 78 63 20 7d -color { f: xc }
4350: 0a 09 20 20 20 20 67 6c 75 65 2a 6c 20 64 61 79 .. glue*l day
4360: 2d 63 6f 6c 6f 72 20 78 2d 63 6f 6c 6f 72 20 73 -color x-color s
4370: 6c 69 64 65 2d 66 72 61 6d 65 20 64 75 70 20 2e lide-frame dup .
4380: 62 75 74 74 6f 6e 31 0a 09 20 20 20 20 78 63 20 button1.. xc
4390: 74 6f 20 78 2d 63 6f 6c 6f 72 0a 09 20 20 20 20 to x-color..
43a0: 5c 62 6f 6c 64 20 64 61 79 20 5b 27 5d 20 2e 64 \bold day ['] .d
43b0: 61 79 20 24 74 6d 70 20 7d 7d 74 65 78 74 20 32 ay $tmp }}text 2
43c0: 35 25 62 20 5c 72 65 67 75 6c 61 72 0a 09 7d 7d 5%b \regular..}}
43d0: 7a 20 2f 63 65 6e 74 65 72 20 6d 73 67 73 2d 62 z /center msgs-b
43e0: 6f 78 20 2e 63 68 69 6c 64 2b 0a 20 20 20 20 54 ox .child+. T
43f0: 48 45 4e 20 20 64 61 79 20 74 6f 20 6c 61 73 74 HEN day to last
4400: 2d 64 61 79 0a 20 20 20 20 32 34 20 66 6d 2a 20 -day. 24 fm*
4410: 66 73 70 6c 69 74 20 7b 20 68 6f 75 72 20 7d 20 fsplit { hour }
4420: 68 6f 75 72 20 6c 61 73 74 2d 68 6f 75 72 20 3c hour last-hour <
4430: 3e 0a 20 20 20 20 36 30 20 66 6d 2a 20 66 73 70 >. 60 fm* fsp
4440: 6c 69 74 20 7b 20 6d 69 6e 75 74 65 20 7d 20 6d lit { minute } m
4450: 69 6e 75 74 65 20 31 30 20 2f 20 6c 61 73 74 2d inute 10 / last-
4460: 6d 69 6e 75 74 65 20 31 30 20 2f 20 3c 3e 20 6f minute 10 / <> o
4470: 72 0a 20 20 20 20 49 46 0a 09 7b 7b 0a 09 20 20 r. IF..{{..
4480: 20 20 78 2d 63 6f 6c 6f 72 20 7b 20 66 3a 20 78 x-color { f: x
4490: 63 20 7d 0a 09 20 20 20 20 67 6c 75 65 2a 6c 20 c }.. glue*l
44a0: 68 6f 75 72 2d 63 6f 6c 6f 72 20 78 2d 63 6f 6c hour-color x-col
44b0: 6f 72 20 73 6c 69 64 65 2d 66 72 61 6d 65 20 64 or slide-frame d
44c0: 75 70 20 2e 62 75 74 74 6f 6e 31 0a 09 20 20 20 up .button1..
44d0: 20 78 63 20 74 6f 20 78 2d 63 6f 6c 6f 72 0a 09 xc to x-color..
44e0: 20 20 20 20 36 30 20 66 6d 2a 20 66 73 70 6c 69 60 fm* fspli
44f0: 74 20 6d 69 6e 75 74 65 20 68 6f 75 72 0a 09 20 t minute hour..
4500: 20 20 20 5b 3a 20 2e 23 23 20 27 3a 27 20 65 6d [: .## ':' em
4510: 69 74 20 2e 23 23 20 27 3a 27 20 65 6d 69 74 20 it .## ':' emit
4520: 2e 23 23 20 27 5a 27 20 65 6d 69 74 20 3b 5d 20 .## 'Z' emit ;]
4530: 24 74 6d 70 20 7d 7d 74 65 78 74 20 32 35 25 62 $tmp }}text 25%b
4540: 0a 09 7d 7d 7a 20 2f 63 65 6e 74 65 72 20 6d 73 ..}}z /center ms
4550: 67 73 2d 62 6f 78 20 2e 63 68 69 6c 64 2b 0a 20 gs-box .child+.
4560: 20 20 20 54 48 45 4e 20 20 68 6f 75 72 20 74 6f THEN hour to
4570: 20 6c 61 73 74 2d 68 6f 75 72 20 20 6d 69 6e 75 last-hour minu
4580: 74 65 20 74 6f 20 6c 61 73 74 2d 6d 69 6e 75 74 te to last-minut
4590: 65 0a 20 20 20 20 66 64 72 6f 70 20 5c 6e 6f 72 e. fdrop \nor
45a0: 6d 61 6c 20 3b 0a 0a 3a 20 6f 74 72 3f 20 28 20 mal ;..: otr? (
45b0: 74 69 63 6b 20 2d 2d 20 66 6c 61 67 20 29 0a 20 tick -- flag ).
45c0: 20 20 20 36 34 64 75 70 20 36 34 23 2d 31 20 36 64dup 64#-1 6
45d0: 34 3c 3e 20 3b 0a 3a 20 74 65 78 74 2d 63 6f 6c 4<> ;.: text-col
45e0: 6f 72 21 20 28 20 2d 2d 20 29 20 6c 61 73 74 2d or! ( -- ) last-
45f0: 6f 74 72 3f 20 49 46 20 20 67 72 65 65 6e 69 73 otr? IF greenis
4600: 68 20 20 45 4c 53 45 20 20 62 6c 61 63 6b 69 73 h ELSE blackis
4610: 68 20 20 54 48 45 4e 20 3b 0a 0a 5b 49 46 44 45 h THEN ;..[IFDE
4620: 46 5d 20 61 6e 64 72 6f 69 64 0a 20 20 20 20 61 F] android. a
4630: 6c 73 6f 20 6a 6e 69 0a 20 20 20 20 3a 20 6f 70 lso jni. : op
4640: 65 6e 2d 75 72 6c 20 28 20 61 64 64 72 20 75 20 en-url ( addr u
4650: 2d 2d 20 29 0a 09 63 6c 61 7a 7a 20 3e 6f 20 6d -- )..clazz >o m
4660: 61 6b 65 2d 6a 73 74 72 69 6e 67 20 74 6f 20 61 ake-jstring to a
4670: 72 67 73 30 20 6f 3e 0a 09 5b 27 5d 20 73 74 61 rgs0 o>..['] sta
4680: 72 74 62 72 6f 77 73 65 72 20 70 6f 73 74 2d 69 rtbrowser post-i
4690: 74 20 3b 0a 20 20 20 20 70 72 65 76 69 6f 75 73 t ;. previous
46a0: 0a 5b 45 4c 53 45 5d 0a 20 20 20 20 5b 49 46 44 .[ELSE]. [IFD
46b0: 45 46 5d 20 6c 69 6e 75 78 0a 09 3a 20 6f 70 65 EF] linux..: ope
46c0: 6e 2d 75 72 6c 20 28 20 61 64 64 72 20 75 20 2d n-url ( addr u -
46d0: 2d 20 29 0a 09 20 20 20 20 5b 3a 20 2e 22 20 78 - ).. [: ." x
46e0: 64 67 2d 6f 70 65 6e 20 22 20 74 79 70 65 20 3b dg-open " type ;
46f0: 5d 20 24 74 6d 70 20 73 79 73 74 65 6d 20 3b 0a ] $tmp system ;.
4700: 20 20 20 20 5b 54 48 45 4e 5d 0a 5b 54 48 45 4e [THEN].[THEN
4710: 5d 0a 0a 3a 20 2e 70 6f 73 74 69 6e 67 20 28 20 ]..: .posting (
4720: 61 64 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 addr u -- ).
4730: 32 64 75 70 20 6b 65 79 73 69 7a 65 20 2f 73 74 2dup keysize /st
4740: 72 69 6e 67 0a 20 20 20 20 32 64 75 70 20 70 72 ring. 2dup pr
4750: 69 6e 74 61 62 6c 65 3f 20 49 46 20 20 27 5b 27 intable? IF '['
4760: 20 65 6d 69 74 20 74 79 70 65 20 27 40 27 20 65 emit type '@' e
4770: 6d 69 74 0a 20 20 20 20 45 4c 53 45 20 20 2e 22 mit. ELSE ."
4780: 20 23 5b 22 20 20 38 35 74 79 70 65 20 2e 22 20 #[" 85type ."
4790: 2f 40 22 20 20 54 48 45 4e 0a 20 20 20 20 6b 65 /@" THEN. ke
47a0: 79 7c 20 2e 6b 65 79 2d 69 64 3f 20 3b 0a 0a 68 y| .key-id? ;..h
47b0: 61 73 68 3a 20 63 68 61 69 6e 2d 74 61 67 73 23 ash: chain-tags#
47c0: 0a 0a 73 63 6f 70 65 7b 20 64 76 63 73 0a 64 76 ..scope{ dvcs.dv
47d0: 63 73 2d 6c 6f 67 2d 63 6c 61 73 73 20 63 6c 61 cs-log-class cla
47e0: 73 73 0a 65 6e 64 2d 63 6c 61 73 73 20 70 6f 73 ss.end-class pos
47f0: 74 69 6e 67 2d 6c 6f 67 2d 63 6c 61 73 73 0a 0a ting-log-class..
4800: 56 61 72 69 61 62 6c 65 20 6c 69 6b 65 2d 63 68 Variable like-ch
4810: 61 72 0a 0a 3a 6e 6f 6e 61 6d 65 20 28 20 61 64 ar..:noname ( ad
4820: 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 2b 20 dr u -- ). +
4830: 73 69 67 70 6b 73 69 7a 65 23 20 2d 20 5b 20 6b sigpksize# - [ k
4840: 65 79 73 69 7a 65 20 24 31 30 20 2b 20 5d 4c 20 eysize $10 + ]L
4850: 64 76 63 73 2d 6c 6f 67 3a 69 64 24 20 24 21 0a dvcs-log:id$ $!.
4860: 20 20 20 20 6c 69 6b 65 2d 63 68 61 72 20 6f 66 like-char of
4870: 66 0a 3b 20 70 6f 73 74 69 6e 67 2d 6c 6f 67 2d f.; posting-log-
4880: 63 6c 61 73 73 20 69 73 20 6d 73 67 3a 73 74 61 class is msg:sta
4890: 72 74 0a 3a 6e 6f 6e 61 6d 65 20 28 20 78 63 68 rt.:noname ( xch
48a0: 61 72 20 2d 2d 20 29 20 20 6c 69 6b 65 2d 63 68 ar -- ) like-ch
48b0: 61 72 20 21 20 3b 20 70 6f 73 74 69 6e 67 2d 6c ar ! ; posting-l
48c0: 6f 67 2d 63 6c 61 73 73 20 69 73 20 6d 73 67 3a og-class is msg:
48d0: 6c 69 6b 65 0a 27 20 32 64 72 6f 70 20 70 6f 73 like.' 2drop pos
48e0: 74 69 6e 67 2d 6c 6f 67 2d 63 6c 61 73 73 20 69 ting-log-class i
48f0: 73 20 6d 73 67 3a 74 61 67 0a 27 20 32 64 72 6f s msg:tag.' 2dro
4900: 70 20 70 6f 73 74 69 6e 67 2d 6c 6f 67 2d 63 6c p posting-log-cl
4910: 61 73 73 20 69 73 20 6d 73 67 3a 69 64 0a 27 20 ass is msg:id.'
4920: 32 64 72 6f 70 20 70 6f 73 74 69 6e 67 2d 6c 6f 2drop posting-lo
4930: 67 2d 63 6c 61 73 73 20 69 73 20 6d 73 67 3a 74 g-class is msg:t
4940: 65 78 74 0a 27 20 32 64 72 6f 70 20 70 6f 73 74 ext.' 2drop post
4950: 69 6e 67 2d 6c 6f 67 2d 63 6c 61 73 73 20 69 73 ing-log-class is
4960: 20 6d 73 67 3a 61 63 74 69 6f 6e 0a 3a 6e 6f 6e msg:action.:non
4970: 61 6d 65 20 28 20 61 64 64 72 20 75 20 2d 2d 20 ame ( addr u --
4980: 29 0a 20 20 20 20 6c 69 6b 65 2d 63 68 61 72 20 ). like-char
4990: 40 20 30 3d 20 49 46 20 20 32 64 72 6f 70 20 20 @ 0= IF 2drop
49a0: 45 58 49 54 20 20 54 48 45 4e 0a 20 20 20 20 38 EXIT THEN. 8
49b0: 20 75 6d 69 6e 20 7b 20 7c 20 77 5e 20 69 64 2b umin { | w^ id+
49c0: 6c 69 6b 65 20 7d 0a 20 20 20 20 6c 69 6b 65 2d like }. like-
49d0: 63 68 61 72 20 40 20 64 76 63 73 2d 6c 6f 67 3a char @ dvcs-log:
49e0: 69 64 24 20 24 40 20 5b 3a 20 66 6f 72 74 68 3a id$ $@ [: forth:
49f0: 74 79 70 65 20 66 6f 72 74 68 3a 78 65 6d 69 74 type forth:xemit
4a00: 20 3b 5d 20 69 64 2b 6c 69 6b 65 20 24 65 78 65 ;] id+like $exe
4a10: 63 0a 20 20 20 20 69 64 2b 6c 69 6b 65 20 63 65 c. id+like ce
4a20: 6c 6c 0a 20 20 20 20 32 6f 76 65 72 20 63 68 61 ll. 2over cha
4a30: 69 6e 2d 74 61 67 73 23 20 23 40 20 64 30 3d 20 in-tags# #@ d0=
4a40: 49 46 0a 09 32 73 77 61 70 20 63 68 61 69 6e 2d IF..2swap chain-
4a50: 74 61 67 73 23 20 23 21 0a 20 20 20 20 45 4c 53 tags# #!. ELS
4a60: 45 0a 09 32 6e 69 70 20 6c 61 73 74 23 20 63 65 E..2nip last# ce
4a70: 6c 6c 2b 20 24 2b 21 0a 20 20 20 20 54 48 45 4e ll+ $+!. THEN
4a80: 0a 3b 20 70 6f 73 74 69 6e 67 2d 6c 6f 67 2d 63 .; posting-log-c
4a90: 6c 61 73 73 20 69 73 20 6d 73 67 3a 63 68 61 69 lass is msg:chai
4aa0: 6e 0a 3a 6e 6f 6e 61 6d 65 20 28 20 61 64 64 72 n.:noname ( addr
4ab0: 20 75 20 2d 2d 20 29 0a 20 20 20 20 5b 3a 20 64 u -- ). [: d
4ac0: 76 63 73 2d 6c 6f 67 3a 69 64 24 20 24 2e 20 66 vcs-log:id$ $. f
4ad0: 6f 72 74 68 3a 74 79 70 65 20 3b 5d 20 64 76 63 orth:type ;] dvc
4ae0: 73 2d 6c 6f 67 3a 75 72 6c 73 5b 5d 20 64 75 70 s-log:urls[] dup
4af0: 20 24 5b 5d 23 20 73 77 61 70 20 24 5b 5d 20 24 $[]# swap $[] $
4b00: 65 78 65 63 0a 3b 20 70 6f 73 74 69 6e 67 2d 6c exec.; posting-l
4b10: 6f 67 2d 63 6c 61 73 73 20 69 73 20 6d 73 67 3a og-class is msg:
4b20: 75 72 6c 0a 0a 3a 20 6e 65 77 2d 70 6f 73 74 69 url..: new-posti
4b30: 6e 67 2d 6c 6f 67 20 28 20 2d 2d 20 6f 20 29 0a ng-log ( -- o ).
4b40: 20 20 20 20 70 6f 73 74 69 6e 67 2d 6c 6f 67 2d posting-log-
4b50: 63 6c 61 73 73 20 6e 65 77 20 3e 6f 20 6d 73 67 class new >o msg
4b60: 2d 74 61 62 6c 65 20 40 20 74 6f 6b 65 6e 2d 74 -table @ token-t
4b70: 61 62 6c 65 20 21 20 6f 20 6f 3e 20 3b 0a 7d 73 able ! o o> ;.}s
4b80: 63 6f 70 65 0a 0a 30 20 56 61 6c 75 65 20 70 6f cope..0 Value po
4b90: 73 74 69 6e 67 2d 76 70 0a 0a 7b 7b 0a 20 20 20 sting-vp..{{.
4ba0: 20 70 6f 73 74 69 6e 67 2d 62 67 2d 63 6f 6c 23 posting-bg-col#
4bb0: 20 70 72 65 73 2d 66 72 61 6d 65 0a 20 20 20 20 pres-frame.
4bc0: 7b 7b 0a 09 7b 7b 0a 09 20 20 20 20 67 6c 75 65 {{..{{.. glue
4bd0: 2a 6c 20 24 30 30 30 30 30 30 46 46 20 6e 65 77 *l $000000FF new
4be0: 2d 63 6f 6c 6f 72 2c 20 73 6c 69 64 65 2d 66 72 -color, slide-fr
4bf0: 61 6d 65 20 64 75 70 20 2e 62 75 74 74 6f 6e 31 ame dup .button1
4c00: 0a 09 20 20 20 20 7b 7b 0a 09 09 5c 6c 61 72 67 .. {{...\larg
4c10: 65 20 72 65 61 6c 77 68 69 74 65 0a 09 09 22 e2 e realwhite..."
4c20: ac 85 22 20 7d 7d 74 65 78 74 20 34 30 25 62 20 " }}text 40%b
4c30: 5b 3a 20 70 72 65 76 2d 73 6c 69 64 65 20 3b 5d [: prev-slide ;]
4c40: 20 6f 76 65 72 20 63 6c 69 63 6b 5b 5d 0a 09 09 over click[]...
4c50: 21 69 31 38 6e 20 6c 22 20 50 6f 73 74 22 20 7d !i18n l" Post" }
4c60: 7d 74 65 78 74 27 20 21 6c 69 74 20 34 30 25 62 }text' !lit 40%b
4c70: 0a 09 09 67 6c 75 65 2a 6c 20 7d 7d 67 6c 75 65 ...glue*l }}glue
4c80: 0a 09 20 20 20 20 7d 7d 68 20 62 6f 78 5b 5d 0a .. }}h box[].
4c90: 09 7d 7d 7a 20 62 6f 78 5b 5d 0a 09 7b 7b 0a 09 .}}z box[]..{{..
4ca0: 20 20 20 20 7b 7b 0a 09 09 67 6c 75 65 2a 6c 6c {{...glue*ll
4cb0: 20 7d 7d 67 6c 75 65 0a 09 09 74 65 78 3a 20 76 }}glue...tex: v
4cc0: 70 2d 6d 64 0a 09 20 20 20 20 67 6c 75 65 2a 6c p-md.. glue*l
4cd0: 20 27 20 76 70 2d 6d 64 20 7d 7d 76 70 20 64 75 ' vp-md }}vp du
4ce0: 70 20 74 6f 20 70 6f 73 74 69 6e 67 2d 76 70 0a p to posting-vp.
4cf0: 09 20 20 20 20 3e 6f 20 22 70 6f 73 74 69 6e 67 . >o "posting
4d00: 22 20 74 6f 20 6e 61 6d 65 24 20 66 6f 6e 74 2d " to name$ font-
4d10: 73 69 7a 65 23 20 64 70 79 2d 77 20 40 20 64 70 size# dpy-w @ dp
4d20: 79 2d 68 20 40 20 3e 20 5b 49 46 5d 20 20 64 70 y-h @ > [IF] dp
4d30: 79 2d 77 20 40 20 32 35 25 20 66 6d 2a 20 66 6f y-w @ 25% fm* fo
4d40: 76 65 72 20 66 2d 20 5b 45 4c 53 45 5d 20 30 65 ver f- [ELSE] 0e
4d50: 20 5b 54 48 45 4e 5d 20 66 64 75 70 20 66 6e 65 [THEN] fdup fne
4d60: 67 61 74 65 20 74 6f 20 62 6f 72 64 65 72 76 20 gate to borderv
4d70: 66 2b 20 74 6f 20 62 6f 72 64 65 72 20 6f 20 6f f+ to border o o
4d80: 3e 0a 09 64 75 70 20 66 6f 6e 74 2d 73 69 7a 65 >..dup font-size
4d90: 23 20 36 36 25 20 66 2a 20 66 64 75 70 20 76 73 # 66% f* fdup vs
4da0: 6c 69 64 65 72 20 7d 7d 68 20 62 6f 78 5b 5d 0a lider }}h box[].
4db0: 09 3e 6f 20 22 70 6f 73 74 69 6e 67 2d 73 6c 69 .>o "posting-sli
4dc0: 64 65 72 22 20 74 6f 20 6e 61 6d 65 24 20 6f 20 der" to name$ o
4dd0: 6f 3e 0a 20 20 20 20 7d 7d 76 20 62 6f 78 5b 5d o>. }}v box[]
4de0: 0a 20 20 20 20 3e 6f 20 22 70 6f 73 74 69 6e 67 . >o "posting
4df0: 2d 76 62 6f 78 22 20 74 6f 20 6e 61 6d 65 24 20 -vbox" to name$
4e00: 6f 20 6f 3e 0a 7d 7d 7a 20 62 6f 78 5b 5d 0a 3e o o>.}}z box[].>
4e10: 6f 20 22 70 6f 73 74 69 6e 67 2d 7a 62 6f 78 22 o "posting-zbox"
4e20: 20 74 6f 20 6e 61 6d 65 24 20 6f 20 6f 3e 0a 74 to name$ o o>.t
4e30: 6f 20 70 6f 73 74 2d 66 72 61 6d 65 0a 0a 68 61 o post-frame..ha
4e40: 73 68 3a 20 62 75 63 6b 65 74 73 23 0a 0a 3a 20 sh: buckets#..:
4e50: 23 21 2b 20 28 20 61 64 64 72 20 75 20 68 61 73 #!+ ( addr u has
4e60: 68 20 2d 2d 20 29 20 3e 72 0a 20 20 20 20 32 64 h -- ) >r. 2d
4e70: 75 70 20 72 40 20 23 40 20 49 46 0a 09 31 20 73 up r@ #@ IF..1 s
4e80: 77 61 70 20 2b 21 20 20 72 64 72 6f 70 20 32 64 wap +! rdrop 2d
4e90: 72 6f 70 0a 20 20 20 20 45 4c 53 45 0a 09 64 72 rop. ELSE..dr
4ea0: 6f 70 20 31 20 7b 20 77 5e 20 6f 6e 65 20 7d 0a op 1 { w^ one }.
4eb0: 09 6f 6e 65 20 63 65 6c 6c 20 32 73 77 61 70 20 .one cell 2swap
4ec0: 72 3e 20 23 21 0a 20 20 20 20 54 48 45 4e 20 3b r> #!. THEN ;
4ed0: 0a 0a 56 61 72 69 61 62 6c 65 20 65 6d 6f 6a 69 ..Variable emoji
4ee0: 73 24 20 22 f0 9f 91 8d f0 9f 91 8e f0 9f a4 a3 s$ "👍👎🤣
4ef0: f0 9f 98 8d f0 9f 98 98 f0 9f 98 9b f0 9f a4 94 😍😘😛🤔
4f00: f0 9f 98 ad f0 9f 98 a1 f0 9f 98 b1 f0 9f 94 83 😭😡😱🔃
4f10: ef 87 a0 22 20 65 6d 6f 6a 69 73 24 20 24 21 20 " emojis$ $!
4f20: 5c 20 6c 69 73 74 20 6e 65 65 64 20 74 6f 20 62 \ list need to b
4f30: 65 20 62 69 67 67 65 72 0a 0a 3a 20 63 68 61 69 e bigger..: chai
4f40: 6e 2d 73 74 72 69 6e 67 20 28 20 61 64 64 72 20 n-string ( addr
4f50: 75 20 2d 2d 20 61 64 64 72 27 20 75 27 20 29 0a u -- addr' u' ).
4f60: 20 20 20 20 62 75 63 6b 65 74 73 23 20 23 66 72 buckets# #fr
4f70: 65 65 73 0a 20 20 20 20 62 6f 75 6e 64 73 20 55 ees. bounds U
4f80: 2b 44 4f 0a 09 49 20 24 40 20 5b 20 6b 65 79 73 +DO..I $@ [ keys
4f90: 69 7a 65 20 32 20 36 34 73 20 2b 20 5d 4c 20 2f ize 2 64s + ]L /
4fa0: 73 74 72 69 6e 67 20 62 75 63 6b 65 74 73 23 20 string buckets#
4fb0: 23 21 2b 0a 20 20 20 20 63 65 6c 6c 20 2b 4c 4f #!+. cell +LO
4fc0: 4f 50 0a 20 20 20 20 65 6d 6f 6a 69 73 24 20 24 OP. emojis$ $
4fd0: 40 20 62 6f 75 6e 64 73 20 44 4f 0a 09 49 20 64 @ bounds DO..I d
4fe0: 75 70 20 49 27 20 6f 76 65 72 20 2d 20 78 2d 73 up I' over - x-s
4ff0: 69 7a 65 20 32 64 75 70 20 62 75 63 6b 65 74 73 ize 2dup buckets
5000: 23 20 23 40 0a 09 49 46 20 20 20 20 40 20 3e 72 # #@..IF @ >r
5010: 20 74 75 63 6b 20 74 79 70 65 20 72 3e 20 2e 0a tuck type r> ..
5020: 09 45 4c 53 45 20 20 64 72 6f 70 20 6e 69 70 20 .ELSE drop nip
5030: 20 54 48 45 4e 0a 20 20 20 20 2b 4c 4f 4f 50 20 THEN. +LOOP
5040: 3b 0a 3a 20 64 69 73 70 6c 61 79 2d 74 69 74 6c ;.: display-titl
5050: 65 20 7b 20 64 3a 20 70 72 6a 20 7c 20 6b 69 20 e { d: prj | ki
5060: 2d 2d 20 7d 0a 20 20 20 20 70 72 6a 20 6b 65 79 -- }. prj key
5070: 3e 6f 20 3f 64 75 70 2d 49 46 20 20 2e 6b 65 2d >o ?dup-IF .ke-
5080: 69 6d 70 6f 72 74 73 20 40 20 3e 69 6d 2d 63 6f imports @ >im-co
5090: 6c 6f 72 23 20 73 66 6c 6f 61 74 73 20 74 6f 20 lor# sfloats to
50a0: 6b 69 20 20 54 48 45 4e 0a 20 20 20 20 7b 7b 0a ki THEN. {{.
50b0: 09 67 6c 75 65 2a 6c 20 69 6d 70 6f 72 74 73 23 .glue*l imports#
50c0: 72 67 62 2d 62 67 20 6b 69 20 2b 20 73 66 40 20 rgb-bg ki + sf@
50d0: 73 6c 69 64 65 2d 66 72 61 6d 65 20 64 75 70 20 slide-frame dup
50e0: 2e 62 75 74 74 6f 6e 31 0a 09 7b 7b 0a 09 20 20 .button1..{{..
50f0: 20 20 70 72 6a 20 6b 65 79 7c 20 3f 61 76 61 74 prj key| ?avat
5100: 61 72 0a 09 20 20 20 20 5c 6c 61 72 67 65 20 69 ar.. \large i
5110: 6d 70 6f 72 74 73 23 72 67 62 2d 66 67 20 6b 69 mports#rgb-fg ki
5120: 20 2b 20 73 66 40 20 74 6f 20 78 2d 63 6f 6c 6f + sf@ to x-colo
5130: 72 0a 09 20 20 20 20 70 72 6a 20 6b 65 79 7c 20 r.. prj key|
5140: 5b 27 5d 20 2e 6b 65 79 2d 69 64 3f 20 24 74 6d ['] .key-id? $tm
5150: 70 20 7d 7d 74 65 78 74 20 32 35 25 62 0a 09 20 p }}text 25%b..
5160: 20 20 20 67 6c 75 65 2a 6c 6c 20 7d 7d 67 6c 75 glue*ll }}glu
5170: 65 0a 09 20 20 20 20 5c 73 6d 61 6c 6c 20 70 72 e.. \small pr
5180: 6a 20 64 72 6f 70 20 6b 65 79 73 69 7a 65 20 2b j drop keysize +
5190: 20 6c 65 2d 36 34 40 20 5b 3a 20 2e 74 69 63 6b le-64@ [: .tick
51a0: 73 20 73 70 61 63 65 20 3b 5d 20 24 74 6d 70 20 s space ;] $tmp
51b0: 7d 7d 74 65 78 74 20 32 35 25 62 0a 09 20 20 20 }}text 25%b..
51c0: 20 5c 6e 6f 72 6d 61 6c 0a 09 20 20 20 20 70 72 \normal.. pr
51d0: 6a 20 64 72 6f 70 20 6b 65 79 73 69 7a 65 20 2b j drop keysize +
51e0: 20 38 20 63 68 61 69 6e 2d 74 61 67 73 23 20 23 8 chain-tags# #
51f0: 40 0a 09 20 20 20 20 5b 27 5d 20 63 68 61 69 6e @.. ['] chain
5200: 2d 73 74 72 69 6e 67 20 24 74 6d 70 20 7d 7d 74 -string $tmp }}t
5210: 65 78 74 20 32 35 25 62 20 62 6c 61 63 6b 69 73 ext 25%b blackis
5220: 68 0a 09 7d 7d 68 20 62 6f 78 5b 5d 0a 20 20 20 h..}}h box[].
5230: 20 7d 7d 7a 20 62 6f 78 5b 5d 20 70 6f 73 74 69 }}z box[] posti
5240: 6e 67 2d 76 70 20 2e 63 68 69 6c 64 2b 20 3b 0a ng-vp .child+ ;.
5250: 0a 3a 20 64 69 73 70 6c 61 79 2d 66 69 6c 65 20 .: display-file
5260: 7b 20 64 3a 20 70 72 6a 20 2d 2d 20 7d 0a 20 20 { d: prj -- }.
5270: 20 20 70 72 6a 20 64 69 73 70 6c 61 79 2d 74 69 prj display-ti
5280: 74 6c 65 0a 20 20 20 20 70 72 6a 20 5b 20 6b 65 tle. prj [ ke
5290: 79 73 69 7a 65 20 24 31 30 20 2b 20 5d 4c 20 73 ysize $10 + ]L s
52a0: 61 66 65 2f 73 74 72 69 6e 67 0a 20 20 20 20 32 afe/string. 2
52b0: 64 75 70 20 22 66 69 6c 65 3a 22 20 73 74 72 69 dup "file:" stri
52c0: 6e 67 2d 70 72 65 66 69 78 3f 20 49 46 0a 09 30 ng-prefix? IF..0
52d0: 20 74 6f 20 76 2d 62 6f 78 0a 09 35 20 2f 73 74 to v-box..5 /st
52e0: 72 69 6e 67 20 5b 3a 20 2e 22 20 7e 2b 2f 22 20 ring [: ." ~+/"
52f0: 74 79 70 65 20 3b 5d 20 24 74 6d 70 20 6d 61 72 type ;] $tmp mar
5300: 6b 64 6f 77 6e 2d 70 61 72 73 65 0a 09 76 2d 62 kdown-parse..v-b
5310: 6f 78 20 70 6f 73 74 69 6e 67 2d 76 70 20 2e 63 ox posting-vp .c
5320: 68 69 6c 64 2b 0a 09 64 70 79 2d 77 20 40 20 64 hild+..dpy-w @ d
5330: 70 79 2d 68 20 40 20 3e 20 49 46 20 20 64 70 79 py-h @ > IF dpy
5340: 2d 77 20 40 20 35 30 25 20 66 6d 2a 0a 09 45 4c -w @ 50% fm*..EL
5350: 53 45 20 20 64 70 79 2d 77 20 40 20 73 3e 66 20 SE dpy-w @ s>f
5360: 66 6f 6e 74 2d 73 69 7a 65 23 20 66 32 2a 20 66 font-size# f2* f
5370: 2d 20 20 54 48 45 4e 0a 09 70 2d 66 6f 72 6d 61 - THEN..p-forma
5380: 74 0a 20 20 20 20 45 4c 53 45 20 20 32 64 72 6f t. ELSE 2dro
5390: 70 20 20 54 48 45 4e 20 3b 0a 3a 20 64 69 73 70 p THEN ;.: disp
53a0: 6c 61 79 2d 70 6f 73 74 69 6e 67 20 28 20 61 64 lay-posting ( ad
53b0: 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 70 6f dr u -- ). po
53c0: 73 74 69 6e 67 2d 76 70 20 3e 6f 20 64 69 73 70 sting-vp >o disp
53d0: 6f 73 65 2d 63 68 69 6c 64 73 20 20 66 72 65 65 ose-childs free
53e0: 2d 74 68 75 6d 62 73 20 20 30 20 74 6f 20 61 63 -thumbs 0 to ac
53f0: 74 69 76 65 2d 77 20 6f 3e 0a 20 20 20 20 70 72 tive-w o>. pr
5400: 6f 6a 65 63 74 3a 62 72 61 6e 63 68 24 20 24 40 oject:branch$ $@
5410: 20 7b 20 64 3a 20 62 72 61 6e 63 68 20 7d 0a 20 { d: branch }.
5420: 20 20 20 64 76 63 73 3a 6e 65 77 2d 70 6f 73 74 dvcs:new-post
5430: 69 6e 67 2d 6c 6f 67 20 3e 6f 0a 20 20 20 20 3f ing-log >o. ?
5440: 6d 73 67 2d 6c 6f 67 20 20 6c 61 73 74 23 20 6d msg-log last# m
5450: 73 67 2d 6c 6f 67 40 20 32 64 75 70 20 7b 20 6c sg-log@ 2dup { l
5460: 6f 67 20 75 20 7d 0a 20 20 20 20 62 6f 75 6e 64 og u }. bound
5470: 73 20 3f 44 4f 0a 09 49 20 24 40 20 6d 73 67 3a s ?DO..I $@ msg:
5480: 64 69 73 70 6c 61 79 20 5c 20 74 68 69 73 20 77 display \ this w
5490: 69 6c 6c 20 6f 6e 6c 79 20 73 65 74 20 74 68 65 ill only set the
54a0: 20 55 52 4c 73 0a 20 20 20 20 63 65 6c 6c 20 2b URLs. cell +
54b0: 4c 4f 4f 50 0a 20 20 20 20 67 6c 75 65 2a 6c 6c LOOP. glue*ll
54c0: 6c 20 7d 7d 67 6c 75 65 20 70 6f 73 74 69 6e 67 l }}glue posting
54d0: 2d 76 70 20 64 75 70 20 2e 61 63 74 20 30 3d 20 -vp dup .act 0=
54e0: 49 46 20 20 76 70 5b 5d 20 20 54 48 45 4e 20 20 IF vp[] THEN
54f0: 2e 63 68 69 6c 64 2b 0a 20 20 20 20 6c 6f 67 20 .child+. log
5500: 66 72 65 65 0a 20 20 20 20 64 76 63 73 2d 6c 6f free. dvcs-lo
5510: 67 3a 75 72 6c 73 5b 5d 20 5b 27 5d 20 64 69 73 g:urls[] ['] dis
5520: 70 6c 61 79 2d 66 69 6c 65 20 24 5b 5d 6d 61 70 play-file $[]map
5530: 0a 20 20 20 20 64 76 63 73 3a 64 69 73 70 6f 73 . dvcs:dispos
5540: 65 2d 64 76 63 73 2d 6c 6f 67 20 6f 3e 20 3b 0a e-dvcs-log o> ;.
5550: 3a 20 2e 70 6f 73 74 69 6e 67 2d 6c 6f 67 20 28 : .posting-log (
5560: 20 2d 2d 20 29 0a 20 20 20 20 64 76 63 73 3a 6e -- ). dvcs:n
5570: 65 77 2d 64 76 63 73 20 3e 6f 20 20 63 6f 6e 66 ew-dvcs >o conf
5580: 69 67 3e 64 76 63 73 0a 20 20 20 20 70 72 6f 6a ig>dvcs. proj
5590: 65 63 74 3a 70 72 6f 6a 65 63 74 24 20 24 40 20 ect:project$ $@
55a0: 40 2f 20 32 64 72 6f 70 20 32 64 75 70 20 6c 6f @/ 2drop 2dup lo
55b0: 61 64 2d 6d 73 67 0a 20 20 20 20 64 69 73 70 6c ad-msg. displ
55c0: 61 79 2d 70 6f 73 74 69 6e 67 0a 20 20 20 20 64 ay-posting. d
55d0: 76 63 73 3a 64 69 73 70 6f 73 65 2d 64 76 63 73 vcs:dispose-dvcs
55e0: 20 6f 3e 20 3b 0a 3a 20 6f 70 65 6e 2d 70 6f 73 o> ;.: open-pos
55f0: 74 69 6e 67 20 7b 20 64 3a 20 70 72 6a 20 2d 2d ting { d: prj --
5600: 20 7d 0a 20 20 20 20 3e 64 69 72 20 22 70 6f 73 }. >dir "pos
5610: 74 73 22 20 7e 6e 65 74 32 6f 2d 63 61 63 68 65 ts" ~net2o-cache
5620: 2f 0a 20 20 20 20 2e 22 20 6f 70 65 6e 20 22 20 /. ." open "
5630: 70 72 6a 20 2e 70 6f 73 74 69 6e 67 20 63 72 0a prj .posting cr.
5640: 20 20 20 20 70 72 6a 20 32 64 75 70 20 6b 65 79 prj 2dup key
5650: 73 69 7a 65 20 2f 73 74 72 69 6e 67 20 5b 3a 20 size /string [:
5660: 74 79 70 65 20 27 40 27 20 65 6d 69 74 20 6b 65 type '@' emit ke
5670: 79 7c 20 2e 6b 65 79 2d 69 64 3f 20 3b 5d 20 24 y| .key-id? ;] $
5680: 74 6d 70 20 6e 69 63 6b 3e 63 68 61 74 0a 20 20 tmp nick>chat.
5690: 20 20 68 61 6e 64 6c 65 2d 63 6c 6f 6e 65 0a 20 handle-clone.
56a0: 20 20 20 70 72 6a 20 6b 65 79 73 69 7a 65 20 2f prj keysize /
56b0: 73 74 72 69 6e 67 20 73 65 74 2d 64 69 72 20 74 string set-dir t
56c0: 68 72 6f 77 0a 20 20 20 20 2e 70 6f 73 74 69 6e hrow. .postin
56d0: 67 2d 6c 6f 67 20 6e 65 78 74 2d 73 6c 69 64 65 g-log next-slide
56e0: 0a 20 20 20 20 70 6f 73 74 69 6e 67 2d 76 70 20 . posting-vp
56f0: 30 2e 30 31 65 20 5b 3a 20 3e 6f 20 76 70 2d 74 0.01e [: >o vp-t
5700: 6f 70 20 62 6f 78 2d 66 6c 61 67 73 20 62 6f 78 op box-flags box
5710: 2d 74 6f 75 63 68 65 64 23 20 69 6e 76 65 72 74 -touched# invert
5720: 20 61 6e 64 20 74 6f 20 62 6f 78 2d 66 6c 61 67 and to box-flag
5730: 73 20 6f 3e 0a 09 66 64 72 6f 70 20 2b 73 79 6e s o>..fdrop +syn
5740: 63 20 2b 72 65 73 69 7a 65 20 3b 5d 20 3e 61 6e c +resize ;] >an
5750: 69 6d 61 74 65 0a 20 20 20 20 64 69 72 3e 20 3b imate. dir> ;
5760: 0a 0a 3a 6e 6f 6e 61 6d 65 20 28 20 2d 2d 20 29 ..:noname ( -- )
5770: 0a 20 20 20 20 67 6c 75 65 2a 6c 6c 20 7d 7d 67 . glue*ll }}g
5780: 6c 75 65 20 6d 73 67 2d 62 6f 78 20 2e 63 68 69 lue msg-box .chi
5790: 6c 64 2b 0a 20 20 20 20 64 70 79 2d 77 20 40 20 ld+. dpy-w @
57a0: 39 30 25 20 66 6d 2a 20 6d 73 67 2d 70 61 72 20 90% fm* msg-par
57b0: 2e 70 61 72 2d 73 70 6c 69 74 0a 20 20 20 20 7b .par-split. {
57c0: 7b 20 6d 73 67 2d 70 61 72 20 75 6e 62 6f 78 20 { msg-par unbox
57d0: 7d 7d 0a 20 20 20 20 64 75 70 20 3e 72 20 30 20 }}. dup >r 0
57e0: 3f 44 4f 20 20 49 20 70 69 63 6b 20 62 6f 78 5b ?DO I pick box[
57f0: 5d 20 22 75 6e 62 6f 78 65 64 22 20 6e 61 6d 65 ] "unboxed" name
5800: 21 20 64 72 6f 70 20 20 4c 4f 4f 50 20 20 72 3e ! drop LOOP r>
5810: 0a 20 20 20 20 6d 73 67 2d 76 62 6f 78 20 2e 2b . msg-vbox .+
5820: 63 68 69 6c 64 73 0a 3b 20 77 6d 73 67 2d 63 6c childs.; wmsg-cl
5830: 61 73 73 20 74 6f 20 6d 73 67 3a 65 6e 64 0a 3a ass to msg:end.:
5840: 20 6e 65 77 2d 6d 73 67 2d 70 61 72 20 28 20 2d new-msg-par ( -
5850: 2d 20 29 0a 20 20 20 20 7b 7b 20 7d 7d 70 20 22 - ). {{ }}p "
5860: 6d 73 67 2d 70 61 72 22 20 6e 61 6d 65 21 0a 20 msg-par" name!.
5870: 20 20 20 64 75 70 20 2e 73 75 62 62 6f 78 20 62 dup .subbox b
5880: 6f 78 5b 5d 20 64 72 6f 70 20 62 6f 78 5b 5d 20 ox[] drop box[]
5890: 63 62 6c 20 3e 62 6c 0a 20 20 20 20 64 75 70 20 cbl >bl. dup
58a0: 2e 73 75 62 62 6f 78 20 22 6d 73 67 2d 62 6f 78 .subbox "msg-box
58b0: 22 20 6e 61 6d 65 21 0a 20 20 20 20 74 6f 20 6d " name!. to m
58c0: 73 67 2d 62 6f 78 20 74 6f 20 6d 73 67 2d 70 61 sg-box to msg-pa
58d0: 72 20 3b 0a 3a 6e 6f 6e 61 6d 65 20 7b 20 64 3a r ;.:noname { d:
58e0: 20 70 6b 20 2d 2d 20 6f 20 7d 0a 20 20 20 20 70 pk -- o }. p
58f0: 6b 20 5b 3a 20 2e 73 69 6d 70 6c 65 2d 69 64 20 k [: .simple-id
5900: 2e 22 20 3a 20 22 20 3b 5d 20 24 74 6d 70 20 6e ." : " ;] $tmp n
5910: 6f 74 69 66 79 2d 6e 69 63 6b 21 0a 20 20 20 20 otify-nick!.
5920: 70 6b 20 6b 65 79 7c 20 70 6b 63 20 6f 76 65 72 pk key| pkc over
5930: 20 73 74 72 3d 20 7b 20 6d 65 3f 20 7d 0a 20 20 str= { me? }.
5940: 20 20 70 6b 20 65 6e 64 64 61 74 65 40 20 6f 74 pk enddate@ ot
5950: 72 3f 20 7b 20 6f 74 72 20 7d 0a 20 20 20 20 70 r? { otr }. p
5960: 6b 20 6b 65 79 7c 20 6c 61 73 74 2d 62 75 62 62 k key| last-bubb
5970: 6c 65 2d 70 6b 20 24 40 20 73 74 72 3d 20 6f 74 le-pk $@ str= ot
5980: 72 20 6c 61 73 74 2d 6f 74 72 3f 20 3d 20 61 6e r last-otr? = an
5990: 64 0a 20 20 20 20 70 6b 20 73 74 61 72 74 64 61 d. pk startda
59a0: 74 65 40 20 6c 61 73 74 2d 74 69 63 6b 20 36 34 te@ last-tick 64
59b0: 6f 76 65 72 20 74 6f 20 6c 61 73 74 2d 74 69 63 over to last-tic
59c0: 6b 0a 20 20 20 20 36 34 2d 20 64 65 6c 74 61 2d k. 64- delta-
59d0: 62 75 62 62 6c 65 20 36 34 3c 20 61 6e 64 0a 20 bubble 64< and.
59e0: 20 20 20 49 46 0a 09 6e 65 77 2d 6d 73 67 2d 70 IF..new-msg-p
59f0: 61 72 0a 20 20 20 20 45 4c 53 45 0a 09 70 6b 20 ar. ELSE..pk
5a00: 73 74 61 72 74 64 61 74 65 40 20 61 64 64 2d 64 startdate@ add-d
5a10: 74 6d 73 0a 09 70 6b 20 6b 65 79 7c 20 6c 61 73 tms..pk key| las
5a20: 74 2d 62 75 62 62 6c 65 2d 70 6b 20 24 21 20 20 t-bubble-pk $!
5a30: 6f 74 72 20 74 6f 20 6c 61 73 74 2d 6f 74 72 3f otr to last-otr?
5a40: 20 20 74 65 78 74 2d 63 6f 6c 6f 72 21 0a 09 7b text-color!..{
5a50: 7b 0a 09 20 20 20 20 7b 7b 20 67 6c 75 65 2a 6c {.. {{ glue*l
5a60: 20 7d 7d 67 6c 75 65 0a 09 09 7b 7b 20 5c 73 61 }}glue...{{ \sa
5a70: 6e 73 20 5c 6e 6f 72 6d 61 6c 0a 09 09 20 20 20 ns \normal...
5a80: 20 7b 7b 0a 09 09 09 67 6c 75 65 2a 6c 20 7d 7d {{....glue*l }}
5a90: 67 6c 75 65 0a 09 09 09 30 20 70 6b 20 6b 65 79 glue....0 pk key
5aa0: 7c 20 3f 61 76 61 74 61 72 20 64 75 70 20 49 46 | ?avatar dup IF
5ab0: 20 20 6e 69 70 0a 09 09 09 20 20 20 20 70 6b 20 nip.... pk
5ac0: 5b 27 5d 20 2e 6b 65 79 2d 69 64 20 24 74 6d 70 ['] .key-id $tmp
5ad0: 20 32 64 72 6f 70 0a 09 09 09 45 4c 53 45 20 20 2drop....ELSE
5ae0: 64 72 6f 70 0a 09 09 09 20 20 20 20 5c 62 6f 6c drop.... \bol
5af0: 64 20 70 6b 20 5b 27 5d 20 2e 6b 65 79 2d 69 64 d pk ['] .key-id
5b00: 20 24 74 6d 70 20 7d 7d 74 65 78 74 20 32 35 25 $tmp }}text 25%
5b10: 62 0a 09 09 09 20 20 20 20 3e 6f 20 69 6d 70 6f b.... >o impo
5b20: 72 74 73 23 72 67 62 2d 66 67 20 6c 61 73 74 2d rts#rgb-fg last-
5b30: 6b 69 20 3e 69 6d 2d 63 6f 6c 6f 72 23 20 73 66 ki >im-color# sf
5b40: 6c 6f 61 74 73 20 2b 20 73 66 40 0a 09 09 09 20 loats + sf@....
5b50: 20 20 20 74 6f 20 74 65 78 74 2d 63 6f 6c 6f 72 to text-color
5b60: 20 20 6f 20 6f 3e 0a 09 09 09 54 48 45 4e 0a 09 o o>....THEN..
5b70: 09 09 6d 65 3f 20 49 46 20 20 73 77 61 70 20 20 ..me? IF swap
5b80: 54 48 45 4e 0a 09 09 09 5c 72 65 67 75 6c 61 72 THEN....\regular
5b90: 0a 09 09 20 20 20 20 7d 7d 68 0a 09 09 20 20 20 ... }}h...
5ba0: 20 67 6c 75 65 2a 6c 20 69 6d 70 6f 72 74 73 23 glue*l imports#
5bb0: 72 67 62 2d 62 67 20 6c 61 73 74 2d 6b 69 20 3e rgb-bg last-ki >
5bc0: 69 6d 2d 63 6f 6c 6f 72 23 20 73 66 6c 6f 61 74 im-color# sfloat
5bd0: 73 20 2b 20 73 66 40 0a 09 09 20 20 20 20 73 6c s + sf@... sl
5be0: 69 64 65 2d 66 72 61 6d 65 20 64 75 70 20 2e 62 ide-frame dup .b
5bf0: 75 74 74 6f 6e 32 0a 09 09 20 20 20 20 73 77 61 utton2... swa
5c00: 70 0a 09 09 7d 7d 7a 20 6d 65 3f 20 30 3d 20 49 p...}}z me? 0= I
5c10: 46 20 20 63 68 61 74 6e 61 6d 65 2d 74 61 62 20 F chatname-tab
5c20: 20 54 48 45 4e 0a 09 20 20 20 20 7d 7d 76 0a 09 THEN.. }}v..
5c30: 20 20 20 20 7b 7b 0a 09 09 67 6c 75 65 2a 6c 20 {{...glue*l
5c40: 6c 61 73 74 2d 6f 74 72 3f 20 49 46 20 6f 74 72 last-otr? IF otr
5c50: 2d 63 6f 6c 23 20 45 4c 53 45 20 63 68 61 74 2d -col# ELSE chat-
5c60: 63 6f 6c 23 20 54 48 45 4e 0a 09 09 73 6c 69 64 col# THEN...slid
5c70: 65 2d 66 72 61 6d 65 20 64 75 70 20 6d 65 3f 20 e-frame dup me?
5c80: 49 46 20 2e 72 62 75 62 62 6c 65 20 45 4c 53 45 IF .rbubble ELSE
5c90: 20 2e 6c 62 75 62 62 6c 65 20 54 48 45 4e 0a 09 .lbubble THEN..
5ca0: 09 22 62 75 62 62 6c 65 22 20 6e 61 6d 65 21 0a ."bubble" name!.
5cb0: 09 09 7b 7b 0a 09 09 20 20 20 20 6e 65 77 2d 6d ..{{... new-m
5cc0: 73 67 2d 70 61 72 0a 09 09 7d 7d 76 20 62 6f 78 sg-par...}}v box
5cd0: 5b 5d 20 64 75 70 20 74 6f 20 6d 73 67 2d 76 62 [] dup to msg-vb
5ce0: 6f 78 20 22 6d 73 67 2d 76 62 6f 78 22 20 6e 61 ox "msg-vbox" na
5cf0: 6d 65 21 0a 09 09 6d 65 3f 20 3e 62 75 62 62 6c me!...me? >bubbl
5d00: 65 2d 62 6f 72 64 65 72 0a 09 20 20 20 20 7d 7d e-border.. }}
5d10: 7a 20 62 6f 78 5b 5d 20 22 6d 73 67 2d 7a 62 6f z box[] "msg-zbo
5d20: 78 22 20 6e 61 6d 65 21 0a 09 20 20 20 20 67 6c x" name!.. gl
5d30: 75 65 2a 6c 6c 20 7d 7d 67 6c 75 65 0a 09 20 20 ue*ll }}glue..
5d40: 20 20 6d 65 3f 20 49 46 20 20 73 77 61 70 20 72 me? IF swap r
5d50: 6f 74 20 20 54 48 45 4e 0a 09 7d 7d 68 20 62 6f ot THEN..}}h bo
5d60: 78 5b 5d 20 22 6d 73 67 73 2d 62 6f 78 22 20 6e x[] "msgs-box" n
5d70: 61 6d 65 21 20 6d 73 67 73 2d 62 6f 78 20 2e 63 ame! msgs-box .c
5d80: 68 69 6c 64 2b 0a 09 62 6c 61 63 6b 69 73 68 0a hild+..blackish.
5d90: 20 20 20 20 54 48 45 4e 0a 3b 20 77 6d 73 67 2d THEN.; wmsg-
5da0: 63 6c 61 73 73 20 74 6f 20 6d 73 67 3a 73 74 61 class to msg:sta
5db0: 72 74 0a 3a 6e 6f 6e 61 6d 65 20 7b 20 64 3a 20 rt.:noname { d:
5dc0: 73 74 72 69 6e 67 20 2d 2d 20 6f 20 7d 0a 20 20 string -- o }.
5dd0: 20 20 6c 69 6e 6b 2d 62 6c 75 65 20 5c 6d 6f 6e link-blue \mon
5de0: 6f 20 73 74 72 69 6e 67 20 5b 3a 20 27 23 27 20 o string [: '#'
5df0: 65 6d 69 74 20 74 79 70 65 20 3b 5d 20 24 74 6d emit type ;] $tm
5e00: 70 0a 20 20 20 20 5b 27 5d 20 75 74 66 38 2d 73 p. ['] utf8-s
5e10: 61 6e 69 74 69 7a 65 20 24 74 6d 70 20 7d 7d 74 anitize $tmp }}t
5e20: 65 78 74 20 74 65 78 74 2d 63 6f 6c 6f 72 21 20 ext text-color!
5e30: 5c 73 61 6e 73 0a 20 20 20 20 6d 73 67 2d 62 6f \sans. msg-bo
5e40: 78 20 2e 63 68 69 6c 64 2b 0a 3b 20 77 6d 73 67 x .child+.; wmsg
5e50: 2d 63 6c 61 73 73 20 74 6f 20 6d 73 67 3a 74 61 -class to msg:ta
5e60: 67 0a 3a 6e 6f 6e 61 6d 65 20 7b 20 64 3a 20 73 g.:noname { d: s
5e70: 74 72 69 6e 67 20 2d 2d 20 6f 20 7d 0a 20 20 20 tring -- o }.
5e80: 20 74 65 78 74 2d 63 6f 6c 6f 72 21 0a 20 20 20 text-color!.
5e90: 20 73 74 72 69 6e 67 20 5b 27 5d 20 75 74 66 38 string ['] utf8
5ea0: 2d 73 61 6e 69 74 69 7a 65 20 24 74 6d 70 20 7d -sanitize $tmp }
5eb0: 7d 74 65 78 74 20 32 35 25 62 76 0a 20 20 20 20 }text 25%bv.
5ec0: 22 74 65 78 74 22 20 6e 61 6d 65 21 20 6d 73 67 "text" name! msg
5ed0: 2d 62 6f 78 20 2e 63 68 69 6c 64 2b 0a 3b 20 77 -box .child+.; w
5ee0: 6d 73 67 2d 63 6c 61 73 73 20 74 6f 20 6d 73 67 msg-class to msg
5ef0: 3a 74 65 78 74 0a 3a 6e 6f 6e 61 6d 65 20 7b 20 :text.:noname {
5f00: 64 3a 20 73 74 72 69 6e 67 20 2d 2d 20 6f 20 7d d: string -- o }
5f10: 0a 20 20 20 20 5c 69 74 61 6c 69 63 20 6c 61 73 . \italic las
5f20: 74 2d 6f 74 72 3f 20 49 46 20 6c 69 67 68 74 2d t-otr? IF light-
5f30: 62 6c 75 65 20 45 4c 53 45 20 64 61 72 6b 2d 62 blue ELSE dark-b
5f40: 6c 75 65 20 54 48 45 4e 0a 20 20 20 20 73 74 72 lue THEN. str
5f50: 69 6e 67 20 5b 27 5d 20 75 74 66 38 2d 73 61 6e ing ['] utf8-san
5f60: 69 74 69 7a 65 20 24 74 6d 70 20 7d 7d 74 65 78 itize $tmp }}tex
5f70: 74 20 32 35 25 62 76 20 5c 72 65 67 75 6c 61 72 t 25%bv \regular
5f80: 0a 20 20 20 20 74 65 78 74 2d 63 6f 6c 6f 72 21 . text-color!
5f90: 0a 20 20 20 20 22 61 63 74 69 6f 6e 22 20 6e 61 . "action" na
5fa0: 6d 65 21 20 6d 73 67 2d 62 6f 78 20 2e 63 68 69 me! msg-box .chi
5fb0: 6c 64 2b 0a 3b 20 77 6d 73 67 2d 63 6c 61 73 73 ld+.; wmsg-class
5fc0: 20 74 6f 20 6d 73 67 3a 61 63 74 69 6f 6e 0a 3a to msg:action.:
5fd0: 6e 6f 6e 61 6d 65 20 7b 20 64 3a 20 73 74 72 69 noname { d: stri
5fe0: 6e 67 20 2d 2d 20 6f 20 7d 0a 20 20 20 20 6c 61 ng -- o }. la
5ff0: 73 74 2d 6f 74 72 3f 20 49 46 20 6c 69 67 68 74 st-otr? IF light
6000: 2d 62 6c 75 65 20 45 4c 53 45 20 64 61 72 6b 2d -blue ELSE dark-
6010: 62 6c 75 65 20 54 48 45 4e 0a 20 20 20 20 73 74 blue THEN. st
6020: 72 69 6e 67 20 5b 27 5d 20 75 74 66 38 2d 73 61 ring ['] utf8-sa
6030: 6e 69 74 69 7a 65 20 24 74 6d 70 20 7d 7d 74 65 nitize $tmp }}te
6040: 78 74 20 5f 75 6e 64 65 72 6c 69 6e 65 5f 20 32 xt _underline_ 2
6050: 35 25 62 76 0a 20 20 20 20 74 65 78 74 2d 63 6f 5%bv. text-co
6060: 6c 6f 72 21 0a 20 20 20 20 5b 3a 20 64 61 74 61 lor!. [: data
6070: 20 3e 6f 20 74 65 78 74 24 20 6f 3e 20 6f 70 65 >o text$ o> ope
6080: 6e 2d 75 72 6c 20 3b 5d 0a 20 20 20 20 6f 76 65 n-url ;]. ove
6090: 72 20 63 6c 69 63 6b 5b 5d 0a 20 20 20 20 63 6c r click[]. cl
60a0: 69 63 6b 28 20 2e 22 20 75 72 6c 3a 20 22 20 64 ick( ." url: " d
60b0: 75 70 20 2e 2e 70 61 72 65 6e 74 73 20 63 72 20 up ..parents cr
60c0: 29 0a 20 20 20 20 22 75 72 6c 22 20 6e 61 6d 65 ). "url" name
60d0: 21 20 6d 73 67 2d 62 6f 78 20 2e 63 68 69 6c 64 ! msg-box .child
60e0: 2b 0a 3b 20 77 6d 73 67 2d 63 6c 61 73 73 20 74 +.; wmsg-class t
60f0: 6f 20 6d 73 67 3a 75 72 6c 0a 3a 6e 6f 6e 61 6d o msg:url.:nonam
6100: 65 20 7b 20 64 3a 20 73 74 72 69 6e 67 20 2d 2d e { d: string --
6110: 20 6f 20 7d 0a 20 20 20 20 7b 7b 0a 09 67 6c 75 o }. {{..glu
6120: 65 2a 6c 20 24 46 46 43 43 43 43 46 46 20 6e 65 e*l $FFCCCCFF ne
6130: 77 2d 63 6f 6c 6f 72 2c 20 73 6c 69 64 65 2d 66 w-color, slide-f
6140: 72 61 6d 65 20 64 75 70 20 2e 62 75 74 74 6f 6e rame dup .button
6150: 31 0a 09 73 74 72 69 6e 67 20 5b 3a 20 2e 22 20 1..string [: ."
6160: 20 47 50 53 3a 20 22 20 2e 63 6f 6f 72 64 73 20 GPS: " .coords
6170: 3b 5d 20 24 74 6d 70 20 7d 7d 74 65 78 74 20 32 ;] $tmp }}text 2
6180: 35 25 62 0a 20 20 20 20 7d 7d 7a 20 22 67 70 73 5%b. }}z "gps
6190: 22 20 6e 61 6d 65 21 20 6d 73 67 2d 62 6f 78 20 " name! msg-box
61a0: 2e 63 68 69 6c 64 2b 0a 3b 20 77 6d 73 67 2d 63 .child+.; wmsg-c
61b0: 6c 61 73 73 20 74 6f 20 6d 73 67 3a 63 6f 6f 72 lass to msg:coor
61c0: 64 0a 3a 6e 6f 6e 61 6d 65 20 7b 20 64 3a 20 70 d.:noname { d: p
61d0: 6b 20 2d 2d 20 6f 20 7d 0a 20 20 20 20 7b 7b 0a k -- o }. {{.
61e0: 09 78 2d 63 6f 6c 6f 72 20 7b 20 66 3a 20 78 63 .x-color { f: xc
61f0: 20 7d 0a 09 70 6b 20 6b 65 79 7c 0a 09 32 64 75 }..pk key|..2du
6200: 70 20 30 20 2e 70 6b 40 20 6b 65 79 7c 20 73 74 p 0 .pk@ key| st
6210: 72 3d 0a 09 6c 61 73 74 2d 6f 74 72 3f 20 49 46 r=..last-otr? IF
6220: 20 20 49 46 20 20 6d 79 2d 73 69 67 6e 61 6c 2d IF my-signal-
6230: 6f 74 72 20 20 45 4c 53 45 20 20 6f 74 68 65 72 otr ELSE other
6240: 2d 73 69 67 6e 61 6c 2d 6f 74 72 20 20 54 48 45 -signal-otr THE
6250: 4e 0a 09 45 4c 53 45 20 20 49 46 20 20 6d 79 2d N..ELSE IF my-
6260: 73 69 67 6e 61 6c 20 20 45 4c 53 45 20 20 6f 74 signal ELSE ot
6270: 68 65 72 2d 73 69 67 6e 61 6c 20 20 54 48 45 4e her-signal THEN
6280: 20 20 54 48 45 4e 0a 09 78 2d 63 6f 6c 6f 72 20 THEN..x-color
6290: 67 6c 75 65 2a 6c 20 73 6c 69 64 65 2d 66 72 61 glue*l slide-fra
62a0: 6d 65 20 64 75 70 20 2e 62 75 74 74 6f 6e 31 20 me dup .button1
62b0: 34 30 25 62 20 3e 72 0a 09 62 6c 61 63 6b 23 20 40%b >r..black#
62c0: 74 6f 20 78 2d 63 6f 6c 6f 72 0a 09 5b 3a 20 27 to x-color..[: '
62d0: 40 27 20 65 6d 69 74 20 2e 6b 65 79 2d 69 64 20 @' emit .key-id
62e0: 3b 5d 20 24 74 6d 70 20 5b 27 5d 20 75 74 66 38 ;] $tmp ['] utf8
62f0: 2d 73 61 6e 69 74 69 7a 65 20 24 74 6d 70 20 7d -sanitize $tmp }
6300: 7d 74 65 78 74 20 32 35 25 62 20 72 3e 20 73 77 }text 25%b r> sw
6310: 61 70 0a 09 78 63 20 74 6f 20 78 2d 63 6f 6c 6f ap..xc to x-colo
6320: 72 0a 20 20 20 20 7d 7d 7a 20 6d 73 67 2d 62 6f r. }}z msg-bo
6330: 78 20 2e 63 68 69 6c 64 2b 0a 3b 20 77 6d 73 67 x .child+.; wmsg
6340: 2d 63 6c 61 73 73 20 74 6f 20 6d 73 67 3a 73 69 -class to msg:si
6350: 67 6e 61 6c 0a 3a 6e 6f 6e 61 6d 65 20 28 20 61 gnal.:noname ( a
6360: 64 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 72 ddr u -- ). r
6370: 65 2d 67 72 65 65 6e 20 5b 3a 20 2e 22 20 5b 22 e-green [: ." ["
6380: 20 38 35 74 79 70 65 20 2e 22 20 5d e2 86 92 22 85type ." ]→"
6390: 20 3b 5d 20 24 74 6d 70 20 7d 7d 74 65 78 74 20 ;] $tmp }}text
63a0: 6d 73 67 2d 62 6f 78 20 2e 63 68 69 6c 64 2b 0a msg-box .child+.
63b0: 20 20 20 20 74 65 78 74 2d 63 6f 6c 6f 72 21 0a text-color!.
63c0: 3b 20 77 6d 73 67 2d 63 6c 61 73 73 20 74 6f 20 ; wmsg-class to
63d0: 6d 73 67 3a 72 65 0a 3a 6e 6f 6e 61 6d 65 20 28 msg:re.:noname (
63e0: 20 61 64 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 addr u -- ).
63f0: 20 6f 62 6a 2d 72 65 64 20 5b 3a 20 2e 22 20 5b obj-red [: ." [
6400: 22 20 38 35 74 79 70 65 20 2e 22 20 5d 3a 22 20 " 85type ." ]:"
6410: 3b 5d 20 24 74 6d 70 20 7d 7d 74 65 78 74 20 6d ;] $tmp }}text m
6420: 73 67 2d 62 6f 78 20 2e 63 68 69 6c 64 2b 0a 20 sg-box .child+.
6430: 20 20 20 74 65 78 74 2d 63 6f 6c 6f 72 21 0a 3b text-color!.;
6440: 20 77 6d 73 67 2d 63 6c 61 73 73 20 74 6f 20 6d wmsg-class to m
6450: 73 67 3a 69 64 0a 3a 6e 6f 6e 61 6d 65 20 7b 20 sg:id.:noname {
6460: 73 69 67 20 75 27 20 61 64 64 72 20 75 20 2d 2d sig u' addr u --
6470: 20 7d 0a 20 20 20 20 75 27 20 36 34 27 2b 20 75 }. u' 64'+ u
6480: 20 3d 20 20 75 20 73 69 67 73 69 7a 65 23 20 3d = u sigsize# =
6490: 20 61 6e 64 20 49 46 0a 09 6c 61 73 74 23 20 3e and IF..last# >
64a0: 72 20 6c 61 73 74 23 20 24 40 20 3f 6d 73 67 2d r last# $@ ?msg-
64b0: 6c 6f 67 0a 09 61 64 64 72 20 75 20 73 74 61 72 log..addr u star
64c0: 74 64 61 74 65 40 20 36 34 64 75 70 20 64 61 74 tdate@ 64dup dat
64d0: 65 3e 69 20 3e 72 20 36 34 23 31 20 36 34 2b 20 e>i >r 64#1 64+
64e0: 64 61 74 65 3e 69 27 20 72 3e 0a 09 5c 20 32 64 date>i' r>..\ 2d
64f0: 75 70 20 3d 20 49 46 20 20 2e 22 20 20 5b 6f 74 up = IF ." [ot
6500: 72 69 66 69 65 64 5d 20 22 20 20 61 64 64 72 20 rified] " addr
6510: 75 20 73 74 61 72 74 64 61 74 65 40 20 2e 74 69 u startdate@ .ti
6520: 63 6b 73 20 20 54 48 45 4e 0a 09 55 2b 44 4f 0a cks THEN..U+DO.
6530: 09 20 20 20 20 49 20 6c 61 73 74 23 20 63 65 6c . I last# cel
6540: 6c 2b 20 24 5b 5d 40 0a 09 20 20 20 20 32 64 75 l+ $[]@.. 2du
6550: 70 20 64 75 70 20 73 69 67 70 6b 73 69 7a 65 23 p dup sigpksize#
6560: 20 2d 20 2f 73 74 72 69 6e 67 20 6b 65 79 7c 20 - /string key|
6570: 6d 73 67 3a 69 64 24 20 73 74 72 3d 20 49 46 0a msg:id$ str= IF.
6580: 09 09 64 75 70 20 75 20 2d 20 2f 73 74 72 69 6e ..dup u - /strin
6590: 67 20 61 64 64 72 20 75 20 73 74 72 3d 20 49 46 g addr u str= IF
65a0: 0a 09 09 20 20 20 20 49 20 5b 3a 20 2e 22 20 20 ... I [: ."
65b0: 5b 4f 54 52 69 66 79 69 6e 67 5d 20 23 22 20 75 [OTRifying] #" u
65c0: 2e 20 66 6f 72 74 68 3a 63 72 20 3b 5d 20 64 6f . forth:cr ;] do
65d0: 2d 64 65 62 75 67 0a 09 09 20 20 20 20 49 20 5b -debug... I [
65e0: 3a 20 2e 22 20 20 4f 54 52 69 66 79 20 23 22 20 : ." OTRify #"
65f0: 75 2e 20 3b 5d 20 24 74 6d 70 0a 09 09 20 20 20 u. ;] $tmp...
6600: 20 5c 69 74 61 6c 69 63 20 7d 7d 74 65 78 74 20 \italic }}text
6610: 32 35 25 62 76 20 5c 72 65 67 75 6c 61 72 20 6c 25%bv \regular l
6620: 69 67 68 74 2d 62 6c 75 65 20 74 65 78 74 2d 63 ight-blue text-c
6630: 6f 6c 6f 72 21 0a 09 09 20 20 20 20 22 6f 74 72 olor!... "otr
6640: 69 66 79 22 20 6e 61 6d 65 21 20 6d 73 67 2d 62 ify" name! msg-b
6650: 6f 78 20 2e 63 68 69 6c 64 2b 0a 09 09 20 20 20 ox .child+...
6660: 20 73 69 67 20 75 27 20 49 20 6c 61 73 74 23 20 sig u' I last#
6670: 63 65 6c 6c 2b 20 24 5b 5d 40 20 72 65 70 6c 61 cell+ $[]@ repla
6680: 63 65 2d 73 69 67 0a 09 09 20 20 20 20 5c 20 21 ce-sig... \ !
6690: 21 53 63 68 65 64 75 6c 65 20 6d 65 73 73 61 67 !Schedule messag
66a0: 65 20 73 61 76 69 6e 67 21 21 0a 09 09 45 4c 53 e saving!!...ELS
66b0: 45 0a 09 09 20 20 20 20 49 20 5b 3a 20 2e 22 20 E... I [: ."
66c0: 20 5b 4f 54 52 69 66 69 65 64 5d 20 23 22 20 75 [OTRified] #" u
66d0: 2e 20 66 6f 72 74 68 3a 63 72 20 3b 5d 20 64 6f . forth:cr ;] do
66e0: 2d 64 65 62 75 67 0a 09 09 54 48 45 4e 0a 09 20 -debug...THEN..
66f0: 20 20 20 45 4c 53 45 0a 09 09 49 20 5b 3a 20 2e ELSE...I [: .
6700: 22 20 20 5b 4f 54 52 69 66 69 67 6e 6f 72 65 5d " [OTRifignore]
6710: 20 23 22 20 75 2e 20 66 6f 72 74 68 3a 63 72 20 #" u. forth:cr
6720: 3b 5d 20 64 6f 2d 64 65 62 75 67 0a 09 09 32 64 ;] do-debug...2d
6730: 72 6f 70 0a 09 20 20 20 20 54 48 45 4e 0a 09 4c rop.. THEN..L
6740: 4f 4f 50 0a 09 72 3e 20 74 6f 20 6c 61 73 74 23 OOP..r> to last#
6750: 0a 20 20 20 20 54 48 45 4e 20 3b 20 77 6d 73 67 . THEN ; wmsg
6760: 2d 63 6c 61 73 73 20 69 73 20 6d 73 67 3a 6f 74 -class is msg:ot
6770: 72 69 66 79 0a 3a 6e 6f 6e 61 6d 65 20 28 20 61 rify.:noname ( a
6780: 64 64 72 20 75 20 74 79 70 65 20 2d 2d 20 29 0a ddr u type -- ).
6790: 20 20 20 20 6f 62 6a 2d 72 65 64 0a 20 20 20 20 obj-red.
67a0: 5b 3a 20 63 61 73 65 20 30 20 3e 72 0a 09 20 20 [: case 0 >r..
67b0: 20 20 6d 73 67 3a 69 6d 61 67 65 23 20 20 20 20 msg:image#
67c0: 20 6f 66 20 20 2e 22 20 69 6d 67 5b 22 20 20 20 of ." img["
67d0: 20 20 20 38 35 74 79 70 65 20 20 65 6e 64 6f 66 85type endof
67e0: 0a 09 20 20 20 20 6d 73 67 3a 74 68 75 6d 62 6e .. msg:thumbn
67f0: 61 69 6c 23 20 6f 66 20 20 2e 22 20 74 68 75 6d ail# of ." thum
6800: 62 5b 22 20 20 20 20 38 35 74 79 70 65 20 20 65 b[" 85type e
6810: 6e 64 6f 66 0a 09 20 20 20 20 6d 73 67 3a 70 61 ndof.. msg:pa
6820: 74 63 68 23 20 20 20 20 20 6f 66 20 20 2e 22 20 tch# of ."
6830: 70 61 74 63 68 5b 22 20 20 20 20 38 35 74 79 70 patch[" 85typ
6840: 65 20 20 65 6e 64 6f 66 0a 09 20 20 20 20 6d 73 e endof.. ms
6850: 67 3a 73 6e 61 70 73 68 6f 74 23 20 20 6f 66 20 g:snapshot# of
6860: 20 2e 22 20 73 6e 61 70 73 68 6f 74 5b 22 20 38 ." snapshot[" 8
6870: 35 74 79 70 65 20 20 65 6e 64 6f 66 0a 09 20 20 5type endof..
6880: 20 20 6d 73 67 3a 6d 65 73 73 61 67 65 23 20 20 msg:message#
6890: 20 6f 66 20 20 2e 22 20 6d 65 73 73 61 67 65 5b of ." message[
68a0: 22 20 20 38 35 74 79 70 65 20 20 65 6e 64 6f 66 " 85type endof
68b0: 0a 09 20 20 20 20 6d 73 67 3a 70 6f 73 74 69 6e .. msg:postin
68c0: 67 23 20 20 20 6f 66 20 20 2e 22 20 70 6f 73 74 g# of ." post
68d0: 69 6e 67 22 0a 09 09 72 64 72 6f 70 20 32 64 75 ing"...rdrop 2du
68e0: 70 20 5b 64 3a 68 20 6f 70 65 6e 2d 70 6f 73 74 p [d:h open-post
68f0: 69 6e 67 20 3b 5d 20 3e 72 0a 09 09 2e 70 6f 73 ing ;] >r....pos
6900: 74 69 6e 67 0a 09 20 20 20 20 65 6e 64 6f 66 0a ting.. endof.
6910: 09 65 6e 64 63 61 73 65 20 2e 22 20 5d 22 20 72 .endcase ." ]" r
6920: 3e 20 3b 5d 20 24 74 6d 70 20 7d 7d 74 65 78 74 > ;] $tmp }}text
6930: 0a 20 20 20 20 73 77 61 70 20 3f 64 75 70 2d 49 . swap ?dup-I
6940: 46 20 20 30 20 63 6c 69 63 6b 5b 5d 20 20 54 48 F 0 click[] TH
6950: 45 4e 0a 20 20 20 20 22 6f 62 6a 65 63 74 22 20 EN. "object"
6960: 6e 61 6d 65 21 20 6d 73 67 2d 62 6f 78 20 2e 63 name! msg-box .c
6970: 68 69 6c 64 2b 0a 20 20 20 20 74 65 78 74 2d 63 hild+. text-c
6980: 6f 6c 6f 72 21 0a 3b 20 77 6d 73 67 2d 63 6c 61 olor!.; wmsg-cla
6990: 73 73 20 69 73 20 6d 73 67 3a 6f 62 6a 65 63 74 ss is msg:object
69a0: 0a 0a 69 6e 20 6e 65 74 32 6f 20 3a 20 6e 65 77 ..in net2o : new
69b0: 2d 77 6d 73 67 20 28 20 6f 3a 63 6f 6e 6e 65 63 -wmsg ( o:connec
69c0: 74 69 6f 6e 20 2d 2d 20 6f 20 29 0a 20 20 20 20 tion -- o ).
69d0: 6f 20 77 6d 73 67 2d 63 6c 61 73 73 20 6e 65 77 o wmsg-class new
69e0: 20 3e 6f 20 20 70 61 72 65 6e 74 21 20 20 6d 73 >o parent! ms
69f0: 67 2d 74 61 62 6c 65 20 40 20 74 6f 6b 65 6e 2d g-table @ token-
6a00: 74 61 62 6c 65 20 21 20 6f 20 6f 3e 20 3b 0a 27 table ! o o> ;.'
6a10: 20 6e 65 74 32 6f 3a 6e 65 77 2d 77 6d 73 67 20 net2o:new-wmsg
6a20: 69 73 20 6e 65 74 32 6f 3a 6e 65 77 2d 6d 73 67 is net2o:new-msg
6a30: 0a 0a 77 6d 73 67 2d 63 6c 61 73 73 20 27 20 6e ..wmsg-class ' n
6a40: 65 77 20 73 74 61 74 69 63 2d 61 20 77 69 74 68 ew static-a with
6a50: 2d 61 6c 6c 6f 63 61 74 65 72 20 43 6f 6e 73 74 -allocater Const
6a60: 61 6e 74 20 77 6d 73 67 2d 6f 0a 77 6d 73 67 2d ant wmsg-o.wmsg-
6a70: 6f 20 3e 6f 20 6d 73 67 2d 74 61 62 6c 65 20 40 o >o msg-table @
6a80: 20 74 6f 6b 65 6e 2d 74 61 62 6c 65 20 21 20 6f token-table ! o
6a90: 3e 0a 0a 3a 20 76 70 2d 73 6f 66 74 62 6f 74 74 >..: vp-softbott
6aa0: 6f 6d 20 28 20 6f 3a 76 69 65 77 70 6f 72 74 20 om ( o:viewport
6ab0: 2d 2d 20 29 0a 20 20 20 20 61 63 74 20 3e 6f 20 -- ). act >o
6ac0: 6f 20 61 6e 69 6d 2d 64 65 6c 20 20 73 65 74 2d o anim-del set-
6ad0: 73 74 61 72 74 78 79 0a 20 20 20 20 30 65 20 20 startxy. 0e
6ae0: 20 20 20 20 20 20 20 20 20 74 6f 20 76 6d 6f 74 to vmot
6af0: 69 6f 6e 2d 64 78 0a 20 20 20 20 76 70 2d 79 20 ion-dx. vp-y
6b00: 66 6e 65 67 61 74 65 20 74 6f 20 76 6d 6f 74 69 fnegate to vmoti
6b10: 6f 6e 2d 64 79 0a 20 20 20 20 30 2e 33 33 33 65 on-dy. 0.333e
6b20: 20 6f 20 5b 27 5d 20 76 70 2d 73 63 72 6f 6c 6c o ['] vp-scroll
6b30: 20 3e 61 6e 69 6d 61 74 65 20 6f 3e 20 3b 0a 0a >animate o> ;..
6b40: 3a 20 77 6d 73 67 2d 64 69 73 70 6c 61 79 20 28 : wmsg-display (
6b50: 20 61 64 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 addr u -- ).
6b60: 20 6d 73 67 2d 74 64 69 73 70 6c 61 79 0a 20 20 msg-tdisplay.
6b70: 20 20 6d 73 67 73 2d 62 6f 78 20 3e 6f 20 5b 3a msgs-box >o [:
6b80: 20 2b 73 79 6e 63 20 2b 72 65 73 69 7a 65 20 3b +sync +resize ;
6b90: 5d 20 76 70 2d 6e 65 65 64 65 64 20 76 70 2d 62 ] vp-needed vp-b
6ba0: 6f 74 74 6f 6d 0a 20 20 20 20 2b 73 79 6e 63 20 ottom. +sync
6bb0: 2b 72 65 73 69 7a 65 20 6f 3e 20 3b 0a 27 20 77 +resize o> ;.' w
6bc0: 6d 73 67 2d 64 69 73 70 6c 61 79 20 77 6d 73 67 msg-display wmsg
6bd0: 2d 63 6c 61 73 73 20 74 6f 20 6d 73 67 3a 64 69 -class to msg:di
6be0: 73 70 6c 61 79 0a 0a 23 31 32 38 20 56 61 6c 75 splay..#128 Valu
6bf0: 65 20 67 75 69 2d 6d 73 67 73 23 20 5c 20 64 69 e gui-msgs# \ di
6c00: 73 70 6c 61 79 20 6c 61 73 74 20 31 32 38 20 6d splay last 128 m
6c10: 65 73 73 61 67 65 73 0a 30 20 56 61 6c 75 65 20 essages.0 Value
6c20: 63 68 61 74 2d 65 64 69 74 20 20 20 20 5c 20 63 chat-edit \ c
6c30: 68 61 74 20 65 64 69 74 20 66 69 65 6c 64 0a 0a hat edit field..
6c40: 3a 20 28 67 75 69 2d 6d 73 67 73 29 20 28 20 67 : (gui-msgs) ( g
6c50: 61 64 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 addr u -- ).
6c60: 72 65 73 65 74 2d 74 69 6d 65 0a 20 20 20 20 36 reset-time. 6
6c70: 34 23 30 20 74 6f 20 6c 61 73 74 2d 74 69 63 6b 4#0 to last-tick
6c80: 20 20 6c 61 73 74 2d 62 75 62 62 6c 65 2d 70 6b last-bubble-pk
6c90: 20 24 66 72 65 65 0a 20 20 20 20 30 20 74 6f 20 $free. 0 to
6ca0: 6d 73 67 2d 70 61 72 20 20 30 20 74 6f 20 6d 73 msg-par 0 to ms
6cb0: 67 2d 62 6f 78 0a 20 20 20 20 6d 73 67 73 2d 62 g-box. msgs-b
6cc0: 6f 78 20 2e 64 69 73 70 6f 73 65 2d 63 68 69 6c ox .dispose-chil
6cd0: 64 73 0a 20 20 20 20 67 6c 75 65 2a 6c 6c 6c 20 ds. glue*lll
6ce0: 7d 7d 67 6c 75 65 20 6d 73 67 73 2d 62 6f 78 20 }}glue msgs-box
6cf0: 2e 63 68 69 6c 64 2b 0a 20 20 20 20 32 64 75 70 .child+. 2dup
6d00: 20 6c 6f 61 64 2d 6d 73 67 20 3f 6d 73 67 2d 6c load-msg ?msg-l
6d10: 6f 67 0a 20 20 20 20 6c 61 73 74 23 20 6d 73 67 og. last# msg
6d20: 2d 6c 6f 67 40 20 32 64 75 70 20 7b 20 6c 6f 67 -log@ 2dup { log
6d30: 20 75 20 7d 0a 20 20 20 20 64 75 70 20 67 75 69 u }. dup gui
6d40: 2d 6d 73 67 73 23 20 63 65 6c 6c 73 20 2d 20 30 -msgs# cells - 0
6d50: 20 6d 61 78 20 2f 73 74 72 69 6e 67 20 62 6f 75 max /string bou
6d60: 6e 64 73 20 3f 44 4f 0a 09 49 20 24 40 20 7b 20 nds ?DO..I $@ {
6d70: 64 3a 20 6d 73 67 74 20 7d 0a 09 6d 73 67 74 20 d: msgt }..msgt
6d80: 5b 27 5d 20 77 6d 73 67 2d 64 69 73 70 6c 61 79 ['] wmsg-display
6d90: 20 77 6d 73 67 2d 6f 20 2e 63 61 74 63 68 20 49 wmsg-o .catch I
6da0: 46 0a 09 20 20 20 20 3c 65 72 72 3e 20 2e 22 20 F.. <err> ."
6db0: 69 6e 76 61 6c 69 64 20 65 6e 74 72 79 22 20 3c invalid entry" <
6dc0: 64 65 66 61 75 6c 74 3e 20 32 64 72 6f 70 0a 09 default> 2drop..
6dd0: 54 48 45 4e 0a 20 20 20 20 63 65 6c 6c 20 2b 4c THEN. cell +L
6de0: 4f 4f 50 0a 20 20 20 20 6c 6f 67 20 66 72 65 65 OOP. log free
6df0: 20 74 68 72 6f 77 20 20 6d 73 67 73 2d 62 6f 78 throw msgs-box
6e00: 20 3e 6f 20 72 65 73 69 7a 65 64 20 76 70 2d 62 >o resized vp-b
6e10: 6f 74 74 6f 6d 20 6f 3e 0a 20 20 20 20 63 68 61 ottom o>. cha
6e20: 74 2d 65 64 69 74 20 65 6e 67 61 67 65 20 3b 0a t-edit engage ;.
6e30: 0a 3a 20 67 75 69 2d 6d 73 67 73 20 28 20 67 61 .: gui-msgs ( ga
6e40: 64 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 32 ddr u -- ). 2
6e50: 64 75 70 20 6d 73 67 2d 67 72 6f 75 70 24 20 24 dup msg-group$ $
6e60: 21 20 28 67 75 69 2d 6d 73 67 73 29 20 3b 0a 0a ! (gui-msgs) ;..
6e70: 3a 20 6d 73 67 2d 77 72 65 64 69 73 70 6c 61 79 : msg-wredisplay
6e80: 20 28 20 6e 20 2d 2d 20 29 0a 20 20 20 20 64 72 ( n -- ). dr
6e90: 6f 70 20 30 20 6f 74 72 2d 6d 6f 64 65 0a 20 20 op 0 otr-mode.
6ea0: 20 20 5b 3a 20 6d 73 67 2d 67 72 6f 75 70 24 20 [: msg-group$
6eb0: 24 40 20 28 67 75 69 2d 6d 73 67 73 29 20 3b 5d $@ (gui-msgs) ;]
6ec0: 20 21 77 72 61 70 70 65 72 0a 20 20 20 20 6d 73 !wrapper. ms
6ed0: 67 73 2d 62 6f 78 20 3e 6f 20 5b 3a 20 2b 73 79 gs-box >o [: +sy
6ee0: 6e 63 20 2b 72 65 73 69 7a 65 20 3b 5d 20 76 70 nc +resize ;] vp
6ef0: 2d 6e 65 65 64 65 64 20 76 70 2d 62 6f 74 74 6f -needed vp-botto
6f00: 6d 0a 20 20 20 20 2b 73 79 6e 63 20 2b 72 65 73 m. +sync +res
6f10: 69 7a 65 20 6f 3e 20 20 3b 0a 27 20 6d 73 67 2d ize o> ;.' msg-
6f20: 77 72 65 64 69 73 70 6c 61 79 20 77 6d 73 67 2d wredisplay wmsg-
6f30: 63 6c 61 73 73 20 69 73 20 6d 73 67 3a 72 65 64 class is msg:red
6f40: 69 73 70 6c 61 79 0a 0a 5b 49 46 44 45 46 5d 20 isplay..[IFDEF]
6f50: 61 6e 64 72 6f 69 64 20 61 6c 73 6f 20 61 6e 64 android also and
6f60: 72 6f 69 64 20 5b 54 48 45 4e 5d 0a 0a 3a 20 63 roid [THEN]..: c
6f70: 68 61 74 2d 65 64 69 74 2d 65 6e 74 65 72 20 28 hat-edit-enter (
6f80: 20 6f 3a 65 64 69 74 2d 77 20 2d 2d 20 29 0a 20 o:edit-w -- ).
6f90: 20 20 20 74 65 78 74 24 20 64 75 70 20 49 46 20 text$ dup IF
6fa0: 20 64 6f 2d 63 68 61 74 2d 63 6d 64 3f 20 30 3d do-chat-cmd? 0=
6fb0: 20 49 46 20 20 61 76 61 6c 61 6e 63 68 65 2d 74 IF avalanche-t
6fc0: 65 78 74 20 20 54 48 45 4e 0a 20 20 20 20 45 4c ext THEN. EL
6fd0: 53 45 20 20 32 64 72 6f 70 20 20 54 48 45 4e 0a SE 2drop THEN.
6fe0: 20 20 20 20 36 34 23 2d 31 20 6c 69 6e 65 2d 64 64#-1 line-d
6ff0: 61 74 65 20 36 34 21 20 20 24 6c 61 73 74 6c 69 ate 64! $lastli
7000: 6e 65 20 24 66 72 65 65 20 3b 0a 0a 5c 20 2b 64 ne $free ;..\ +d
7010: 62 20 63 6c 69 63 6b 28 20 5c 20 29 0a 5c 20 2b b click( \ ).\ +
7020: 64 62 20 63 6c 69 63 6b 2d 6f 28 20 5c 20 29 0a db click-o( \ ).
7030: 5c 20 2b 64 62 20 67 75 69 28 20 5c 20 29 0a 0a \ +db gui( \ )..
7040: 7b 7b 20 63 68 61 74 2d 62 67 2d 63 6f 6c 23 20 {{ chat-bg-col#
7050: 70 72 65 73 2d 66 72 61 6d 65 0a 20 20 20 20 7b pres-frame. {
7060: 7b 0a 09 7b 7b 0a 09 20 20 20 20 67 6c 75 65 2a {..{{.. glue*
7070: 6c 20 62 6c 61 63 6b 23 20 73 6c 69 64 65 2d 66 l black# slide-f
7080: 72 61 6d 65 20 64 75 70 20 2e 62 75 74 74 6f 6e rame dup .button
7090: 31 0a 09 20 20 20 20 7b 7b 0a 09 09 5c 6c 61 72 1.. {{...\lar
70a0: 67 65 20 72 65 61 6c 77 68 69 74 65 0a 09 09 22 ge realwhite..."
70b0: e2 ac 85 22 20 7d 7d 74 65 78 74 20 34 30 25 62 ⬅" }}text 40%b
70c0: 20 5b 3a 20 69 6e 2d 67 72 6f 75 70 3f 20 30 3d [: in-group? 0=
70d0: 20 3f 45 58 49 54 20 20 66 61 6c 73 65 20 74 6f ?EXIT false to
70e0: 20 69 6e 2d 67 72 6f 75 70 3f 0a 09 09 20 20 20 in-group?...
70f0: 20 6c 65 61 76 65 2d 63 68 61 74 73 20 70 72 65 leave-chats pre
7100: 76 2d 73 6c 69 64 65 20 3b 5d 20 6f 76 65 72 20 v-slide ;] over
7110: 63 6c 69 63 6b 5b 5d 0a 09 09 21 69 31 38 6e 20 click[]...!i18n
7120: 6c 22 20 ef 82 86 22 20 7d 7d 74 65 78 74 27 20 l" " }}text'
7130: 21 6c 69 74 20 34 30 25 62 0a 09 09 22 22 20 7d !lit 40%b..."" }
7140: 7d 74 65 78 74 20 34 30 25 62 20 64 75 70 20 74 }text 40%b dup t
7150: 6f 20 67 72 6f 75 70 2d 6e 61 6d 65 0a 09 09 7b o group-name...{
7160: 7b 0a 09 09 7d 7d 68 20 62 6f 78 5b 5d 20 64 75 {...}}h box[] du
7170: 70 20 74 6f 20 67 72 6f 75 70 2d 6d 65 6d 62 65 p to group-membe
7180: 72 73 0a 09 09 67 6c 75 65 2a 6c 20 7d 7d 67 6c rs...glue*l }}gl
7190: 75 65 0a 09 20 20 20 20 7d 7d 68 20 62 6f 78 5b ue.. }}h box[
71a0: 5d 0a 09 7d 7d 7a 20 62 6f 78 5b 5d 0a 09 7b 7b ]..}}z box[]..{{
71b0: 0a 09 20 20 20 20 7b 7b 0a 09 09 7b 7b 0a 09 09 .. {{...{{...
71c0: 74 65 78 3a 20 76 70 2d 63 68 61 74 73 20 76 70 tex: vp-chats vp
71d0: 2d 63 68 61 74 73 20 67 6c 75 65 2a 6c 6c 6c 20 -chats glue*lll
71e0: 27 20 76 70 2d 63 68 61 74 73 20 7d 7d 76 70 20 ' vp-chats }}vp
71f0: 76 70 5b 5d 0a 09 09 64 75 70 20 74 6f 20 6d 73 vp[]...dup to ms
7200: 67 73 2d 62 6f 78 0a 09 09 64 75 70 20 66 6f 6e gs-box...dup fon
7210: 74 2d 73 69 7a 65 23 20 36 36 25 20 66 2a 20 66 t-size# 66% f* f
7220: 64 75 70 20 76 73 6c 69 64 65 72 0a 09 20 20 20 dup vslider..
7230: 20 6f 76 65 72 20 3e 72 20 7d 7d 68 20 62 6f 78 over >r }}h box
7240: 5b 5d 20 72 3e 0a 09 20 20 20 20 66 6f 6e 74 2d [] r>.. font-
7250: 73 69 7a 65 23 20 36 36 25 20 66 2a 20 66 64 75 size# 66% f* fdu
7260: 70 20 68 73 6c 69 64 65 72 0a 09 7d 7d 76 20 62 p hslider..}}v b
7270: 6f 78 5b 5d 0a 09 7b 7b 0a 09 20 20 20 20 7b 7b ox[]..{{.. {{
7280: 20 67 6c 75 65 2a 6c 6c 6c 20 65 64 69 74 2d 62 glue*lll edit-b
7290: 67 20 78 2d 63 6f 6c 6f 72 20 66 6f 6e 74 2d 73 g x-color font-s
72a0: 69 7a 65 23 20 34 30 25 20 66 2a 20 7d 7d 66 72 ize# 40% f* }}fr
72b0: 61 6d 65 20 64 75 70 20 2e 62 75 74 74 6f 6e 33 ame dup .button3
72c0: 0a 09 09 7b 7b 20 5c 6e 6f 72 6d 61 6c 20 5c 72 ...{{ \normal \r
72d0: 65 67 75 6c 61 72 20 62 6c 61 63 6b 69 73 68 20 egular blackish
72e0: 22 22 20 7d 7d 65 64 69 74 20 34 30 25 62 20 64 "" }}edit 40%b d
72f0: 75 70 20 74 6f 20 63 68 61 74 2d 65 64 69 74 20 up to chat-edit
7300: 67 6c 75 65 2a 6c 20 7d 7d 67 6c 75 65 0a 09 09 glue*l }}glue...
7310: 20 20 20 20 67 6c 75 65 2a 6c 6c 6c 20 7d 7d 67 glue*lll }}g
7320: 6c 75 65 0a 09 09 7d 7d 68 20 62 6f 78 5b 5d 0a lue...}}h box[].
7330: 09 20 20 20 20 7d 7d 7a 20 63 68 61 74 2d 65 64 . }}z chat-ed
7340: 69 74 20 5b 3a 20 65 64 69 74 2d 77 20 2e 63 68 it [: edit-w .ch
7350: 61 74 2d 65 64 69 74 2d 65 6e 74 65 72 20 64 72 at-edit-enter dr
7360: 6f 70 20 6e 69 70 20 30 20 74 75 63 6b 20 66 61 op nip 0 tuck fa
7370: 6c 73 65 20 3b 5d 20 65 64 69 74 5b 5d 20 27 20 lse ;] edit[] '
7380: 73 69 7a 65 2d 6c 69 6d 69 74 20 66 69 6c 74 65 size-limit filte
7390: 72 5b 5d 0a 09 20 20 20 20 3e 6f 20 61 63 74 20 r[].. >o act
73a0: 3e 6f 20 5b 3a 20 63 6f 6e 6e 65 63 74 69 6f 6e >o [: connection
73b0: 20 2e 63 68 61 74 2d 6e 65 78 74 2d 6c 69 6e 65 .chat-next-line
73c0: 20 3b 5d 20 69 73 20 65 64 69 74 2d 6e 65 78 74 ;] is edit-next
73d0: 2d 6c 69 6e 65 20 6f 3e 20 6f 20 6f 3e 0a 09 20 -line o> o o>..
73e0: 20 20 20 3e 6f 20 61 63 74 20 3e 6f 20 5b 3a 20 >o act >o [:
73f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2e 63 68 61 74 connection .chat
7400: 2d 70 72 65 76 2d 6c 69 6e 65 20 3b 5d 20 69 73 -prev-line ;] is
7410: 20 65 64 69 74 2d 70 72 65 76 2d 6c 69 6e 65 20 edit-prev-line
7420: 6f 3e 20 6f 20 6f 3e 0a 09 20 20 20 20 7b 7b 0a o> o o>.. {{.
7430: 09 09 67 6c 75 65 2a 6c 20 73 65 6e 64 2d 63 6f ..glue*l send-co
7440: 6c 6f 72 20 78 2d 63 6f 6c 6f 72 20 66 6f 6e 74 lor x-color font
7450: 2d 73 69 7a 65 23 20 34 30 25 20 66 2a 20 7d 7d -size# 40% f* }}
7460: 66 72 61 6d 65 20 64 75 70 20 2e 62 75 74 74 6f frame dup .butto
7470: 6e 32 0a 09 09 62 6c 61 63 6b 69 73 68 20 21 69 n2...blackish !i
7480: 31 38 6e 20 6c 22 20 53 65 6e 64 22 20 7d 7d 74 18n l" Send" }}t
7490: 65 78 74 27 20 21 6c 69 74 20 34 30 25 62 0a 09 ext' !lit 40%b..
74a0: 09 5b 3a 20 64 61 74 61 20 3e 6f 20 63 68 61 74 .[: data >o chat
74b0: 2d 65 64 69 74 2d 65 6e 74 65 72 20 22 22 20 74 -edit-enter "" t
74c0: 6f 20 74 65 78 74 24 20 6f 3e 0a 09 09 20 20 20 o text$ o>...
74d0: 20 63 68 61 74 2d 65 64 69 74 20 65 6e 67 61 67 chat-edit engag
74e0: 65 20 3b 5d 20 63 68 61 74 2d 65 64 69 74 20 63 e ;] chat-edit c
74f0: 6c 69 63 6b 5b 5d 0a 09 20 20 20 20 7d 7d 7a 20 lick[].. }}z
7500: 62 6f 78 5b 5d 0a 09 7d 7d 68 20 62 6f 78 5b 5d box[]..}}h box[]
7510: 0a 20 20 20 20 7d 7d 76 20 62 6f 78 5b 5d 0a 7d . }}v box[].}
7520: 7d 7a 20 62 6f 78 5b 5d 20 74 6f 20 63 68 61 74 }z box[] to chat
7530: 2d 66 72 61 6d 65 0a 0a 5b 49 46 44 45 46 5d 20 -frame..[IFDEF]
7540: 61 6e 64 72 6f 69 64 20 70 72 65 76 69 6f 75 73 android previous
7550: 20 5b 54 48 45 4e 5d 0a 0a 5c 20 74 6f 70 20 62 [THEN]..\ top b
7560: 6f 78 0a 0a 62 6f 78 2d 61 63 74 6f 72 20 63 6c ox..box-actor cl
7570: 61 73 73 0a 65 6e 64 2d 63 6c 61 73 73 20 6e 65 ass.end-class ne
7580: 74 32 6f 2d 61 63 74 6f 72 0a 0a 3a 6e 6f 6e 61 t2o-actor..:nona
7590: 6d 65 20 28 20 65 6b 65 79 20 2d 2d 20 29 0a 20 me ( ekey -- ).
75a0: 20 20 20 63 61 73 65 0a 09 6b 2d 66 35 20 6f 66 case..k-f5 of
75b0: 20 20 63 6f 6c 6f 72 2d 74 68 65 6d 65 20 30 3d color-theme 0=
75c0: 20 20 49 46 20 20 61 6e 69 6d 2d 65 6e 64 20 30 IF anim-end 0
75d0: 2e 32 35 65 20 6f 0a 09 09 5b 3a 20 20 20 20 20 .25e o...[:
75e0: 20 20 20 20 20 20 20 20 66 64 75 70 20 66 3e 73 fdup f>s
75f0: 20 74 6f 20 63 6f 6c 6f 72 2d 74 68 65 6d 65 20 to color-theme
7600: 30 2e 35 65 20 66 2b 20 43 6f 6c 6f 72 4d 6f 64 0.5e f+ ColorMod
7610: 65 21 20 2b 73 79 6e 63 20 2b 76 70 73 79 6e 63 e! +sync +vpsync
7620: 20 3b 5d 0a 09 09 3e 61 6e 69 6d 61 74 65 20 20 ;]...>animate
7630: 54 48 45 4e 20 20 20 65 6e 64 6f 66 0a 09 6b 2d THEN endof..k-
7640: 66 36 20 6f 66 20 20 63 6f 6c 6f 72 2d 74 68 65 f6 of color-the
7650: 6d 65 20 30 3c 3e 20 49 46 20 20 61 6e 69 6d 2d me 0<> IF anim-
7660: 65 6e 64 20 30 2e 32 35 65 20 6f 0a 09 09 5b 3a end 0.25e o...[:
7670: 20 31 65 20 66 73 77 61 70 20 66 2d 20 66 64 75 1e fswap f- fdu
7680: 70 20 66 3e 73 20 74 6f 20 63 6f 6c 6f 72 2d 74 p f>s to color-t
7690: 68 65 6d 65 20 30 2e 35 65 20 66 2b 20 43 6f 6c heme 0.5e f+ Col
76a0: 6f 72 4d 6f 64 65 21 20 2b 73 79 6e 63 20 2b 76 orMode! +sync +v
76b0: 70 73 79 6e 63 20 3b 5d 0a 09 09 3e 61 6e 69 6d psync ;]...>anim
76c0: 61 74 65 20 20 54 48 45 4e 20 20 20 65 6e 64 6f ate THEN endo
76d0: 66 0a 09 5b 20 62 6f 78 2d 61 63 74 6f 72 20 3a f..[ box-actor :
76e0: 3a 20 65 6b 65 79 65 64 20 5d 20 20 45 58 49 54 : ekeyed ] EXIT
76f0: 0a 20 20 20 20 65 6e 64 63 61 73 65 20 3b 20 6e . endcase ; n
7700: 65 74 32 6f 2d 61 63 74 6f 72 20 74 6f 20 65 6b et2o-actor to ek
7710: 65 79 65 64 0a 0a 3a 20 6e 65 74 32 6f 5b 5d 20 eyed..: net2o[]
7720: 28 20 6f 20 2d 2d 20 6f 20 29 0a 20 20 20 20 3e ( o -- o ). >
7730: 6f 20 6e 65 74 32 6f 2d 61 63 74 6f 72 20 6e 65 o net2o-actor ne
7740: 77 20 21 61 63 74 20 6f 20 6f 3e 20 3b 0a 0a 30 w !act o o> ;..0
7750: 20 56 61 6c 75 65 20 69 6e 76 69 74 61 74 69 6f Value invitatio
7760: 6e 73 0a 30 20 56 61 6c 75 65 20 69 6e 76 69 74 ns.0 Value invit
7770: 61 74 69 6f 6e 73 2d 6c 69 73 74 0a 30 20 56 61 ations-list.0 Va
7780: 6c 75 65 20 69 6e 76 69 74 61 74 69 6f 6e 73 2d lue invitations-
7790: 6e 6f 74 69 66 79 0a 56 61 72 69 61 62 6c 65 20 notify.Variable
77a0: 69 6e 76 69 74 61 74 69 6f 6e 2d 73 74 61 63 6b invitation-stack
77b0: 0a 0a 3a 20 69 6e 76 69 74 61 74 69 6f 6e 73 2d ..: invitations-
77c0: 73 2f 68 20 28 20 66 6c 61 67 20 2d 2d 20 29 0a s/h ( flag -- ).
77d0: 20 20 20 20 69 6e 76 69 74 61 74 69 6f 6e 73 20 invitations
77e0: 73 77 61 70 20 20 49 46 20 20 2f 66 6c 6f 70 20 swap IF /flop
77f0: 20 45 4c 53 45 20 20 2f 66 6c 69 70 20 20 54 48 ELSE /flip TH
7800: 45 4e 20 20 64 72 6f 70 20 2b 72 65 73 69 7a 65 EN drop +resize
7810: 20 3b 0a 0a 3a 20 61 64 64 2d 75 73 65 72 20 28 ;..: add-user (
7820: 20 6b 65 79 2d 6f 20 2d 2d 20 29 0a 20 20 20 20 key-o -- ).
7830: 64 61 74 61 20 3e 6f 20 70 65 72 6d 25 64 65 66 data >o perm%def
7840: 61 75 6c 74 20 6b 65 2d 6d 61 73 6b 20 21 0a 20 ault ke-mask !.
7850: 20 20 20 6f 20 63 65 6c 6c 2d 20 6b 65 2d 65 6e o cell- ke-en
7860: 64 20 6f 76 65 72 20 2d 20 6b 65 2d 70 6b 20 24 d over - ke-pk $
7870: 40 20 6b 65 79 7c 20 6b 65 79 23 20 23 21 20 6f @ key| key# #! o
7880: 20 6f 3e 20 2e 64 69 73 70 6f 73 65 20 3b 0a 3a o> .dispose ;.:
7890: 20 73 75 62 2d 75 73 65 72 20 28 20 6b 65 79 2d sub-user ( key-
78a0: 6f 20 2d 2d 20 29 0a 20 20 20 20 64 61 74 61 20 o -- ). data
78b0: 3e 6f 20 70 65 72 6d 25 62 6c 6f 63 6b 65 64 20 >o perm%blocked
78c0: 6b 65 2d 6d 61 73 6b 20 21 0a 20 20 20 20 6f 20 ke-mask !. o
78d0: 63 65 6c 6c 2d 20 6b 65 2d 65 6e 64 20 6f 76 65 cell- ke-end ove
78e0: 72 20 2d 20 6b 65 2d 70 6b 20 24 40 20 6b 65 79 r - ke-pk $@ key
78f0: 7c 20 6b 65 79 23 20 23 21 20 6f 20 6f 3e 20 2e | key# #! o o> .
7900: 64 69 73 70 6f 73 65 20 3b 0a 0a 3a 20 61 64 64 dispose ;..: add
7910: 2d 69 6e 76 69 74 61 74 69 6f 6e 20 28 20 61 64 -invitation ( ad
7920: 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 6f 76 dr u -- ). ov
7930: 65 72 20 3e 72 20 72 65 61 64 2d 70 6b 32 6b 65 er >r read-pk2ke
7940: 79 24 20 73 61 6d 70 6c 65 2d 6b 65 79 20 2e 63 y$ sample-key .c
7950: 6c 6f 6e 65 20 3e 6f 0a 20 20 20 20 6f 20 69 6e lone >o. o in
7960: 76 69 74 61 74 69 6f 6e 2d 73 74 61 63 6b 20 3e vitation-stack >
7970: 73 74 61 63 6b 0a 20 20 20 20 7b 7b 0a 09 6b 65 stack. {{..ke
7980: 2d 6e 69 63 6b 20 24 40 20 7d 7d 74 65 78 74 0a -nick $@ }}text.
7990: 09 67 6c 75 65 2a 6c 6c 20 7d 7d 67 6c 75 65 0a .glue*ll }}glue.
79a0: 09 27 75 73 65 72 2d 70 6c 75 73 27 20 5b 27 5d .'user-plus' [']
79b0: 20 78 65 6d 69 74 20 24 74 6d 70 20 7d 7d 74 65 xemit $tmp }}te
79c0: 78 74 0a 09 5b 27 5d 20 61 64 64 2d 75 73 65 72 xt..['] add-user
79d0: 20 6f 20 63 6c 69 63 6b 5b 5d 0a 09 27 75 73 65 o click[]..'use
79e0: 72 2d 6d 69 6e 75 73 27 20 5b 27 5d 20 78 65 6d r-minus' ['] xem
79f0: 69 74 20 24 74 6d 70 20 7d 7d 74 65 78 74 0a 09 it $tmp }}text..
7a00: 5b 27 5d 20 73 75 62 2d 75 73 65 72 20 6f 20 63 ['] sub-user o c
7a10: 6c 69 63 6b 5b 5d 0a 20 20 20 20 7d 7d 68 20 62 lick[]. }}h b
7a20: 6f 78 5b 5d 20 32 35 25 62 20 69 6e 76 69 74 61 ox[] 25%b invita
7a30: 74 69 6f 6e 73 2d 6c 69 73 74 20 2e 63 68 69 6c tions-list .chil
7a40: 64 2b 0a 20 20 20 20 69 6e 76 69 74 61 74 69 6f d+. invitatio
7a50: 6e 73 2d 6e 6f 74 69 66 79 20 2f 66 6c 6f 70 20 ns-notify /flop
7a60: 64 72 6f 70 20 2b 72 65 73 69 7a 65 0a 20 20 20 drop +resize.
7a70: 20 6f 3e 20 72 3e 20 66 72 65 65 20 74 68 72 6f o> r> free thro
7a80: 77 20 3b 0a 0a 27 20 61 64 64 2d 69 6e 76 69 74 w ;..' add-invit
7a90: 61 74 69 6f 6e 20 69 73 20 64 6f 2d 69 6e 76 69 ation is do-invi
7aa0: 74 65 0a 0a 7b 7b 0a 20 20 20 20 7b 7b 0a 09 67 te..{{. {{..g
7ab0: 6c 75 65 2d 6c 65 66 74 20 7d 7d 67 6c 75 65 0a lue-left }}glue.
7ac0: 09 70 77 2d 66 72 61 6d 65 20 20 20 20 20 20 20 .pw-frame
7ad0: 20 20 20 64 75 70 20 3e 73 6c 69 64 65 73 0a 09 dup >slides..
7ae0: 69 64 2d 66 72 61 6d 65 20 20 20 2f 66 6c 69 70 id-frame /flip
7af0: 20 20 64 75 70 20 3e 73 6c 69 64 65 73 0a 09 63 dup >slides..c
7b00: 68 61 74 2d 66 72 61 6d 65 20 2f 66 6c 69 70 20 hat-frame /flip
7b10: 20 64 75 70 20 3e 73 6c 69 64 65 73 0a 09 70 6f dup >slides..po
7b20: 73 74 2d 66 72 61 6d 65 20 2f 66 6c 69 70 20 20 st-frame /flip
7b30: 64 75 70 20 3e 73 6c 69 64 65 73 0a 09 67 6c 75 dup >slides..glu
7b40: 65 2d 72 69 67 68 74 20 7d 7d 67 6c 75 65 0a 20 e-right }}glue.
7b50: 20 20 20 7d 7d 68 20 62 6f 78 5b 5d 0a 20 20 20 }}h box[].
7b60: 20 7b 7b 0a 09 7b 7b 0a 09 20 20 20 20 67 6c 75 {{..{{.. glu
7b70: 65 2a 6c 6c 6c 20 7d 7d 67 6c 75 65 0a 09 20 20 e*lll }}glue..
7b80: 20 20 5c 6c 61 72 67 65 0a 09 20 20 20 20 7b 7b \large.. {{
7b90: 0a 09 09 27 75 73 65 72 2d 70 6c 75 73 27 20 27 ...'user-plus' '
7ba0: 20 78 65 6d 69 74 20 24 74 6d 70 20 7d 7d 74 65 xemit $tmp }}te
7bb0: 78 74 0a 09 20 20 20 20 7d 7d 68 20 27 20 69 6e xt.. }}h ' in
7bc0: 76 69 74 61 74 69 6f 6e 73 2d 73 2f 68 20 30 20 vitations-s/h 0
7bd0: 74 6f 67 67 6c 65 5b 5d 20 2f 66 6c 69 70 20 64 toggle[] /flip d
7be0: 75 70 20 74 6f 20 69 6e 76 69 74 61 74 69 6f 6e up to invitation
7bf0: 73 2d 6e 6f 74 69 66 79 0a 09 20 20 20 20 6f 6e s-notify.. on
7c00: 6c 69 6e 65 2d 73 79 6d 62 6f 6c 20 7d 7d 74 65 line-symbol }}te
7c10: 78 74 20 64 75 70 20 74 6f 20 6f 6e 6c 69 6e 65 xt dup to online
7c20: 2d 66 6c 61 67 0a 09 20 20 20 20 73 22 20 e2 9d -flag.. s"
7c30: 8c 22 20 24 34 34 34 34 34 34 46 46 20 6e 65 77 " $444444FF new
7c40: 2d 63 6f 6c 6f 72 2c 20 7d 7d 62 75 74 74 6f 6e -color, }}button
7c50: 2d 6c 69 74 20 5b 3a 20 2d 31 20 64 61 74 61 20 -lit [: -1 data
7c60: 2b 21 20 3b 5d 0a 09 20 20 20 20 5b 49 46 44 45 +! ;].. [IFDE
7c70: 46 5d 20 61 6e 64 72 6f 69 64 20 61 6e 64 72 6f F] android andro
7c80: 69 64 3a 6c 65 76 65 6c 23 20 5b 45 4c 53 45 5d id:level# [ELSE]
7c90: 20 6c 65 76 65 6c 23 20 5b 54 48 45 4e 5d 20 63 level# [THEN] c
7ca0: 6c 69 63 6b 5b 5d 0a 09 7d 7d 68 20 62 6f 78 5b lick[]..}}h box[
7cb0: 5d 20 2f 76 66 69 78 0a 09 7b 7b 0a 09 20 20 20 ] /vfix..{{..
7cc0: 20 67 6c 75 65 2a 6c 6c 6c 20 7d 7d 67 6c 75 65 glue*lll }}glue
7cd0: 0a 09 20 20 20 20 7b 7b 0a 09 09 63 68 61 74 2d .. {{...chat-
7ce0: 62 67 2d 63 6f 6c 23 20 70 72 65 73 2d 66 72 61 bg-col# pres-fra
7cf0: 6d 65 0a 09 09 7b 7b 0a 09 09 20 20 20 20 5c 6e me...{{... \n
7d00: 6f 72 6d 61 6c 20 62 6c 61 63 6b 69 73 68 0a 09 ormal blackish..
7d10: 09 20 20 20 20 21 69 31 38 6e 20 6c 22 20 49 6e . !i18n l" In
7d20: 76 69 74 61 74 69 6f 6e 73 22 20 7d 7d 74 65 78 vitations" }}tex
7d30: 74 27 20 2f 63 65 6e 74 65 72 20 32 35 25 62 0a t' /center 25%b.
7d40: 09 09 7d 7d 76 20 62 6f 78 5b 5d 20 64 75 70 20 ..}}v box[] dup
7d50: 74 6f 20 69 6e 76 69 74 61 74 69 6f 6e 73 2d 6c to invitations-l
7d60: 69 73 74 0a 09 20 20 20 20 7d 7d 7a 20 62 6f 78 ist.. }}z box
7d70: 5b 5d 0a 09 7d 7d 68 20 62 6f 78 5b 5d 0a 09 2f []..}}h box[]../
7d80: 66 6c 69 70 20 64 75 70 20 74 6f 20 69 6e 76 69 flip dup to invi
7d90: 74 61 74 69 6f 6e 73 0a 09 67 6c 75 65 2a 6c 6c tations..glue*ll
7da0: 6c 20 7d 7d 67 6c 75 65 0a 20 20 20 20 7d 7d 76 l }}glue. }}v
7db0: 20 62 6f 78 5b 5d 0a 7d 7d 7a 20 6e 65 74 32 6f box[].}}z net2o
7dc0: 5b 5d 0a 56 61 6c 75 65 20 6e 32 6f 2d 66 72 61 [].Value n2o-fra
7dd0: 6d 65 0a 0a 5c 20 74 6f 70 20 77 69 64 67 65 74 me..\ top widget
7de0: 73 0a 0a 3a 20 21 77 69 64 67 65 74 73 20 28 20 s..: !widgets (
7df0: 2d 2d 20 29 0a 20 20 20 20 74 6f 70 2d 77 69 64 -- ). top-wid
7e00: 67 65 74 20 2e 68 74 6f 70 2d 72 65 73 69 7a 65 get .htop-resize
7e10: 0a 20 20 20 20 70 77 2d 66 69 65 6c 64 20 65 6e . pw-field en
7e20: 67 61 67 65 0a 20 20 20 20 31 65 20 61 6d 62 69 gage. 1e ambi
7e30: 65 6e 74 25 20 73 66 21 20 73 65 74 2d 75 6e 69 ent% sf! set-uni
7e40: 66 6f 72 6d 73 20 3b 0a 0a 5b 49 46 44 45 46 5d forms ;..[IFDEF]
7e50: 20 78 31 31 0a 20 20 20 20 78 31 31 3a 58 43 6c x11. x11:XCl
7e60: 61 73 73 48 69 6e 74 20 62 75 66 66 65 72 3a 20 assHint buffer:
7e70: 6e 65 74 32 6f 2d 77 6d 2d 63 6c 61 73 73 0a 5b net2o-wm-class.[
7e80: 54 48 45 4e 5d 0a 0a 3a 20 6e 65 74 32 6f 2d 67 THEN]..: net2o-g
7e90: 75 69 20 28 20 2d 2d 20 29 0a 20 20 20 20 5b 49 ui ( -- ). [I
7ea0: 46 44 45 46 5d 20 78 31 31 0a 09 64 70 79 20 77 FDEF] x11..dpy w
7eb0: 69 6e 20 6c 22 20 6e 65 74 32 6f 20 47 55 49 22 in l" net2o GUI"
7ec0: 20 6c 6f 63 61 6c 65 40 20 78 31 31 3a 58 53 74 locale@ x11:XSt
7ed0: 6f 72 65 4e 61 6d 65 20 64 72 6f 70 0a 09 22 6e oreName drop.."n
7ee0: 65 74 32 6f 2d 67 75 69 5c 30 22 20 64 72 6f 70 et2o-gui\0" drop
7ef0: 20 64 75 70 20 6e 65 74 32 6f 2d 77 6d 2d 63 6c dup net2o-wm-cl
7f00: 61 73 73 20 32 21 0a 09 64 70 79 20 77 69 6e 20 ass 2!..dpy win
7f10: 6e 65 74 32 6f 2d 77 6d 2d 63 6c 61 73 73 20 78 net2o-wm-class x
7f20: 31 31 3a 58 53 65 74 43 6c 61 73 73 48 69 6e 74 11:XSetClassHint
7f30: 20 64 72 6f 70 0a 20 20 20 20 5b 54 48 45 4e 5d drop. [THEN]
7f40: 0a 20 20 20 20 6e 32 6f 2d 66 72 61 6d 65 20 74 . n2o-frame t
7f50: 6f 20 74 6f 70 2d 77 69 64 67 65 74 0a 20 20 20 o top-widget.
7f60: 20 22 50 41 53 53 50 48 52 41 53 45 22 20 67 65 "PASSPHRASE" ge
7f70: 74 65 6e 76 20 32 64 75 70 20 64 30 3d 20 49 46 tenv 2dup d0= IF
7f80: 20 20 32 64 72 6f 70 0a 20 20 20 20 45 4c 53 45 2drop. ELSE
7f90: 0a 09 3e 70 61 73 73 70 68 72 61 73 65 20 2b 6b ..>passphrase +k
7fa0: 65 79 20 20 72 65 61 64 2d 6b 65 79 73 0a 09 22 ey read-keys.."
7fb0: 50 41 53 53 50 48 52 41 53 45 22 20 67 65 74 65 PASSPHRASE" gete
7fc0: 6e 76 20 65 72 61 73 65 20 5c 20 65 72 61 73 65 nv erase \ erase
7fd0: 20 70 61 73 73 70 68 72 61 73 65 20 61 66 74 65 passphrase afte
7fe0: 72 20 75 73 65 21 0a 20 20 20 20 54 48 45 4e 0a r use!. THEN.
7ff0: 20 20 20 20 73 65 63 72 65 74 2d 6b 65 79 73 23 secret-keys#
8000: 20 49 46 20 20 73 68 6f 77 2d 6e 69 63 6b 73 20 IF show-nicks
8010: 20 45 4c 53 45 0a 09 6c 61 63 6b 73 2d 6b 65 79 ELSE..lacks-key
8020: 3f 20 20 49 46 0a 09 20 20 20 20 30 65 20 30 20 ? IF.. 0e 0
8030: 5b 3a 20 64 72 6f 70 20 6b 2d 65 6e 74 65 72 20 [: drop k-enter
8040: 69 64 2d 74 6f 67 67 6c 65 72 20 2e 61 63 74 20 id-toggler .act
8050: 2e 65 6b 65 79 65 64 20 3b 5d 20 3e 61 6e 69 6d .ekeyed ;] >anim
8060: 61 74 65 0a 09 54 48 45 4e 0a 20 20 20 20 54 48 ate..THEN. TH
8070: 45 4e 0a 20 20 20 20 31 63 6f 6e 66 69 67 20 20 EN. 1config
8080: 21 77 69 64 67 65 74 73 0a 20 20 20 20 67 65 74 !widgets. get
8090: 2d 6f 72 64 65 72 20 6e 3e 72 20 5b 27 5d 20 2f -order n>r ['] /
80a0: 63 68 61 74 20 3e 62 6f 64 79 20 31 20 73 65 74 chat >body 1 set
80b0: 2d 6f 72 64 65 72 0a 20 20 20 20 5b 27 5d 20 77 -order. ['] w
80c0: 69 64 67 65 74 73 2d 6c 6f 6f 70 20 63 61 74 63 idgets-loop catc
80d0: 68 0a 20 20 20 20 6e 72 3e 20 73 65 74 2d 6f 72 h. nr> set-or
80e0: 64 65 72 20 74 68 72 6f 77 20 3b 0a 0a 27 20 6e der throw ;..' n
80f0: 65 74 32 6f 2d 67 75 69 20 69 73 20 72 75 6e 2d et2o-gui is run-
8100: 67 75 69 0a 0a 69 6e 63 6c 75 64 65 20 67 75 69 gui..include gui
8110: 2d 6e 69 67 68 74 2e 66 73 0a 0a 70 72 65 76 69 -night.fs..previ
8120: 6f 75 73 0a 0a 5c 20 6c 6f 63 61 6c 69 7a 61 74 ous..\ localizat
8130: 69 6f 6e 0a 0a 63 73 2d 73 63 6f 70 65 3a 20 6c ion..cs-scope: l
8140: 61 6e 67 0a 0a 6c 6f 63 61 6c 65 20 65 6e 20 5c ang..locale en \
8150: 20 6d 61 79 20 64 69 66 66 65 72 20 66 72 6f 6d may differ from
8160: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 61 6e development lan
8170: 67 75 61 67 65 0a 6c 6f 63 61 6c 65 20 64 65 20 guage.locale de
8180: 5c 20 47 65 72 6d 61 6e 0a 6c 6f 63 61 6c 65 20 \ German.locale
8190: 7a 68 20 5c 20 43 68 69 6e 65 73 65 0a 0a 7d 73 zh \ Chinese..}s
81a0: 63 6f 70 65 0a 0a 6c 61 6e 67 3a 64 65 20 69 6e cope..lang:de in
81b0: 63 6c 75 64 65 2d 6c 6f 63 61 6c 65 20 6c 61 6e clude-locale lan
81c0: 67 2f 64 65 0a 6c 61 6e 67 3a 7a 68 20 69 6e 63 g/de.lang:zh inc
81d0: 6c 75 64 65 2d 6c 6f 63 61 6c 65 20 6c 61 6e 67 lude-locale lang
81e0: 2f 7a 68 0a 6c 61 6e 67 3a 65 6e 20 69 6e 63 6c /zh.lang:en incl
81f0: 75 64 65 2d 6c 6f 63 61 6c 65 20 6c 61 6e 67 2f ude-locale lang/
8200: 65 6e 0a 0a 3a 20 3f 3f 6c 61 6e 67 20 28 20 61 en..: ??lang ( a
8210: 64 64 72 20 75 20 2d 2d 20 29 0a 20 20 20 20 5b ddr u -- ). [
8220: 27 5d 20 6c 61 6e 67 20 3e 62 6f 64 79 20 66 69 '] lang >body fi
8230: 6e 64 2d 6e 61 6d 65 2d 69 6e 20 3f 64 75 70 2d nd-name-in ?dup-
8240: 49 46 20 20 65 78 65 63 75 74 65 20 20 54 48 45 IF execute THE
8250: 4e 20 3b 0a 0a 73 22 20 4c 41 4e 47 22 20 67 65 N ;..s" LANG" ge
8260: 74 65 6e 76 20 27 5f 27 20 24 73 70 6c 69 74 20 tenv '_' $split
8270: 32 73 77 61 70 20 3f 3f 6c 61 6e 67 20 27 2e 27 2swap ??lang '.'
8280: 20 24 73 70 6c 69 74 20 3f 3f 6c 61 6e 67 20 3f $split ??lang ?
8290: 3f 6c 61 6e 67 0a 0a 5c 20 6c 73 69 64 73 20 2e ?lang..\ lsids .
82a0: 6c 73 69 64 73 0a 0a 5b 49 46 44 45 46 5d 20 6c lsids..[IFDEF] l
82b0: 6f 61 64 2d 63 6f 76 20 20 6c 6f 61 64 2d 63 6f oad-cov load-co
82c0: 76 20 5b 54 48 45 4e 5d 0a 0a 5c 5c 5c 0a 4c 6f v [THEN]..\\\.Lo
82d0: 63 61 6c 20 56 61 72 69 61 62 6c 65 73 3a 0a 66 cal Variables:.f
82e0: 6f 72 74 68 2d 6c 6f 63 61 6c 2d 77 6f 72 64 73 orth-local-words
82f0: 3a 0a 20 20 20 20 28 0a 20 20 20 20 20 28 28 22 :. (. (("
8300: 6e 65 74 32 6f 3a 22 20 22 2b 6e 65 74 32 6f 3a net2o:" "+net2o:
8310: 22 29 20 64 65 66 69 6e 69 74 69 6f 6e 2d 73 74 ") definition-st
8320: 61 72 74 65 72 20 28 66 6f 6e 74 2d 6c 6f 63 6b arter (font-lock
8330: 2d 6b 65 79 77 6f 72 64 2d 66 61 63 65 20 2e 20 -keyword-face .
8340: 31 29 0a 20 20 20 20 20 20 22 5b 20 5c 74 5c 6e 1). "[ \t\n
8350: 5d 22 20 74 20 6e 61 6d 65 20 28 66 6f 6e 74 2d ]" t name (font-
8360: 6c 6f 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 6e 61 lock-function-na
8370: 6d 65 2d 66 61 63 65 20 2e 20 33 29 29 0a 20 20 me-face . 3)).
8380: 20 20 20 28 22 5b 61 2d 7a 30 2d 39 5d 2b 28 22 ("[a-z0-9]+("
8390: 20 69 6d 6d 65 64 69 61 74 65 20 28 66 6f 6e 74 immediate (font
83a0: 2d 6c 6f 63 6b 2d 63 6f 6d 6d 65 6e 74 2d 66 61 -lock-comment-fa
83b0: 63 65 20 2e 20 31 29 0a 20 20 20 20 20 20 22 29 ce . 1). ")
83c0: 22 20 6e 69 6c 20 63 6f 6d 6d 65 6e 74 20 28 66 " nil comment (f
83d0: 6f 6e 74 2d 6c 6f 63 6b 2d 63 6f 6d 6d 65 6e 74 ont-lock-comment
83e0: 2d 66 61 63 65 20 2e 20 31 29 29 0a 20 20 20 20 -face . 1)).
83f0: 29 0a 66 6f 72 74 68 2d 6c 6f 63 61 6c 2d 69 6e ).forth-local-in
8400: 64 65 6e 74 2d 77 6f 72 64 73 3a 0a 20 20 20 20 dent-words:.
8410: 28 0a 20 20 20 20 20 28 28 22 6e 65 74 32 6f 3a (. (("net2o:
8420: 22 20 22 2b 6e 65 74 32 6f 3a 22 29 20 28 30 20 " "+net2o:") (0
8430: 2e 20 32 29 20 28 30 20 2e 20 32 29 20 6e 6f 6e . 2) (0 . 2) non
8440: 2d 69 6d 6d 65 64 69 61 74 65 29 0a 20 20 20 20 -immediate).
8450: 20 28 28 22 7b 7b 22 29 20 28 30 20 2e 20 32 29 (("{{") (0 . 2)
8460: 20 28 30 20 2e 20 32 29 20 69 6d 6d 65 64 69 61 (0 . 2) immedia
8470: 74 65 29 0a 20 20 20 20 20 28 28 22 7d 7d 68 22 te). (("}}h"
8480: 20 22 7d 7d 76 22 20 22 7d 7d 7a 22 20 22 7d 7d "}}v" "}}z" "}}
8490: 76 70 22 20 22 7d 7d 70 22 29 20 28 2d 32 20 2e vp" "}}p") (-2 .
84a0: 20 30 29 20 28 2d 32 20 2e 20 30 29 20 69 6d 6d 0) (-2 . 0) imm
84b0: 65 64 69 61 74 65 29 0a 20 20 20 20 29 0a 45 6e ediate). ).En
84c0: 64 3a 0a 5b 54 48 45 4e 5d 0a d:.[THEN].