~rabbits/left

353979adc2417334513be37c1795a2a952e9c19b — neauoire a month ago 2691baf
Removed macros
1 files changed, 734 insertions(+), 161 deletions(-)

M src/left.tal
M src/left.tal => src/left.tal +734 -161
@@ 1,59 1,11 @@
( Left )

|00 @System     &vector $2 &wst      $1 &rst    $1 &pad    $4 &r      $2 &g      $2 &b      $2 &debug  $1 &halt $1
|10 @Console    &vector $2 &read     $1 &pad    $5 &write  $1 &error  $1
|20 @Screen     &vector $2 &width    $2 &height $2 &auto   $1 &pad    $1 &x      $2 &y      $2 &addr   $2 &pixel  $1 &sprite $1
|80 @Controller &vector $2 &button   $1 &key    $1
|90 @Mouse      &vector $2 &x        $2 &y      $2 &state  $1 &pad    $3 &scrollx $2 &scrolly $2
|a0 @File       &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name    $2 &length  $2 &read   $2 &write $2

( generics )

%+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
%<  { LTH }  %>  { GTH }  %!  { NEQ }
%-- { SUB2 } %** { MUL2 } %// { DIV2 }

%2*  { #10 SFT } %2/  { #01 SFT } %2**  { #10 SFT2 } %2//  { #01 SFT2 }
%4*  { #20 SFT } %4/  { #02 SFT } %4**  { #20 SFT2 } %4//  { #02 SFT2 }
%8*  { #30 SFT } %8/  { #03 SFT } %8**  { #30 SFT2 } %8//  { #03 SFT2 }
%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 }
%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 }

%IS-VALID { DUP #1f > SWP #7f < AND }
%IS-UC { DUP #40 > SWP #5b < AND }
%IS-LC { DUP #60 > SWP #7b < AND }
%IS-NUM { DUP #2f > SWP #3a < AND }
%IS-PUNC { DUP #2b > SWP #30 < AND }
%IS-SPACER   { #21 < } ( char -- flag )
%IS-LABEL    { STHk #40 EQU STHr #26 EQU ORA } ( char -- flag )
%NOT-LINEBREAK { STHk #0d NEQ STHr #0a NEQ AND } ( char -- flag )
%STANDARD-LB { DUP #0d EQU #03 MUL - }

%MIN2 { GTH2k JMP SWP2 POP2 }
%MAX2 { LTH2k JMP SWP2 POP2 }

%RELEASE-MOUSE { #0096 DEO }

%AUTO-NONE   { #00 .Screen/auto DEO }
%AUTO-X      { #01 .Screen/auto DEO }
%AUTO-Y      { #02 .Screen/auto DEO }
%AUTO-XY     { #03 .Screen/auto DEO }
%AUTO-ADDR   { #04 .Screen/auto DEO }
%AUTO-XADDR  { #05 .Screen/auto DEO }
%AUTO-YADDR  { #06 .Screen/auto DEO }
%AUTO-XYADDR { #07 .Screen/auto DEO }

%EOF { ;text .textarea/length LDZ2 ADD2 }
%SPACE-AVAILABLE { #fff0 .textarea/length LDZ2 ;text ADD2 -- }
%SELECTION-LENGTH { .selection/to LDZ2 .selection/from LDZ2 -- }
%RESET-SELECTION { .selection/from LDZ2 INC2k ;set-selection JSR2 POP }

( fast access for drawing )

%SCROLLBAR-X0 { #0000 } %SCROLLBAR-Y0 { #0018 } %SCROLLBAR-X1 { #0008 }
%TEXTAREA-X0 { #0010 } %TEXTAREA-Y0 { #0020 }

( variables )
|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|80 @Controller &vector $2 &button $1 &key $1
|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &scrollx $2 &scrolly $2
|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2

|0000



@@ 105,19 57,19 @@
	#15 .Screen/auto DEO

	( place textarea )
	TEXTAREA-X0 .textarea/x0 STZ2
	TEXTAREA-Y0 .textarea/y0 STZ2
	( TEXTAREA-X0 ) #0010 .textarea/x0 STZ2
	( TEXTAREA-Y0 ) #0020 .textarea/y0 STZ2
	.Screen/width DEI2 .textarea/x1 STZ2
	.Screen/height DEI2 .textarea/y1 STZ2
	.textarea/y1 LDZ2 TEXTAREA-Y0 -- 10// .textarea/lines STZ2
	.textarea/y1 LDZ2 ( TEXTAREA-Y0 ) #0020 SUB2 #04 SFT2 .textarea/lines STZ2
	( place scrollbar )
	SCROLLBAR-X0 .scrollbar/x0 STZ2
	SCROLLBAR-X1 .scrollbar/x1 STZ2
	SCROLLBAR-Y0 .scrollbar/y0 STZ2
	.Screen/height DEI2 #0008 -- .scrollbar/y1 STZ2
	.scrollbar/y1 LDZ2 SCROLLBAR-Y0 -- .scrollbar/height STZ2
	( SCROLLBAR-X0 ) #0000 .scrollbar/x0 STZ2
	( SCROLLBAR-X1 ) #0008 .scrollbar/x1 STZ2
	( SCROLLBAR-Y0 ) #0018 .scrollbar/y0 STZ2
	.Screen/height DEI2 #0008 SUB2 .scrollbar/y1 STZ2
	.scrollbar/y1 LDZ2 ( SCROLLBAR-Y0 ) #0018 SUB2 .scrollbar/height STZ2
	( place widget )
	.Screen/width DEI2 #0028 -- .widget/x0 STZ2
	.Screen/width DEI2 #0028 SUB2 .widget/x0 STZ2
	#0004 .widget/y0 STZ2

	( theme support )


@@ 141,7 93,7 @@ BRK
	;on-frame-trap .Screen/vector DEO2
	;on-button-trap .Controller/vector DEO2
	;on-mouse-trap .Mouse/vector DEO2
	RELEASE-MOUSE
	#00 .Mouse/state DEO

	( clear cursor )
	.cursor/x LDZ2 .Screen/x DEO2


@@ 155,7 107,7 @@ JMP2r
	;on-frame .Screen/vector DEO2
	;on-button .Controller/vector DEO2
	;on-mouse .Mouse/vector DEO2
	RELEASE-MOUSE
	#00 .Mouse/state DEO

	#01 ;draw-filepath JSR2



@@ 171,7 123,7 @@ JMP2r
		&no-start
	( end )
	.Console/read DEI
	DUP IS-VALID ,&no-end JCN
	DUP #1f GTH OVR #7f LTH AND ,&no-end JCN
		#00 ,&listening STR
		&no-end
	( capture )


@@ 183,8 135,8 @@ BRK
@on-button-trap ( -> )

	#00 ;draw-filepath JSR2
	.Controller/key DEI STANDARD-LB ,capture-trap JSR
	#01 ;draw-filepath JSR2
	.Controller/key DEI DUP #0d EQU #03 MUL SUB ,capture-trap JSR
	#06 ;draw-filepath JSR2

BRK



@@ 214,7 166,7 @@ BRK

	.state/timer LDZ
	DUP #07 AND ,&no-blink JCN
		DUP 8/ #01 AND 8* INC ;draw-filepath JSR2
		DUP #03 SFT #01 AND #30 SFT INC ;draw-filepath JSR2
		&no-blink
	INC .state/timer STZ



@@ 268,19 220,19 @@ BRK
	DUP #02 AND ;&alt JCN2
	( default )
	#04 SFT
	[ #01 ] NEQk NIP ,&no-u JCN ROT ROT #0002 -- ( LB ) #0a ;find-prev-char JSR2 INC2 JMP2r &no-u
	[ #01 ] NEQk NIP ,&no-u JCN ROT ROT #0002 SUB2 ( LB ) #0a ;find-prev-char JSR2 INC2 JMP2r &no-u
	[ #02 ] NEQk NIP ,&no-d JCN ROT ROT ( LB ) #0a ;find-next-char JSR2 INC2 JMP2r &no-d
	[ #04 ] NEQk NIP ,&no-l JCN ROT ROT #0001 -- JMP2r &no-l
	[ #04 ] NEQk NIP ,&no-l JCN ROT ROT #0001 SUB2 JMP2r &no-l
	[ #08 ] NEQk NIP ,&no-r JCN ROT ROT INC2 JMP2r &no-r
	&ctrl
	#04 SFT
	[ #01 ] NEQk NIP ,&no-cu JCN ROT ROT #0001 -- ( @ ) #40 ;find-prev-char JSR2 JMP2r &no-cu
	[ #01 ] NEQk NIP ,&no-cu JCN ROT ROT #0001 SUB2 ( @ ) #40 ;find-prev-char JSR2 JMP2r &no-cu
	[ #02 ] NEQk NIP ,&no-cd JCN ROT ROT INC2 ( @ ) #40 ;find-next-char JSR2 JMP2r &no-cd
	[ #04 ] NEQk NIP ,&no-cl JCN ROT ROT #0001 -- ( LB ) #0a ;find-prev-char JSR2 INC2 JMP2r &no-cl
	[ #04 ] NEQk NIP ,&no-cl JCN ROT ROT #0001 SUB2 ( LB ) #0a ;find-prev-char JSR2 INC2 JMP2r &no-cl
	[ #08 ] NEQk NIP ,&no-cr JCN ROT ROT ( LB ) #0a ;find-next-char JSR2 JMP2r &no-cr
	&alt
	#04 SFT
	[ #04 ] NEQk NIP ,&no-al JCN ROT ROT #0001 -- ( LB ) ;find-prev-special JSR2 JMP2r &no-al
	[ #04 ] NEQk NIP ,&no-al JCN ROT ROT #0001 SUB2 ( LB ) ;find-prev-special JSR2 JMP2r &no-al
	[ #08 ] NEQk NIP ,&no-ar JCN ROT ROT INC2 ( LB ) ;find-next-special JSR2 INC2 JMP2r &no-ar
	ROT ROT



@@ 327,7 279,7 @@ BRK
	[ #08 ] NEQk NIP ,&no-erase JCN POP ;erase JSR2 BRK &no-erase
	[ #7f ] NEQk NIP ,&no-delete JCN POP ;delete JSR2 BRK &no-delete
	[ #1b ] NEQk NIP ,&no-escape JCN POP ;reset-selection JSR2 BRK &no-escape
	STANDARD-LB	;insert JSR2
	DUP #0d EQU #03 MUL SUB ;insert JSR2

BRK



@@ 348,7 300,7 @@ BRK
	( touch )
	.Mouse/y DEI2 #0018 LTH2 ,&skip JCN
		.Mouse/x DEI2 #0010 GTH2 ;on-mouse-textarea JCN2
		.Mouse/x DEI2 SCROLLBAR-X1 LTH2 ;on-mouse-scrollbar JCN2
		.Mouse/x DEI2 ( SCROLLBAR-X1 ) #0008 LTH2 ;on-mouse-scrollbar JCN2
		&skip
	( release-record )
	#00 .Mouse/state DEO


@@ 370,7 322,7 @@ BRK
			&no-shift
		[ #02 ] NEQk NIP ,&no-alt JCN
			POP ;select-word JSR2
			RELEASE-MOUSE ,&no-down JMP
			#00 .Mouse/state DEO ,&no-down JMP
			&no-alt
		POP
		;select-start JSR2


@@ 378,12 330,12 @@ BRK
	( mouse2 )
	DUP2 #0200 NEQ2 ,&no-down2 JCN
		,touch-to-addr JSR ;select-word JSR2
		RELEASE-MOUSE
		#00 .Mouse/state DEO
		&no-down2
	( mouse3 )
	DUP2 #0400 NEQ2 ,&no-down3 JCN
		;capture-leap JSR2
		RELEASE-MOUSE
		#00 .Mouse/state DEO
		&no-down3
	POP2
	STHr ,&last STR


@@ 393,7 345,7 @@ BRK
@touch-to-addr ( -- addr* )

	( goto y )
	( b ) .Mouse/y DEI2 TEXTAREA-Y0 -- 10// NIP STH
	( b ) .Mouse/y DEI2 ( TEXTAREA-Y0 ) #0020 SUB2 #04 SFT2 NIP STH
	( a ) LITr 00
	.scroll/addr LDZ2
	&ver


@@ 403,7 355,7 @@ BRK
	&ver-end
	POP2r
	( goto x )
	( b ) .Mouse/x DEI2 .scroll/x LDZ2 ADD2 TEXTAREA-X0 -- STH2
	( b ) .Mouse/x DEI2 .scroll/x LDZ2 ADD2 ( TEXTAREA-X0 ) #0010 SUB2 STH2
	( a ) LIT2r 0000
	&hor
		LDAk #0a EQU ,&hor-end JCN


@@ 424,7 376,7 @@ JMP2r
		OVR2 .scroll/drag STZ2
		&no-down
	DUP2 #0101 NEQ2 ,&no-drag JCN
		OVR2 .scroll/drag LDZ2 -- .scroll/ratio LDZ2 ** ,scroll-by JSR
		OVR2 .scroll/drag LDZ2 SUB2 .scroll/ratio LDZ2 MUL2 ,scroll-by JSR
		OVR2 .scroll/drag STZ2
		&no-drag
	( mouse3 )


@@ 432,7 384,7 @@ JMP2r
		OVR2 .scroll/drag STZ2
		&no-down2
	DUP2 #0404 NEQ2 ,&no-drag2 JCN
		OVR2 .scroll/drag LDZ2 -- ,scroll-by JSR
		OVR2 .scroll/drag LDZ2 SUB2 ,scroll-by JSR
		OVR2 .scroll/drag STZ2
		&no-drag2
	POP2


@@ 440,7 392,7 @@ JMP2r
	.scrollbar/y1 LDZ2 LTH2 ,&no-toggle JCN
	.Mouse/state DEI #00 EQU ,&no-toggle JCN
		;toggle-direction JSR2
		RELEASE-MOUSE
		#00 .Mouse/state DEO
		&no-toggle
	STHr ,&last STR



@@ 454,7 406,7 @@ BRK
	DUP2 #8000 GTH2 ,&upward JCN
		.scroll/y LDZ2 ADD2 ,scroll-to JSR JMP2r
		&upward
	DUP2 #0000 SWP2 -- .scroll/y LDZ2 GTH2 ,&top JCN
	DUP2 #0000 SWP2 SUB2 .scroll/y LDZ2 GTH2 ,&top JCN
		.scroll/y LDZ2 ADD2 ,scroll-to JSR JMP2r
		&top
	&end


@@ 491,7 443,7 @@ JMP2r
@capture-leap ( -- )

	;leap/buf #0010 ;mclr JSR2
	.selection/from LDZ2 ;leap/buf [ SELECTION-LENGTH #0010 MAX2 ] ;mcpy JSR2
	.selection/from LDZ2 ;leap/buf [ .selection/to LDZ2 .selection/from LDZ2 SUB2 #0010 LTH2k JMP SWP2 POP2 ] ;mcpy JSR2

@leap-jump ( -- )



@@ 500,7 452,7 @@ JMP2r
	( direction )
	.leap/direction LDZ ,&look-up JCN
		.selection/from LDZ2 ;leap/buf ;find-next-str JSR2
			( no result ) DUP2 EOF EQU2 ,&end JCN
			( no result ) DUP2 ( EOF ) ;text .textarea/length LDZ2 ADD2 EQU2 ,&end JCN
			DUP2 DUP2 [ ;leap/buf ;slen JSR2 ] ADD2 ;select-range JSR2
		,&end JMP
	&look-up


@@ 529,7 481,7 @@ JMP2r
@set-scroll-y ( line* -- )

	( reset ratio )
	#0001 ;get-lines JSR2 .scrollbar/height LDZ2 // NIP #40 SFT SFT2 .scroll/ratio STZ2
	#0001 ;get-lines JSR2 .scrollbar/height LDZ2 DIV2 NIP #40 SFT SFT2 .scroll/ratio STZ2

	DUP2 .scroll/y LDZ2 EQU2 ,&skip JCN
		DUP2 .scroll/y STZ2


@@ 556,7 508,7 @@ JMP2r
@addr-to-x ( addr* -- x* )

	LIT2r 0000
	DUP2 #0001 -- #0a ;find-prev-char JSR2 INC2
	DUP2 #0001 SUB2 #0a ;find-prev-char JSR2 INC2
	&loop
		EQU2k ,&end JCN
		DUP2 ;scan-font JSR2 LDA #00 SWP .textarea/font LDZ2 ADD2 LDA #00 SWP STH2 ADD2r


@@ 583,9 535,9 @@ JMP2r

	;clear-textarea JSR2
	( scroll-x )
	.selection/to LDZ2 #0001 -- ,addr-to-x JSR
	DUP2 .textarea/x1 LDZ2 .scroll/x LDZ2 ADD2 #0020 -- LTH2 ,&no-right JCN
		DUP2 .textarea/x1 LDZ2 #0020 -- -- ;set-scroll-x JSR2
	.selection/to LDZ2 #0001 SUB2 ,addr-to-x JSR
	DUP2 .textarea/x1 LDZ2 .scroll/x LDZ2 ADD2 #0020 SUB2 LTH2 ,&no-right JCN
		DUP2 .textarea/x1 LDZ2 #0020 SUB2 SUB2 ;set-scroll-x JSR2
		&no-right
	DUP2 .scroll/x LDZ2 GTH2 ,&no-left JCN
		DUP2 ;set-scroll-x JSR2


@@ 594,7 546,7 @@ JMP2r
	( scroll-y )
	.selection/to LDZ2 ,addr-to-line JSR
	DUP2 .scroll/y LDZ2 .textarea/lines LDZ2 ADD2 LTH2 ,&no-below JCN
		DUP2 .scroll/y LDZ2 .textarea/lines LDZ2 ADD2 --
		DUP2 .scroll/y LDZ2 .textarea/lines LDZ2 ADD2 SUB2
		.scroll/y LDZ2 INC2 ADD2 ;set-scroll-y JSR2
		&no-below
	DUP2 .scroll/y LDZ2 GTH2 ,&no-above JCN


@@ 648,12 600,12 @@ JMP2r

	( from )
	SWP2
	;text MIN2 EOF STH2k MAX2
	;text GTH2k JMP SWP2 POP2 ( EOF ) ;text .textarea/length LDZ2 ADD2 STH2k LTH2k JMP SWP2 POP2
		DUP2 .selection/from LDZ2 NEQ2 ,&from STR
		.selection/from STZ2
	( to )
	;text MIN2 STH2r MAX2
		.selection/from LDZ2 INC2 MIN2
	;text GTH2k JMP SWP2 POP2 STH2r LTH2k JMP SWP2 POP2
		.selection/from LDZ2 INC2 GTH2k JMP SWP2 POP2
		DUP2 .selection/to LDZ2 NEQ2 ,&to STR
		.selection/to STZ2
	( changed )


@@ 663,25 615,25 @@ JMP2r

@erase-selection ( -- )

	SELECTION-LENGTH .selection/from LDZ2 SWP2 STH2k ADD2 EOF STH2r ;shiftl JSR2
	.selection/to LDZ2 .selection/from LDZ2 SUB2 .selection/from LDZ2 SWP2 STH2k ADD2 ( EOF ) ;text .textarea/length LDZ2 ADD2 STH2r ;shiftl JSR2

JMP2r

@insert ( char -- )

	SPACE-AVAILABLE #0000 GTH2 ,&valid JCN
	( space ) #fff0 .textarea/length LDZ2 ;text ADD2 SUB2 #0000 GTH2 ,&valid JCN
		POP JMP2r
		&valid

	;clear-textarea JSR2

	SELECTION-LENGTH #0001 EQU2 ,&no-block JCN
	.selection/to LDZ2 .selection/from LDZ2 SUB2 #0001 EQU2 ,&no-block JCN
		;erase-selection JSR2
		RESET-SELECTION
		.selection/from LDZ2 INC2k ;set-selection JSR2 POP
		&no-block

	.selection/from LDZ2
		DUP2 EOF #0001 ;shiftr JSR2
		DUP2 ( EOF ) ;text .textarea/length LDZ2 ADD2 #0001 ;shiftr JSR2
		STH2k STA
	STH2r INC2 ;select-start JSR2
	;draw-widget/memory JSR2


@@ 694,32 646,32 @@ JMP2r

	;clear-textarea JSR2

	SELECTION-LENGTH #0001 EQU2 ,&no-block JCN
	.selection/to LDZ2 .selection/from LDZ2 SUB2 #0001 EQU2 ,&no-block JCN
		;erase-selection JSR2
		;reset-selection JSR2
		JMP2r
		&no-block

	.selection/from LDZ2
		DUP2 EOF #0001 ;shiftl JSR2
		#0001 -- ;select-start JSR2
		DUP2 ( EOF ) ;text .textarea/length LDZ2 ADD2 #0001 ;shiftl JSR2
		#0001 SUB2 ;select-start JSR2
	;draw-widget/memory JSR2

JMP2r

@delete ( -- )

	EOF .selection/from LDZ2 -- #0000 NEQ2 JMP JMP2r
	( EOF ) ;text .textarea/length LDZ2 ADD2 .selection/from LDZ2 SUB2 #0000 NEQ2 JMP JMP2r

	;clear-textarea JSR2

	SELECTION-LENGTH #0001 EQU2 ,&no-block JCN
	.selection/to LDZ2 .selection/from LDZ2 SUB2 #0001 EQU2 ,&no-block JCN
		;erase-selection JSR2
		;reset-selection JSR2
		JMP2r
		&no-block

	.selection/from LDZ2 INC2 EOF #0001 ;shiftl JSR2
	.selection/from LDZ2 INC2 ( EOF ) ;text .textarea/length LDZ2 ADD2 #0001 ;shiftl JSR2
	;draw-textarea JSR2
	;draw-widget/memory JSR2



@@ 730,11 682,11 @@ JMP2r
@find-prev-str ( from* target* -- )

	STH2
	#0001 --
	#0001 SUB2
	&while
		DUP2 ;text EQU2 ,&end JCN
		DUP2 STH2kr SWP2 ;scmp-seg JSR2 ,&end JCN
		#0001 -- LDAk ,&while JCN
		#0001 SUB2 LDAk ,&while JCN
	INC2
	&end
	POP2r


@@ 759,7 711,7 @@ JMP2r
	&while
		DUP2 ;text EQU2 ,&end JCN
		LDAk STHkr EQU ,&end JCN
		#0001 -- LDAk ,&while JCN
		#0001 SUB2 LDAk ,&while JCN
	INC2
	&end
	POPr


@@ 781,13 733,13 @@ JMP2r

	&while
		DUP2 ;text EQU2 ,&end JCN
		LDAk IS-UC ,&valid JCN
		LDAk IS-LC ,&valid JCN
		LDAk IS-NUM ,&valid JCN
		LDAk IS-PUNC ,&valid JCN
		LDAk DUP #40 GTH SWP #5b LTH AND ,&valid JCN
		LDAk DUP #60 GTH SWP #7b LTH AND ,&valid JCN
		LDAk DUP #2f GTH SWP #3a LTH AND ,&valid JCN
		LDAk DUP #2b GTH SWP #30 LTH AND ,&valid JCN
		JMP2r
		&valid
		#0001 -- LDAk ,&while JCN
		#0001 SUB2 LDAk ,&while JCN
	&end

JMP2r


@@ 795,10 747,10 @@ JMP2r
@find-next-special ( addr* -- addr* )

	&while
		LDAk IS-UC ,&valid JCN
		LDAk IS-LC ,&valid JCN
		LDAk IS-NUM ,&valid JCN
		LDAk IS-PUNC ,&valid JCN
		LDAk DUP #40 GTH SWP #5b LTH AND ,&valid JCN
		LDAk DUP #60 GTH SWP #7b LTH AND ,&valid JCN
		LDAk DUP #2f GTH SWP #3a LTH AND ,&valid JCN
		LDAk DUP #2b GTH SWP #30 LTH AND ,&valid JCN
		JMP2r
		&valid
		INC2 LDAk ,&while JCN


@@ 810,11 762,11 @@ JMP2r
@shiftr ( from* to* len* -- )

	STH2
	SWP2 #0001 -- SWP2
	SWP2 #0001 SUB2 SWP2
	&loop
		DUP2 LDAk
		ROT ROT STH2kr ADD2 STA
		#0001 -- LTH2k ,&loop JCN
		#0001 SUB2 LTH2k ,&loop JCN
	POP2 POP2
	.textarea/length LDZ2k STH2r ADD2 ROT STZ2
	#02 ;draw-state JSR2


@@ 827,10 779,10 @@ JMP2r
	INC2 SWP2
	&loop
		DUP2 LDAk
		ROT ROT STH2kr -- STA
		ROT ROT STH2kr SUB2 STA
		INC2 GTH2k ,&loop JCN
	POP2 POP2
	.textarea/length LDZ2k STH2r -- ROT STZ2
	.textarea/length LDZ2k STH2r SUB2 ROT STZ2
	#02 ;draw-state JSR2

JMP2r


@@ 865,9 817,9 @@ JMP2r
@draw-widget ( -- )

	&scroll .scroll/y LDZ2 #01 ,draw-short JSR JMP2r
	&selection .selection/from LDZ2 ;text -- #01 ,draw-short JSR JMP2r
	&size SELECTION-LENGTH #09 ,draw-short JSR JMP2r
	&memory SPACE-AVAILABLE #01 ,draw-short JSR JMP2r
	&selection .selection/from LDZ2 ;text SUB2 #01 ,draw-short JSR JMP2r
	&size .selection/to LDZ2 .selection/from LDZ2 SUB2 #09 ,draw-short JSR JMP2r
	&memory ( space ) #fff0 .textarea/length LDZ2 ;text ADD2 SUB2 #01 ,draw-short JSR JMP2r

JMP2r



@@ 889,8 841,8 @@ JMP2r

@init-textarea ( -- )

	TEXTAREA-X0 .scroll/x LDZ2 -- .Screen/x DEO2
	TEXTAREA-Y0 .Screen/y DEO2
	( TEXTAREA-X0 ) #0010 .scroll/x LDZ2 SUB2 .Screen/x DEO2
	( TEXTAREA-Y0 ) #0020 .Screen/y DEO2
	#15 .Screen/auto DEO
	#00 .textarea/commented STZ



@@ 906,7 858,7 @@ JMP2r
		LDAk #00 ;draw-ufx JSR2
		( linebreak )
		LDAk #0a NEQ ,&no-lb JCN
			.Screen/y DEI2 TEXTAREA-X0 ADD2 .textarea/y1 LDZ2 GTH2 ,&end JCN
			.Screen/y DEI2 ( TEXTAREA-X0 ) #0010 ADD2 .textarea/y1 LDZ2 GTH2 ,&end JCN
			&no-lb
		INC2 LDAk ,&while JCN
	&end


@@ 925,7 877,7 @@ JMP2r
		STH2k LDAk .textarea/color LDZ #09 STH2r ,is-selected JSR JMP SWP POP ;draw-ufx JSR2
		( linebreak )
		LDAk #0a NEQ ,&no-lb JCN
			.Screen/y DEI2 TEXTAREA-X0 ADD2 .textarea/y1 LDZ2 GTH2 ,&end JCN
			.Screen/y DEI2 ( TEXTAREA-X0 ) #0010 ADD2 .textarea/y1 LDZ2 GTH2 ,&end JCN
			&no-lb
		INC2 LDAk ,&while JCN
	&end


@@ 937,7 889,7 @@ JMP2r
@is-selected ( addr* -- bool )

	DUP2 .selection/from LDZ2 LTH2 ,&unselected JCN
	DUP2 .selection/to LDZ2 #0001 -- GTH2 ,&unselected JCN
	DUP2 .selection/to LDZ2 #0001 SUB2 GTH2 ,&unselected JCN
		POP2 #00 JMP2r
	&unselected
		POP2 #01


@@ 948,8 900,8 @@ JMP2r

	.textarea/highlight LDZ ,&default JCN
	.textarea/commented LDZ ,&comment JCN
	DUP2 #0001 -- LDA IS-SPACER JMP JMP2r
	LDAk IS-LABEL ,&label JCN
	DUP2 #0001 SUB2 LDA #21 LTH JMP JMP2r
	LDAk STHk #40 EQU STHr #26 EQU ORA ,&label JCN
	LDAk LIT '~ EQU ,&include JCN
	&default #01 .textarea/color STZ JMP2r
	&label #02 .textarea/color STZ JMP2r


@@ 966,15 918,15 @@ JMP2r
		#01 .textarea/commented STZ
		,&default JMP
		&no-paren-open
	DUP2 #0001 -- LDA #29 NEQ ,&no-paren-close JCN
	DUP2 #0001 SUB2 LDA #29 NEQ ,&no-paren-close JCN
		#00 .textarea/commented STZ
		,&resume JMP
		&no-paren-close
	DUP2 #0001 -- LDA IS-SPACER JMP JMP2r
	DUP2 #0001 SUB2 LDA #21 LTH JMP JMP2r
	.textarea/commented LDZ ,&end JCN
	&resume
	LDAk #40 < ,&bold JCN
	LDAk IS-LABEL ,&bold JCN
	LDAk #40 LTH ,&bold JCN
	LDAk STHk #40 EQU STHr #26 EQU ORA ,&bold JCN
	&default
		;font-data-regular .textarea/font STZ2 JMP2r
	&bold


@@ 999,12 951,12 @@ JMP2r
@draw-ufx ( char color -- )

	,&color STR
	DUP #7f > ,draw-special JCN
	DUP #20 < ,draw-special JCN
	DUP #7f GTH ,draw-special JCN
	DUP #20 LTH ,draw-special JCN
	#00 SWP STH2
	.textarea/font LDZ2
	( width ) DUP2 STH2kr ADD2 LDA
	( addr* ) ROT ROT STH2r #0020 -- 20** ADD2 #0080 ADD2
	( addr* ) ROT ROT STH2r #0020 SUB2 #50 SFT2 ADD2 #0080 ADD2
	
&seg ( width addr* -- )



@@ 1024,7 976,7 @@ JMP2r
	[ #0a ] NEQk NIP ,&no-linebreak JCN
		POP #08 ;linebreak-icn ,draw-ufx/seg JSR
		.Screen/y DEI2 #0010 ADD2 .Screen/y DEO2
		TEXTAREA-X0 .scroll/x LDZ2 -- .Screen/x DEO2
		( TEXTAREA-X0 ) #0010 .scroll/x LDZ2 SUB2 .Screen/x DEO2
		JMP2r
		&no-linebreak
	POP #08 ;unknown-icn ,draw-ufx/seg JSR


@@ 1033,28 985,28 @@ JMP2r

@draw-scrollbar ( -- )

	SCROLLBAR-X0 .Screen/x DEO2
	SCROLLBAR-Y0 .Screen/y DEO2
	( SCROLLBAR-X0 ) #0000 .Screen/x DEO2
	( SCROLLBAR-Y0 ) #0018 .Screen/y DEO2

	AUTO-Y
	#02 .Screen/auto DEO
	( bg )
	;scrollbar-icns/bg .Screen/addr DEO2
	.scrollbar/height LDZ2 8// NIP #00
	.scrollbar/height LDZ2 #03 SFT2 NIP #00
	&loop
		#04 .Screen/sprite DEO
		INC GTHk ,&loop JCN
	POP2
	( fg )
	;scrollbar-icns/fg .Screen/addr DEO2
	SCROLLBAR-Y0 STH2k [ .scroll/y LDZ2 .scroll/ratio LDZ2 STH2k // ] ADD2 .Screen/y DEO2
	.scrollbar/y1 LDZ2 [ ;get-lines JSR2 STH2r // ] -- STH2r -- 8// NIP INC #00
	( SCROLLBAR-Y0 ) #0018 STH2k [ .scroll/y LDZ2 .scroll/ratio LDZ2 STH2k DIV2 ] ADD2 .Screen/y DEO2
	.scrollbar/y1 LDZ2 [ ;get-lines JSR2 STH2r DIV2 ] SUB2 STH2r SUB2 #03 SFT2 NIP INC #00
	&stretch
		#05 .Screen/sprite DEO
		INC GTHk ,&stretch JCN
	POP2
	( direction )
	.scrollbar/y1 LDZ2 .Screen/y DEO2
	;scrollbar-icns/dd #00 .leap/direction LDZ 8** ADD2 .Screen/addr DEO2
	;scrollbar-icns/dd #00 .leap/direction LDZ #30 SFT2 ADD2 .Screen/addr DEO2
	#01 .Screen/sprite DEO
	#15 .Screen/auto DEO



@@ 1096,7 1048,7 @@ JMP2r
	#00 ;draw-filepath JSR2
	;clear-textarea JSR2
	( clear )
	;text #fff8 OVR2 -- ;mclr JSR2
	;text #fff8 OVR2 SUB2 ;mclr JSR2
	#0000 .textarea/length STZ2
	( rename to untitled.txt )
	;untitled-txt ;filepath ;scpy JSR2


@@ 1116,14 1068,14 @@ JMP2r

	#00 ;draw-filepath JSR2
	;filepath #0040 ;mclr JSR2
	.selection/from LDZ2 ;filepath [ SELECTION-LENGTH #0040 MAX2 ] ;mcpy JSR2
	.selection/from LDZ2 ;filepath [ .selection/to LDZ2 .selection/from LDZ2 SUB2 #0040 LTH2k JMP SWP2 POP2 ] ;mcpy JSR2

@load-file ( -- )

	;clear-textarea JSR2
	;text #ffff OVR2 -- ;mclr JSR2
	;text #ffff OVR2 SUB2 ;mclr JSR2
	;filepath .File/name DEO2
	#fff0 ;text -- .File/length DEO2
	#fff0 ;text SUB2 .File/length DEO2
	;text .File/read DEO2
	.File/success DEI2 .textarea/length STZ2
	;reset-selection JSR2


@@ 1157,7 1109,7 @@ JMP2r

@copy-snarf ( -- )

	SELECTION-LENGTH STH2k #0001 GTH2 ,&continue JCN
	.selection/to LDZ2 .selection/from LDZ2 SUB2 STH2k #0001 GTH2 ,&continue JCN
		POP2r JMP2r
		&continue



@@ 1171,12 1123,12 @@ JMP2r

	;clear-textarea JSR2
	;erase-selection JSR2
	( push right ) .selection/from LDZ2 EOF SPACE-AVAILABLE STH2k ;shiftr JSR2
	( push right ) .selection/from LDZ2 ( EOF ) ;text .textarea/length LDZ2 ADD2 ( space ) #fff0 .textarea/length LDZ2 ;text ADD2 SUB2 STH2k ;shiftr JSR2
	;snarf-txt .File/name DEO2
	STH2kr .File/length DEO2
	.selection/from LDZ2 .File/read DEO2
	( pull left ) .selection/from LDZ2 STH2kr ADD2 EOF STH2r .File/success DEI2 -- ;shiftl JSR2
	( cap ) #00 EOF STA
	( pull left ) .selection/from LDZ2 STH2kr ADD2 ( EOF ) ;text .textarea/length LDZ2 ADD2 STH2r .File/success DEI2 SUB2 ;shiftl JSR2
	( cap ) #00 ( EOF ) ;text .textarea/length LDZ2 ADD2 STA
	.selection/from LDZ2 .File/success DEI2 ADD2 ;select-start JSR2

JMP2r


@@ 1188,7 1140,7 @@ JMP2r

@slen ( str* -- len* )

	DUP2 ,scap JSR SWP2 --
	DUP2 ,scap JSR SWP2 SUB2

JMP2r



@@ 1209,7 1161,7 @@ JMP2r

	LDAk ,&no-null JCN
		POP2 JMP2r &no-null
	#00 ROT ROT ,scap JSR #0001 -- STA
	#00 ROT ROT ,scap JSR #0001 SUB2 STA

JMP2r



@@ 1267,7 1219,7 @@ JMP2r

@line-hor ( x0* x1* y* -- )

	AUTO-X
	#01 .Screen/auto DEO
	.Screen/y DEO2 SWP2
	&loop
		DUP #01 AND .Screen/pixel DEO


@@ 1299,12 1251,633 @@ JMP2r

@print ( short* -- )

	&short ( short* -- ) SWP ,&byte JSR
	SWP ,&byte JSR
	&byte ( byte -- ) DUP #04 SFT ,&char JSR
	&char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO

JMP2r

~src/assets.tal
@cursor-icn
	80c0 e0f0 f8e0 1000
@tab-icn
	0000 0000 0000 1008 1000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
@linebreak-icn
	0000 0000 0000 1028 1000 0000 0000 0000
@unknown-icn
	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
@state-icns
	ffff ffff ffff ffff ffef c783 c7ef ffff
@scrollbar-icns
	&fg ffff ffff ffff ffff
	&bg 55aa 55aa 55aa 55aa
	&dd
		ffff efef 83c7 efff
		ffff efc7 83ef efff

@font-data-regular ( sans10-regular )
	0000 0808 0808 0808 0810 0808 0808 0808
	0808 0808 0808 0808 0808 0808 0808 0808
	0404 0509 070a 0903 0505 0707 0405 0406
	0808 0808 0808 0808 0808 0404 0708 0706
	0a09 0708 0807 0708 0804 0607 070b 0809
	0709 0707 0708 090b 0807 0804 0604 0707
	0407 0706 0707 0507 0703 0406 030b 0707
	0707 0506 0607 070b 0707 0605 0505 0808
	&glyphs
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0020 2020 2020 0020 2000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 5050 5000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0009 093f 1212 7f24 2400 0000 0000
	0000 0000 0080 0000 0000 0000 0000 0000
	0000 103c 5050 3814 1414 7810 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0031 494a 340b 1424 2300 0000 0000
	0000 0000 0000 0000 8080 0000 0000 0000
	0000 0018 2428 102a 444a 3100 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 4040 4000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 1020 2040 4040 4020 2010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 4020 2010 1010 1020 2040 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0028 107c 1028 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0010 107c 1010 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0020 2040 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0070 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0020 2000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0008 0810 1020 2040 4000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 4242 4242 4242 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0008 3808 0808 0808 0800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 4202 0408 1020 7e00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 4202 1c02 0242 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0004 0c14 2444 7e04 0400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 4040 7c02 0202 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001c 2040 7c42 4242 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007e 0204 0808 1010 1000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 4242 3c42 4242 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 4242 423e 0204 3800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0020 2000 0020 2000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0020 2000 0020 2040 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0004 1860 1804 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 7e00 7e00 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0040 300c 3040 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0070 0808 1020 0020 2000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 1e21 4c52 5649 201c 0000 0000
	0000 0000 0000 8080 8000 0000 0000 0000
	0000 0008 0814 1422 3e41 4100 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4444 7844 4444 7800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001e 2040 4040 4020 1e00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4442 4242 4244 7800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 4040 7840 4040 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 4040 7840 4040 4000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001e 2040 4046 4222 1e00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0042 4242 7e42 4242 4200 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0020 2020 2020 2020 2000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0008 0808 0808 0808 7000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4850 6060 5048 4400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4040 4040 4040 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 6051 514a 4a44 4400 0000 0000
	0000 00c0 c040 4040 4040 4000 0000 0000
	0000 0062 6252 524a 4a46 4600 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001c 2241 4141 4122 1c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4444 4478 4040 4000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001c 2241 4141 4122 1c04 0200 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4444 4870 4844 4400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 4040 3008 0404 7800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 1010 1010 1010 1000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0042 4242 4242 4242 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0041 4122 2214 1408 0800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4444 242a 2a11 1100 0000 0000
	0000 0040 4040 8080 8000 0000 0000 0000
	0000 0042 2424 1818 2424 4200 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0082 4444 2810 1010 1000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 0408 1010 2040 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 6040 4040 4040 4040 4060 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4020 2010 1008 0800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 6020 2020 2020 2020 2060 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1028 2844 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 007e 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 4020 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0038 043c 444c 3400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4058 6444 4444 7800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0038 4040 4040 3800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0004 043c 4444 444c 3400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0038 447c 4040 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0018 2070 2020 2020 2000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003c 4444 444c 3404 3800 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4058 6444 4444 4400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 0040 4040 4040 4000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0020 0020 2020 2020 2020 c000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4048 5060 5048 4800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4040 4040 4040 4000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0059 6644 4444 4400 0000 0000
	0000 0000 0080 4040 4040 4000 0000 0000
	0000 0000 0058 6444 4444 4400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0038 4444 4444 3800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0058 6444 4444 7840 4000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003c 4444 444c 3404 0400 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0050 6040 4040 4000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0038 4060 1808 7000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 2078 2020 2020 1800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0044 4444 444c 3400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0044 4428 2810 1000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0044 442a 2a11 1100 0000 0000
	0000 0000 0040 4080 8000 0000 0000 0000
	0000 0000 0044 2810 1028 4400 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0044 4428 2810 1020 4000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0078 0810 2040 7800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 1020 2020 4020 2020 2010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 2020 2020 2020 2020 2020 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 4020 2020 1020 2020 2040 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0032 4c00 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000

@font-data-bold ( sans10-bold )
	0000 0808 0808 0808 0810 0808 0808 0808
	0808 0808 0808 0808 0808 0808 0808 0808
	0405 070a 070e 0a04 0606 0707 0505 0507
	0808 0808 0807 0808 0808 0505 0707 0707
	0c0a 0808 0907 0709 0904 0609 070c 080a
	080a 0807 0809 0a0d 0909 0806 0706 0707
	0508 0807 0808 0608 0804 0508 040c 0808
	0808 0606 0608 080c 0909 0706 0606 0808
	&glyphs
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0030 3030 3030 0030 3000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 6c6c 2400 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 000d 0d3f 1b1b 7f36 3600 0000 0000
	0000 0080 80c0 0000 8000 0000 0000 0000
	0000 103c 6060 783c 0c0c 7810 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 6c6d 3b03 060c 1800 0000 0000
	0000 0060 c080 0070 d8d8 7000 0000 0000
	0000 001c 3636 1c3d 6767 3d00 0000 0000
	0000 0000 0000 0080 0000 8000 0000 0000
	0000 6060 2000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 1830 3060 6060 6030 3018 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 6030 3018 1818 1830 3060 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0028 107c 1028 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0010 107c 1010 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0030 3010 2000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0070 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0030 3000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 000c 0c18 1830 3060 6000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 6666 6666 6666 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0018 3818 1818 1818 1800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 6606 0c18 3060 7e00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 6606 1c06 0666 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 000c 1c2c 4c7e 0c0c 0c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 6060 780c 0c0c 7800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001c 3060 7c66 6666 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007e 060c 0c18 1818 1800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 6666 3c66 6666 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 6666 663e 060c 3800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0030 3000 0030 3000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0030 3000 0030 3010 2000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 000c 3860 380c 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 7c00 7c00 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0060 380c 3860 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 0c0c 3830 0030 3000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 1f30 666b 6b6d 301f 0000 0000
	0000 0000 80c0 6060 60c0 0000 0000 0000
	0000 000c 0c1e 1633 3f61 6100 0000 0000
	0000 0000 0000 0000 0080 8000 0000 0000
	0000 007c 6666 7c66 6666 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001e 3060 6060 6030 1e00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 6663 6363 6366 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 6060 7860 6060 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 6060 7860 6060 6000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001f 3060 6067 6333 1f00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0063 6363 7f63 6363 6300 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 6060 6060 6060 6000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0018 1818 1818 1818 7000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0063 666c 7878 6c66 6300 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 6060 6060 6060 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0070 7859 5d4e 4e44 4400 0000 0000
	0000 00e0 e060 6060 6060 6000 0000 0000
	0000 0042 6272 7a5e 4e46 4200 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001e 3361 6161 6133 1e00 0000 0000
	0000 0000 0080 8080 8000 0000 0000 0000
	0000 007c 6666 667c 6060 6000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001e 3361 6161 6133 1e06 0300 0000
	0000 0000 0080 8080 8000 0000 0000 0000
	0000 007c 6666 6c78 6c66 6600 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 003c 6070 381c 0c0c 7800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007e 1818 1818 1818 1800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0063 6363 6363 6372 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0061 6131 331a 1e0c 0c00 0000 0000
	0000 0080 8000 0000 0000 0000 0000 0000
	0000 0063 6363 3535 3d18 1800 0000 0000
	0000 0010 1010 a0a0 e0c0 c000 0000 0000
	0000 0063 6336 1c1c 3663 6300 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0071 311a 1e0c 0c0c 0c00 0000 0000
	0000 0080 0000 0000 0000 0000 0000 0000
	0000 007e 060c 1818 3060 7e00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 7860 6060 6060 6060 6078 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 6030 3018 180c 0c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 7818 1818 1818 1818 1878 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1038 286c 4400 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 007e 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 6010 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003c 063e 666e 3600 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 606c 7666 6666 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003c 6060 6060 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0006 063e 6666 6666 3a00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003c 667e 6060 3e00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 001c 3078 3030 3030 3000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003e 6666 666e 3606 3c00 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 606c 7666 6666 6600 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 0060 6060 6060 6000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0030 0030 3030 3030 3030 e000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 6066 6c78 786c 6600 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 6060 6060 6060 6000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 006c 7766 6666 6600 0000 0000
	0000 0000 00c0 6060 6060 6000 0000 0000
	0000 0000 006c 7666 6666 6600 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003c 6666 6666 3c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 006c 7666 6666 7c60 6000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 003e 6666 666e 3606 0600 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0068 7860 6060 6000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0038 6070 3818 7000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 3078 3030 3030 1800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0066 6666 666e 3600 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0066 6634 3c18 1800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0066 6636 3f19 1900 0000 0000
	0000 0000 0060 60c0 c080 8000 0000 0000
	0000 0000 0073 361c 1c36 6700 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0063 6336 341c 1818 7000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 007c 0c18 3060 7c00 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 1830 3030 3060 3030 3030 1800 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 3030 3030 3030 3030 3030 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 6030 3030 3018 3030 3030 6000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 325a 4c00 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000

@font-data-fixed ( monaco12 )
	0000 0707 0707 0707 070e 0707 0707 0707
	0707 0707 0707 0707 0707 0707 0707 0707
	0707 0707 0707 0707 0707 0707 0707 0707
	0707 0707 0707 0707 0707 0707 0707 0707
	0707 0707 0707 0707 0707 0707 0707 0707
	0707 0707 0707 0707 0707 0707 0707 0707
	0707 0707 0707 0707 0707 0707 0707 0707
	0707 0707 0707 0707 0707 0707 0707 0707
	&glyphs
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1010 1010 1000 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0028 2828 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0028 7c28 287c 2800 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 1038 5450 3018 1414 5438 1000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0024 5458 3810 2834 5448 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0060 9090 a040 a094 8874 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1010 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0810 1020 2020 2020 1010 0800 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 2010 1008 0808 0808 1010 2000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 5438 3854 1000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0010 107c 1010 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 1010 1020 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 7c00 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0004 0408 0810 1020 2040 4000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4444 4444 4444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 3010 1010 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4404 0408 1020 407c 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4404 1804 0404 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0008 1828 487c 0808 0808 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 4040 7804 0404 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0018 2040 7844 4444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 0404 0810 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4444 3844 4444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4444 4444 3c04 0830 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 1010 0000 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 1010 0000 1010 1020 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0810 2040 2010 0800 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 7c00 7c00 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 2010 0804 0810 2000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4404 0810 1000 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0078 84b4 b4bc 8078 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4444 447c 4444 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4444 7844 4444 4478 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4444 4040 4040 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4444 4444 4444 4478 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 4040 4078 4040 407c 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 4040 4078 4040 4040 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4440 404c 4444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4444 447c 4444 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1010 1010 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0004 0404 0404 0444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4850 6040 6050 4844 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4040 4040 4040 407c 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 6c54 4444 4444 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4464 544c 4444 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4444 4444 4444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4444 4478 4040 4040 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4444 4444 4444 4438 1008 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0078 4444 4478 4444 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0038 4440 4038 0404 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 1010 1010 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4444 4444 4444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4444 4444 4444 2810 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4444 4444 4454 6c44 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4444 2810 2844 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0044 4444 4428 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 007c 0404 0810 2040 407c 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 3820 2020 2020 2020 2020 3800 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4020 2010 1008 0804 0400 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 3808 0808 0808 0808 0808 3800 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 2844 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 00fe 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 0800 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 3c44 4444 4c34 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4040 7844 4444 4478 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 3844 4040 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0004 0404 3c44 4444 443c 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 3844 7c40 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 000c 1010 3810 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 3c44 4444 443c 0444 3800
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4040 7844 4444 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1000 1010 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1000 1010 1010 1010 1010 6000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0040 4040 4850 6050 4844 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0010 1010 1010 1010 1010 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 7854 5454 5454 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 7844 4444 4444 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 3844 4444 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 7844 4444 4478 4040 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 3c44 4444 443c 0404 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 5864 4440 4040 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 3844 3804 4438 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 2020 7020 2020 2018 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 4444 4444 4c34 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 4444 4444 2810 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 5454 5454 5428 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 4428 1010 2844 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 4444 4444 443c 0444 3800
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 7c08 1020 407c 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0810 1010 1020 1010 1010 0800 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 1010 1010 1010 1010 1010 1000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 2010 1010 1008 1010 1010 2000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0034 5800 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000

	$1 ( syntax highlight padding )

@text