Hex Artifact Content
Not logged in

Artifact cfe04bb3c0b953f86a90329b7f39cb2cfa135f69:


0000: 5c 20 62 61 73 65 38 35 20 6f 75 74 70 75 74 20  \ base85 output 
0010: 28 64 65 72 69 76 65 64 20 66 72 6f 6d 20 52 46  (derived from RF
0020: 43 20 31 39 32 34 2c 20 73 75 69 74 61 62 6c 65  C 1924, suitable
0030: 20 61 73 20 66 69 6c 65 20 6e 61 6d 65 29 0a 0a   as file name)..
0040: 38 35 20 62 75 66 66 65 72 3a 20 38 35 3e 63 68  85 buffer: 85>ch
0050: 61 72 73 0a 73 22 20 30 31 32 33 34 35 36 37 38  ars.s" 012345678
0060: 39 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f  9ABCDEFGHIJKLMNO
0070: 50 51 52 53 54 55 56 57 58 59 5a 61 62 63 64 65  PQRSTUVWXYZabcde
0080: 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75  fghijklmnopqrstu
0090: 76 77 78 79 7a 21 23 24 25 26 28 29 2a 2b 2d 3b  vwxyz!#$%&()*+-;
00a0: 3c 3d 3e 3f 40 5e 5f 60 7b 7c 7d 7e 22 0a 38 35  <=>?@^_`{|}~".85
00b0: 3e 63 68 61 72 73 20 38 35 20 73 6d 6f 76 65 0a  >chars 85 smove.
00c0: 24 38 30 20 62 75 66 66 65 72 3a 20 63 68 61 72  $80 buffer: char
00d0: 73 3e 38 35 0a 63 68 61 72 73 3e 38 35 20 24 38  s>85.chars>85 $8
00e0: 30 20 24 46 46 20 66 69 6c 6c 0a 38 35 20 30 20  0 $FF fill.85 0 
00f0: 5b 44 4f 5d 20 5b 49 5d 20 64 75 70 20 38 35 3e  [DO] [I] dup 85>
0100: 63 68 61 72 73 20 2b 20 63 40 20 63 68 61 72 73  chars + c@ chars
0110: 3e 38 35 20 2b 20 63 21 20 5b 4c 4f 4f 50 5d 0a  >85 + c! [LOOP].
0120: 0a 3a 20 2e 62 38 35 20 28 20 6e 20 2d 2d 20 6e  .: .b85 ( n -- n
0130: 27 20 29 20 30 20 38 35 20 75 6d 2f 6d 6f 64 20  ' ) 0 85 um/mod 
0140: 73 77 61 70 20 38 35 3e 63 68 61 72 73 20 2b 20  swap 85>chars + 
0150: 63 40 20 65 6d 69 74 20 3b 0a 3a 20 2e 31 62 61  c@ emit ;.: .1ba
0160: 73 65 38 35 20 28 20 61 64 64 72 20 2d 2d 20 29  se85 ( addr -- )
0170: 20 63 40 20 2e 62 38 35 20 2e 62 38 35 20 64 72   c@ .b85 .b85 dr
0180: 6f 70 20 3b 0a 3a 20 2e 32 62 61 73 65 38 35 20  op ;.: .2base85 
0190: 28 20 61 64 64 72 20 2d 2d 20 29 20 6c 65 2d 75  ( addr -- ) le-u
01a0: 77 40 20 2e 62 38 35 20 2e 62 38 35 20 2e 62 38  w@ .b85 .b85 .b8
01b0: 35 20 64 72 6f 70 20 3b 0a 3a 20 2e 33 62 61 73  5 drop ;.: .3bas
01c0: 65 38 35 20 28 20 61 64 64 72 20 2d 2d 20 29 20  e85 ( addr -- ) 
01d0: 6c 65 2d 75 6c 40 20 24 46 46 46 46 46 46 20 61  le-ul@ $FFFFFF a
01e0: 6e 64 20 2e 62 38 35 20 2e 62 38 35 20 2e 62 38  nd .b85 .b85 .b8
01f0: 35 20 2e 62 38 35 20 64 72 6f 70 20 3b 0a 3a 20  5 .b85 drop ;.: 
0200: 2e 34 62 61 73 65 38 35 20 28 20 61 64 64 72 20  .4base85 ( addr 
0210: 2d 2d 20 29 20 6c 65 2d 75 6c 40 20 2e 62 38 35  -- ) le-ul@ .b85
0220: 20 2e 62 38 35 20 2e 62 38 35 20 2e 62 38 35 20   .b85 .b85 .b85 
0230: 2e 62 38 35 20 64 72 6f 70 20 3b 0a 43 72 65 61  .b85 drop ;.Crea
0240: 74 65 20 2e 62 61 73 65 38 35 73 20 27 20 64 72  te .base85s ' dr
0250: 6f 70 20 2c 20 27 20 2e 31 62 61 73 65 38 35 20  op , ' .1base85 
0260: 2c 20 27 20 2e 32 62 61 73 65 38 35 20 2c 20 27  , ' .2base85 , '
0270: 20 2e 33 62 61 73 65 38 35 20 2c 20 27 20 2e 34   .3base85 , ' .4
0280: 62 61 73 65 38 35 20 2c 0a 3a 20 38 35 74 79 70  base85 ,.: 85typ
0290: 65 20 28 20 61 64 64 72 20 75 20 2d 2d 20 29 0a  e ( addr u -- ).
02a0: 20 20 20 20 62 6f 75 6e 64 73 20 3f 44 4f 20 20      bounds ?DO  
02b0: 49 20 49 27 20 6f 76 65 72 20 2d 20 34 20 75 6d  I I' over - 4 um
02c0: 69 6e 20 63 65 6c 6c 73 20 2e 62 61 73 65 38 35  in cells .base85
02d0: 73 20 2b 20 70 65 72 66 6f 72 6d 20 20 34 20 2b  s + perform  4 +
02e0: 4c 4f 4f 50 20 3b 0a 0a 3a 20 62 38 35 64 69 67  LOOP ;..: b85dig
02f0: 69 74 20 28 20 63 68 61 72 20 2d 2d 20 6e 20 29  it ( char -- n )
0300: 20 24 37 46 20 75 6d 69 6e 20 63 68 61 72 73 3e   $7F umin chars>
0310: 38 35 20 2b 20 63 40 0a 20 20 20 20 64 75 70 20  85 + c@.    dup 
0320: 24 46 46 20 3d 20 21 21 6e 6f 2d 38 35 2d 64 69  $FF = !!no-85-di
0330: 67 69 74 21 21 20 3b 0a 0a 3a 20 62 61 73 65 38  git!! ;..: base8
0340: 35 3e 6e 20 28 20 61 64 64 72 20 75 20 2d 2d 20  5>n ( addr u -- 
0350: 6e 20 29 20 20 30 20 31 20 32 73 77 61 70 20 62  n )  0 1 2swap b
0360: 6f 75 6e 64 73 20 2b 44 4f 0a 09 49 20 63 40 20  ounds +DO..I c@ 
0370: 62 38 35 64 69 67 69 74 20 6f 76 65 72 20 2a 20  b85digit over * 
0380: 72 6f 74 20 2b 20 73 77 61 70 20 38 35 20 2a 0a  rot + swap 85 *.
0390: 20 20 20 20 4c 4f 4f 50 20 20 64 72 6f 70 20 3b      LOOP  drop ;
03a0: 0a 3a 20 28 62 61 73 65 38 35 3e 24 29 20 28 20  .: (base85>$) ( 
03b0: 61 64 64 72 20 75 20 2d 2d 20 61 64 64 72 27 20  addr u -- addr' 
03c0: 75 27 20 29 20 20 62 6f 75 6e 64 73 20 3f 44 4f  u' )  bounds ?DO
03d0: 0a 09 49 20 49 27 20 6f 76 65 72 20 2d 20 35 20  ..I I' over - 5 
03e0: 75 6d 69 6e 20 64 75 70 20 3e 72 20 62 61 73 65  umin dup >r base
03f0: 38 35 3e 6e 20 7b 20 7c 20 77 5e 20 78 20 7d 20  85>n { | w^ x } 
0400: 78 20 6c 65 2d 6c 21 20 78 20 72 3e 20 34 20 35  x le-l! x r> 4 5
0410: 20 2a 2f 20 74 79 70 65 0a 20 20 20 20 35 20 2b   */ type.    5 +
0420: 4c 4f 4f 50 20 3b 0a 3a 20 62 61 73 65 38 35 3e  LOOP ;.: base85>
0430: 24 20 28 20 61 64 64 72 20 75 20 2d 2d 20 61 64  $ ( addr u -- ad
0440: 64 72 27 20 75 27 20 29 20 5b 27 5d 20 28 62 61  dr' u' ) ['] (ba
0450: 73 65 38 35 3e 24 29 20 24 74 6d 70 20 3b 0a 0a  se85>$) $tmp ;..
0460: 3a 20 38 35 22 20 28 20 22 62 61 73 65 38 35 73  : 85" ( "base85s
0470: 74 72 69 6e 67 22 20 2d 2d 20 61 64 64 72 20 75  tring" -- addr u
0480: 20 29 0a 20 20 20 20 27 22 27 20 70 61 72 73 65   ).    '"' parse
0490: 20 62 61 73 65 38 35 3e 24 20 3b 0a 63 6f 6d 70   base85>$ ;.comp
04a0: 73 65 6d 3a 20 5b 63 6f 6d 70 69 6c 65 5d 20 38  sem: [compile] 8
04b0: 35 22 20 70 6f 73 74 70 6f 6e 65 20 53 4c 69 74  5" postpone SLit
04c0: 65 72 61 6c 20 3b 0a 0a 3a 20 2e 38 35 69 6e 66  eral ;..: .85inf
04d0: 6f 20 28 20 61 64 64 72 20 75 20 2d 2d 20 29 0a  o ( addr u -- ).
04e0: 20 20 20 20 3c 69 6e 66 6f 3e 20 38 35 74 79 70      <info> 85typ
04f0: 65 20 3c 64 65 66 61 75 6c 74 3e 20 3b 0a 3a 20  e <default> ;.: 
0500: 2e 38 35 77 61 72 6e 20 28 20 61 64 64 72 20 75  .85warn ( addr u
0510: 20 2d 2d 20 29 0a 20 20 20 20 3c 77 61 72 6e 3e   -- ).    <warn>
0520: 20 38 35 74 79 70 65 20 3c 64 65 66 61 75 6c 74   85type <default
0530: 3e 20 3b 0a 0a 3a 20 68 61 73 68 2d 38 35 20 28  > ;..: hash-85 (
0540: 20 61 64 64 72 20 75 20 2d 2d 20 61 64 64 72 27   addr u -- addr'
0550: 20 75 27 20 29 0a 20 20 20 20 5b 27 5d 20 38 35   u' ).    ['] 85
0560: 74 79 70 65 20 24 74 6d 70 20 68 61 73 68 2d 73  type $tmp hash-s
0570: 61 6e 69 74 69 7a 65 20 3b 0a 3a 20 63 68 61 74  anitize ;.: chat
0580: 2d 38 35 20 28 20 61 64 64 72 20 75 20 2d 2d 20  -85 ( addr u -- 
0590: 61 64 64 72 27 20 75 27 20 29 0a 20 20 20 20 5b  addr' u' ).    [
05a0: 27 5d 20 38 35 74 79 70 65 20 24 74 6d 70 20 63  '] 85type $tmp c
05b0: 68 61 74 2d 73 61 6e 69 74 69 7a 65 20 3b 0a 3a  hat-sanitize ;.:
05c0: 20 68 61 73 68 3e 66 69 6c 65 6e 61 6d 65 20 28   hash>filename (
05d0: 20 61 64 64 72 20 75 20 2d 2d 20 66 69 6c 65 6e   addr u -- filen
05e0: 61 6d 65 20 75 27 20 29 0a 20 20 20 20 68 61 73  ame u' ).    has
05f0: 68 2d 38 35 20 5b 3a 20 63 6f 6e 66 69 67 3a 6f  h-85 [: config:o
0600: 62 6a 65 63 74 73 24 20 24 2e 20 27 2f 27 20 65  bjects$ $. '/' e
0610: 6d 69 74 20 74 79 70 65 20 3b 5d 20 24 74 6d 70  mit type ;] $tmp
0620: 20 3b 0a 3a 20 2e 63 68 61 74 73 2f 20 28 20 61   ;.: .chats/ ( a
0630: 64 64 72 20 75 20 2d 2d 20 61 64 64 72 27 20 75  ddr u -- addr' u
0640: 27 20 29 0a 20 20 20 20 63 68 61 74 2d 38 35 20  ' ).    chat-85 
0650: 5b 3a 20 63 6f 6e 66 69 67 3a 63 68 61 74 73 24  [: config:chats$
0660: 20 20 24 2e 20 27 2f 27 20 65 6d 69 74 20 74 79    $. '/' emit ty
0670: 70 65 20 3b 5d 20 24 74 6d 70 20 3b 0a           pe ;] $tmp ;.