Hex Artifact Content
Not logged in

Artifact f523328eb89b3c1e53a46f070e214b3fd4c486dd:


0000: 5c 20 73 63 61 6e 20 63 6f 6c 6f 72 20 51 52 20  \ scan color QR 
0010: 63 6f 64 65 73 20 6f 6e 20 41 6e 64 72 6f 69 64  codes on Android
0020: 0a 0a 5c 20 43 6f 70 79 72 69 67 68 74 20 28 43  ..\ Copyright (C
0030: 29 20 32 30 31 36 2d 32 30 31 38 20 20 20 42 65  ) 2016-2018   Be
0040: 72 6e 64 20 50 61 79 73 61 6e 0a 0a 5c 20 54 68  rnd Paysan..\ Th
0050: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72  is program is fr
0060: 65 65 20 73 6f 66 74 77 61 72 65 3a 20 79 6f 75  ee software: you
0070: 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74   can redistribut
0080: 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69  e it and/or modi
0090: 66 79 0a 5c 20 69 74 20 75 6e 64 65 72 20 74 68  fy.\ it under th
00a0: 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 47  e terms of the G
00b0: 4e 55 20 41 66 66 65 72 6f 20 47 65 6e 65 72 61  NU Affero Genera
00c0: 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65  l Public License
00d0: 20 61 73 20 70 75 62 6c 69 73 68 65 64 20 62 79   as published by
00e0: 0a 5c 20 74 68 65 20 46 72 65 65 20 53 6f 66 74  .\ the Free Soft
00f0: 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c  ware Foundation,
0100: 20 65 69 74 68 65 72 20 76 65 72 73 69 6f 6e 20   either version 
0110: 33 20 6f 66 20 74 68 65 20 4c 69 63 65 6e 73 65  3 of the License
0120: 2c 20 6f 72 0a 5c 20 28 61 74 20 79 6f 75 72 20  , or.\ (at your 
0130: 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65  option) any late
0140: 72 20 76 65 72 73 69 6f 6e 2e 0a 0a 5c 20 54 68  r version...\ Th
0150: 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69  is program is di
0160: 73 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65  stributed in the
0170: 20 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69   hope that it wi
0180: 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 5c 20  ll be useful,.\ 
0190: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20  but WITHOUT ANY 
01a0: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75  WARRANTY; withou
01b0: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69  t even the impli
01c0: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 5c  ed warranty of.\
01d0: 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59   MERCHANTABILITY
01e0: 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20   or FITNESS FOR 
01f0: 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52  A PARTICULAR PUR
0200: 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 5c  POSE.  See the.\
0210: 20 47 4e 55 20 41 66 66 65 72 6f 20 47 65 6e 65   GNU Affero Gene
0220: 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e  ral Public Licen
0230: 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61  se for more deta
0240: 69 6c 73 2e 0a 0a 5c 20 59 6f 75 20 73 68 6f 75  ils...\ You shou
0250: 6c 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64  ld have received
0260: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47   a copy of the G
0270: 4e 55 20 41 66 66 65 72 6f 20 47 65 6e 65 72 61  NU Affero Genera
0280: 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65  l Public License
0290: 0a 5c 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  .\ along with th
02a0: 69 73 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20  is program.  If 
02b0: 6e 6f 74 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f  not, see <http:/
02c0: 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63  /www.gnu.org/lic
02d0: 65 6e 73 65 73 2f 3e 2e 0a 0a 72 65 71 75 69 72  enses/>...requir
02e0: 65 20 6d 69 6e 6f 73 32 2f 67 6c 2d 68 65 6c 70  e minos2/gl-help
02f0: 65 72 2e 66 73 0a 5b 49 46 44 45 46 5d 20 61 6e  er.fs.[IFDEF] an
0300: 64 72 6f 69 64 0a 20 20 20 20 72 65 71 75 69 72  droid.    requir
0310: 65 20 6d 69 6e 6f 73 32 2f 61 6e 64 72 6f 69 64  e minos2/android
0320: 2d 72 65 63 6f 72 64 65 72 2e 66 73 0a 5b 45 4c  -recorder.fs.[EL
0330: 53 45 5d 0a 20 20 20 20 5b 49 46 55 4e 44 45 46  SE].    [IFUNDEF
0340: 5d 20 63 61 6d 2d 77 0a 09 24 31 30 30 20 76 61  ] cam-w..$100 va
0350: 6c 75 65 20 63 61 6d 2d 77 0a 09 24 31 30 30 20  lue cam-w..$100 
0360: 76 61 6c 75 65 20 63 61 6d 2d 68 0a 20 20 20 20  value cam-h.    
0370: 5b 54 48 45 4e 5d 0a 5b 54 48 45 4e 5d 0a 0a 5c  [THEN].[THEN]..\
0380: 20 72 65 70 6c 61 63 65 20 73 6f 6d 65 20 74 6f   replace some to
0390: 6f 6c 73 20 61 76 61 69 6c 61 62 6c 65 20 75 6e  ols available un
03a0: 64 65 72 20 6e 65 74 32 6f 0a 0a 5b 49 46 55 4e  der net2o..[IFUN
03b0: 44 45 46 5d 20 71 72 28 0a 20 20 20 20 64 65 62  DEF] qr(.    deb
03c0: 75 67 3a 20 71 72 28 0a 20 20 20 20 2b 64 62 20  ug: qr(.    +db 
03d0: 71 72 28 20 5c 20 74 75 72 6e 20 69 74 20 6f 6e  qr( \ turn it on
03e0: 20 29 0a 5b 54 48 45 4e 5d 0a 0a 5b 49 46 55 4e   ).[THEN]..[IFUN
03f0: 44 45 46 5d 20 78 74 79 70 65 0a 20 20 20 20 3a  DEF] xtype.    :
0400: 20 68 65 78 5b 20 5d 5d 20 5b 3a 20 5b 5b 20 3b   hex[ ]] [: [[ ;
0410: 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 3a   immediate.    :
0420: 20 5d 68 65 78 20 5d 5d 20 3b 5d 20 24 31 30 20   ]hex ]] ;] $10 
0430: 62 61 73 65 2d 65 78 65 63 75 74 65 20 5b 5b 20  base-execute [[ 
0440: 3b 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  ; immediate.    
0450: 3a 20 78 74 79 70 65 20 28 20 61 64 64 72 20 75  : xtype ( addr u
0460: 20 2d 2d 20 29 20 20 68 65 78 5b 0a 09 62 6f 75   -- )  hex[..bou
0470: 6e 64 73 20 3f 44 4f 20 20 49 20 63 40 20 30 20  nds ?DO  I c@ 0 
0480: 3c 23 20 23 20 23 20 23 3e 20 74 79 70 65 20 20  <# # # #> type  
0490: 4c 4f 4f 50 20 20 5d 68 65 78 20 3b 0a 5b 54 48  LOOP  ]hex ;.[TH
04a0: 45 4e 5d 0a 0a 5b 49 46 55 4e 44 45 46 5d 20 74  EN]..[IFUNDEF] t
04b0: 61 67 68 61 73 68 3f 0a 20 20 20 20 3a 20 74 61  aghash?.    : ta
04c0: 67 68 61 73 68 3f 20 28 20 61 64 64 72 6b 65 79  ghash? ( addrkey
04d0: 20 75 31 20 61 64 64 72 65 63 63 20 75 32 20 74   u1 addrecc u2 t
04e0: 61 67 20 2d 2d 20 66 6c 61 67 20 29 0a 09 64 72  ag -- flag )..dr
04f0: 6f 70 20 32 64 72 6f 70 20 32 64 72 6f 70 20 74  op 2drop 2drop t
0500: 72 75 65 20 3b 0a 5b 54 48 45 4e 5d 0a 0a 5c 20  rue ;.[THEN]..\ 
0510: 73 63 61 6e 20 6d 61 74 72 69 78 20 6d 61 6e 69  scan matrix mani
0520: 70 75 6c 61 74 69 6f 6e 0a 0a 43 72 65 61 74 65  pulation..Create
0530: 20 73 63 61 6e 2d 6d 61 74 72 69 78 0a 31 65 20   scan-matrix.1e 
0540: 73 66 2c 20 30 65 20 73 66 2c 20 30 65 20 73 66  sf, 0e sf, 0e sf
0550: 2c 20 30 65 20 73 66 2c 0a 30 65 20 73 66 2c 20  , 0e sf,.0e sf, 
0560: 31 65 20 73 66 2c 20 30 65 20 73 66 2c 20 30 65  1e sf, 0e sf, 0e
0570: 20 73 66 2c 0a 30 65 20 73 66 2c 20 30 65 20 73   sf,.0e sf, 0e s
0580: 66 2c 20 31 65 20 73 66 2c 20 30 65 20 73 66 2c  f, 1e sf, 0e sf,
0590: 0a 30 65 20 73 66 2c 20 30 65 20 73 66 2c 20 30  .0e sf, 0e sf, 0
05a0: 65 20 73 66 2c 20 31 65 20 73 66 2c 0a 0a 73 63  e sf, 1e sf,..sc
05b0: 61 6e 2d 6d 61 74 72 69 78 20 31 31 20 73 66 6c  an-matrix 11 sfl
05c0: 6f 61 74 73 20 2b 20 43 6f 6e 73 74 61 6e 74 20  oats + Constant 
05d0: 33 64 2d 65 6e 61 62 6c 65 72 0a 0a 33 32 20 73  3d-enabler..32 s
05e0: 66 6c 6f 61 74 73 20 62 75 66 66 65 72 3a 20 73  floats buffer: s
05f0: 63 61 6e 2d 69 6e 76 65 72 73 65 0a 33 32 20 73  can-inverse.32 s
0600: 66 6c 6f 61 74 73 20 62 75 66 66 65 72 3a 20 69  floats buffer: i
0610: 6e 76 65 72 73 65 2d 64 65 66 61 75 6c 74 0a 69  nverse-default.i
0620: 6e 76 65 72 73 65 2d 64 65 66 61 75 6c 74 20 33  nverse-default 3
0630: 32 20 73 66 6c 6f 61 74 73 20 62 6f 75 6e 64 73  2 sfloats bounds
0640: 0a 5b 3f 44 4f 5d 20 31 65 20 66 64 75 70 20 5b  .[?DO] 1e fdup [
0650: 49 5d 20 73 66 21 20 5b 49 5d 20 34 20 73 66 6c  I] sf! [I] 4 sfl
0660: 6f 61 74 73 20 2b 20 73 66 21 20 39 20 73 66 6c  oats + sf! 9 sfl
0670: 6f 61 74 73 20 5b 2b 4c 4f 4f 50 5d 0a 0a 38 33  oats [+LOOP]..83
0680: 65 20 46 56 61 6c 75 65 20 78 2d 73 63 61 6e 73  e FValue x-scans
0690: 69 7a 65 0a 38 33 65 20 46 56 61 6c 75 65 20 79  ize.83e FValue y
06a0: 2d 73 63 61 6e 73 69 7a 65 0a 0a 30 65 20 46 56  -scansize..0e FV
06b0: 61 6c 75 65 20 79 2d 6f 66 66 73 65 74 0a 30 65  alue y-offset.0e
06c0: 20 46 56 61 6c 75 65 20 78 2d 6f 66 66 73 65 74   FValue x-offset
06d0: 0a 0a 5c 20 6d 61 74 72 69 78 20 69 6e 76 65 72  ..\ matrix inver
06e0: 73 69 6f 6e 0a 0a 27 20 64 66 6c 6f 61 74 73 20  sion..' dfloats 
06f0: 61 6c 69 61 73 20 38 2a 0a 3a 20 2e 6d 61 74 20  alias 8*.: .mat 
0700: 7b 20 6d 61 74 20 2d 2d 20 7d 0a 20 20 20 20 34  { mat -- }.    4
0710: 20 30 20 44 4f 20 20 63 72 0a 09 38 20 30 20 44   0 DO  cr..8 0 D
0720: 4f 0a 09 20 20 20 20 6d 61 74 20 4a 20 38 2a 20  O..    mat J 8* 
0730: 49 20 2b 20 73 66 6c 6f 61 74 73 20 2b 20 73 66  I + sfloats + sf
0740: 40 20 66 2e 0a 09 4c 4f 4f 50 0a 20 20 20 20 4c  @ f...LOOP.    L
0750: 4f 4f 50 20 3b 0a 3a 20 69 6e 69 74 2d 73 63 61  OOP ;.: init-sca
0760: 6e 27 20 28 20 2d 2d 20 29 0a 20 20 20 20 69 6e  n' ( -- ).    in
0770: 76 65 72 73 65 2d 64 65 66 61 75 6c 74 20 73 63  verse-default sc
0780: 61 6e 2d 69 6e 76 65 72 73 65 20 5b 20 33 32 20  an-inverse [ 32 
0790: 73 66 6c 6f 61 74 73 20 5d 4c 20 6d 6f 76 65 20  sfloats ]L move 
07a0: 3b 0a 3a 20 73 66 61 78 2b 79 38 20 28 20 72 61  ;.: sfax+y8 ( ra
07b0: 20 61 64 64 72 31 20 61 64 64 72 32 20 2d 2d 20   addr1 addr2 -- 
07c0: 29 0a 20 20 20 20 5b 20 38 20 73 66 6c 6f 61 74  ).    [ 8 sfloat
07d0: 73 20 5d 4c 20 62 6f 75 6e 64 73 20 3f 44 4f 0a  s ]L bounds ?DO.
07e0: 09 64 75 70 20 73 66 40 20 66 6f 76 65 72 20 49  .dup sf@ fover I
07f0: 20 73 66 40 20 66 2a 20 66 2b 20 64 75 70 20 73   sf@ f* f+ dup s
0800: 66 21 20 73 66 6c 6f 61 74 2b 0a 20 20 20 20 5b  f! sfloat+.    [
0810: 20 31 20 73 66 6c 6f 61 74 73 20 5d 4c 20 2b 4c   1 sfloats ]L +L
0820: 4f 4f 50 20 20 64 72 6f 70 20 66 64 72 6f 70 20  OOP  drop fdrop 
0830: 3b 0a 3a 20 73 66 61 78 38 20 28 20 72 61 20 61  ;.: sfax8 ( ra a
0840: 64 64 72 20 2d 2d 20 29 0a 20 20 20 20 5b 20 38  ddr -- ).    [ 8
0850: 20 73 66 6c 6f 61 74 73 20 5d 4c 20 62 6f 75 6e   sfloats ]L boun
0860: 64 73 20 3f 44 4f 0a 09 66 64 75 70 20 49 20 73  ds ?DO..fdup I s
0870: 66 40 20 66 2a 20 49 20 73 66 21 0a 20 20 20 20  f@ f* I sf!.    
0880: 5b 20 31 20 73 66 6c 6f 61 74 73 20 5d 4c 20 2b  [ 1 sfloats ]L +
0890: 4c 4f 4f 50 20 20 66 64 72 6f 70 20 3b 0a 3a 20  LOOP  fdrop ;.: 
08a0: 74 69 6a 38 20 28 20 61 64 64 72 31 20 61 64 64  tij8 ( addr1 add
08b0: 72 32 20 2d 2d 20 29 0a 20 20 20 20 5b 20 38 20  r2 -- ).    [ 8 
08c0: 73 66 6c 6f 61 74 73 20 5d 4c 20 62 6f 75 6e 64  sfloats ]L bound
08d0: 73 20 3f 44 4f 0a 09 64 75 70 20 73 66 40 20 49  s ?DO..dup sf@ I
08e0: 20 73 66 40 20 64 75 70 20 73 66 21 20 49 20 73   sf@ dup sf! I s
08f0: 66 21 20 73 66 6c 6f 61 74 2b 0a 20 20 20 20 5b  f! sfloat+.    [
0900: 20 31 20 73 66 6c 6f 61 74 73 20 5d 4c 20 2b 4c   1 sfloats ]L +L
0910: 4f 4f 50 20 20 64 72 6f 70 20 3b 0a 20 20 20 20  OOP  drop ;.    
0920: 0a 3a 20 6d 61 74 72 69 78 2d 69 6e 76 65 72 74  .: matrix-invert
0930: 34 20 7b 20 6d 61 74 20 2d 2d 20 7d 20 5c 20 73  4 { mat -- } \ s
0940: 68 6f 72 74 63 75 74 20 74 6f 20 69 6e 76 65 72  hortcut to inver
0950: 74 20 74 79 70 69 63 61 6c 20 6d 61 74 72 69 78  t typical matrix
0960: 0a 20 20 20 20 6d 61 74 20 73 66 40 20 66 61 62  .    mat sf@ fab
0970: 73 20 6d 61 74 20 5b 20 38 20 73 66 6c 6f 61 74  s mat [ 8 sfloat
0980: 73 20 5d 4c 20 2b 20 73 66 40 20 66 61 62 73 20  s ]L + sf@ fabs 
0990: 66 3c 20 49 46 0a 09 6d 61 74 20 64 75 70 20 5b  f< IF..mat dup [
09a0: 20 38 20 73 66 6c 6f 61 74 73 20 5d 4c 20 2b 20   8 sfloats ]L + 
09b0: 74 69 6a 38 20 5c 20 65 78 63 68 61 6e 67 65 20  tij8 \ exchange 
09c0: 74 77 6f 20 6c 69 6e 65 73 0a 20 20 20 20 54 48  two lines.    TH
09d0: 45 4e 0a 20 20 20 20 34 20 30 20 44 4f 0a 09 34  EN.    4 0 DO..4
09e0: 20 30 20 44 4f 0a 09 20 20 20 20 6d 61 74 20 4a   0 DO..    mat J
09f0: 20 5b 20 39 20 73 66 6c 6f 61 74 73 20 5d 4c 20   [ 9 sfloats ]L 
0a00: 2a 20 2b 20 73 66 40 20 31 2f 66 0a 09 20 20 20  * + sf@ 1/f..   
0a10: 20 49 20 4a 20 3c 3e 20 49 46 0a 09 09 6d 61 74   I J <> IF...mat
0a20: 20 49 20 38 2a 20 73 66 6c 6f 61 74 73 20 2b 0a   I 8* sfloats +.
0a30: 09 09 6d 61 74 20 4a 20 38 2a 20 73 66 6c 6f 61  ..mat J 8* sfloa
0a40: 74 73 20 2b 0a 09 09 6f 76 65 72 20 4a 20 73 66  ts +...over J sf
0a50: 6c 6f 61 74 73 20 2b 20 73 66 40 20 66 2a 20 66  loats + sf@ f* f
0a60: 6e 65 67 61 74 65 20 73 66 61 78 2b 79 38 0a 09  negate sfax+y8..
0a70: 20 20 20 20 45 4c 53 45 0a 09 09 6d 61 74 20 4a      ELSE...mat J
0a80: 20 38 2a 20 73 66 6c 6f 61 74 73 20 2b 20 73 66   8* sfloats + sf
0a90: 61 78 38 0a 09 20 20 20 20 54 48 45 4e 0a 09 20  ax8..    THEN.. 
0aa0: 20 20 20 28 20 6d 61 74 20 2e 6d 61 74 20 63 72     ( mat .mat cr
0ab0: 20 29 20 5c 20 64 65 62 75 67 67 69 6e 67 20 6f   ) \ debugging o
0ac0: 75 74 70 75 74 0a 09 4c 4f 4f 50 0a 20 20 20 20  utput..LOOP.    
0ad0: 4c 4f 4f 50 20 3b 0a 0a 73 63 61 6e 2d 69 6e 76  LOOP ;..scan-inv
0ae0: 65 72 73 65 20 20 30 20 73 66 6c 6f 61 74 73 20  erse  0 sfloats 
0af0: 2b 20 43 6f 6e 73 74 61 6e 74 20 78 2d 73 63 6c  + Constant x-scl
0b00: 0a 73 63 61 6e 2d 69 6e 76 65 72 73 65 20 20 31  .scan-inverse  1
0b10: 20 73 66 6c 6f 61 74 73 20 2b 20 43 6f 6e 73 74   sfloats + Const
0b20: 61 6e 74 20 79 2d 72 6f 74 73 0a 73 63 61 6e 2d  ant y-rots.scan-
0b30: 69 6e 76 65 72 73 65 20 20 38 20 73 66 6c 6f 61  inverse  8 sfloa
0b40: 74 73 20 2b 20 43 6f 6e 73 74 61 6e 74 20 78 2d  ts + Constant x-
0b50: 72 6f 74 73 0a 73 63 61 6e 2d 69 6e 76 65 72 73  rots.scan-invers
0b60: 65 20 20 39 20 73 66 6c 6f 61 74 73 20 2b 20 43  e  9 sfloats + C
0b70: 6f 6e 73 74 61 6e 74 20 79 2d 73 63 6c 0a 73 63  onstant y-scl.sc
0b80: 61 6e 2d 69 6e 76 65 72 73 65 20 32 34 20 73 66  an-inverse 24 sf
0b90: 6c 6f 61 74 73 20 2b 20 43 6f 6e 73 74 61 6e 74  loats + Constant
0ba0: 20 78 2d 73 70 6f 73 0a 73 63 61 6e 2d 69 6e 76   x-spos.scan-inv
0bb0: 65 72 73 65 20 32 35 20 73 66 6c 6f 61 74 73 20  erse 25 sfloats 
0bc0: 2b 20 43 6f 6e 73 74 61 6e 74 20 79 2d 73 70 6f  + Constant y-spo
0bd0: 73 0a 0a 3a 20 3e 73 63 61 6e 2d 6d 61 74 72 69  s..: >scan-matri
0be0: 78 20 28 20 2d 2d 20 29 0a 20 20 20 20 73 63 61  x ( -- ).    sca
0bf0: 6e 2d 69 6e 76 65 72 73 65 20 6d 61 74 72 69 78  n-inverse matrix
0c00: 2d 69 6e 76 65 72 74 34 0a 20 20 20 20 73 63 61  -invert4.    sca
0c10: 6e 2d 6d 61 74 72 69 78 20 5b 20 73 63 61 6e 2d  n-matrix [ scan-
0c20: 69 6e 76 65 72 73 65 20 34 20 73 66 6c 6f 61 74  inverse 4 sfloat
0c30: 73 20 2b 20 5d 4c 20 5b 20 33 32 20 73 66 6c 6f  s + ]L [ 32 sflo
0c40: 61 74 73 20 5d 4c 20 62 6f 75 6e 64 73 20 3f 44  ats ]L bounds ?D
0c50: 4f 0a 09 49 20 6f 76 65 72 20 5b 20 34 20 73 66  O..I over [ 4 sf
0c60: 6c 6f 61 74 73 20 5d 4c 20 6d 6f 76 65 20 20 5b  loats ]L move  [
0c70: 20 34 20 73 66 6c 6f 61 74 73 20 5d 4c 20 2b 0a   4 sfloats ]L +.
0c80: 20 20 20 20 5b 20 38 20 73 66 6c 6f 61 74 73 20      [ 8 sfloats 
0c90: 5d 4c 20 2b 4c 4f 4f 50 20 20 64 72 6f 70 0a 20  ]L +LOOP  drop. 
0ca0: 20 20 20 2d 31 65 20 33 64 2d 65 6e 61 62 6c 65     -1e 3d-enable
0cb0: 72 20 73 66 21 20 3b 0a 0a 5c 20 73 63 61 6e 20  r sf! ;..\ scan 
0cc0: 63 6f 6e 73 74 61 6e 74 73 0a 0a 24 34 30 20 56  constants..$40 V
0cd0: 61 6c 75 65 20 73 63 61 6e 2d 77 0a 73 63 61 6e  alue scan-w.scan
0ce0: 2d 77 20 32 2f 20 64 75 70 20 2a 20 31 2d 20 32  -w 2/ dup * 1- 2
0cf0: 2f 20 32 2f 20 31 2b 20 43 6f 6e 73 74 61 6e 74  / 2/ 1+ Constant
0d00: 20 62 75 66 2d 6c 65 6e 0a 73 63 61 6e 2d 77 20   buf-len.scan-w 
0d10: 32 2a 20 56 61 6c 75 65 20 73 63 61 6e 2d 72 69  2* Value scan-ri
0d20: 67 68 74 0a 73 63 61 6e 2d 77 20 32 2a 20 64 75  ght.scan-w 2* du
0d30: 70 20 33 20 72 73 68 69 66 74 20 2b 20 6e 65 67  p 3 rshift + neg
0d40: 61 74 65 20 56 61 6c 75 65 20 73 63 61 6e 2d 6c  ate Value scan-l
0d50: 65 66 74 0a 0a 61 6c 73 6f 20 6f 70 65 6e 67 6c  eft..also opengl
0d60: 0a 0a 3a 20 64 72 61 77 2d 73 63 61 6e 20 28 20  ..: draw-scan ( 
0d70: 64 69 72 65 63 74 69 6f 6e 20 78 73 63 61 6c 65  direction xscale
0d80: 20 79 73 63 61 6c 65 20 2d 2d 20 29 0a 20 20 20   yscale -- ).   
0d90: 20 5c 47 20 64 72 61 77 20 61 20 73 63 61 6e 20   \G draw a scan 
0da0: 72 6f 74 61 74 65 64 2f 74 69 6c 74 65 64 20 62  rotated/tilted b
0db0: 79 20 73 63 61 6e 20 6d 61 74 72 69 78 0a 20 20  y scan matrix.  
0dc0: 20 20 66 6f 76 65 72 20 66 6e 65 67 61 74 65 20    fover fnegate 
0dd0: 66 6f 76 65 72 20 66 6e 65 67 61 74 65 20 30 65  fover fnegate 0e
0de0: 20 7b 20 66 3a 20 73 78 20 66 3a 20 73 79 20 66   { f: sx f: sy f
0df0: 3a 20 2d 73 78 20 66 3a 20 2d 73 79 20 66 3a 20  : -sx f: -sy f: 
0e00: 7a 20 7d 0a 20 20 20 20 76 69 30 20 3e 76 0a 20  z }.    vi0 >v. 
0e10: 20 20 20 20 2d 73 78 20 20 73 79 20 7a 20 3e 78      -sx  sy z >x
0e20: 79 7a 20 6e 3e 20 72 6f 74 3e 73 74 20 20 20 77  yz n> rot>st   w
0e30: 68 69 74 65 23 20 69 3e 63 20 76 2b 0a 20 20 20  hite# i>c v+.   
0e40: 20 20 20 73 78 20 20 73 79 20 7a 20 3e 78 79 7a     sx  sy z >xyz
0e50: 20 6e 3e 20 72 6f 74 3e 73 74 20 20 20 77 68 69   n> rot>st   whi
0e60: 74 65 23 20 69 3e 63 20 76 2b 0a 20 20 20 20 20  te# i>c v+.     
0e70: 20 73 78 20 2d 73 79 20 7a 20 3e 78 79 7a 20 6e   sx -sy z >xyz n
0e80: 3e 20 72 6f 74 3e 73 74 20 20 20 77 68 69 74 65  > rot>st   white
0e90: 23 20 69 3e 63 20 76 2b 0a 20 20 20 20 20 2d 73  # i>c v+.     -s
0ea0: 78 20 2d 73 79 20 7a 20 3e 78 79 7a 20 6e 3e 20  x -sy z >xyz n> 
0eb0: 72 6f 74 3e 73 74 20 20 20 77 68 69 74 65 23 20  rot>st   white# 
0ec0: 69 3e 63 20 76 2b 0a 20 20 20 20 76 3e 20 64 72  i>c v+.    v> dr
0ed0: 6f 70 20 30 20 69 2c 20 31 20 69 2c 20 32 20 69  op 0 i, 1 i, 2 i
0ee0: 2c 20 30 20 69 2c 20 32 20 69 2c 20 33 20 69 2c  , 0 i, 2 i, 3 i,
0ef0: 0a 20 20 20 20 47 4c 5f 54 52 49 41 4e 47 4c 45  .    GL_TRIANGLE
0f00: 53 20 64 72 61 77 2d 65 6c 65 6d 65 6e 74 73 20  S draw-elements 
0f10: 3b 0a 0a 56 61 72 69 61 62 6c 65 20 73 63 61 6e  ;..Variable scan
0f20: 2d 62 75 66 2d 72 61 77 0a 56 61 72 69 61 62 6c  -buf-raw.Variabl
0f30: 65 20 73 63 61 6e 2d 62 75 66 30 0a 56 61 72 69  e scan-buf0.Vari
0f40: 61 62 6c 65 20 73 63 61 6e 2d 62 75 66 31 0a 56  able scan-buf1.V
0f50: 61 72 69 61 62 6c 65 20 72 65 64 2d 62 75 66 0a  ariable red-buf.
0f60: 56 61 72 69 61 62 6c 65 20 67 72 65 65 6e 2d 62  Variable green-b
0f70: 75 66 0a 56 61 72 69 61 62 6c 65 20 62 6c 75 65  uf.Variable blue
0f80: 2d 62 75 66 0a 0a 24 32 38 20 56 61 6c 75 65 20  -buf..$28 Value 
0f90: 62 6c 75 65 2d 6c 65 76 65 6c 23 0a 24 37 30 20  blue-level#.$70 
0fa0: 56 61 6c 75 65 20 67 72 65 65 6e 2d 6c 65 76 65  Value green-leve
0fb0: 6c 23 0a 24 37 30 20 56 61 6c 75 65 20 72 65 64  l#.$70 Value red
0fc0: 2d 6c 65 76 65 6c 23 0a 0a 27 20 73 66 6c 6f 61  -level#..' sfloa
0fd0: 74 73 20 61 6c 69 61 73 20 72 67 62 61 73 20 28  ts alias rgbas (
0fe0: 20 6f 6e 65 20 72 67 62 61 20 69 73 20 74 68 65   one rgba is the
0ff0: 20 73 69 7a 65 20 6f 66 20 61 6e 20 73 66 6c 6f   size of an sflo
1000: 61 74 20 29 0a 27 20 73 66 6c 6f 61 74 2b 20 61  at ).' sfloat+ a
1010: 6c 69 61 73 20 72 67 62 61 2b 0a 0a 5b 49 46 44  lias rgba+..[IFD
1020: 45 46 5d 20 64 69 73 74 64 65 62 75 67 0a 20 20  EF] distdebug.  
1030: 20 20 33 20 63 65 6c 6c 73 20 62 75 66 66 65 72    3 cells buffer
1040: 3a 20 64 69 73 74 30 0a 20 20 20 20 64 69 73 74  : dist0.    dist
1050: 30 20 63 65 6c 6c 2b 20 43 6f 6e 73 74 61 6e 74  0 cell+ Constant
1060: 20 64 69 73 74 30 2d 6d 61 78 0a 20 20 20 20 64   dist0-max.    d
1070: 69 73 74 30 2d 6d 61 78 20 63 65 6c 6c 2b 20 43  ist0-max cell+ C
1080: 6f 6e 73 74 61 6e 74 20 64 69 73 74 30 2d 6d 69  onstant dist0-mi
1090: 6e 0a 20 20 20 20 33 20 63 65 6c 6c 73 20 62 75  n.    3 cells bu
10a0: 66 66 65 72 3a 20 64 69 73 74 31 0a 20 20 20 20  ffer: dist1.    
10b0: 64 69 73 74 31 20 63 65 6c 6c 2b 20 43 6f 6e 73  dist1 cell+ Cons
10c0: 74 61 6e 74 20 64 69 73 74 31 2d 6d 61 78 0a 20  tant dist1-max. 
10d0: 20 20 20 64 69 73 74 31 2d 6d 61 78 20 63 65 6c     dist1-max cel
10e0: 6c 2b 20 43 6f 6e 73 74 61 6e 74 20 64 69 73 74  l+ Constant dist
10f0: 31 2d 6d 69 6e 0a 20 20 20 20 0a 20 20 20 20 3a  1-min.    .    :
1100: 20 3f 3f 20 28 20 76 61 6c 75 65 20 6c 65 76 65   ?? ( value leve
1110: 6c 20 2d 2d 20 66 6c 61 67 20 29 0a 09 2d 20 64  l -- flag )..- d
1120: 75 70 20 64 75 70 20 30 3c 20 49 46 20 20 6e 65  up dup 0< IF  ne
1130: 67 61 74 65 20 64 69 73 74 30 20 20 45 4c 53 45  gate dist0  ELSE
1140: 20 20 64 69 73 74 31 20 20 54 48 45 4e 0a 09 32    dist1  THEN..2
1150: 64 75 70 20 2b 21 20 63 65 6c 6c 2b 0a 09 32 64  dup +! cell+..2d
1160: 75 70 20 40 20 75 6d 61 78 20 6f 76 65 72 20 21  up @ umax over !
1170: 20 63 65 6c 6c 2b 0a 09 74 75 63 6b 20 40 20 75   cell+..tuck @ u
1180: 6d 69 6e 20 73 77 61 70 20 21 0a 09 30 3c 20 3b  min swap !..0< ;
1190: 0a 5b 45 4c 53 45 5d 0a 20 20 20 20 27 20 3c 20  .[ELSE].    ' < 
11a0: 61 6c 69 61 73 20 3f 3f 0a 5b 54 48 45 4e 5d 0a  alias ??.[THEN].
11b0: 0a 3a 20 72 67 62 40 20 28 20 61 64 64 72 20 2d  .: rgb@ ( addr -
11c0: 2d 20 72 20 67 20 62 20 29 0a 20 20 20 20 3e 72  - r g b ).    >r
11d0: 20 72 40 20 63 40 20 72 40 20 31 2b 20 63 40 20   r@ c@ r@ 1+ c@ 
11e0: 72 3e 20 32 20 2b 20 63 40 20 3b 0a 0a 30 20 56  r> 2 + c@ ;..0 V
11f0: 61 6c 75 65 20 72 67 62 2d 78 6f 72 0a 0a 3a 20  alue rgb-xor..: 
1200: 72 67 62 3f 20 28 20 61 64 64 72 20 2d 2d 20 72  rgb? ( addr -- r
1210: 67 62 62 69 74 20 29 0a 20 20 20 20 72 67 62 40  gbbit ).    rgb@
1220: 0a 20 20 20 20 62 6c 75 65 2d 6c 65 76 65 6c 23  .    blue-level#
1230: 20 20 3f 3f 20 6e 65 67 61 74 65 20 32 2a 20 73    ?? negate 2* s
1240: 77 61 70 0a 20 20 20 20 67 72 65 65 6e 2d 6c 65  wap.    green-le
1250: 76 65 6c 23 20 3f 3f 20 2d 20 32 2a 20 73 77 61  vel# ?? - 2* swa
1260: 70 0a 20 20 20 20 72 65 64 2d 6c 65 76 65 6c 23  p.    red-level#
1270: 20 20 20 3f 3f 20 2d 20 72 67 62 2d 78 6f 72 20     ?? - rgb-xor 
1280: 78 6f 72 20 3b 0a 0a 3a 20 65 78 74 72 61 63 74  xor ;..: extract
1290: 2d 73 74 72 69 70 20 28 20 61 64 64 72 20 75 20  -strip ( addr u 
12a0: 73 74 65 70 20 2d 2d 20 73 74 72 69 70 20 29 20  step -- strip ) 
12b0: 72 67 62 61 73 20 7b 20 73 74 65 70 20 7d 0a 20  rgbas { step }. 
12c0: 20 20 20 30 20 2d 72 6f 74 20 62 6f 75 6e 64 73     0 -rot bounds
12d0: 20 55 2b 44 4f 0a 09 32 2a 20 32 2a 20 49 20 72   U+DO..2* 2* I r
12e0: 67 62 3f 20 33 20 61 6e 64 20 2b 0a 20 20 20 20  gb? 3 and +.    
12f0: 73 74 65 70 20 2b 4c 4f 4f 50 20 3b 0a 0a 24 35  step +LOOP ;..$5
1300: 31 20 62 75 66 66 65 72 3a 20 67 75 65 73 73 62  1 buffer: guessb
1310: 75 66 0a 67 75 65 73 73 62 75 66 20 24 34 30 20  uf.guessbuf $40 
1320: 2b 20 43 6f 6e 73 74 61 6e 74 20 67 75 65 73 73  + Constant guess
1330: 65 63 63 0a 67 75 65 73 73 65 63 63 20 24 31 30  ecc.guessecc $10
1340: 20 2b 20 43 6f 6e 73 74 61 6e 74 20 67 75 65 73   + Constant gues
1350: 73 74 61 67 0a 0a 73 63 61 6e 2d 77 20 33 20 72  stag..scan-w 3 r
1360: 73 68 69 66 74 20 43 6f 6e 73 74 61 6e 74 20 73  shift Constant s
1370: 63 61 6e 2d 73 74 65 70 0a 0a 3a 20 3e 73 74 72  can-step..: >str
1380: 69 70 20 28 20 69 6e 64 65 78 20 2d 2d 2d 20 61  ip ( index --- a
1390: 64 64 72 20 29 0a 20 20 20 20 32 2a 20 32 2a 20  ddr ).    2* 2* 
13a0: 73 63 61 6e 2d 77 20 2b 20 73 63 61 6e 2d 77 20  scan-w + scan-w 
13b0: 32 2a 20 2a 20 73 63 61 6e 2d 77 20 2b 20 72 67  2* * scan-w + rg
13c0: 62 61 73 0a 20 20 20 20 73 63 61 6e 2d 62 75 66  bas.    scan-buf
13d0: 31 20 24 40 20 72 6f 74 20 73 61 66 65 2f 73 74  1 $@ rot safe/st
13e0: 72 69 6e 67 20 64 72 6f 70 20 3b 0a 3a 20 3e 73  ring drop ;.: >s
13f0: 74 72 69 70 33 32 20 28 20 61 64 64 72 20 2d 2d  trip32 ( addr --
1400: 20 61 64 64 72 27 20 75 20 73 74 65 70 20 29 0a   addr' u step ).
1410: 20 20 20 20 73 63 61 6e 2d 72 69 67 68 74 20 2d      scan-right -
1420: 20 24 31 30 30 20 34 20 3b 0a 3a 20 3e 67 75 65   $100 4 ;.: >gue
1430: 73 73 20 28 20 2d 2d 20 61 64 64 72 20 75 20 29  ss ( -- addr u )
1440: 0a 20 20 20 20 67 75 65 73 73 62 75 66 20 24 34  .    guessbuf $4
1450: 30 20 32 64 75 70 20 62 6f 75 6e 64 73 20 2d 38  0 2dup bounds -8
1460: 20 2d 72 6f 74 20 55 2b 44 4f 0a 09 64 75 70 20   -rot U+DO..dup 
1470: 3e 73 74 72 69 70 20 3e 73 74 72 69 70 33 32 0a  >strip >strip32.
1480: 09 65 78 74 72 61 63 74 2d 73 74 72 69 70 20 49  .extract-strip I
1490: 20 62 65 2d 6c 21 0a 09 31 2b 0a 20 20 20 20 34   be-l!..1+.    4
14a0: 20 2b 4c 4f 4f 50 20 20 64 72 6f 70 20 3b 0a 3a   +LOOP  drop ;.:
14b0: 20 65 63 63 2d 68 6f 72 40 20 28 20 6f 66 66 20   ecc-hor@ ( off 
14c0: 2d 2d 20 6c 20 29 0a 20 20 20 20 3e 73 74 72 69  -- l ).    >stri
14d0: 70 20 3e 73 74 72 69 70 33 32 20 65 78 74 72 61  p >strip32 extra
14e0: 63 74 2d 73 74 72 69 70 20 3b 0a 3a 20 65 63 63  ct-strip ;.: ecc
14f0: 2d 76 65 72 40 20 28 20 6f 66 66 73 65 74 20 2d  -ver@ ( offset -
1500: 2d 20 75 6c 20 29 0a 20 20 20 20 23 2d 38 20 3e  - ul ).    #-8 >
1510: 73 74 72 69 70 20 2b 20 73 63 61 6e 2d 77 20 64  strip + scan-w d
1520: 75 70 20 33 20 6c 73 68 69 66 74 20 2a 20 73 63  up 3 lshift * sc
1530: 61 6e 2d 77 20 33 20 6c 73 68 69 66 74 20 65 78  an-w 3 lshift ex
1540: 74 72 61 63 74 2d 73 74 72 69 70 20 3b 0a 3a 20  tract-strip ;.: 
1550: 74 61 67 40 20 28 20 2d 2d 20 74 61 67 20 29 0a  tag@ ( -- tag ).
1560: 20 20 20 20 23 2d 39 20 3e 73 74 72 69 70 20 73      #-9 >strip s
1570: 63 61 6e 2d 6c 65 66 74 20 2b 20 24 31 33 30 20  can-left + $130 
1580: 5b 20 23 31 37 20 34 20 2a 20 5d 4c 20 65 78 74  [ #17 4 * ]L ext
1590: 72 61 63 74 2d 73 74 72 69 70 20 34 20 6c 73 68  ract-strip 4 lsh
15a0: 69 66 74 0a 20 20 20 20 23 30 38 20 3e 73 74 72  ift.    #08 >str
15b0: 69 70 20 73 63 61 6e 2d 6c 65 66 74 20 2b 20 24  ip scan-left + $
15c0: 31 33 30 20 5b 20 23 31 37 20 34 20 2a 20 5d 4c  130 [ #17 4 * ]L
15d0: 20 65 78 74 72 61 63 74 2d 73 74 72 69 70 20 6f   extract-strip o
15e0: 72 20 3b 0a 0a 3a 20 3e 67 75 65 73 73 65 63 63  r ;..: >guessecc
15f0: 20 28 20 2d 2d 20 29 0a 20 20 20 20 23 2d 39 20   ( -- ).    #-9 
1600: 20 20 20 20 20 20 20 65 63 63 2d 68 6f 72 40 20         ecc-hor@ 
1610: 67 75 65 73 73 65 63 63 20 20 20 20 20 20 62 65  guessecc      be
1620: 2d 6c 21 0a 20 20 20 20 23 30 38 20 20 20 20 20  -l!.    #08     
1630: 20 20 20 65 63 63 2d 68 6f 72 40 20 67 75 65 73     ecc-hor@ gues
1640: 73 65 63 63 20 20 34 20 2b 20 62 65 2d 6c 21 0a  secc  4 + be-l!.
1650: 20 20 20 20 73 63 61 6e 2d 6c 65 66 74 20 20 65      scan-left  e
1660: 63 63 2d 76 65 72 40 20 67 75 65 73 73 65 63 63  cc-ver@ guessecc
1670: 20 20 38 20 2b 20 62 65 2d 6c 21 0a 20 20 20 20    8 + be-l!.    
1680: 73 63 61 6e 2d 72 69 67 68 74 20 65 63 63 2d 76  scan-right ecc-v
1690: 65 72 40 20 67 75 65 73 73 65 63 63 20 24 43 20  er@ guessecc $C 
16a0: 2b 20 62 65 2d 6c 21 20 3b 0a 0a 3a 20 65 63 63  + be-l! ;..: ecc
16b0: 2d 6f 6b 3f 20 28 20 61 64 64 72 6b 65 79 20 75  -ok? ( addrkey u
16c0: 31 20 61 64 64 72 65 63 63 20 75 32 20 2d 2d 20  1 addrecc u2 -- 
16d0: 66 6c 61 67 20 29 0a 20 20 20 20 32 64 75 70 20  flag ).    2dup 
16e0: 2b 20 63 40 20 74 61 67 68 61 73 68 3f 20 3b 0a  + c@ taghash? ;.
16f0: 0a 24 38 30 30 30 20 43 6f 6e 73 74 61 6e 74 20  .$8000 Constant 
1700: 69 6e 69 74 2d 78 79 0a 0a 3a 20 67 65 74 2d 6d  init-xy..: get-m
1710: 69 6e 6d 61 78 2d 72 67 62 20 28 20 61 64 64 72  inmax-rgb ( addr
1720: 20 75 20 2d 2d 20 6d 69 6e 72 20 6d 61 78 72 20   u -- minr maxr 
1730: 6d 69 6e 67 20 6d 61 78 67 20 6d 69 6e 62 20 6d  ming maxg minb m
1740: 61 78 62 20 29 0a 20 20 20 20 24 46 46 46 20 2d  axb ).    $FFF -
1750: 24 46 46 46 20 32 64 75 70 20 32 64 75 70 20 7b  $FFF 2dup 2dup {
1760: 20 6d 69 6e 72 20 6d 61 78 72 20 6d 69 6e 67 20   minr maxr ming 
1770: 6d 61 78 67 20 6d 69 6e 62 20 6d 61 78 62 20 7d  maxg minb maxb }
1780: 0a 20 20 20 20 62 6f 75 6e 64 73 20 3f 44 4f 0a  .    bounds ?DO.
1790: 09 49 20 72 67 62 40 0a 09 64 75 70 20 6d 61 78  .I rgb@..dup max
17a0: 62 20 6d 61 78 20 74 6f 20 6d 61 78 62 20 20 6d  b max to maxb  m
17b0: 69 6e 62 20 6d 69 6e 20 74 6f 20 6d 69 6e 62 0a  inb min to minb.
17c0: 09 64 75 70 20 6d 61 78 67 20 6d 61 78 20 74 6f  .dup maxg max to
17d0: 20 6d 61 78 67 20 20 6d 69 6e 67 20 6d 69 6e 20   maxg  ming min 
17e0: 74 6f 20 6d 69 6e 67 0a 09 64 75 70 20 6d 61 78  to ming..dup max
17f0: 72 20 6d 61 78 20 74 6f 20 6d 61 78 72 20 20 6d  r max to maxr  m
1800: 69 6e 72 20 6d 69 6e 20 74 6f 20 6d 69 6e 72 0a  inr min to minr.
1810: 20 20 20 20 34 20 2b 4c 4f 4f 50 20 6d 69 6e 72      4 +LOOP minr
1820: 20 6d 61 78 72 20 6d 69 6e 67 20 6d 61 78 67 20   maxr ming maxg 
1830: 6d 69 6e 62 20 6d 61 78 62 20 3b 0a 0a 23 31 30  minb maxb ;..#10
1840: 20 43 65 6c 6c 73 20 62 75 66 66 65 72 3a 20 70   Cells buffer: p
1850: 30 0a 70 30 20 32 20 63 65 6c 6c 73 20 2b 20 43  0.p0 2 cells + C
1860: 6f 6e 73 74 61 6e 74 20 70 31 0a 70 31 20 32 20  onstant p1.p1 2 
1870: 63 65 6c 6c 73 20 2b 20 43 6f 6e 73 74 61 6e 74  cells + Constant
1880: 20 70 32 0a 70 32 20 32 20 63 65 6c 6c 73 20 2b   p2.p2 2 cells +
1890: 20 43 6f 6e 73 74 61 6e 74 20 70 33 0a 70 33 20   Constant p3.p3 
18a0: 32 20 63 65 6c 6c 73 20 2b 20 43 6f 6e 73 74 61  2 cells + Consta
18b0: 6e 74 20 70 78 0a 0a 3a 20 6d 69 6e c2 b2 21 20  nt px..: min..! 
18c0: 28 20 78 20 79 20 61 64 64 72 20 2d 2d 20 29 20  ( x y addr -- ) 
18d0: 3e 72 0a 20 20 20 20 6f 76 65 72 20 64 75 70 20  >r.    over dup 
18e0: 2a 20 6f 76 65 72 20 64 75 70 20 2a 20 2b 0a 20  * over dup * +. 
18f0: 20 20 20 72 40 20 32 40 20 64 75 70 20 2a 20 73     r@ 2@ dup * s
1900: 77 61 70 20 64 75 70 20 2a 20 2b 20 75 3c 20 49  wap dup * + u< I
1910: 46 0a 09 72 3e 20 32 21 20 20 45 58 49 54 0a 20  F..r> 2!  EXIT. 
1920: 20 20 20 54 48 45 4e 20 20 32 64 72 6f 70 20 72     THEN  2drop r
1930: 64 72 6f 70 20 3b 0a 0a 3a 20 73 65 61 72 63 68  drop ;..: search
1940: 2d 63 6f 72 6e 65 72 73 20 28 20 2d 2d 20 29 0a  -corners ( -- ).
1950: 20 20 20 20 69 6e 69 74 2d 78 79 20 70 30 20 21      init-xy p0 !
1960: 20 20 70 30 20 70 30 20 63 65 6c 6c 2b 20 37 20    p0 p0 cell+ 7 
1970: 63 65 6c 6c 73 20 63 6d 6f 76 65 20 5c 20 66 69  cells cmove \ fi
1980: 6c 6c 20 61 6c 6c 20 77 69 74 68 20 74 68 65 20  ll all with the 
1990: 73 61 6d 65 20 63 6f 6e 74 65 6e 74 73 0a 20 20  same contents.  
19a0: 20 20 73 63 61 6e 2d 62 75 66 30 20 24 40 20 64    scan-buf0 $@ d
19b0: 72 6f 70 0a 20 20 20 20 73 63 61 6e 2d 77 20 64  rop.    scan-w d
19c0: 75 70 20 6e 65 67 61 74 65 20 44 4f 0a 09 73 63  up negate DO..sc
19d0: 61 6e 2d 77 20 64 75 70 20 6e 65 67 61 74 65 20  an-w dup negate 
19e0: 44 4f 0a 09 20 20 20 20 64 75 70 20 72 67 62 3f  DO..    dup rgb?
19f0: 20 64 75 70 20 34 20 61 6e 64 20 49 46 20 20 33   dup 4 and IF  3
1a00: 20 61 6e 64 20 32 20 78 6f 72 0a 09 09 32 2a 20   and 2 xor...2* 
1a10: 63 65 6c 6c 73 20 70 30 20 2b 20 49 20 4a 20 72  cells p0 + I J r
1a20: 6f 74 20 6d 69 6e c2 b2 21 0a 09 20 20 20 20 45  ot min..!..    E
1a30: 4c 53 45 0a 09 09 64 72 6f 70 0a 09 20 20 20 20  LSE...drop..    
1a40: 54 48 45 4e 0a 09 20 20 20 20 72 67 62 61 2b 0a  THEN..    rgba+.
1a50: 09 4c 4f 4f 50 0a 20 20 20 20 4c 4f 4f 50 20 20  .LOOP.    LOOP  
1a60: 64 72 6f 70 20 3b 0a 0a 3a 20 3f 6c 65 67 69 74  drop ;..: ?legit
1a70: 20 28 20 2d 2d 20 66 6c 61 67 20 29 0a 20 20 20   ( -- flag ).   
1a80: 20 70 30 20 32 40 20 69 6e 69 74 2d 78 79 20 64   p0 2@ init-xy d
1a90: 75 70 20 64 3c 3e 0a 20 20 20 20 70 31 20 32 40  up d<>.    p1 2@
1aa0: 20 69 6e 69 74 2d 78 79 20 64 75 70 20 64 3c 3e   init-xy dup d<>
1ab0: 20 61 6e 64 0a 20 20 20 20 70 32 20 32 40 20 69   and.    p2 2@ i
1ac0: 6e 69 74 2d 78 79 20 64 75 70 20 64 3c 3e 20 61  nit-xy dup d<> a
1ad0: 6e 64 0a 20 20 20 20 70 33 20 32 40 20 69 6e 69  nd.    p3 2@ ini
1ae0: 74 2d 78 79 20 64 75 70 20 64 3c 3e 20 61 6e 64  t-xy dup d<> and
1af0: 20 3b 0a 0a 3a 20 63 6f 6d 70 75 74 65 2d 78 70   ;..: compute-xp
1b00: 6f 69 6e 74 20 28 20 2d 2d 20 72 78 20 72 79 20  oint ( -- rx ry 
1b10: 29 0a 20 20 20 20 70 30 20 32 40 20 73 3e 66 20  ).    p0 2@ s>f 
1b20: 73 3e 66 20 7b 20 66 3a 20 79 30 20 66 3a 20 78  s>f { f: y0 f: x
1b30: 30 20 7d 0a 20 20 20 20 70 33 20 32 40 20 73 3e  0 }.    p3 2@ s>
1b40: 66 20 73 3e 66 20 7b 20 66 3a 20 79 31 20 66 3a  f s>f { f: y1 f:
1b50: 20 78 31 20 7d 0a 20 20 20 20 70 31 20 32 40 20   x1 }.    p1 2@ 
1b60: 73 3e 66 20 73 3e 66 20 7b 20 66 3a 20 79 32 20  s>f s>f { f: y2 
1b70: 66 3a 20 78 32 20 7d 0a 20 20 20 20 70 32 20 32  f: x2 }.    p2 2
1b80: 40 20 73 3e 66 20 73 3e 66 20 7b 20 66 3a 20 79  @ s>f s>f { f: y
1b90: 33 20 66 3a 20 78 33 20 7d 0a 20 20 20 20 78 30  3 f: x3 }.    x0
1ba0: 20 79 31 20 66 2a 20 79 30 20 78 31 20 66 2a 20   y1 f* y0 x1 f* 
1bb0: 66 2d 20 7b 20 66 3a 20 64 78 79 30 31 20 7d 0a  f- { f: dxy01 }.
1bc0: 20 20 20 20 78 32 20 79 33 20 66 2a 20 79 32 20      x2 y3 f* y2 
1bd0: 78 33 20 66 2a 20 66 2d 20 7b 20 66 3a 20 64 78  x3 f* f- { f: dx
1be0: 79 32 33 20 7d 0a 20 20 20 20 78 30 20 78 31 20  y23 }.    x0 x1 
1bf0: 66 2d 20 78 32 20 78 33 20 66 2d 20 7b 20 66 3a  f- x2 x3 f- { f:
1c00: 20 64 78 30 31 20 66 3a 20 64 78 32 33 20 7d 0a   dx01 f: dx23 }.
1c10: 20 20 20 20 79 30 20 79 31 20 66 2d 20 79 32 20      y0 y1 f- y2 
1c20: 79 33 20 66 2d 20 7b 20 66 3a 20 64 79 30 31 20  y3 f- { f: dy01 
1c30: 66 3a 20 64 79 32 33 20 7d 0a 20 20 20 20 64 78  f: dy23 }.    dx
1c40: 30 31 20 64 79 32 33 20 66 2a 20 64 79 30 31 20  01 dy23 f* dy01 
1c50: 64 78 32 33 20 66 2a 20 66 2d 20 31 2f 66 20 7b  dx23 f* f- 1/f {
1c60: 20 66 3a 20 2f 64 65 74 31 20 7d 0a 20 20 20 20   f: /det1 }.    
1c70: 64 78 79 30 31 20 64 78 32 33 20 66 2a 20 64 78  dxy01 dx23 f* dx
1c80: 79 32 33 20 64 78 30 31 20 66 2a 20 66 2d 20 2f  y23 dx01 f* f- /
1c90: 64 65 74 31 20 66 2a 20 5c 20 78 0a 20 20 20 20  det1 f* \ x.    
1ca0: 64 78 79 30 31 20 64 79 32 33 20 66 2a 20 64 78  dxy01 dy23 f* dx
1cb0: 79 32 33 20 64 79 30 31 20 66 2a 20 66 2d 20 2f  y23 dy01 f* f- /
1cc0: 64 65 74 31 20 66 2a 20 5c 20 79 0a 20 20 20 20  det1 f* \ y.    
1cd0: 66 6f 76 65 72 20 66 3e 73 20 66 64 75 70 20 66  fover f>s fdup f
1ce0: 3e 73 20 70 78 20 32 21 20 3b 0a 0a 3a 20 70 2b  >s px 2! ;..: p+
1cf0: 20 28 20 78 31 20 79 31 20 78 32 20 79 32 20 2d   ( x1 y1 x2 y2 -
1d00: 2d 20 78 31 2b 78 32 20 79 31 2b 79 32 20 29 0a  - x1+x2 y1+y2 ).
1d10: 20 20 20 20 72 6f 74 20 2b 20 3e 72 20 2b 20 72      rot + >r + r
1d20: 3e 20 3b 0a 3a 20 70 32 2f 20 28 20 78 31 20 79  > ;.: p2/ ( x1 y
1d30: 31 20 2d 2d 20 78 32 20 79 32 20 29 0a 20 20 20  1 -- x2 y2 ).   
1d40: 20 32 2f 20 73 77 61 70 20 32 2f 20 73 77 61 70   2/ swap 2/ swap
1d50: 20 3b 0a 3a 20 70 2d 20 28 20 78 31 20 79 31 20   ;.: p- ( x1 y1 
1d60: 78 32 20 79 32 20 2d 2d 20 78 31 2d 78 32 20 79  x2 y2 -- x1-x2 y
1d70: 31 2d 79 32 20 29 0a 20 20 20 20 72 6f 74 20 73  1-y2 ).    rot s
1d80: 77 61 70 20 2d 20 3e 72 20 2d 20 72 3e 20 3b 0a  wap - >r - r> ;.
1d90: 0a 3a 20 73 63 61 6e 2d 67 72 61 62 20 28 20 77  .: scan-grab ( w
1da0: 20 68 20 61 64 64 72 20 2d 2d 20 29 0a 20 20 20   h addr -- ).   
1db0: 20 3e 72 20 20 30 20 30 20 32 73 77 61 70 0a 20   >r  0 0 2swap. 
1dc0: 20 20 20 32 64 75 70 20 2a 20 72 67 62 61 73 20     2dup * rgbas 
1dd0: 72 40 20 24 21 6c 65 6e 0a 20 20 20 20 47 4c 5f  r@ $!len.    GL_
1de0: 52 47 42 41 20 47 4c 5f 55 4e 53 49 47 4e 45 44  RGBA GL_UNSIGNED
1df0: 5f 42 59 54 45 20 72 3e 20 24 40 20 64 72 6f 70  _BYTE r> $@ drop
1e00: 20 67 6c 52 65 61 64 50 69 78 65 6c 73 20 3b 0a   glReadPixels ;.
1e10: 3a 20 73 63 61 6e 2d 67 72 61 62 2d 62 75 66 20  : scan-grab-buf 
1e20: 28 20 61 64 64 72 20 2d 2d 20 29 0a 20 20 20 20  ( addr -- ).    
1e30: 73 63 61 6e 2d 77 20 32 2a 20 64 75 70 20 72 6f  scan-w 2* dup ro
1e40: 74 20 73 63 61 6e 2d 67 72 61 62 20 3b 0a 3a 20  t scan-grab ;.: 
1e50: 73 63 61 6e 2d 67 72 61 62 2d 63 61 6d 20 28 20  scan-grab-cam ( 
1e60: 61 64 64 72 20 2d 2d 20 29 0a 20 20 20 20 63 61  addr -- ).    ca
1e70: 6d 2d 77 20 63 61 6d 2d 68 20 72 6f 74 20 73 63  m-w cam-h rot sc
1e80: 61 6e 2d 67 72 61 62 20 3b 0a 0a 74 65 78 3a 20  an-grab ;..tex: 
1e90: 73 63 61 6e 2d 74 65 78 2d 72 61 77 0a 74 65 78  scan-tex-raw.tex
1ea0: 3a 20 73 63 61 6e 2d 74 65 78 0a 74 65 78 3a 20  : scan-tex.tex: 
1eb0: 73 63 61 6e 2d 74 65 78 2d 66 69 6e 61 6c 0a 0a  scan-tex-final..
1ec0: 30 20 56 61 6c 75 65 20 73 63 61 6e 2d 66 62 2d  0 Value scan-fb-
1ed0: 72 61 77 0a 30 20 56 61 6c 75 65 20 73 63 61 6e  raw.0 Value scan
1ee0: 2d 66 62 0a 30 20 56 61 6c 75 65 20 73 63 61 6e  -fb.0 Value scan
1ef0: 2d 66 62 2d 66 69 6e 61 6c 0a 0a 3a 20 73 63 61  -fb-final..: sca
1f00: 6e 2d 67 72 61 62 2d 72 61 77 20 28 20 2d 2d 20  n-grab-raw ( -- 
1f10: 29 0a 20 20 20 20 63 61 6d 2d 77 20 63 61 6d 2d  ).    cam-w cam-
1f20: 68 20 73 63 61 6e 2d 66 62 2d 72 61 77 20 3e 66  h scan-fb-raw >f
1f30: 72 61 6d 65 62 75 66 66 65 72 20 73 63 61 6e 2d  ramebuffer scan-
1f40: 62 75 66 2d 72 61 77 20 73 63 61 6e 2d 67 72 61  buf-raw scan-gra
1f50: 62 2d 63 61 6d 20 3b 0a 3a 20 73 63 61 6e 2d 67  b-cam ;.: scan-g
1f60: 72 61 62 30 20 28 20 2d 2d 20 29 0a 20 20 20 20  rab0 ( -- ).    
1f70: 73 63 61 6e 2d 62 75 66 30 20 73 63 61 6e 2d 67  scan-buf0 scan-g
1f80: 72 61 62 2d 62 75 66 20 3b 0a 3a 20 73 63 61 6e  rab-buf ;.: scan
1f90: 2d 67 72 61 62 31 20 28 20 2d 2d 20 29 0a 20 20  -grab1 ( -- ).  
1fa0: 20 20 73 63 61 6e 2d 62 75 66 31 20 73 63 61 6e    scan-buf1 scan
1fb0: 2d 67 72 61 62 2d 62 75 66 20 3b 0a 0a 61 6c 73  -grab-buf ;..als
1fc0: 6f 20 73 6f 69 6c 0a 0a 30 20 56 61 6c 75 65 20  o soil..0 Value 
1fd0: 73 63 61 6e 23 0a 0a 3a 20 73 61 76 65 2d 70 6e  scan#..: save-pn
1fe0: 67 30 20 28 20 2d 2d 20 29 0a 20 20 20 20 5b 3a  g0 ( -- ).    [:
1ff0: 20 2e 22 20 73 63 61 6e 69 6d 67 30 2d 22 20 73   ." scanimg0-" s
2000: 63 61 6e 23 20 30 20 2e 72 20 2e 22 20 2e 70 6e  can# 0 .r ." .pn
2010: 67 22 20 3b 5d 20 24 74 6d 70 0a 20 20 20 20 53  g" ;] $tmp.    S
2020: 4f 49 4c 5f 53 41 56 45 5f 54 59 50 45 5f 50 4e  OIL_SAVE_TYPE_PN
2030: 47 20 31 32 38 20 64 75 70 20 34 20 73 63 61 6e  G 128 dup 4 scan
2040: 2d 62 75 66 30 20 24 40 20 64 72 6f 70 20 53 4f  -buf0 $@ drop SO
2050: 49 4c 5f 73 61 76 65 5f 69 6d 61 67 65 20 3b 0a  IL_save_image ;.
2060: 3a 20 73 61 76 65 2d 70 6e 67 31 20 28 20 2d 2d  : save-png1 ( --
2070: 20 29 0a 20 20 20 20 5b 3a 20 2e 22 20 73 63 61   ).    [: ." sca
2080: 6e 69 6d 67 31 2d 22 20 73 63 61 6e 23 20 30 20  nimg1-" scan# 0 
2090: 2e 72 20 2e 22 20 2e 70 6e 67 22 20 3b 5d 20 24  .r ." .png" ;] $
20a0: 74 6d 70 0a 20 20 20 20 53 4f 49 4c 5f 53 41 56  tmp.    SOIL_SAV
20b0: 45 5f 54 59 50 45 5f 50 4e 47 20 31 32 38 20 64  E_TYPE_PNG 128 d
20c0: 75 70 20 34 20 73 63 61 6e 2d 62 75 66 31 20 24  up 4 scan-buf1 $
20d0: 40 20 64 72 6f 70 20 53 4f 49 4c 5f 73 61 76 65  @ drop SOIL_save
20e0: 5f 69 6d 61 67 65 20 3b 0a 3a 20 73 61 76 65 2d  _image ;.: save-
20f0: 70 6e 67 2d 72 61 77 20 28 20 2d 2d 20 29 0a 20  png-raw ( -- ). 
2100: 20 20 20 5b 3a 20 2e 22 20 73 63 61 6e 69 6d 67     [: ." scanimg
2110: 72 61 77 2d 22 20 73 63 61 6e 23 20 30 20 2e 72  raw-" scan# 0 .r
2120: 20 2e 22 20 2e 70 6e 67 22 20 3b 5d 20 24 74 6d   ." .png" ;] $tm
2130: 70 0a 20 20 20 20 53 4f 49 4c 5f 53 41 56 45 5f  p.    SOIL_SAVE_
2140: 54 59 50 45 5f 50 4e 47 20 63 61 6d 2d 77 20 63  TYPE_PNG cam-w c
2150: 61 6d 2d 68 20 34 20 73 63 61 6e 2d 62 75 66 2d  am-h 4 scan-buf-
2160: 72 61 77 20 24 40 20 64 72 6f 70 20 53 4f 49 4c  raw $@ drop SOIL
2170: 5f 73 61 76 65 5f 69 6d 61 67 65 20 3b 0a 3a 20  _save_image ;.: 
2180: 73 61 76 65 2d 70 6e 67 73 20 28 20 2d 2d 20 29  save-pngs ( -- )
2190: 0a 20 20 20 20 73 63 61 6e 2d 67 72 61 62 2d 72  .    scan-grab-r
21a0: 61 77 20 73 61 76 65 2d 70 6e 67 2d 72 61 77 0a  aw save-png-raw.
21b0: 20 20 20 20 73 61 76 65 2d 70 6e 67 30 20 73 61      save-png0 sa
21c0: 76 65 2d 70 6e 67 31 0a 20 20 20 20 31 20 2b 74  ve-png1.    1 +t
21d0: 6f 20 73 63 61 6e 23 0a 20 20 20 20 30 3e 66 72  o scan#.    0>fr
21e0: 61 6d 65 62 75 66 66 65 72 20 3b 0a 0a 70 72 65  amebuffer ;..pre
21f0: 76 69 6f 75 73 0a 0a 3a 20 2e 78 70 6f 69 6e 74  vious..: .xpoint
2200: 20 28 20 78 20 79 20 2d 2d 20 29 0a 20 20 20 20   ( x y -- ).    
2210: 70 30 20 32 40 20 73 77 61 70 20 2e 20 2e 20 73  p0 2@ swap . . s
2220: 70 61 63 65 0a 20 20 20 20 70 31 20 32 40 20 73  pace.    p1 2@ s
2230: 77 61 70 20 2e 20 2e 20 73 70 61 63 65 0a 20 20  wap . . space.  
2240: 20 20 70 32 20 32 40 20 73 77 61 70 20 2e 20 2e    p2 2@ swap . .
2250: 20 73 70 61 63 65 0a 20 20 20 20 70 33 20 32 40   space.    p3 2@
2260: 20 73 77 61 70 20 2e 20 2e 20 73 70 61 63 65 0a   swap . . space.
2270: 20 20 20 20 66 73 77 61 70 20 66 2e 20 66 2e 20      fswap f. f. 
2280: 63 72 20 3b 0a 0a 3a 20 6e 65 77 2d 73 63 61 6e  cr ;..: new-scan
2290: 74 65 78 2d 72 61 77 20 28 20 2d 2d 20 29 0a 20  tex-raw ( -- ). 
22a0: 20 20 20 73 63 61 6e 2d 74 65 78 2d 72 61 77 20     scan-tex-raw 
22b0: 30 3e 63 6c 65 61 72 0a 20 20 20 20 63 61 6d 2d  0>clear.    cam-
22c0: 77 20 63 61 6d 2d 68 20 47 4c 5f 52 47 42 41 20  w cam-h GL_RGBA 
22d0: 6e 65 77 2d 74 65 78 74 62 75 66 66 65 72 20 74  new-textbuffer t
22e0: 6f 20 73 63 61 6e 2d 66 62 2d 72 61 77 20 3b 0a  o scan-fb-raw ;.
22f0: 3a 20 6e 65 77 2d 73 63 61 6e 74 65 78 20 28 20  : new-scantex ( 
2300: 2d 2d 20 29 0a 20 20 20 20 73 63 61 6e 2d 74 65  -- ).    scan-te
2310: 78 20 30 3e 63 6c 65 61 72 0a 20 20 20 20 73 63  x 0>clear.    sc
2320: 61 6e 2d 77 20 32 2a 20 64 75 70 20 47 4c 5f 52  an-w 2* dup GL_R
2330: 47 42 41 20 6e 65 77 2d 74 65 78 74 62 75 66 66  GBA new-textbuff
2340: 65 72 20 74 6f 20 73 63 61 6e 2d 66 62 20 3b 0a  er to scan-fb ;.
2350: 3a 20 6e 65 77 2d 73 63 61 6e 74 65 78 2d 66 69  : new-scantex-fi
2360: 6e 61 6c 20 28 20 2d 2d 20 29 0a 20 20 20 20 73  nal ( -- ).    s
2370: 63 61 6e 2d 74 65 78 2d 66 69 6e 61 6c 20 30 3e  can-tex-final 0>
2380: 63 6c 65 61 72 0a 20 20 20 20 73 63 61 6e 2d 77  clear.    scan-w
2390: 20 32 2a 20 64 75 70 20 47 4c 5f 52 47 42 41 20   2* dup GL_RGBA 
23a0: 6e 65 77 2d 74 65 78 74 62 75 66 66 65 72 20 74  new-textbuffer t
23b0: 6f 20 73 63 61 6e 2d 66 62 2d 66 69 6e 61 6c 20  o scan-fb-final 
23c0: 3b 0a 3a 20 6e 65 77 2d 73 63 61 6e 74 65 78 65  ;.: new-scantexe
23d0: 73 20 28 20 2d 2d 20 29 0a 20 20 20 20 73 63 61  s ( -- ).    sca
23e0: 6e 2d 66 62 20 30 3d 20 49 46 0a 09 6e 65 77 2d  n-fb 0= IF..new-
23f0: 73 63 61 6e 74 65 78 2d 72 61 77 20 6e 65 77 2d  scantex-raw new-
2400: 73 63 61 6e 74 65 78 20 6e 65 77 2d 73 63 61 6e  scantex new-scan
2410: 74 65 78 2d 66 69 6e 61 6c 20 30 3e 66 72 61 6d  tex-final 0>fram
2420: 65 62 75 66 66 65 72 0a 20 20 20 20 54 48 45 4e  ebuffer.    THEN
2430: 20 3b 0a 3a 20 73 63 61 6c 65 2b 72 6f 74 61 74   ;.: scale+rotat
2440: 65 20 28 20 2d 2d 20 29 0a 20 20 20 20 70 31 20  e ( -- ).    p1 
2450: 32 40 20 70 30 20 32 40 20 70 2d 20 70 33 20 32  2@ p0 2@ p- p3 2
2460: 40 20 70 32 20 32 40 20 70 2d 20 70 2b 20 70 32  @ p2 2@ p- p+ p2
2470: 2f 0a 20 20 20 20 73 3e 66 20 79 2d 73 63 61 6e  /.    s>f y-scan
2480: 73 69 7a 65 20 66 2f 20 79 2d 72 6f 74 73 20 73  size f/ y-rots s
2490: 66 21 20 20 73 3e 66 20 78 2d 73 63 61 6e 73 69  f!  s>f x-scansi
24a0: 7a 65 20 66 2f 20 78 2d 73 63 6c 20 73 66 21 0a  ze f/ x-scl sf!.
24b0: 20 20 20 20 70 30 20 32 40 20 70 32 20 32 40 20      p0 2@ p2 2@ 
24c0: 70 2d 20 70 31 20 32 40 20 70 33 20 32 40 20 70  p- p1 2@ p3 2@ p
24d0: 2d 20 70 2b 20 70 32 2f 0a 20 20 20 20 73 3e 66  - p+ p2/.    s>f
24e0: 20 79 2d 73 63 61 6e 73 69 7a 65 20 66 2f 20 79   y-scansize f/ y
24f0: 2d 73 63 6c 20 73 66 21 20 20 73 3e 66 20 78 2d  -scl sf!  s>f x-
2500: 73 63 61 6e 73 69 7a 65 20 66 2f 20 78 2d 72 6f  scansize f/ x-ro
2510: 74 73 20 73 66 21 20 3b 0a 3a 20 73 65 74 2d 73  ts sf! ;.: set-s
2520: 63 61 6e 27 20 28 20 2d 2d 20 29 0a 20 20 20 20  can' ( -- ).    
2530: 63 6f 6d 70 75 74 65 2d 78 70 6f 69 6e 74 20 28  compute-xpoint (
2540: 20 2e 2e 20 78 20 79 20 29 0a 20 20 20 20 73 63   .. x y ).    sc
2550: 61 6c 65 2b 72 6f 74 61 74 65 0a 20 20 20 20 79  ale+rotate.    y
2560: 2d 6f 66 66 73 65 74 20 66 2b 20 73 63 61 6e 2d  -offset f+ scan-
2570: 77 20 66 6d 2f 20 79 2d 73 70 6f 73 20 73 66 21  w fm/ y-spos sf!
2580: 0a 20 20 20 20 78 2d 6f 66 66 73 65 74 20 66 2b  .    x-offset f+
2590: 20 73 63 61 6e 2d 77 20 66 6d 2f 20 78 2d 73 70   scan-w fm/ x-sp
25a0: 6f 73 20 73 66 21 20 3b 0a 0a 3a 20 73 63 61 6e  os sf! ;..: scan
25b0: 2d 78 79 20 28 20 2d 2d 20 73 78 20 73 79 20 29  -xy ( -- sx sy )
25c0: 0a 20 20 20 20 31 65 20 63 61 6d 2d 68 20 63 61  .    1e cam-h ca
25d0: 6d 2d 77 20 6f 76 65 72 20 75 6d 69 6e 20 73 77  m-w over umin sw
25e0: 61 70 20 66 6d 2a 2f 0a 20 20 20 20 31 65 20 63  ap fm*/.    1e c
25f0: 61 6d 2d 77 20 63 61 6d 2d 68 20 6f 76 65 72 20  am-w cam-h over 
2600: 75 6d 69 6e 20 20 20 20 20 20 66 6d 2a 2f 20 3b  umin      fm*/ ;
2610: 0a 0a 3a 20 73 63 61 6e 2d 6c 65 67 69 74 20 28  ..: scan-legit (
2620: 20 2d 2d 20 29 20 5c 20 72 65 73 69 7a 65 20 61   -- ) \ resize a
2630: 20 6c 65 67 69 74 20 51 52 20 63 6f 64 65 0a 20   legit QR code. 
2640: 20 20 20 63 6c 65 61 72 20 69 6e 69 74 2d 73 63     clear init-sc
2650: 61 6e 27 20 73 65 74 2d 73 63 61 6e 27 20 3e 73  an' set-scan' >s
2660: 63 61 6e 2d 6d 61 74 72 69 78 0a 20 20 20 20 73  can-matrix.    s
2670: 63 61 6e 2d 6d 61 74 72 69 78 20 4d 56 50 4d 61  can-matrix MVPMa
2680: 74 72 69 78 20 73 65 74 2d 6d 61 74 72 69 78 0a  trix set-matrix.
2690: 20 20 20 20 73 63 61 6e 2d 6d 61 74 72 69 78 20      scan-matrix 
26a0: 4d 56 4d 61 74 72 69 78 20 20 73 65 74 2d 6d 61  MVMatrix  set-ma
26b0: 74 72 69 78 0a 20 20 20 20 73 63 61 6e 2d 74 65  trix.    scan-te
26c0: 78 2d 72 61 77 20 6c 69 6e 65 61 72 2d 6d 69 70  x-raw linear-mip
26d0: 6d 61 70 20 30 20 73 63 61 6e 2d 78 79 20 64 72  map 0 scan-xy dr
26e0: 61 77 2d 73 63 61 6e 20 73 63 61 6e 2d 67 72 61  aw-scan scan-gra
26f0: 62 31 20 3b 0a 0a 3a 20 73 63 61 6e 2d 6c 65 67  b1 ;..: scan-leg
2700: 69 74 3f 20 28 20 2d 2d 20 61 64 64 72 20 75 20  it? ( -- addr u 
2710: 66 6c 61 67 20 29 0a 20 20 20 20 5b 49 46 44 45  flag ).    [IFDE
2720: 46 5d 20 64 69 73 74 64 65 62 75 67 0a 09 64 69  F] distdebug..di
2730: 73 74 30 20 6f 66 66 20 64 69 73 74 30 2d 6d 61  st0 off dist0-ma
2740: 78 20 6f 66 66 20 64 69 73 74 30 2d 6d 69 6e 20  x off dist0-min 
2750: 6f 6e 0a 09 64 69 73 74 31 20 6f 66 66 20 64 69  on..dist1 off di
2760: 73 74 31 2d 6d 61 78 20 6f 66 66 20 64 69 73 74  st1-max off dist
2770: 31 2d 6d 69 6e 20 6f 6e 0a 20 20 20 20 5b 54 48  1-min on.    [TH
2780: 45 4e 5d 0a 20 20 20 20 73 63 61 6e 2d 6c 65 67  EN].    scan-leg
2790: 69 74 20 3e 67 75 65 73 73 0a 20 20 20 20 3e 67  it >guess.    >g
27a0: 75 65 73 73 65 63 63 20 74 61 67 40 20 67 75 65  uessecc tag@ gue
27b0: 73 73 74 61 67 20 63 21 0a 20 20 20 20 32 64 75  sstag c!.    2du
27c0: 70 20 67 75 65 73 73 65 63 63 20 24 31 30 20 65  p guessecc $10 e
27d0: 63 63 2d 6f 6b 3f 20 3b 0a 0a 43 72 65 61 74 65  cc-ok? ;..Create
27e0: 20 73 61 74 25 73 20 31 2e 30 65 20 73 66 2c 20   sat%s 1.0e sf, 
27f0: 31 2e 36 36 36 65 20 73 66 2c 20 31 2e 33 33 33  1.666e sf, 1.333
2800: 65 20 73 66 2c 20 32 2e 30 65 20 73 66 2c 0a 64  e sf, 2.0e sf,.d
2810: 6f 65 73 3e 20 28 20 6e 20 2d 2d 20 29 20 73 77  oes> ( n -- ) sw
2820: 61 70 20 73 66 6c 6f 61 74 73 20 2b 20 73 66 40  ap sfloats + sf@
2830: 20 3b 0a 0a 3a 20 74 65 78 2d 66 72 61 6d 65 20   ;..: tex-frame 
2840: 28 20 2d 2d 20 29 0a 20 20 20 20 70 72 6f 67 72  ( -- ).    progr
2850: 61 6d 20 69 6e 69 74 2d 70 72 6f 67 72 61 6d 20  am init-program 
2860: 73 65 74 2d 75 6e 69 66 6f 72 6d 73 0a 20 20 20  set-uniforms.   
2870: 20 75 6e 69 74 2d 6d 61 74 72 69 78 20 4d 56 50   unit-matrix MVP
2880: 4d 61 74 72 69 78 20 73 65 74 2d 6d 61 74 72 69  Matrix set-matri
2890: 78 0a 20 20 20 20 75 6e 69 74 2d 6d 61 74 72 69  x.    unit-matri
28a0: 78 20 4d 56 4d 61 74 72 69 78 20 73 65 74 2d 6d  x MVMatrix set-m
28b0: 61 74 72 69 78 20 3b 0a 3a 20 64 72 61 77 2d 73  atrix ;.: draw-s
28c0: 63 61 6c 65 64 20 28 20 69 20 2d 2d 20 29 0a 20  caled ( i -- ). 
28d0: 20 20 20 33 20 61 6e 64 20 73 61 74 25 73 20 73     3 and sat%s s
28e0: 61 74 75 72 61 74 65 25 20 73 66 21 0a 20 20 20  aturate% sf!.   
28f0: 20 53 61 74 75 72 61 74 65 20 31 20 73 61 74 75   Saturate 1 satu
2900: 72 61 74 65 25 20 67 6c 55 6e 69 66 6f 72 6d 31  rate% glUniform1
2910: 66 76 0a 20 20 20 20 74 65 78 2d 66 72 61 6d 65  fv.    tex-frame
2920: 20 20 20 73 63 61 6e 2d 77 20 32 2a 20 64 75 70     scan-w 2* dup
2930: 20 73 63 61 6e 2d 66 62 20 3e 66 72 61 6d 65 62   scan-fb >frameb
2940: 75 66 66 65 72 0a 20 20 20 20 73 63 61 6e 2d 74  uffer.    scan-t
2950: 65 78 2d 72 61 77 20 6c 69 6e 65 61 72 2d 6d 69  ex-raw linear-mi
2960: 70 6d 61 70 20 30 20 73 63 61 6e 2d 78 79 20 64  pmap 0 scan-xy d
2970: 72 61 77 2d 73 63 61 6e 0a 20 20 20 20 73 63 61  raw-scan.    sca
2980: 6e 2d 67 72 61 62 30 20 20 73 63 61 6e 2d 77 20  n-grab0  scan-w 
2990: 32 2a 20 64 75 70 20 73 63 61 6e 2d 66 62 2d 66  2* dup scan-fb-f
29a0: 69 6e 61 6c 20 3e 66 72 61 6d 65 62 75 66 66 65  inal >framebuffe
29b0: 72 20 3b 0a 3a 20 73 61 74 2d 72 65 73 65 74 20  r ;.: sat-reset 
29c0: 28 20 73 61 74 20 2d 2d 20 29 0a 20 20 20 20 73  ( sat -- ).    s
29d0: 61 74 75 72 61 74 65 25 20 73 66 21 20 53 61 74  aturate% sf! Sat
29e0: 75 72 61 74 65 20 31 20 73 61 74 75 72 61 74 65  urate 1 saturate
29f0: 25 20 67 6c 55 6e 69 66 6f 72 6d 31 66 76 20 3b  % glUniform1fv ;
2a00: 0a 0a 70 72 65 76 69 6f 75 73 0a 0a 5b 49 46 44  ..previous..[IFD
2a10: 45 46 5d 20 61 6e 64 72 6f 69 64 0a 20 20 20 20  EF] android.    
2a20: 72 65 71 75 69 72 65 20 61 6e 64 72 6f 69 64 2f  require android/
2a30: 71 72 73 63 61 6e 2d 61 6e 64 72 6f 69 64 2e 66  qrscan-android.f
2a40: 73 0a 20 20 20 20 61 6c 73 6f 20 61 6e 64 72 6f  s.    also andro
2a50: 69 64 0a 5b 45 4c 53 45 5d 0a 20 20 20 20 5b 49  id.[ELSE].    [I
2a60: 46 44 45 46 5d 20 6c 69 6e 75 78 0a 09 72 65 71  FDEF] linux..req
2a70: 75 69 72 65 20 6c 69 6e 75 78 2f 71 72 73 63 61  uire linux/qrsca
2a80: 6e 2d 6c 69 6e 75 78 2e 66 73 0a 20 20 20 20 5b  n-linux.fs.    [
2a90: 54 48 45 4e 5d 0a 5b 54 48 45 4e 5d 0a 0a 5b 49  THEN].[THEN]..[I
2aa0: 46 55 4e 44 45 46 5d 20 73 63 61 6e 2d 72 65 73  FUNDEF] scan-res
2ab0: 75 6c 74 0a 20 20 20 20 3a 20 73 63 61 6e 2d 72  ult.    : scan-r
2ac0: 65 73 75 6c 74 20 28 20 61 64 64 72 20 75 20 74  esult ( addr u t
2ad0: 61 67 20 2d 2d 20 29 0a 09 71 72 28 20 3e 72 0a  ag -- )..qr( >r.
2ae0: 09 62 6f 75 6e 64 73 20 3f 44 4f 20 20 2e 22 20  .bounds ?DO  ." 
2af0: 71 72 20 3a 20 22 20 49 20 24 31 30 20 78 74 79  qr : " I $10 xty
2b00: 70 65 20 63 72 20 24 31 30 20 2b 4c 4f 4f 50 0a  pe cr $10 +LOOP.
2b10: 09 72 3e 20 2e 22 20 74 61 67 3a 20 22 20 64 75  .r> ." tag: " du
2b20: 70 20 68 65 78 2e 20 63 72 0a 09 2e 22 20 65 63  p hex. cr..." ec
2b30: 63 3a 20 22 20 67 75 65 73 73 65 63 63 20 24 31  c: " guessecc $1
2b40: 30 20 78 74 79 70 65 20 63 72 0a 09 5b 49 46 44  0 xtype cr..[IFD
2b50: 45 46 5d 20 64 69 73 74 64 65 62 75 67 0a 09 20  EF] distdebug.. 
2b60: 20 20 20 2e 22 20 64 69 73 74 2f 6d 69 6e 2f 6d     ." dist/min/m
2b70: 61 78 3a 20 22 0a 09 20 20 20 20 64 69 73 74 30  ax: "..    dist0
2b80: 20 40 20 73 3e 66 20 5b 20 31 38 20 31 38 20 2a   @ s>f [ 18 18 *
2b90: 20 5d 4c 20 66 6d 2f 20 66 3e 73 20 2e 20 64 69   ]L fm/ f>s . di
2ba0: 73 74 30 2d 6d 69 6e 20 3f 20 64 69 73 74 30 2d  st0-min ? dist0-
2bb0: 6d 61 78 20 3f 20 73 70 61 63 65 0a 09 20 20 20  max ? space..   
2bc0: 20 64 69 73 74 31 20 40 20 73 3e 66 20 5b 20 31   dist1 @ s>f [ 1
2bd0: 38 20 31 38 20 2a 20 5d 4c 20 66 6d 2f 20 66 3e  8 18 * ]L fm/ f>
2be0: 73 20 2e 20 64 69 73 74 31 2d 6d 69 6e 20 3f 20  s . dist1-min ? 
2bf0: 64 69 73 74 31 2d 6d 61 78 20 3f 20 63 72 0a 09  dist1-max ? cr..
2c00: 5b 54 48 45 4e 5d 0a 09 29 20 3b 0a 5b 54 48 45  [THEN]..) ;.[THE
2c10: 4e 5d 0a 0a 3a 20 61 64 61 70 74 2d 72 67 62 20  N]..: adapt-rgb 
2c20: 28 20 2d 2d 20 29 0a 20 20 20 20 73 63 61 6e 2d  ( -- ).    scan-
2c30: 62 75 66 30 20 24 40 20 67 65 74 2d 6d 69 6e 6d  buf0 $@ get-minm
2c40: 61 78 2d 72 67 62 20 7b 20 64 3a 20 72 20 64 3a  ax-rgb { d: r d:
2c50: 20 67 20 64 3a 20 62 20 7d 0a 20 20 20 20 62 20   g d: b }.    b 
2c60: 6f 76 65 72 20 2d 20 32 2f 20 32 2f 20 20 20 2b  over - 2/ 2/   +
2c70: 20 74 6f 20 62 6c 75 65 2d 6c 65 76 65 6c 23 20   to blue-level# 
2c80: 20 20 20 5c 20 62 6c 75 65 20 6c 65 76 65 6c 20     \ blue level 
2c90: 69 73 20 31 2f 34 20 6f 66 20 74 6f 74 61 6c 0a  is 1/4 of total.
2ca0: 20 20 20 20 67 20 6f 76 65 72 20 2d 20 32 20 35      g over - 2 5
2cb0: 20 2a 2f 20 20 2b 20 74 6f 20 67 72 65 65 6e 2d   */  + to green-
2cc0: 6c 65 76 65 6c 23 20 20 20 5c 20 67 72 65 65 6e  level#   \ green
2cd0: 20 61 74 20 34 30 25 20 6f 66 20 74 6f 74 61 6c   at 40% of total
2ce0: 0a 20 20 20 20 72 20 6f 76 65 72 20 2d 20 32 2f  .    r over - 2/
2cf0: 20 20 20 20 20 20 2b 20 74 6f 20 72 65 64 2d 6c        + to red-l
2d00: 65 76 65 6c 23 20 3b 20 20 20 5c 20 72 65 64 20  evel# ;   \ red 
2d10: 61 74 20 35 30 25 20 6f 66 20 74 6f 74 61 6c 0a  at 50% of total.
2d20: 0a 3a 20 73 63 61 6e 2d 69 74 20 28 20 2d 2d 20  .: scan-it ( -- 
2d30: 29 0a 20 20 20 20 73 65 61 72 63 68 2d 63 6f 72  ).    search-cor
2d40: 6e 65 72 73 0a 20 20 20 20 3f 6c 65 67 69 74 20  ners.    ?legit 
2d50: 49 46 20 20 73 63 61 6e 2d 6c 65 67 69 74 3f 20  IF  scan-legit? 
2d60: 49 46 0a 09 20 20 20 20 67 75 65 73 73 65 63 63  IF..    guessecc
2d70: 20 24 31 30 20 2b 20 63 40 20 73 63 61 6e 2d 72   $10 + c@ scan-r
2d80: 65 73 75 6c 74 20 71 72 28 20 2e 22 20 74 6f 6f  esult qr( ." too
2d90: 6b 3a 20 22 20 2e 74 69 6d 65 20 63 72 20 29 0a  k: " .time cr ).
2da0: 09 20 20 20 20 71 72 28 20 73 61 76 65 2d 70 6e  .    qr( save-pn
2db0: 67 31 20 31 20 2b 74 6f 20 73 63 61 6e 23 20 29  g1 1 +to scan# )
2dc0: 0a 09 45 4c 53 45 20 20 32 64 72 6f 70 20 20 54  ..ELSE  2drop  T
2dd0: 48 45 4e 0a 20 20 20 20 54 48 45 4e 20 3b 0a 0a  HEN.    THEN ;..
2de0: 3a 20 73 63 61 6e 2d 6f 6e 63 65 20 28 20 2d 2d  : scan-once ( --
2df0: 20 29 0a 20 20 20 20 73 61 74 75 72 61 74 65 25   ).    saturate%
2e00: 20 73 66 40 20 7b 20 66 3a 20 73 61 74 20 7d 0a   sf@ { f: sat }.
2e10: 20 20 20 20 64 72 61 77 2d 63 61 6d 20 71 72 28      draw-cam qr(
2e20: 20 21 74 69 6d 65 20 29 20 33 20 30 20 44 4f 0a   !time ) 3 0 DO.
2e30: 09 49 20 64 72 61 77 2d 73 63 61 6c 65 64 20 61  .I draw-scaled a
2e40: 64 61 70 74 2d 72 67 62 0a 09 37 20 74 6f 20 72  dapt-rgb..7 to r
2e50: 67 62 2d 78 6f 72 20 73 63 61 6e 2d 69 74 0a 09  gb-xor scan-it..
2e60: 30 20 74 6f 20 72 67 62 2d 78 6f 72 20 73 63 61  0 to rgb-xor sca
2e70: 6e 2d 69 74 0a 20 20 20 20 4c 4f 4f 50 20 20 73  n-it.    LOOP  s
2e80: 61 74 20 73 61 74 2d 72 65 73 65 74 0a 20 20 20  at sat-reset.   
2e90: 20 65 6b 65 79 3f 20 49 46 20 20 65 6b 65 79 20   ekey? IF  ekey 
2ea0: 64 75 70 20 6b 2d 76 6f 6c 75 70 20 3d 20 73 77  dup k-volup = sw
2eb0: 61 70 20 62 6c 20 3d 20 6f 72 20 20 49 46 20 20  ap bl = or  IF  
2ec0: 73 61 76 65 2d 70 6e 67 73 20 20 54 48 45 4e 20  save-pngs  THEN 
2ed0: 20 54 48 45 4e 20 3b 0a 3a 20 73 63 61 6e 2d 6c   THEN ;.: scan-l
2ee0: 6f 6f 70 20 28 20 2d 2d 20 29 0a 20 20 20 20 31  oop ( -- ).    1
2ef0: 20 6c 65 76 65 6c 23 20 2b 21 40 20 3e 72 20 20   level# +!@ >r  
2f00: 42 45 47 49 4e 20 20 73 63 61 6e 2d 6f 6e 63 65  BEGIN  scan-once
2f10: 20 3e 6c 6f 6f 70 65 72 20 6c 65 76 65 6c 23 20   >looper level# 
2f20: 40 20 72 40 20 3c 3d 20 55 4e 54 49 4c 0a 20 20  @ r@ <= UNTIL.  
2f30: 20 20 72 64 72 6f 70 20 3b 0a 0a 3a 20 73 63 61    rdrop ;..: sca
2f40: 6e 2d 71 72 20 28 20 2d 2d 20 29 0a 20 20 20 20  n-qr ( -- ).    
2f50: 5b 49 46 44 45 46 5d 20 6c 61 73 74 73 63 61 6e  [IFDEF] lastscan
2f60: 24 20 20 6c 61 73 74 73 63 61 6e 24 20 24 66 72  $  lastscan$ $fr
2f70: 65 65 20 20 5b 54 48 45 4e 5d 0a 20 20 20 20 73  ee  [THEN].    s
2f80: 63 61 6e 2d 73 74 61 72 74 20 20 5b 27 5d 20 73  can-start  ['] s
2f90: 63 61 6e 2d 6c 6f 6f 70 20 63 61 74 63 68 20 20  can-loop catch  
2fa0: 6c 65 76 65 6c 23 20 6f 66 66 0a 20 20 20 20 63  level# off.    c
2fb0: 61 6d 2d 65 6e 64 20 30 3e 66 72 61 6d 65 62 75  am-end 0>framebu
2fc0: 66 66 65 72 0a 20 20 20 20 5b 49 46 44 45 46 5d  ffer.    [IFDEF]
2fd0: 20 73 61 74 75 72 61 74 65 25 20 31 2e 30 65 20   saturate% 1.0e 
2fe0: 73 61 74 75 72 61 74 65 25 20 73 66 21 20 5b 54  saturate% sf! [T
2ff0: 48 45 4e 5d 0a 20 20 20 20 5b 49 46 44 45 46 5d  HEN].    [IFDEF]
3000: 20 73 68 6f 77 73 74 61 74 75 73 20 73 68 6f 77   showstatus show
3010: 73 74 61 74 75 73 20 5b 54 48 45 4e 5d 0a 20 20  status [THEN].  
3020: 20 20 5b 49 46 44 45 46 5d 20 74 65 72 6d 69 6e    [IFDEF] termin
3030: 61 6c 2d 70 72 6f 67 72 61 6d 20 74 65 72 6d 69  al-program termi
3040: 6e 61 6c 2d 70 72 6f 67 72 61 6d 20 74 65 72 6d  nal-program term
3050: 69 6e 61 6c 2d 69 6e 69 74 20 5b 54 48 45 4e 5d  inal-init [THEN]
3060: 0a 20 20 20 20 64 75 70 20 49 46 0a 09 2e 22 20  .    dup IF..." 
3070: 53 63 61 6e 20 66 61 69 6c 65 64 22 20 63 72 0a  Scan failed" cr.
3080: 20 20 20 20 45 4c 53 45 0a 09 2e 22 20 53 63 61      ELSE..." Sca
3090: 6e 20 63 6f 6d 70 6c 65 74 65 64 22 20 63 72 0a  n completed" cr.
30a0: 20 20 20 20 54 48 45 4e 0a 20 20 20 20 74 68 72      THEN.    thr
30b0: 6f 77 20 3b 0a 0a 70 72 65 76 69 6f 75 73 0a 0a  ow ;..previous..
30c0: 3a 6e 6f 6e 61 6d 65 20 28 20 2d 2d 20 29 0a 20  :noname ( -- ). 
30d0: 20 20 20 3f 67 65 74 2d 6d 65 20 69 6e 69 74 2d     ?get-me init-
30e0: 63 6c 69 65 6e 74 0a 20 20 20 20 3f 6e 65 78 74  client.    ?next
30f0: 61 72 67 20 49 46 20 20 73 22 20 2d 6d 61 6e 79  arg IF  s" -many
3100: 22 20 73 74 72 3d 20 30 3d 20 20 45 4c 53 45 20  " str= 0=  ELSE 
3110: 20 74 72 75 65 20 20 54 48 45 4e 20 20 74 6f 20   true  THEN  to 
3120: 73 63 61 6e 2d 6f 6e 63 65 3f 0a 20 20 20 20 73  scan-once?.    s
3130: 63 61 6e 2d 71 72 20 3b 20 69 73 20 72 75 6e 2d  can-qr ; is run-
3140: 73 63 61 6e 2d 71 72 0a 0a 5c 5c 5c 0a 4c 6f 63  scan-qr..\\\.Loc
3150: 61 6c 20 56 61 72 69 61 62 6c 65 73 3a 0a 66 6f  al Variables:.fo
3160: 72 74 68 2d 6c 6f 63 61 6c 2d 77 6f 72 64 73 3a  rth-local-words:
3170: 0a 20 20 20 20 28 0a 20 20 20 20 20 28 28 22 6e  .    (.     (("n
3180: 65 74 32 6f 3a 22 20 22 2b 6e 65 74 32 6f 3a 22  et2o:" "+net2o:"
3190: 29 20 64 65 66 69 6e 69 74 69 6f 6e 2d 73 74 61  ) definition-sta
31a0: 72 74 65 72 20 28 66 6f 6e 74 2d 6c 6f 63 6b 2d  rter (font-lock-
31b0: 6b 65 79 77 6f 72 64 2d 66 61 63 65 20 2e 20 31  keyword-face . 1
31c0: 29 0a 20 20 20 20 20 20 22 5b 20 5c 74 5c 6e 5d  ).      "[ \t\n]
31d0: 22 20 74 20 6e 61 6d 65 20 28 66 6f 6e 74 2d 6c  " t name (font-l
31e0: 6f 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d  ock-function-nam
31f0: 65 2d 66 61 63 65 20 2e 20 33 29 29 0a 20 20 20  e-face . 3)).   
3200: 20 20 28 22 5b 61 2d 7a 30 2d 39 5d 2b 28 22 20    ("[a-z0-9]+(" 
3210: 69 6d 6d 65 64 69 61 74 65 20 28 66 6f 6e 74 2d  immediate (font-
3220: 6c 6f 63 6b 2d 63 6f 6d 6d 65 6e 74 2d 66 61 63  lock-comment-fac
3230: 65 20 2e 20 31 29 0a 20 20 20 20 20 20 22 29 22  e . 1).      ")"
3240: 20 6e 69 6c 20 63 6f 6d 6d 65 6e 74 20 28 66 6f   nil comment (fo
3250: 6e 74 2d 6c 6f 63 6b 2d 63 6f 6d 6d 65 6e 74 2d  nt-lock-comment-
3260: 66 61 63 65 20 2e 20 31 29 29 0a 20 20 20 20 29  face . 1)).    )
3270: 0a 66 6f 72 74 68 2d 6c 6f 63 61 6c 2d 69 6e 64  .forth-local-ind
3280: 65 6e 74 2d 77 6f 72 64 73 3a 0a 20 20 20 20 28  ent-words:.    (
3290: 0a 20 20 20 20 20 28 28 22 6e 65 74 32 6f 3a 22  .     (("net2o:"
32a0: 20 22 2b 6e 65 74 32 6f 3a 22 29 20 28 30 20 2e   "+net2o:") (0 .
32b0: 20 32 29 20 28 30 20 2e 20 32 29 20 6e 6f 6e 2d   2) (0 . 2) non-
32c0: 69 6d 6d 65 64 69 61 74 65 29 0a 20 20 20 20 29  immediate).    )
32d0: 0a 45 6e 64 3a 0a 5b 54 48 45 4e 5d 0a           .End:.[THEN].