Artifact 254a8f6ffa7cb5376a2fe61c73a911496abd1c22:
File autopsy.rx part of check-in [7326d0b4e8] - autopsy: add ":see" for non-parsing usage of decompiler by charleschilders on 2011-04-02 21:04:16. [annotate]
0000: 28 20 41 75 74 6f 70 73 79 20 2d 2d 2d 2d 2d 2d ( Autopsy ------
0010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 29 0a ------------- ).
0050: 28 20 43 6f 70 79 72 69 67 68 74 20 5b 63 5d 20 ( Copyright [c]
0060: 32 30 31 30 20 2d 20 32 30 31 31 2c 20 43 68 61 2010 - 2011, Cha
0070: 72 6c 65 73 20 43 68 69 6c 64 65 72 73 20 20 20 rles Childers
0080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
00a0: 28 20 43 6f 70 79 72 69 67 68 74 20 5b 63 5d 20 ( Copyright [c]
00b0: 32 30 31 31 2c 20 4d 61 72 63 20 53 69 6d 70 73 2011, Marc Simps
00c0: 6f 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 on
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
00f0: 28 20 4c 69 63 65 6e 73 65 3a 20 49 53 43 20 20 ( License: ISC
0100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a ).
0140: 28 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ( --------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 29 0a ------------- ).
0190: 6e 65 65 64 73 20 64 69 73 73 65 63 74 27 0a 0a needs dissect'..
01a0: 63 68 61 69 6e 3a 20 61 75 74 6f 70 73 79 27 0a chain: autopsy'.
01b0: 20 20 3a 20 64 65 63 6f 6d 70 69 6c 65 20 20 28 : decompile (
01c0: 20 61 2d 61 20 29 20 20 64 75 70 20 5e 64 69 73 a-a ) dup ^dis
01d0: 73 65 63 74 27 64 65 63 6f 6d 70 69 6c 65 20 73 sect'decompile s
01e0: 77 61 70 20 22 25 64 20 25 73 5c 6e 22 20 70 75 wap "%d %s\n" pu
01f0: 74 73 20 31 2b 20 3b 0a 0a 28 20 2d 2d 5b 20 42 ts 1+ ;..( --[ B
0200: 6f 78 20 44 72 61 77 69 6e 67 20 43 6f 64 65 20 ox Drawing Code
0210: 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ]---------------
0220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0240: 2d 2d 2d 2d 2d 2d 20 29 0a 0a 28 20 2d 2d 5b 20 ------ )..( --[
0250: 42 6f 78 20 67 65 6f 6d 65 74 72 79 20 5d 2d 2d Box geometry ]--
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 20 29 0a 31 36 20 76 61 -------- ).16 va
0290: 72 69 61 62 6c 65 3a 20 62 6f 78 57 69 64 74 68 riable: boxWidth
02a0: 0a 20 34 20 76 61 72 69 61 62 6c 65 3a 20 62 6f . 4 variable: bo
02b0: 78 4d 61 72 67 69 6e 0a 20 34 20 76 61 72 69 61 xMargin. 4 varia
02c0: 62 6c 65 3a 20 62 6f 78 2f 6c 69 6e 65 0a 0a 7b ble: box/line..{
02d0: 7b 0a 20 20 28 20 2d 2d 5b 20 43 6f 72 65 20 5d {. ( --[ Core ]
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0310: 20 29 0a 0a 20 20 3a 20 70 75 74 63 73 20 20 20 ).. : putcs
0320: 20 28 20 63 6e 2d 20 20 29 20 20 20 5b 20 64 75 ( cn- ) [ du
0330: 70 20 70 75 74 63 20 5d 20 74 69 6d 65 73 20 64 p putc ] times d
0340: 72 6f 70 20 3b 0a 0a 20 20 3a 20 70 61 64 43 6f rop ;.. : padCo
0350: 75 6e 74 20 20 28 20 6e 2d 6e 20 29 20 20 20 40 unt ( n-n ) @
0360: 62 6f 78 57 69 64 74 68 20 40 62 6f 78 4d 61 72 boxWidth @boxMar
0370: 67 69 6e 20 2d 20 73 77 61 70 20 2d 20 3b 0a 20 gin - swap - ;.
0380: 20 3a 20 2e 70 61 64 20 20 20 20 20 20 28 20 6e : .pad ( n
0390: 2d 6e 20 29 20 20 20 70 61 64 43 6f 75 6e 74 20 -n ) padCount
03a0: 33 32 20 73 77 61 70 20 70 75 74 63 73 20 3b 0a 32 swap putcs ;.
03b0: 20 20 3a 20 2e 70 61 64 73 20 20 20 20 20 28 20 : .pads (
03c0: 24 2d 20 20 29 20 20 20 77 69 74 68 4c 65 6e 67 $- ) withLeng
03d0: 74 68 20 73 77 61 70 20 70 75 74 73 20 2e 70 61 th swap puts .pa
03e0: 64 20 3b 0a 20 20 3a 20 2e 6e 75 6d 62 65 72 20 d ;. : .number
03f0: 20 20 28 20 6e 2d 20 20 29 20 20 20 74 6f 53 74 ( n- ) toSt
0400: 72 69 6e 67 20 2e 70 61 64 73 20 3b 0a 0a 20 20 ring .pads ;..
0410: 3a 20 2e 62 6f 78 65 64 6e 20 20 20 28 20 6e 2d : .boxedn ( n-
0420: 20 20 29 20 20 20 27 7c 20 70 75 74 63 20 73 70 ) '| putc sp
0430: 61 63 65 20 2e 6e 75 6d 62 65 72 20 73 70 61 63 ace .number spac
0440: 65 20 27 7c 20 70 75 74 63 20 3b 0a 20 20 3a 20 e '| putc ;. :
0450: 2e 65 6d 70 74 79 20 20 20 20 28 20 20 2d 20 20 .empty ( -
0460: 29 20 20 20 27 7c 20 70 75 74 63 20 2d 32 20 2e ) '| putc -2 .
0470: 70 61 64 20 27 7c 20 70 75 74 63 20 3b 0a 0a 20 pad '| putc ;..
0480: 20 3a 20 78 74 2d 3e 6e 61 6d 65 20 20 28 20 24 : xt->name ( $
0490: 2d 24 20 29 20 20 20 74 6f 4e 75 6d 62 65 72 20 -$ ) toNumber
04a0: 78 74 2d 3e 64 20 64 75 70 20 5b 20 64 2d 3e 6e xt->d dup [ d->n
04b0: 61 6d 65 20 5d 20 5b 20 64 72 6f 70 20 22 22 20 ame ] [ drop ""
04c0: 5d 20 69 66 20 3b 0a 0a 20 20 76 61 72 69 61 62 ] if ;.. variab
04d0: 6c 65 20 65 73 63 43 65 6c 6c 0a 20 20 3a 20 6c le escCell. : l
04e0: 6f 6f 6b 75 70 20 20 20 20 28 20 61 2d 24 20 29 ookup ( a-$ )
04f0: 0a 20 20 20 20 40 65 73 63 43 65 6c 6c 0a 20 20 . @escCell.
0500: 20 20 5b 20 74 6f 53 74 72 69 6e 67 20 65 73 63 [ toString esc
0510: 43 65 6c 6c 20 6f 66 66 20 5d 0a 20 20 20 20 5b Cell off ]. [
0520: 20 5e 64 69 73 73 65 63 74 27 6c 6f 6f 6b 75 70 ^dissect'lookup
0530: 4f 70 63 6f 64 65 20 5b 20 5b 20 65 73 63 43 65 Opcode [ [ escCe
0540: 6c 6c 20 6f 6e 20 5d 20 69 66 54 72 75 65 20 5d ll on ] ifTrue ]
0550: 20 5b 20 64 72 6f 70 20 78 74 2d 3e 6e 61 6d 65 [ drop xt->name
0560: 20 5d 20 69 66 20 5d 20 69 66 20 3b 0a 20 20 3a ] if ] if ;. :
0570: 20 2e 6c 6f 6f 6b 75 70 20 20 20 28 20 61 2d 20 .lookup ( a-
0580: 20 29 20 27 7c 20 70 75 74 63 20 73 70 61 63 65 ) '| putc space
0590: 20 6c 6f 6f 6b 75 70 20 2e 70 61 64 73 20 73 70 lookup .pads sp
05a0: 61 63 65 20 27 7c 20 70 75 74 63 20 3b 0a 0a 20 ace '| putc ;..
05b0: 20 3a 20 2e 66 69 6c 6c 20 20 20 20 20 28 20 63 : .fill ( c
05c0: 2d 20 20 29 20 40 62 6f 78 57 69 64 74 68 20 40 - ) @boxWidth @
05d0: 62 6f 78 4d 61 72 67 69 6e 20 32 20 2d 20 2d 20 boxMargin 2 - -
05e0: 70 75 74 63 73 20 3b 0a 20 20 3a 20 2e 65 64 67 putcs ;. : .edg
05f0: 65 20 20 20 20 20 28 20 20 2d 20 20 29 20 27 2b e ( - ) '+
0600: 20 70 75 74 63 20 27 2d 20 2e 66 69 6c 6c 20 27 putc '- .fill '
0610: 2b 20 70 75 74 63 20 3b 0a 20 20 3a 20 2e 72 75 + putc ;. : .ru
0620: 6c 65 20 20 20 20 20 28 20 20 2d 20 20 29 20 27 le ( - ) '
0630: 7c 20 70 75 74 63 20 27 2d 20 2e 66 69 6c 6c 20 | putc '- .fill
0640: 27 7c 20 70 75 74 63 20 3b 0a 0a 20 20 28 20 2d '| putc ;.. ( -
0650: 2d 5b 20 44 69 61 67 72 61 6d 20 66 6f 72 20 4e -[ Diagram for N
0660: 20 63 6f 6e 74 69 67 75 6f 75 73 20 63 65 6c 6c contiguous cell
0670: 73 20 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d s ]-------------
0680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 29 0a 0a 20 20 36 --------- ).. 6
0690: 20 63 6f 6e 73 74 61 6e 74 20 62 6f 78 52 6f 77 constant boxRow
06a0: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s
06b0: 20 20 63 72 65 61 74 65 20 62 6f 78 74 62 6c 20 create boxtbl
06c0: 62 6f 78 52 6f 77 73 20 61 6c 6c 6f 74 0a 0a 20 boxRows allot..
06d0: 20 62 6f 78 74 62 6c 20 76 61 72 69 61 62 6c 65 boxtbl variable
06e0: 3a 20 63 75 72 72 65 6e 74 52 6f 77 0a 20 20 3a : currentRow. :
06f0: 20 62 6f 78 52 6f 77 2c 20 40 63 75 72 72 65 6e boxRow, @curren
0700: 74 52 6f 77 20 21 20 63 75 72 72 65 6e 74 52 6f tRow ! currentRo
0710: 77 20 2b 2b 20 3b 0a 0a 20 20 5b 20 28 20 61 2d w ++ ;.. [ ( a-
0720: 20 29 20 2e 65 64 67 65 20 64 72 6f 70 20 20 20 ) .edge drop
0730: 3b 20 5d 20 62 6f 78 52 6f 77 2c 0a 20 20 5b 20 ; ] boxRow,. [
0740: 28 20 61 2d 20 29 20 2e 62 6f 78 65 64 6e 20 20 ( a- ) .boxedn
0750: 20 20 20 20 3b 20 5d 20 62 6f 78 52 6f 77 2c 0a ; ] boxRow,.
0760: 20 20 5b 20 28 20 61 2d 20 29 20 2e 72 75 6c 65 [ ( a- ) .rule
0770: 20 64 72 6f 70 20 20 20 3b 20 5d 20 62 6f 78 52 drop ; ] boxR
0780: 6f 77 2c 0a 20 20 5b 20 28 20 61 2d 20 29 20 40 ow,. [ ( a- ) @
0790: 20 2e 62 6f 78 65 64 6e 20 20 20 20 3b 20 5d 20 .boxedn ; ]
07a0: 62 6f 78 52 6f 77 2c 0a 20 20 5b 20 28 20 61 2d boxRow,. [ ( a-
07b0: 20 29 20 40 20 2e 6c 6f 6f 6b 75 70 20 20 20 20 ) @ .lookup
07c0: 3b 20 5d 20 62 6f 78 52 6f 77 2c 0a 20 20 5b 20 ; ] boxRow,. [
07d0: 28 20 61 2d 20 29 20 2e 65 64 67 65 20 64 72 6f ( a- ) .edge dro
07e0: 70 20 20 20 3b 20 5d 20 62 6f 78 52 6f 77 2c 0a p ; ] boxRow,.
07f0: 0a 20 20 3a 20 28 2e 72 6f 77 29 20 20 28 20 61 . : (.row) ( a
0800: 71 6e 2d 61 71 6e 20 29 0a 20 20 20 20 72 65 70 qn-aqn ). rep
0810: 65 61 74 20 64 75 70 20 30 20 3d 20 69 66 3b 0a eat dup 0 = if;.
0820: 20 20 20 20 5b 20 6f 76 65 72 20 31 2b 20 5b 20 [ over 1+ [
0830: 74 75 63 6b 20 64 6f 20 5d 20 64 69 70 20 73 77 tuck do ] dip sw
0840: 61 70 20 5d 20 64 69 70 20 31 2d 20 61 67 61 69 ap ] dip 1- agai
0850: 6e 20 3b 0a 0a 20 20 3a 20 2e 72 6f 77 20 20 20 n ;.. : .row
0860: 20 28 20 61 71 6e 2d 20 20 20 20 29 20 63 72 20 ( aqn- ) cr
0870: 28 2e 72 6f 77 29 20 32 64 72 6f 70 20 64 72 6f (.row) 2drop dro
0880: 70 20 3b 0a 0a 20 20 3a 20 28 2e 63 65 6c 6c 73 p ;.. : (.cells
0890: 29 20 28 20 61 6e 2d 20 29 0a 20 20 20 20 30 20 ) ( an- ). 0
08a0: 72 65 70 65 61 74 20 64 75 70 20 62 6f 78 52 6f repeat dup boxRo
08b0: 77 73 20 3d 20 69 66 3b 20 64 75 70 20 31 2b 0a ws = if; dup 1+.
08c0: 20 20 20 20 5b 20 28 20 61 6e 6e 20 29 20 62 6f [ ( ann ) bo
08d0: 78 74 62 6c 20 2b 20 40 20 28 20 61 6e 71 20 29 xtbl + @ ( anq )
08e0: 20 5b 20 32 6f 76 65 72 20 5d 20 64 69 70 20 73 [ 2over ] dip s
08f0: 77 61 70 20 2e 72 6f 77 20 28 20 61 6e 20 29 20 wap .row ( an )
0900: 5d 20 64 69 70 20 61 67 61 69 6e 20 3b 0a 0a 20 ] dip again ;..
0910: 20 28 20 2d 2d 5b 20 55 74 69 6c 69 74 79 20 77 ( --[ Utility w
0920: 6f 72 64 73 20 66 6f 72 20 66 69 6e 64 69 6e 67 ords for finding
0930: 20 74 68 65 20 52 45 54 20 6f 70 63 6f 64 65 20 the RET opcode
0940: 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 29 0a ]------------ ).
0950: 0a 20 20 3a 20 66 69 6e 64 52 65 74 20 28 20 61 . : findRet ( a
0960: 2d 6e 61 20 29 20 20 31 20 73 77 61 70 20 72 65 -na ) 1 swap re
0970: 70 65 61 74 20 64 75 70 20 5e 64 69 73 73 65 63 peat dup ^dissec
0980: 74 27 65 6e 64 4f 66 57 6f 72 64 3f 20 69 66 3b t'endOfWord? if;
0990: 20 26 31 2b 20 62 69 40 20 61 67 61 69 6e 20 3b &1+ bi@ again ;
09a0: 0a 2d 2d 2d 72 65 76 65 61 6c 2d 2d 2d 0a 0a 20 .---reveal---..
09b0: 20 3a 20 2e 63 65 6c 6c 73 20 28 20 61 6e 2d 20 : .cells ( an-
09c0: 29 0a 20 20 20 20 64 75 70 20 40 62 6f 78 2f 6c ). dup @box/l
09d0: 69 6e 65 20 3e 0a 20 20 20 20 5b 20 40 62 6f 78 ine >. [ @box
09e0: 2f 6c 69 6e 65 20 2d 20 5b 20 40 62 6f 78 2f 6c /line - [ @box/l
09f0: 69 6e 65 20 28 2e 63 65 6c 6c 73 29 20 64 72 6f ine (.cells) dro
0a00: 70 20 2b 20 5d 20 64 69 70 20 2e 63 65 6c 6c 73 p + ] dip .cells
0a10: 20 5d 0a 20 20 20 20 5b 20 28 2e 63 65 6c 6c 73 ]. [ (.cells
0a20: 29 20 32 64 72 6f 70 20 64 72 6f 70 20 5d 20 69 ) 2drop drop ] i
0a30: 66 20 3b 0a 0a 20 20 3a 20 2e 63 65 6c 6c 20 20 f ;.. : .cell
0a40: 20 28 20 61 2d 20 29 20 20 31 20 2e 63 65 6c 6c ( a- ) 1 .cell
0a50: 73 20 3b 0a 20 20 3a 20 2e 74 68 72 65 61 64 20 s ;. : .thread
0a60: 28 20 61 2d 20 29 20 20 64 75 70 20 66 69 6e 64 ( a- ) dup find
0a70: 52 65 74 20 64 72 6f 70 20 2e 63 65 6c 6c 73 20 Ret drop .cells
0a80: 3b 0a 7d 7d 0a 0a 28 20 2d 2d 5b 20 22 73 65 65 ;.}}..( --[ "see
0a90: 22 20 61 6e 64 20 22 65 78 70 6c 6f 72 65 22 20 " and "explore"
0aa0: 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ]---------------
0ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ad0: 2d 2d 2d 20 29 0a 76 61 72 69 61 62 6c 65 20 76 --- ).variable v
0ae0: 65 72 74 69 63 61 6c 0a 7b 7b 0a 20 20 3a 20 68 ertical.{{. : h
0af0: 65 6c 70 20 20 28 20 2d 20 29 0a 20 20 20 20 63 elp ( - ). c
0b00: 6c 65 61 72 0a 20 20 20 20 22 41 75 74 70 6f 73 lear. "Autpos
0b10: 79 20 69 73 20 61 20 74 6f 6f 6c 20 66 6f 72 20 y is a tool for
0b20: 65 78 70 6c 6f 72 69 6e 67 20 69 6d 61 67 65 73 exploring images
0b30: 20 69 6e 74 65 72 61 63 74 69 76 65 6c 79 2e 5c interactively.\
0b40: 6e 5c 6e 22 20 70 75 74 73 0a 20 20 20 20 22 2b n\n" puts. "+
0b50: 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---+------------
0b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0b70: 2d 2d 2d 2d 2d 2d 2b 5c 6e 22 20 70 75 74 73 0a ------+\n" puts.
0b80: 20 20 20 20 22 7c 20 69 20 7c 20 42 61 63 6b 74 "| i | Backt
0b90: 72 61 63 6b 20 64 69 73 70 6c 61 79 20 62 79 20 rack display by
0ba0: 6f 6e 65 20 61 64 64 72 65 73 73 20 7c 5c 6e 22 one address |\n"
0bb0: 20 70 75 74 73 0a 20 20 20 20 22 2b 2d 2d 2d 2b puts. "+---+
0bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0be0: 2d 2d 2b 5c 6e 22 20 70 75 74 73 0a 20 20 20 20 --+\n" puts.
0bf0: 22 7c 20 6a 20 7c 20 42 61 63 6b 74 72 61 63 6b "| j | Backtrack
0c00: 20 64 69 73 70 6c 61 79 20 62 79 20 6f 6e 65 20 display by one
0c10: 73 63 72 65 65 6e 20 20 7c 5c 6e 22 20 70 75 74 screen |\n" put
0c20: 73 0a 20 20 20 20 22 2b 2d 2d 2d 2b 2d 2d 2d 2d s. "+---+----
0c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 5c --------------+\
0c50: 6e 22 20 70 75 74 73 0a 20 20 20 20 22 7c 20 6b n" puts. "| k
0c60: 20 7c 20 41 64 76 61 6e 63 65 20 64 69 73 70 6c | Advance displ
0c70: 61 79 20 62 79 20 6f 6e 65 20 61 64 64 72 65 73 ay by one addres
0c80: 73 20 20 20 7c 5c 6e 22 20 70 75 74 73 0a 20 20 s |\n" puts.
0c90: 20 20 22 2b 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2d "+---+--------
0ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 5c 6e 22 20 70 ----------+\n" p
0cc0: 75 74 73 0a 20 20 20 20 22 7c 20 6c 20 7c 20 41 uts. "| l | A
0cd0: 64 76 61 6e 63 65 20 64 69 73 70 6c 61 79 20 62 dvance display b
0ce0: 79 20 6f 6e 65 20 73 63 72 65 65 6e 20 20 20 20 y one screen
0cf0: 7c 5c 6e 22 20 70 75 74 73 0a 20 20 20 20 22 2b |\n" puts. "+
0d00: 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---+------------
0d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d20: 2d 2d 2d 2d 2d 2d 2b 5c 6e 22 20 70 75 74 73 0a ------+\n" puts.
0d30: 20 20 20 20 22 7c 20 7a 20 7c 20 51 75 69 74 20 "| z | Quit
0d40: 41 75 74 6f 73 70 79 20 20 20 20 20 20 20 20 20 Autospy
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 7c 5c 6e 22 |\n"
0d60: 20 70 75 74 73 0a 20 20 20 20 22 2b 2d 2d 2d 2b puts. "+---+
0d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0d90: 2d 2d 2b 5c 6e 22 20 70 75 74 73 0a 20 20 20 20 --+\n" puts.
0da0: 22 7c 20 3f 20 7c 20 44 69 73 70 6c 61 79 20 74 "| ? | Display t
0db0: 68 69 73 20 68 65 6c 70 20 73 63 72 65 65 6e 20 his help screen
0dc0: 20 20 20 20 20 20 20 20 7c 5c 6e 22 20 70 75 74 |\n" put
0dd0: 73 0a 20 20 20 20 22 2b 2d 2d 2d 2b 2d 2d 2d 2d s. "+---+----
0de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 5c --------------+\
0e00: 6e 22 20 70 75 74 73 0a 20 20 20 20 22 7c 20 31 n" puts. "| 1
0e10: 20 7c 20 4a 75 6d 70 20 74 6f 20 61 64 64 72 65 | Jump to addre
0e20: 73 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ss
0e30: 20 20 20 20 7c 5c 6e 22 20 70 75 74 73 0a 20 20 |\n" puts.
0e40: 20 20 22 2b 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d 2d "+---+--------
0e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 5c 6e 22 20 70 ----------+\n" p
0e70: 75 74 73 0a 20 20 20 20 22 5c 6e 50 72 65 73 73 uts. "\nPress
0e80: 20 61 6e 79 20 6b 65 79 20 74 6f 20 72 65 74 75 any key to retu
0e90: 72 6e 20 74 6f 20 61 75 74 6f 73 70 79 2e 5c 6e rn to autospy.\n
0ea0: 22 20 20 20 20 70 75 74 73 0a 20 20 20 20 67 65 " puts. ge
0eb0: 74 63 20 64 72 6f 70 20 3b 0a 0a 20 20 32 20 65 tc drop ;.. 2 e
0ec0: 6c 65 6d 65 6e 74 73 20 78 20 6d 6f 72 65 3f 0a lements x more?.
0ed0: 0a 20 20 3a 20 67 6f 54 6f 41 64 64 72 65 73 73 . : goToAddress
0ee0: 20 28 20 22 2d 20 29 0a 20 20 20 20 63 6c 65 61 ( "- ). clea
0ef0: 72 20 22 41 64 64 72 65 73 73 20 74 6f 20 6a 75 r "Address to ju
0f00: 6d 70 20 74 6f 3a 20 22 20 70 75 74 73 20 67 65 mp to: " puts ge
0f10: 74 54 6f 6b 65 6e 20 74 6f 4e 75 6d 62 65 72 20 tToken toNumber
0f20: 21 78 20 3b 0a 20 20 3a 20 72 6f 77 73 20 40 63 !x ;. : rows @c
0f30: 68 20 32 20 2d 20 3b 0a 20 20 3a 20 63 6f 6c 73 h 2 - ;. : cols
0f40: 20 40 63 77 20 31 20 2d 20 3b 0a 20 20 3a 20 68 @cw 1 - ;. : h
0f50: 61 6e 64 6c 65 0a 20 20 20 20 63 6f 6c 73 20 5b andle. cols [
0f60: 20 27 2d 20 70 75 74 63 20 5d 20 74 69 6d 65 73 '- putc ] times
0f70: 20 63 72 0a 20 20 20 20 67 65 74 63 0a 20 20 20 cr. getc.
0f80: 20 20 20 5b 20 27 69 20 3d 20 5d 20 5b 20 64 72 [ 'i = ] [ dr
0f90: 6f 70 20 78 20 2d 2d 20 20 20 20 20 20 20 20 5d op x -- ]
0fa0: 20 77 68 65 6e 0a 20 20 20 20 20 20 5b 20 27 6b when. [ 'k
0fb0: 20 3d 20 5d 20 5b 20 64 72 6f 70 20 78 20 2b 2b = ] [ drop x ++
0fc0: 20 20 20 20 20 20 20 20 5d 20 77 68 65 6e 0a 20 ] when.
0fd0: 20 20 20 20 20 5b 20 27 6a 20 3d 20 5d 20 5b 20 [ 'j = ] [
0fe0: 64 72 6f 70 20 72 6f 77 73 20 2d 78 20 20 20 20 drop rows -x
0ff0: 20 5d 20 77 68 65 6e 0a 20 20 20 20 20 20 5b 20 ] when. [
1000: 27 6c 20 3d 20 5d 20 5b 20 64 72 6f 70 20 72 6f 'l = ] [ drop ro
1010: 77 73 20 2b 78 20 20 20 20 20 5d 20 77 68 65 6e ws +x ] when
1020: 0a 20 20 20 20 20 20 5b 20 27 3f 20 3d 20 5d 20 . [ '? = ]
1030: 5b 20 64 72 6f 70 20 68 65 6c 70 20 20 20 20 20 [ drop help
1040: 20 20 20 5d 20 77 68 65 6e 0a 20 20 20 20 20 20 ] when.
1050: 5b 20 27 31 20 3d 20 5d 20 5b 20 64 72 6f 70 20 [ '1 = ] [ drop
1060: 67 6f 54 6f 41 64 64 72 65 73 73 20 5d 20 77 68 goToAddress ] wh
1070: 65 6e 0a 20 20 20 20 20 20 5b 20 27 7a 20 3d 20 en. [ 'z =
1080: 5d 20 5b 20 64 72 6f 70 20 6d 6f 72 65 3f 20 6f ] [ drop more? o
1090: 66 66 20 20 20 5d 20 77 68 65 6e 0a 20 20 20 20 ff ] when.
10a0: 64 72 6f 70 20 3b 0a 20 20 3a 20 62 72 6f 77 73 drop ;. : brows
10b0: 65 20 20 20 20 20 28 20 20 2d 20 29 0a 20 20 20 e ( - ).
10c0: 20 5b 20 63 6c 65 61 72 20 40 78 20 72 6f 77 73 [ clear @x rows
10d0: 20 26 64 65 63 6f 6d 70 69 6c 65 20 74 69 6d 65 &decompile time
10e0: 73 20 64 72 6f 70 20 68 61 6e 64 6c 65 20 40 6d s drop handle @m
10f0: 6f 72 65 3f 20 5d 20 77 68 69 6c 65 20 3b 0a 20 ore? ] while ;.
1100: 20 3a 20 67 65 74 41 64 64 72 65 73 73 20 28 20 : getAddress (
1110: 22 2d 20 29 0a 20 20 20 20 67 65 74 54 6f 6b 65 "- ). getToke
1120: 6e 20 64 75 70 20 66 69 6e 64 20 5b 20 6e 69 70 n dup find [ nip
1130: 20 40 64 2d 3e 78 74 20 5d 20 5b 20 64 72 6f 70 @d->xt ] [ drop
1140: 20 74 6f 4e 75 6d 62 65 72 20 5d 20 69 66 20 3b toNumber ] if ;
1150: 0a 2d 2d 2d 72 65 76 65 61 6c 2d 2d 2d 0a 20 20 .---reveal---.
1160: 3a 20 3a 73 65 65 20 20 20 20 28 20 61 2d 20 29 : :see ( a- )
1170: 0a 20 20 20 20 63 72 20 40 76 65 72 74 69 63 61 . cr @vertica
1180: 6c 0a 20 20 20 20 5b 20 5b 20 64 65 63 6f 6d 70 l. [ [ decomp
1190: 69 6c 65 20 64 75 70 20 31 2d 20 5e 64 69 73 73 ile dup 1- ^diss
11a0: 65 63 74 27 65 6e 64 4f 66 57 6f 72 64 3f 20 6e ect'endOfWord? n
11b0: 6f 74 20 5d 20 77 68 69 6c 65 20 64 72 6f 70 20 ot ] while drop
11c0: 5d 20 26 2e 74 68 72 65 61 64 20 69 66 20 3b 0a ] &.thread if ;.
11d0: 20 20 3a 20 73 65 65 20 20 20 20 20 28 20 22 2d : see ( "-
11e0: 20 29 20 67 65 74 41 64 64 72 65 73 73 20 3a 73 ) getAddress :s
11f0: 65 65 20 3b 0a 20 20 3a 20 65 78 70 6c 6f 72 65 ee ;. : explore
1200: 20 28 20 22 2d 20 29 20 67 65 74 41 64 64 72 65 ( "- ) getAddre
1210: 73 73 20 21 78 20 6d 6f 72 65 3f 20 6f 6e 20 62 ss !x more? on b
1220: 72 6f 77 73 65 20 3b 0a 7d 7d 0a 3b 63 68 61 69 rowse ;.}}.;chai
1230: 6e 0a 0a 67 6c 6f 62 61 6c 20 77 69 74 68 20 61 n..global with a
1240: 75 74 6f 70 73 79 27 0a utopsy'.