World prelude

Classes: Act App Bar BarApp BaseViewPrim Blk Block BlocksDemo Browse BrowseBothWorld BrowseClass BrowseClasses BrowseFile BrowseFiles BrowseHub BrowseHubFile BrowseLocalWorld BrowseMethod BrowseRemoteWorld BrowseWorlds Buf BufCls Cls ClsCls Config ConfigCls Cube CubeCls DddNode DdNode DemoForm DemoFormSubmit DemoHt DemoLife DemoLissajous DemoLiveHappyLine DemoLiveHappyRect DemoLiveLife DemoLiveLifeLarge DemoLiveLifeRedBlue DemoLiveLifeSmall DemoLiveLissajous DemoLiveLissajousSimple DemoLivePaint DemoLiveSierpinski DemoStar Dict DictCls DrawAct DrawApp DrawLine DrawRect DualFlight EditFile EditMethod EmptyExprList Eval Expr Fan File FileCls FnordApp FnordCannon FnordCheeseDemo FnordDebugRot FnordFlight FnordMotherShip FnordRandom FnordTwo Foo FormCreateSubclass Frame GameFoo GamePong GameTroids GetFrame GetGlobalVar GetInstVar GetLocalVar GetSelf GGl GrafAct Group GroupCls HelloName Ht HtCls Hub HubCls Ink Inspect InspectClass InspectInst InspectRoot InspectSimple JavaMeth LinearViewPrim LinearViewPrimCls Lines LinesCls ListUnicodePages Lit LiveApp LValue LvInstName LvList LvLocalName LvName LvTuple MakeVec Mat MatCls Meth MethTop Motion Node Num NumCls Obj OldStar Orphan Parser PongGame Prim Print PrintCls PutInstVar PutLocalVar PutLValue Rec RecCls RedPlane Rex RexCls SaidWhat Screen ScreenCls Seg SegCls Send Seq SnapshotWorld Str Strip SubmitCreateSubclass SubmitEditFile SubmitEval SubmitHelloName SubmitInstVars SubmitMethod SubmitNewMethod Super SwitchWorld SwitchWorldSubmit Sys SysCls TextValViewPrim TextValViewPrimCls Tmp Top TopCls TroidsAster TroidsThing Undefined Ur Usr UsrCls UsrMeth ValViewPrim Vec VecCls VuDemo WebApp WorldFetch WorldShareUp WorldSyncUp

Methods: != !=,ne: % & * + - . / < <,lt: <= <=,le: == ==,eq: > >,gt: >= >=,ge: ^ a0 a1 a2 a3 abbrev abs acos action add: all allmeths ambient: append:,ap: append:value: apply:args: applyframe:receiver:args: applysubstitutions args arr asin at: at:put: at:put:,at:p: atan basicinit basicstep black blue body bold: box: cant cant: canx cany cat: chr circ:r: clear: clone cls color color: cos cosh cross: current currentmethodexpr d d: definemethod:abbrev:doc:code:,defmeth:a:d:c: defsub: defvars: delete: delx dely depth dict: diffuse: dir doc does: dot: dots: draw draw: drawpage: drawpong dumpvarmap e embargo embargo: entity: eq: equals: err err: esecs eval: eval:arg: eval:arg:arg: evalframe: eventblk ex exp explode ey eye: fail fail: find: flat flattento: floor fmt: fontsize: footerbuttons fps framecount frameinterval front gl green handle:query: hash hei hei: height hh idiv: imod: implode,imp index init init: initp initstate ink ink: int is: isa: jam join join: len level lifestep light: line:to: link:to: linklabelpairs: listpages ln load localvars log10 look: macro:and: macro:case:of: macro:case:of:else: macro:cond: macro:dict: macro:fn: macro:for:do: macro:for:init:reduce: macro:for:map: macro:for:map:if: macro:ht: macro:if:then: macro:if:then:elif:then: macro:if:then:elif:then:else: macro:if:then:else: macro:or: macro:pr: macro:tag: macro:try:catch: macro:vec: macro:while:do: main match: methname meths model modelground moveball msg msg: mulm: mulv: must must: name nanos nbsp nearestint neg new new: newaster newbullet newink: newship nonmain not notes: num numargs numlocals numx numy oid omention on:at: oname oncls one onevent:at: onlive opath ord pairs: peekinstvars peekinstvarsdict pi pokeinstvarsdict: pos pos: post post: pow: prepost: prevframe prototype px px: py py: r rand rand: range rcvr read: recall recallframe: receiver rect:to: red repr resetball rest rot rot: rot:axis: round run: runapp: s said save say say: sca scale: scr secs sends setup sgn showzoo sin sinh sleep: source sourceloc sq sqrt square:ink: src starttime state state: step step: stop: store storeatparam0: storeatparam1: storeatparam:value: storeframe:value: str supercls,sup syshash sz sz: tag:params:body: tan tanh targ: tau text: text:sw: thick: title top trace: trans: trigraphs truth ttl ttl: two unit up: value value: value:value: vars vec vec: vecvec: vx vx: vy vy: w1 w2 wbgcolor wbody wbottom wfgcolor wfontfamily wfontsize wfontweight wfootlinks whead white whtml wid wid: width wires: wmid work: worldfilename worldname wpath wquery wresult write:value: wstyle wtitle wtop ww x x: xyxy xyxy: y y: z z: |

Classes


Act < App < Usr < Obj < Ur

{ wid hei path query < < < < }

hei
hei

hei:
hei= a

wid
wid

wid:
wid= a

App < Usr < Obj < Ur

nonmain

Bar < Foo < Usr < Obj < Ur

{ r s < x y z < < < }

one
r = 1. s = 11. up one. me x: 2 * me x. me y: 2 * me y. me z: 2 * me z. me.

r
r

s
s

two
up two + r + s

x
up x

BarApp < App < Usr < Obj < Ur

handle:query:
g = ((o=Bar new) one two, '=', o x, o y, o z, o r, o s) join: ' ,, '. dict( 'type', 'text'; 'value', g str; )

BaseViewPrim < Obj < Ur

main
"BUILTIN"

Blk < Obj < Ur

storeatparam0:
"BUILTIN"

storeatparam1:
"BUILTIN"

storeatparam:value:
"BUILTIN"

value
"BUILTIN"

value:
"BUILTIN"

value:value:
"BUILTIN"

Block < Expr < Obj < Ur

BlocksDemo < GrafAct < Act < App < Usr < Obj < Ur

{ < gl graf stop < wid hei path query < < < < }

model
v1 = (). for(i: 6) do( for (j: 6) do( for (k: 6) do( v1 ap: ( Cube new $ pos: 20 + 10*i @ 20 + 10*j @ 10*k - 20 $ scale: 5 @ 3 @ 1 $ rot: i*10 @ j*10 @ k*10 $ color: 0.1+i/6 @ 0.1+j/6 @ 0.1+k/6 @ 0.9 ) ) ) ). v1 ap: ( Lines new: VEC(10@10@10, 90@10@10, 90@90@10, 10@90@10, 10@10@10, 50@50@50, 50@50@99) $color: 1@0@0 ). Group new vec: v1.

step
graf= me model. "TODO" "stop= 1."

Browse < App < Usr < Obj < Ur

handle:query:
ww= a split: '.' . wl= ww len . clss= Cls all . "Start the list V with an UP link." v= Vec('|link|/Top|[TOP]|', 'Go Top.';). v len == 1 $must: (v, '#1'). v at: 0 $len == 2 $must: (v, '#2'). IF( wl == 1 )THEN( "gk are Good Keys, those that are classes." gk= FOR( i: clss dir )MAP( i )IF( AND( clss at: i $ cls name ends: 'Cls'; OR( clss at: i $ name ends: 'Cls' $ not; clss at: i $ cls name == 'ClsCls' ) ) ). FOR( k: gk )DO( kc= clss at: k . kn= kc name . tmp = ('|link|/Browse.', kn, '|', kn, '|') jam, kc meths dir join: ' '. tmp len == 2 $must: (tmp, '#3'). v ap: tmp. FOR( each: v )DO( each len == 2 $must: (v, each, '#4') ). ). z= Dict new $ at: 'type' put: 'list' $ at: 'title' put: 'Browsing All Classes' $ at: 'value' put: v . ) . IF( wl == 2 )THEN( cn= ww at: 1 . "class name" co= clss at: cn lower . "class object" v ap: ( ('|link|/', cn, '|[RUN]|')jam, '[RUN]'). v ap: ( ('|link|/Browse.', cn, '|== CLASS ', cn, ' ==|')jam, ('==== class ', cn, ' ====')jam ). d= co cls meths . FOR( x: d dir )DO( "For each class method" v ap: ( ( '|link|/EditMethod.', cn, 'Cls.', x, '|[method] cls ', x, '|' ) jam, d at: x $ str ) . ). d= co meths . FOR( x: d dir )DO( "For each instance method" v ap: ( ( '|link|/EditMethod.', cn, '.', x, '|[method] ', x, '|' ) jam, d at: x $ str ) . ). z= Dict new at: 'type' put: 'list' $ at: 'title' put: ( 'Browsing Class' ap: cn ) $ at: 'value' put: v . ) . z .

BrowseBothWorld < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
wn=me w1. cfg= Config load. mode= cfg d at: wn. CASE( mode )OF( 's' @ ( p= ('/WorldSyncUp', wn) join: '.', '(SyncUp)' ), 'd' @ ( p= ('/WorldSyncDown', wn) join: '.', '(SyncDown)' ), )ELSE( "neither up nor down: they just have the same name." p= ('/WorldCONFLICT', wn) join: '.', '(CONFLICT)' ). Ht linkLabelPairs: (p,).

wtitle
wn=me w1. ('Local+Remote World:', wn) join

BrowseClass < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
cn= me w1. c= Cls at: cn lower. HT{ TAG('b', 'Methods: '); FOR{ name:m: c meths }MAP{ HT{ Ht link: m name to: ('/BrowseMethod.', cn, '.', m name)jam, ' ', Ht entity: 'nbsp', ' ' } }; TAG('p'); TAG('b', 'Class Methods: '); FOR{ name:m: c cls meths }MAP{ HT{ Ht link: ('cls', m name)join to: ('/BrowseMethod.', cn, 'Cls.', m name)jam, ' ', Ht entity: 'nbsp', ' ' } }; TAG('p'); TAG('hr'); IF{ c isa: AppCls }THEN{ Ht link: 'RUN this App.' to: ('/', c name)jam }ELSE{ '' }; TAG('p'); TAG('hr'); TAG('b', 'Instance Variables: '); TAG('br'); TAG('form'; 'method','GET'; 'action',('/SubmitInstVars',cn)join:'.'; 'Variable Names (space separated):'; TAG('input'; 'name','vars'; 'value', c vars join); TAG('p'); TAG('input'; 'type','submit'; 'value','Define';); ); TAG('p'); TAG('hr'); TAG('b', 'Define New Method: '), TAG('br'); TAG('form'; 'method','GET'; 'action',('/SubmitNewMethod',cn)join:'.'; 'Name of method: '; TAG('input'; 'name','method';); TAG('p'); TAG('input'; 'type','checkbox'; 'name','clsmeth'; 'value','1';); 'Class Method'; TAG('p'); TAG('input'; 'type','submit'; 'value','Define';); ); TAG('p'); TAG('hr'); Ht link: 'Define a subclass.' to: (('/FormCreateSubclass', c name) join: '.'); }

wtitle
cn= me w1. ('Browse Class <', cn, '>') jam.

BrowseClasses < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
HT{ TAG('p'), TAG('b', 'Main App Classes: '), Ht linkLabelPairs: FOR{name:c: Cls all }MAP{ ('/BrowseClass', c name)join:'.', c name }IF{ AND{c at: 'nonmain' $not; c isa: AppCls;} }, TAG('p'), TAG('b', 'NonMain App Classes: '), Ht linkLabelPairs: FOR{name:c: Cls all }MAP{ ('/BrowseClass', c name)join:'.', c name }IF{ AND{c at: 'nonmain'; c isa: AppCls;} }, TAG('p'), TAG('b', 'Other Usr Classes: '), Ht linkLabelPairs: FOR{name:c: Cls all }MAP{ ('/BrowseClass', c name)join:'.', c name }IF{ AND{c isa: UsrCls; c isa: AppCls $not;} }, TAG('p'), TAG('b', 'Other Classes: '), Ht linkLabelPairs: FOR{name:c: Cls all }MAP{ ('/BrowseClass', c name)join:'.', c name }IF{ AND{c isa: UsrCls $not; c cls is: MetaCls $not} }, TAG('p'), TAG('b', 'Class Classes: '), Ht linkLabelPairs: FOR{name:c: Cls all }MAP{ ('/BrowseClass', c name)join:'.', c name }IF{ AND{c cls is: MetaCls;} }, }

wtitle
'Browse Classes'

BrowseFile < App < Usr < Obj < Ur

handle:query:
ww= a split: '.' . fn= (ww at: 1) ap: '.txt'. c= File read: fn. url= ('/EditFile.', fn)jam. v= HT( TAG('pre', c); TAG('p'); TAG('hr'); TAG('a'; 'href', url; '[EDIT]'); ). DICT( 'type', 'html'; 'title', 'BrowseFile: ' ap: fn; 'value', v; )

BrowseFiles < App < Usr < Obj < Ur

handle:query:
v= Ht linkLabelPairs: FOR( fname,time,size: File dir ) MAP( ('/BrowseFile', fname) join: '.', fname ). DICT( 'type', 'html'; 'title', 'BrowseFIles'; 'value', v; )

BrowseHub < App < Usr < Obj < Ur

handle:query:
v= Ht linkLabelPairs: FOR( fname,time,size: Hub dir ) MAP( ('/BrowseHubFile', fname) join: '.', fname ). DICT( 'type', 'html'; 'title', 'BrowseHub'; 'value', v; )

BrowseHubFile < App < Usr < Obj < Ur

handle:query:
ww= a split: '.' . name= (ww at: 1) ap: '.txt'. c= Hub read: name. v= TAG('pre', c). DICT( 'type', 'html'; 'title', 'BrowseHubFile: ' ap: name; 'value', v; )

BrowseLocalWorld < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
wn=me w1. cfg= Config load. mode= cfg d at: wn. IF{ mode equals: 's' }THEN{ "already shared; offer sync." p= ('/WorldSyncUp', wn) join: '.'; '(SyncUp)'. }ELSE{ "not yet shared; offer share." p= ('/WorldShareUp', wn) join: '.'; '(Share)'. }. HT{ Ht linkLabelPairs: (p,); TAG{'p'}; "dict change world?" }.

wtitle
wn=me w1. ('Local World:', wn) join

BrowseMethod < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
cn,mn= me w1, me w2. c= Cls all at: cn lower. m= c meths at: mn lower. HT{ TAG{'pre', m str}; TAG{'hr'}; Ht link: 'EDIT' to: (( '/EditMethod', cn, mn) join: '.'); }

wtitle
cn,mn= me w1, me w2. ('Browse Method <', cn, ' ', mn, '>') jam.

BrowseRemoteWorld < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
wn=me w1. cfg= Config load. mode= cfg d at: wn. IF{ mode equals: 'd' }THEN{ "already downloaded; offer sync." p= ('/WorldSyncDown', wn) join: '.'; '(SyncDown)'. }ELSE{ "not yet fetched; offer fetch." p= ('/WorldFetch', wn) join: '.'; '(Fetch)'. }. Ht linkLabelPairs: (p,).

wtitle
wn=me w1. ('Remote World:', wn) join

BrowseWorlds < WebApp < App < Usr < Obj < Ur

{ cfg < path query < < < < }

notes:
'BrowseWorlds' say: (a, cfg d). s= IF{ Sys worldName $equals: a }THEN{ '(CURRENT)' }ELSE{ '' }. t= IF{ cfg d at: a $equals: 's' }THEN{ '(shared)' }ELSE{ '' }. u= IF{ cfg d at: a $equals: 'd' }THEN{ '(fetched)' }ELSE{ '' }. (s,t,u)jam say.

wmid
r = Rex new: 'w_([a-z0-9]+).txt' say. all= Dict new. fv= Dict new. FOR{fname,mtime,size: File dir} DO{m=r match: fname say $say. IF{m}THEN{ name=m at: 1. fv at: name put: size. all at: name put: size}}. hv= Dict new. notice = ''. TRY{ FOR{fname,mtime,size: Hub dir} DO{m=r match: fname say $say. IF{m}THEN{ name=m at: 1. hv at: name put: size. all at: name put: size}}. }CATCH{e: notice = ('Cannot list HUB files: ', e str.)jam. }. onlyLocal= FOR{fname:size: fv say} MAP{fname}IF{hv at: fname say$say $not}. onlyHub= FOR{fname:size: hv say} MAP{fname}IF{fv at: fname say$say $not}. both= FOR{fname:size: fv say} MAP{fname}IF{hv at: fname say$say }. cfg= Config load. HT{ notice; TAG('p'); Ht bold: 'Local Worlds: '; Ht linkLabelPairs: FOR{f: onlyLocal} MAP{('/BrowseLocalWorld', f) join: '.'; f; me notes: f}; TAG('p'); Ht bold: 'Local+Remote Worlds: '; Ht linkLabelPairs: FOR{f: both} MAP{('/BrowseBothWorld', f) join: '.'; f; me notes: f}; TAG('p'); Ht bold: 'Remote Worlds: '; Ht linkLabelPairs: FOR{f: onlyHub} MAP{('/BrowseRemoteWorld', f) join: '.'; f; me notes: f}; TAG('p'); }.

wtitle
'Worlds'

Buf < Obj < Ur

append:,ap:
"BUILTIN"

BufCls

append:,ap:
"BUILTIN"

new
"BUILTIN"

Cls < Obj < Ur

allmeths
"BUILTIN"

at:
"BUILTIN"

definemethod:abbrev:doc:code:,defmeth:a:d:c:
"BUILTIN"

defsub:
"BUILTIN"

defvars:
"BUILTIN"

meths
"BUILTIN"

name
"BUILTIN"

supercls,sup
"BUILTIN"

trace:
"BUILTIN"

vars
"BUILTIN"

ClsCls

all
"BUILTIN"

at:
"BUILTIN"

Config < Usr < Obj < Ur

{ d < < < }

d
d

d:
d= a

save
File write: 'c_config.txt' value: d repr.

ConfigCls

load
"Load or create." z= Config new. TRY{ 'Config' say: (File read: 'c_config.txt'). "assume any error is 'file not found' ." }CATCH{e: 'Creating new Config.' say. z d: Dict new. z save. }. z d: (me eval: (File read: 'c_config.txt')). z.

Cube < Prim < DddNode < Node < Obj < Ur

CubeCls

new
"BUILTIN"

DddNode < Node < Obj < Ur

color
"BUILTIN"

color:
"BUILTIN"

pos
"BUILTIN"

pos:
"BUILTIN"

rot
"BUILTIN"

rot:
"BUILTIN"

sca
"BUILTIN"

scale:
"BUILTIN"

DdNode < Node < Obj < Ur

DemoForm < App < Usr < Obj < Ur

handle:query:
br = Tag('br'). p = Tag('p'). i1 = Tag('input'; 'name', 'one'; 'value', 'uno'). i2 = Tag('input'; 'name', 'two'; 'value', 'dos'). i3 = Tag('input'; 'name', 'three'; 'value', 'tres'). s = Tag('input'; 'type', 'submit'; 'value', '250 OK'). form1 = Tag('form'; 'method', 'post'; 'action', '/DemoFormSubmit'; Ht entity: 'alpha'; i1; br; Ht entity: 'beta'; i2; br; Ht entity: 'gamma'; i3; br; s). i1 = Tag('input'; 'name', 'one'; 'value', 'eins'). i2 = Tag('input'; 'name', 'two'; 'value', 'zwei'). i3 = Tag('input'; 'name', 'three'; 'value', 'drei'). form2 = Tag('form'; 'method', 'get'; 'action', '/DemoFormSubmit'; Ht entity: 'alpha'; i1; br; Ht entity: 'beta'; i2; br; Ht entity: 'gamma'; i3; br; s). body = HT('form1:', TAG('pre', form1 str), p, form1, p, 'form2a:', TAG('pre', form2 str), p, form2, p, 'form2b:', TAG('pre', form2 str), p, form2, p, 'form2c:', TAG('pre', form2 str), p, form2, p, 'form2d:', TAG('pre', form2 str), p, form2, p, 'form2e:', TAG('pre', form2 str), p, form2, p, ). DICT( 'type', 'html'; 'value', Tag('html', Tag('body', body))).

DemoFormSubmit < App < Usr < Obj < Ur

handle:query:
br = Tag('br'). body = Ht( Ht entity: 'alpha', ' == ', b at: 'one', br, Ht entity: 'beta', ' == ', b at: 'two', br, Ht entity: 'gamma', ' == ', b at: 'three', br, ('a={', a, '} b={', b, '}')jam, br, ). DICT( 'type', 'html'; 'value', Tag('html', Tag('body', body))).

DemoHt < App < Usr < Obj < Ur

handle:query:
guts = Ht( Tag('li', 'Test.'), Tag('li', TAG('span'; 'style', 'color:yellow'; 'Hello')), Tag('li', TAG('span'; 'style', 'background-color:brown'; 'World!')), Tag('li', '[', TAG('a'; 'href', '/Top'; 'GO TOP'), ']'), ). guts append: Ht( FOR(i:100)MAP( Tag('li', i))). page = TAG('html', TAG('body'; 'bgcolor', '#222222'; 'text', '#DDDDDD'; TAG('big', TAG('big', TAG('ul', guts))))). DICT('type', 'html'; 'title', 'DemoHt Title'; 'value', page).

DemoLife < App < Usr < Obj < Ur

{ state < < < < }

canx
900

cany
500

delx
me canX idiv: me numX

dely
me canY idiv: me numY

draw
dx,dy= me delX, me delY. IF(state is: nil) THEN(state = me initP). nextState = FOR( x: me numX )MAP( FOR( y: me numY )MAP( nei = 0. FOR( i: 3) DO( i = i - 1 + x. FOR( j: 3) DO( j = j - 1 + y. nei = nei + ((state at: i) at: j). ). ). "Notice cell x,y can count as a nei." IF((state at: x) at: y) THEN( OR(nei == 3; nei == 4;) ) ELSE( nei == 3 ). ). ). state = nextState. v = Vec new. FOR( x: me numX )DO( FOR( y: me numY )DO( IF( (state at: x) at: y )THEN( xx = x * dx + (dx idiv: 2). yy = y * dy + (dy idiv: 2). v ap: VEC( 'rect', xx - 12, yy - 12, 24, 24,). )ELSE( xx = x * dx + (dx idiv: 2). yy = y * dy + (dy idiv: 2). v ap: VEC( 'line', xx - 2, yy - 2, xx + 2, yy + 2,). ). ). ). v.

handle:query:
DICT( 'type', 'draw'; 'width', me canX; 'height', me canY; 'value', me draw; 'url', ( '/', me cls name, '.', me oid str ) jam; ).

initp
FOR( x: me numX )MAP( FOR( y: me numY )MAP( t = x + y * 13 . OR((t imod: 4) == 0, (t imod: 5) == 0, (t imod: 7) == 0). ) ).

numx
27

numy
15

DemoLissajous < DrawApp < App < Usr < Obj < Ur

{ numPoints < scrw scrh path query stuff storage didInit < < < < }

init
numPoints = 40. me dumpVarMap. 'init: meths = ' say: (me cls meths).

step
FOR(i : numPoints) DO( b = i / 5 $ cos * 500 + 500, i / 3 $ sin * 240 + 240. me text: i str sw: b. a = b. ). numPoints = numPoints + 40.

DemoLiveHappyLine < LiveApp < App < Usr < Obj < Ur

{ < scr red blue green white black < < < < }

draw
w= me scr width. h= me scr height. me clear: 0. WHILE(1) DO( c = Num rand: 1000. x1 = Num rand: w. x2 = Num rand: w. y1 = Num rand: h. y2 = Num rand: h. me newInk: c $ line: x1@y1 to: x2@y2. me post. ).

DemoLiveHappyRect < LiveApp < App < Usr < Obj < Ur

{ < scr red blue green white black < < < < }

draw
w= me scr width. h= me scr height. me clear: 0. WHILE(1) DO( c = Num rand: 1000. x1 = Num rand: w. x2 = Num rand: w. y1 = Num rand: h. y2 = Num rand: h. me newInk: c $ rect: x1@y1 to: x2@y2. me post. ).

DemoLiveLife < LiveApp < App < Usr < Obj < Ur

{ state embargo < scr red blue green white black < < < < }

delx
me scr width idiv: me numX

dely
me scr height idiv: me numY

draw
embargo= 0. me black color: 111. IF(state is: nil) THEN(state = me initState). FOR(i: 1000000)DO( me lifeStep. me post. ).

embargo
embargo

embargo:
embargo= a. me.

eventblk
FN( kind:ij: i,j= ij. x = i idiv: me delX. y = j idiv: me delY. old= (state at: x) at: y. IF( old not )THEN( (state at: x) at: y put: 1. embargo= Sys secs + 1. 'Life evBlk' say: (kind, i, j, '->', x, y, embargo). ) )

initstate
FOR(x: me numX)MAP( FOR(y: me numY)MAP( Num rand < 0.3 ) ).

lifestep
dx,dy= me delX, me delY. dx2,dy2= dx idiv: 2, dy idiv: 2. rx,ry= dx2 - 1, dy2 - 1. nextState = FOR(x: me numX)MAP( FOR(y: me numY)MAP( nei = 0. FOR(i: 3)DO( i = i - 1 + x. FOR(j: 3)DO( j = j - 1 + y. nei = nei + ((state at: i) at: j). ). ). "Notice cell x,y can count as a nei." IF((state at: x) at: y) THEN( OR(nei == 3; nei == 4;) ) ELSE( nei == 3 ). ). ). "Update state, unless embargo is in place." IF{embargo < Sys secs}THEN{state = nextState}. FOR(x: me numX)DO{ FOR(y: me numY)DO{ IF{(state at: x) at: y} THEN{ xx = x * dx + dx2. yy = y * dy + dy2. me green rect: (xx - rx, yy - ry) to: (xx + rx, yy + ry). } ELSE{ xx = x * dx + dx2. yy = y * dy + dy2. me black rect: (xx - rx, yy - ry) to: (xx + rx, yy + ry). } } }.

numx
me numY * me scr width / me scr height $round

numy
23

state
state

state:
state= a. me.

DemoLiveLifeLarge < DemoLiveLife < LiveApp < App < Usr < Obj < Ur

{ < state embargo < scr red blue green white black < < < < }

numy
43

DemoLiveLifeRedBlue < DemoLiveLife < LiveApp < App < Usr < Obj < Ur

{ < state embargo < scr red blue green white black < < < < }

initstate
FOR{x: me numX}MAP{ FOR{y: me numY}MAP{ IF{ Num rand < 0.3 }THEN{ IF{x < me numX / 2} THEN{11} ELSE{101} }ELSE{ 0 }. } }.

lifestep
dx,dy= me delX, me delY. dx2,dy2= dx idiv: 2, dy idiv: 2. rx,ry= dx2 - 1, dy2 - 1. pop = popR = popB = 0. nextState = FOR{x: me numX} MAP{ xx = x * dx + dx2. FOR{y: me numY} MAP{ yy = y * dy + dy2. colored = 0. FOR(i: 3)DO{ i = i - 1 + x. FOR(j: 3)DO{ j = j - 1 + y. colored = colored + ((me state at: i) at: j). }. }. "Notice cell x,y can count as a colored". "Simple neighbor count (no color)". bw = colored % 10. old= (me state at: x) at: y. z= IF{old} THEN{ OR{bw == 3; bw == 4;} } ELSE{ bw == 3 }. IF{old} THEN{ rc = (old idiv: 10) % 10. bc = (old idiv: 100) % 10. } ELSE{ "Red & Blue counts". rc = (colored idiv: 10) % 10. bc = (colored idiv: 100) % 10. }. z= COND{ z == 0 , (clr = me black. 0); rc > bc, (pop=pop+1. popR=popR+1. clr = me red. 11); rc < bc, (pop=pop+1. popB=popB+1. clr = me blue. 101); 1 , (pop=pop+1. clr = me white. 1); }. clr rect: (xx - rx, yy - ry) to: (xx + rx, yy + ry). z. }. "next y" }. "next x" 'FINISHED lifeStep' say: (pop, popR, popB). me state: nextState.

DemoLiveLifeSmall < DemoLiveLife < LiveApp < App < Usr < Obj < Ur

{ < state embargo < scr red blue green white black < < < < }

numy
11

DemoLiveLissajous < LiveApp < App < Usr < Obj < Ur

{ < scr red blue green white black < < < < }

draw
w= me scr width / 2. h= me scr height / 2. me clear: 0. prev= w*2, h. n = 1000. start = Sys secs. FOR(i : n) DO( xy= i / 19 $ cos * w + w, i / 7 $ sin * h + h. me newInk: i $ line: prev to: xy $ fontSize: 24 $ text: i str sw: xy. prev= xy. me post. ). finish= Sys secs. time= finish - start. fps= n / time. msg= (n, ' frames / ', time, 's = ', fps, ' fps') jam. me white fontSize: 32 $ text: msg sw: (100,100).

DemoLiveLissajousSimple < LiveApp < App < Usr < Obj < Ur

{ < scr red blue green white black < < < < }

draw
w= me scr width / 2. h= me scr height / 2. me clear: 313. prev= w*2, h. FOR(i : 1000) DO( xy= i / 19 $ cos * w + w, i / 7 $ sin * h + h. me white line: prev to: xy. prev= xy. me post. ).

DemoLivePaint < LiveApp < App < Usr < Obj < Ur

{ < scr red blue green white black < < < < }

draw
me clear: 212. "323." FOR(i:50) DO( FOR(j:30) DO( me green text: (i*10+j) str sw: (i*20, j*20). me post. )).

eventblk
FN( kind: xy: me onEvent: kind at: xy)

onevent:at:
" 'DemoLivePaint------onEvent' say: (a, b). " me white text: a str sw: b.

DemoLiveSierpinski < LiveApp < App < Usr < Obj < Ur

{ < scr red blue green white black < < < < }

draw
me clear: 323. me post. d1 = d2 = d3 = d4 = 0. colors = 900, 90, 9. ink = me newInk: (colors at: 0). corners = 0, 0; 500, 380; 700, 100. x, y = corners at: 0. n = 100000. k = 200. me green thick: 2. start = Sys secs. FOR(i : n) DO( r = Num rand: corners len. cx, cy = corners at: r. x = (x + cx) / 2. y = (y + cy) / 2. ink color: (colors at: d4) $dot: (x, y). IF(i % k $not) THEN(me post). d1, d2, d3, d4 = r, d1, d2, d3. ). finish= Sys secs. time= finish - start. fps= n / k / time. msg= (n / k, ' frames / ', time, 's = ', fps, ' fps') jam. me white fontSize: 32 $ text: msg sw: (100,100).

DemoStar < DrawApp < App < Usr < Obj < Ur

{ < scrw scrh path query stuff storage didInit < < < < }

init
me.

step
FOR( i : Num pi * 60 ) DO( theta = i * 0.1. x = theta cos * 200 + 222. y = theta sin * 200 + 222. me line: (200, 200) to: (x, y). "me text: i str sw: (x, y)." )

Dict < Obj < Ur

at:
"BUILTIN"

at:put:
"BUILTIN"

dir
"BUILTIN"

len
"BUILTIN"

DictCls

new
"BUILTIN"

DrawAct < Act < App < Usr < Obj < Ur

{ scr red blue green white black stop < wid hei path query < < < < }

black
black

blue
blue

clear:
scr clear: a

eventblk
FN( event: xy: me on: event at: xy)

green
green

handle:query:
path,query= a,b. DICT( 'type'@ 'live', 'value'@ FN( theScreen: me runApp: theScreen ), 'event'@ me eventBlk).

hei
hei

init
me.

newink:
scr newInk: a

on:at:
me

post
scr post

red
red

runapp:
scr= a. wid= scr width. hei= scr height. stop= 0. red= scr newInk: 900. green= scr newInk: 90. blue= scr newInk: 9. white= scr newInk: 999. black= scr newInk: 0. me init. while(stop not) DO( me step. me post. ). me.

scr
scr

step
me say: 'Drawing a red X on blue bg. You should subclass DrawAct or define <step>.'. me clear: 3. me red line: 0@0 to: wid - 1@hei - 1. me red line: wid - 1@0 to: 0@hei - 1. me stop: 1. me.

stop:
stop= a

white
white

wid
wid

DrawApp < App < Usr < Obj < Ur

{ scrw scrh path query stuff storage didInit < < < < }

basicinit
IF (didInit not) THEN ( me init. didInit = 1. ).

basicstep
me step.

handle:query:
scrw = 1000. scrh = 480. path = a. query = b. stuff = Vec new. me basicInit. me basicStep. DICT( 'type', 'draw'; 'title', me cls name; 'value', stuff; 'url', ( '/', me cls name, '.', me oid str ) jam; ).

init
me. "Subclass should override."

line:to:
x1, y1 = a. x2, y2 = b. stuff ap: VEC('line', x1, y1, x2, y2).

nonmain

recall
stuff = storage.

rect:to:
x1, y1 = a. x2, y2 = b. x, y = (x1 + x2) / 2, y1 + y2 / 2. w, h = (x1 - x2) abs, (y1 - y2) abs. stuff ap: VEC('rect', x, y, w, h).

step
me. "Subclass should override."

store
storage = stuff.

text:sw:
x, y = b. stuff ap: VEC('text', x, y, a).

DrawLine < App < Usr < Obj < Ur

handle:query:
DICT( 'type', 'draw'; 'title', 'Drawing a line'; 'value', Vec( VEC( 'line', 10, 400, 50, 300, 2 ); ); 'width', 300; 'height', 500; )

DrawRect < App < Usr < Obj < Ur

handle:query:
v = Vec new. FOR(x : 10) DO( FOR(y : 10) DO( v append: VEC('rect', 80 * x, 70 * y, 20, 15, 2, 'green'). v append: VEC('text', 80 * x + 25, 70 * y + 30, (x str, ',', y str) jam ). ). ). DICT( 'type', 'draw'; 'title', 'Drawing 100 Rectangles'; 'value', v; 'width', 300; 'height', 500; ).

DualFlight < FnordFlight < FnordApp < App < Usr < Obj < Ur

{ < plane < gl < < < < }

handle:query:
DICT( 'type', 'dual'; 'value', me; ).

EditFile < App < Usr < Obj < Ur

handle:query:
fn= (a split: '.' $at: 1, '.txt')jam. DICT( 'type', 'edit'; 'title', 'Eval Form'; 'value', File read: fn; 'action', ('/SubmitEditFile.', fn)jam; ).

EditMethod < App < Usr < Obj < Ur

handle:query:
ww= a split: '.' . wl= ww len . clss= Cls all . IF( wl ne: 3 )THEN( 'wrong words len in EditMethod' err: ww ). cn= ww at: 1 . "class name" mn= ww at: 2 . "method name" co= clss at: cn lower . "class object" mo= co meths at: mn lower . "method object" z= Dict new at: 'type' put: 'edit' $ at: 'title' put: ( 'Editing Class' ap: cn $ ap: ' Method ' $ ap: mn ) $ at: 'value' put: ( mo str ) $ at: 'action' put: ( '/SubmitMethod' ) $ at: 'field1' put: 'ClassName' $ at: 'value1' put: cn $ at: 'field2' put: 'MethodName' $ at: 'value2' put: mn . z .

nonmain

EmptyExprList < Expr < Obj < Ur

Eval < App < Usr < Obj < Ur

handle:query:
DICT( 'type', 'edit'; 'title', 'Eval Form'; 'value', ''; 'action', '/SubmitEval'; ).

Expr < Obj < Ur

depth
"BUILTIN"

evalframe:
"BUILTIN"

front
"BUILTIN_GETTER"

rest
"BUILTIN_GETTER"

white
"BUILTIN_GETTER"

Fan < Prim < DddNode < Node < Obj < Ur

File < Obj < Ur

FileCls

append:value:
"BUILTIN"

delete:
"BUILTIN"

dir
"BUILTIN"

read:
"BUILTIN"

write:value:
"BUILTIN"

FnordApp < App < Usr < Obj < Ur

{ gl < < < < }

gl
gl

handle:query:
DICT( 'type', 'fnord'; 'value', me; ).

init
me gl ambient: 0.4 @ 0.4 @ 0.4. me gl diffuse: 0.9 @ 0.9 @ 0.9. me gl light: 100 @ 100 @ 100.

model
v1 = (). for(i: 6) do( for (j: 6) do( for (k: 6) do( v1 ap: ( Cube new $ pos: 20 + 10*i @ 20 + 10*j @ 10*k - 20 $ scale: 5 @ 3 @ 1 $ rot: i*10 @ j*10 @ k*10 $ color: 0.1+i/6 @ 0.1+j/6 @ 0.1+k/6 @ 0.9 ) ) ) ). v1 ap: ( Lines new: VEC(10@10@10, 90@10@10, 90@90@10, 10@90@10, 10@10@10, 50@50@50, 50@50@99) $color: 1@0@0 ). Group new vec: v1.

post:
me prePost: a. me gl post: a.

prepost:
x = me gl ex. y = me gl ey. me gl light: x @ y @ 100. me gl eye: x @ y @ (x - y)abs * 3. me gl look: 100 - y @ 100 - x @ 0.

run:
me say: 'FnordApp--run:'. gl = a. me init. while(1) do(me step).

step
me post: me model.

FnordCannon < FnordApp < App < Usr < Obj < Ur

{ g green balls < gl < < < < }

init
up init. g = 0. green = 0@1@0@1. balls = Vec new.

model
g = g + 1. ry= me gl ey - 50. rz= me gl ex - 50. IF( g % 200 == 0 )THEN( balls ap: (Cube new $ pos: 30 @ 20 @ 20 $ scale: 0.3 @ 0.3 @ 0.3 $ color: 1 @ 0 @ 0 @ 1 ). ). FOR( b : balls ) DO ( x,y,z= b pos. x = x + 0.02. b pos: x@y@z. ). Group new vec: VEC( Cube new $ pos: 15 @ 20 @ 20 $ scale: 10 @ 2 @ 2 $ color: green, Cube new $ pos: 25 @ 20 @ 20 $ scale: 8 @ 0.8 @ 0.8 $ color: green $ rot: 0 @ ry*2 @ rz*2, balls, ) flat

prepost:
x = me gl ex. y = me gl ey. me gl up: 0 @ 0 @ 1. me gl light: 25 @ -10 @ 25. me gl eye: 40 @ 0 @ 35. me gl look: 20 @ 25 @ 20.

FnordCheeseDemo < FnordApp < App < Usr < Obj < Ur

{ t < gl < < < < }

init
up init. t= 0.

model
t= t + 2. Group new vec: for(i: 8) map( for (j: 8) map( for (k: 8) map( Cube new $ pos: 20 + 10*i @ 20 + 10*j @ 10*k - 20 $ scale: 5 @ 3 @ 1 $ rot: i*10+t @ j*10+2*t @ k*10+3*t $ color: 0.1+i/6 @ 0.1+j/6 @ 0.1+k/6 @ 0.9 ) ) ) flat.

prepost:
x = 25 + (t / 3 / 10) sin * 30. y = 25 + (t / 3 / 7) cos * 30. z = 25 + (t / 3 / 23) cos * 30. me gl light: x @ y @ z. me gl eye: x @ y @ z. me gl look: 30 @ 30 @ 30.

FnordDebugRot < FnordApp < App < Usr < Obj < Ur

{ g green balls < gl < < < < }

init
up init. g = 0. green = 0@1@0@1. balls = Vec new.

model
Group new vec: VEC( FOR( i: 8 )MAP( x = 2*i. FOR( j: 8 )MAP( y = 2*j. FOR( k: 8 )MAP( z = 2*k. Cube new $ pos: x*10 @ y*10 @ z*-10 $ rot: x*10 @ y*10 @ z*10 $ scale: 8 @ 2 @ 0.5 $ color: 1 - x / 8 @ 1 - y / 8 @ 1 - z / 8 ) ) ) ) flat

prepost:
ex = me gl ex. ey = me gl ey. me gl up: 0 @ 1 @ 0. me gl light: 50 @ 50 @ 50. me gl eye: ex @ ey @ 20. me gl look: 50 @ 50 @ -100. me gl wires: Sys secs / 2 % 1.

FnordFlight < FnordApp < App < Usr < Obj < Ur

{ plane < gl < < < < }

init
up init. plane= RedPlane new init: me gl.

model
m= me modelGround. plane step. Group new vec: VEC( m, plane current, ).

modelground
greenish = 0 @ 0.6 @ 0. grayish = 0.3 @ 0.3 @ 0.3 @ 1. Group new vec: VEC( "Four runways." Cube new $ scale: 20 @ 5 @ 0.2 $ pos: 25 @ 25 @ 0 $ color: grayish, Cube new $ scale: 20 @ 5 @ 0.2 $ pos: 75 @ 75 @ 0 $ color: grayish, Cube new $ scale: 5 @ 20 @ 0.2 $ pos: 25 @ 75 @ 0 $ color: grayish, Cube new $ scale: 5 @ 20 @ 0.2 $ pos: 75 @ 25 @ 0 $ color: grayish, FOR(i: 10) MAP( FOR (j: 10) MAP( Cube new $ pos: 10*i + 5 @ 10*j + 5 @ -1 $ scale: 9 @ 9 @ 1 $ color: i / 10 + 0.05 @ 0.2 @ j / 10 + 0.05 @ 1 ) ), "Stars." "-- FOR(i: 5) MAP(i= i+1. FOR (j: 10) MAP(j= 10*j + 5. Cube new $ scale: 0.2 @ 0.2 @ 0.2 $ pos: 0 @ j @ i*10 $ color: 1 @ 0 @ 0 @ 1, Cube new $ scale: 0.2 @ 0.2 @ 0.2 $ pos: 100 @ j @ i*10 $ color: 0 @ 1 @ 0 @ 1, Cube new $ scale: 0.2 @ 0.2 @ 0.2 $ pos: j @ 0 @ i*10 $ color: 0 @ 0 @ 1 @ 1, Cube new $ scale: 0.2 @ 0.2 @ 0.2 $ pos: j @ 100 @ i*10 $ color: 1 @ 1 @ 1 @ 1, ) ), --" "Green grids - up and over the top" FOR (k: 10) MAP(k= 10*k + 5. Lines new: (k@0@0, k@0@50, k@100@50, k@100@0) $color: greenish, Lines new: (0@k@0, 0@k@50, 100@k@50, 100@k@0) $color: greenish, ), "Green grids - around the edge at various elevations." FOR (k: 5) MAP(k= 10*k + 10. Lines new: (0@0@k, 0@100@k, 100@100@k, 100@0@k, 0@0@k) $color: greenish, ), Seg new: (50@50, 100@50, 100@100, 150@100), )flat.

prepost:
"up prePost: a."

FnordMotherShip < FnordRandom < FnordApp < App < Usr < Obj < Ur

{ model < < gl < < < < }

step
"Only make the model once." IF(model equals: nil) THEN( model = me model. ). me post: model.

FnordRandom < FnordApp < App < Usr < Obj < Ur

{ < gl < < < < }

init
up init.

model
v1 = (). for(i: 5) do( for (j: 5) do( for (k: 5) do( v1 ap: ( Cube new $ pos: 30 + (Num rand: 40) @ 30 + (Num rand: 40) @ (Num rand: 20) $ scale: 10 * Num rand @ 10 * Num rand @ 10 * Num rand $ rot: 180 * Num rand @ 180 * Num rand @ 180 * Num rand $ color: Num rand @ Num rand @ Num rand @ 1 ) ) ) ). v1 ap: ( Lines new: VEC(10@10@10, 90@10@10, 90@90@10, 10@90@10, 10@10@10, 50@50@50, 50@50@99) ). Group new vec: v1.

FnordTwo < FnordApp < App < Usr < Obj < Ur

{ < gl < < < < }

init
up init.

model
v1 = (). for(i: 10) do( for (j: 10) do( v1 ap: ( Cube new $ rot: 10*i + 5 @ 10*j + 5 @ 0 $ pos: 10*i + 5 @ 10*j + 5 @ -1 $ scale: 8 @ 8 @ 1 $ color: i / 10 + 0.05 @ 0.2 @ i / 10 + 0.05 @ 1 ) ) ). v1 ap: ( Lines new: VEC(10@10@10, 90@10@10, 90@90@10, 10@90@10, 10@10@10, 50@50@50, 50@50@99) $color: 0@0@1 ). Group new vec: v1.

Foo < Usr < Obj < Ur

{ x y z < < < }

one
me x: 10 me y: 100 me z: 1000

two
x + y + z

x
x

x:
x = a. me

y
y

y:
y = a. me

z
z

z:
z = a. me

FormCreateSubclass < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
cn= me w1. TAG('form'; 'method','GET'; 'action',('/SubmitCreateSubclass',cn)join:'.'; 'Name of subclass: '; TAG('input'; 'name','subcls';); TAG('p'); TAG('input'; 'type','submit'; 'value','Create Subclass';); ).

wtitle
cn= me w1. ('Create Subclass of', cn) join.

Frame < Obj < Ur

currentmethodexpr
"BUILTIN_GETTER"

level
"BUILTIN_GETTER"

localvars
"BUILTIN_GETTER"

prevframe
"BUILTIN_GETTER"

receiver
"BUILTIN_GETTER"

GameFoo < LiveApp < App < Usr < Obj < Ur

{ zoo cx cy wid hei < scr red blue green white black < < < < }

draw
zoo = ( (-1,0); (0,0); (0,-1); (1,-1) ); ( (-1,0); (0,0); (0,1); (1,1) ); ( (-1,0); (0,0); (1,0); (2,0) ); ( (-1,0); (0,0); (0,1); (0,2) ); ( (1,0); (0,0); (0,1); (0,2) ); ( (-1,0); (0,0); (0,-1); (-1,-1) ); ( (-1,0); (0,0); (1,0); (0,1) ). n = num rand: (zoo len). wid = me scr width. hei = me scr height. cx,cy = 8,8. t = Sys secs. WHILE{1} DO{ me clear: 312. FOR{x,y: zoo at: n} DO{ me square: (cx+x,cy+y) ink: me green }. me showZoo. me post. IF{ t + 1 < Sys secs }THEN{ cy = cy + 1. t = Sys secs. } }

eventblk
FN( kind: xy: me onEvent: kind at: xy)

onevent:at:
x,y= b say. "pad= x / wid * hei." IF{AND {(a==0) ; (y > hei/2) ; (x<wid/2)}} THEN{ cx= cx - 1. 'cx is' say: cx. }. "move left" IF{AND {(a==0) ; (y > hei/2) ; (x>wid/2)}} THEN{ cx= cx + 1. 'cx is' say: cx. }. "move right"

showzoo
i= 0. FOR(shape: zoo) DO ( i=i+40. FOR(x,y: shape) DO ( me white rect: (x*10+i, y*10+i) to: (x*10+i+8, y*10+i+8). ). ).

square:ink:
x,y= a. b rect: (30*x, 30*y) to: (30*x+25, 30*y+25).

GamePong < LiveApp < App < Usr < Obj < Ur

{ n s e w ww hei wid bx by vx vy pad hit miss < scr red blue green white black < < < < }

draw
hei= me scr height. wid= me scr width. ww= 20. "wall width." "north, south, east, west boundaries, where ball reflects." n= ww. s= hei - ww. e= wid - ww. w= ww. hit= miss= 0. me white fontSize: 48. "Determine fps by posting twice." bx, by = ww neg, ww neg. vx, vy = 0, 0. pad = hei / 2. me drawPong. me post. me drawPong. me post. me resetBall. WHILE{1} DO{ me moveBall. me drawPong. me post. vx = vx * 1.001. }.

drawpong
me clear: 213. me white rect: (0,0) to: (wid,ww). "top" me white rect: (0,s) to: (wid,hei). "bottom" me white rect: (0,n) to: (w,s). "left" w2 = ww / 2. me blue rect: (bx-w2, by-w2) to: (bx+w2, by+w2). me green rect: (e, pad - ww*1.8) to: (wid, pad + ww*1.8). fps = me scr fps. IF{fps is: nil $not}THEN{fps= fps fmt: '%.2f'}. me white text: (hit str, ':', miss str, ' (', fps, 'fps)')join sw: (2*ww, hei - 2*ww).

eventblk
FN( kind: xy: me onEvent: kind at: xy)

moveball
fps= me scr fps. fps= IF{fps is: nil} THEN{20} ELSE {fps}. bx, by = bx + vx*30 / fps, by + vy*30 / fps. IF(bx <= w)THEN(bx= w + (w-bx). vx = vx neg.). IF(by <= n)THEN(by= n + (n-by). vy = vy neg.). IF(by >= s)THEN(by= s - (by-s). vy = vy neg.). IF{bx >= e}THEN{ IF{by - pad $abs <= ww*1.8} THEN{ "paddle hit." bx= e - (bx-e). vy = vx * (by - pad) / ww. vx = vx neg. hit = hit + 1. }ELSE{ "paddle miss." miss = miss + 1. me resetBall. } }.

onevent:at:
x,y= b say. "pad= x / wid * hei." pad= y.

resetball
bx, by = 2 * ww, ww + (Num rand: hei - 2*ww). "ball position." vx, vy = 8, 4. "ball velocity."

GameTroids < LiveApp < App < Usr < Obj < Ur

{ aa bb ship hei wid < scr red blue green white black < < < < }

draw
hei= me scr height. wid= me scr width. me setup. WHILE{1}DO{me step.}.

eventblk
FN( kind: xy: IF{kind==0}THEN{me onEvent: kind at: xy}. )

newaster
TroidsAster new $ink: me white $sz: 30 $init: me.

newbullet
TroidsThing new $ink: me red $sz: 3 $ttl: 12.0 $init: me.

newship
TroidsThing new $ink: me green $sz: 10 $init: me.

onevent:at:
x,y= b. x,y= x - ship px, y - ship py. "ship-relative" hyp= x*x + y*y pow: 0.5. p,q = x / hyp, y / hyp. IF{bb len < 4} THEN{ bb ap: (me newBullet $px: ship px $py: ship py $vx: p + ship vx $vy: q + ship vy). }. ship vx: ship vx - p * 0.2 . ship vy: ship vy - q * 0.2 .

setup
aa = Vec new. w2,h2= wid / 2, hei / 2. FOR{x: 100, w2, wid - 100}DO{ FOR{y: 100, h2, hei - 100}DO{ IF{OR{x ne: w2; y ne: h2}}THEN{ a= me newAster $px: x $py: y $vx: Num rand * 2 - 1 $vy: Num rand * 2 - 1. aa ap: a. }. }. }. bb = Vec new. "bb ap: (me newBullet $px: wid/2 $py: hei/2 $vx: 1 $vy: 0.3)." me white fontSize: 24. ship= (me newShip $px: wid/2 $py: hei/2 $vx: 0 $vy: 0).

step
me clear: COND( ship ttl < 0 @ 400, aa len < 1 @ 40, 1 @ 202, ). FOR{ast: aa} DO{ ast step: me. ast draw: me. }. FOR{bul: bb} DO{ bul step: me. bul draw: me. }. ship step: me. ship draw: me. "frames per sec" me white text: ((IF( me scr fps is: nil)THEN(0)ELSE(me scr fps)) fmt: '%.2f fps') str sw: (20,40). me post. "check collisions." FOR{ast: aa} DO{ FOR{bul: bb} DO{ dx= ast px - bul px $abs. dy= ast py - bul py $abs. IF{dx+dy < ast sz + bul sz} THEN{ ast ttl: -1. bul ttl: -1. }. }. dx= ast px - ship px $abs. dy= ast py - ship py $abs. IF{dx+dy < ast sz + ship sz} THEN{ ship ttl: -1. ship ink: me red. }. }. "Cleanup expired asteroids." aa= FOR{a: aa}MAP{a}IF{a ttl > 0}. "Cleanup expired bullets." bb= FOR{b: bb}MAP{b}IF{b ttl > 0}.

GetFrame < Expr < Obj < Ur

GetGlobalVar < Expr < Obj < Ur

GetInstVar < Expr < Obj < Ur

GetLocalVar < Expr < Obj < Ur

GetSelf < Expr < Obj < Ur

GGl < Obj < Ur

ambient:
"BUILTIN"

diffuse:
"BUILTIN"

esecs
"BUILTIN"

ex
"BUILTIN"

ey
"BUILTIN"

eye:
"BUILTIN"

framecount
"BUILTIN"

frameinterval
"BUILTIN"

hei
"BUILTIN"

light:
"BUILTIN"

look:
"BUILTIN"

post:
"BUILTIN"

starttime
"BUILTIN"

up:
"BUILTIN"

wid
"BUILTIN"

wires:
"BUILTIN"

GrafAct < Act < App < Usr < Obj < Ur

{ gl graf stop < wid hei path query < < < < }

eventblk
FN( event: xy: me on: event at: xy)

gl
gl

handle:query:
DICT( 'type', 'fnord'; 'value', me; ).

init
me gl ambient: 0.4 @ 0.4 @ 0.4. me gl diffuse: 0.9 @ 0.9 @ 0.9. me gl light: 100 @ 100 @ 100.

post:
me prePost: a. me gl post: a.

prepost:
x = me gl ex. y = me gl ey. me gl light: x @ y @ 100. me gl eye: x @ y @ (x - y)abs * 3. me gl look: 100 - y @ 100 - x @ 0.

run:
me say: 'GrafAct--run:' @ a. gl = a. me init. WHILE(stop not) DO( me step. me prePost: graf. me post: graf. ).

Group < DddNode < Node < Obj < Ur

vec
"BUILTIN"

vec:
"BUILTIN"

GroupCls

new
"BUILTIN"

HelloName < App < Usr < Obj < Ur

handle:query:
DICT( 'type', 'edit'; 'title', 'What''s Your Name?'; 'value', ''; 'action', '/SubmitHelloName'; ).

Ht < Obj < Ur

append:,ap:
"BUILTIN"

HtCls

bold:
TAG('b', a)

box:
TAG('table'; 'border', '1'; TAG('tr', TAG('td'; 'border', '0'; HT(a))) ).

dict:
h= HT(). FOR(k:v: a) DO( h append: TAG('dt', TAG('b', HT(k))). h append: TAG('dd', HT(v)). ). TAG('dl', h).

entity:
"BUILTIN"

link:to:
TAG('a'; 'href',b; a)

linklabelpairs:
HT{ FOR{elem: a} MAP{ IF{ elem len == 3 } THEN{ link,label,extra= elem. } ELSE{ link,label= elem. extra=''. }. HT{' '; Ht nbsp; ' '; TAG{'a'; 'href', link; label}; extra; ' '} }; Ht nbsp; ' ' }

nbsp
Ht entity: 'nbsp'

new:
"BUILTIN"

tag:params:body:
"BUILTIN"

vec:
h= HT(). FOR(x: a) DO( h append: TAG('li', HT(x)). ). TAG('ul', h).

vecvec:
h= HT(). FOR(k,v: a) DO( h append: TAG('dt', TAG('b', HT(k))). h append: TAG('dd', HT(v)). ). TAG('dl', h).

Hub < Obj < Ur

HubCls

dir
"BUILTIN"

read:
"BUILTIN"

write:value:
"BUILTIN"

Ink < Usr < Obj < Ur

circ:r:
"BUILTIN"

color:
"BUILTIN"

dot:
"BUILTIN"

dots:
"BUILTIN"

fontsize:
"BUILTIN"

line:to:
"BUILTIN"

rect:to:
"BUILTIN"

scr
"BUILTIN_GETTER"

text:sw:
"BUILTIN"

thick:
"BUILTIN"

Inspect < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wresult
ww= me wPath split: '.'. CASE( ww len )OF( 1 @ (InspectRoot new wResult), 2 @ ( t = Sys find: (ww at: 1). COND( (t is: nil) @ (InspectSimple new msg: 'nil' $wResult), (t isa: Cls) @ (InspectClass new targ: t $wResult), 1 @ (InspectInst new targ: t $wResult), ) ), )ELSE( 'bad path:' err: ww repr )

InspectClass < WebApp < App < Usr < Obj < Ur

{ targ < path query < < < < }

targ:
targ = a. me.

title
('Inspecting ', targ name)jam

wmid
HT('Cls: ', targ str)

InspectInst < WebApp < App < Usr < Obj < Ur

{ targ < path query < < < < }

targ:
targ = a. me.

title
('Inspecting ', targ oname)jam

wmid
Ht dict: targ peekInstVarsDict

InspectRoot < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

title
'INSPECT'.

wmid
HT( FOR{k:v: Cls all}MAP{ ' [', TAG('a'; 'href', '/Inspect.@' ap: v name; v name), '] ', Ht entity: 'nbsp', } )

InspectSimple < WebApp < App < Usr < Obj < Ur

{ msg < path query < < < < }

msg:
msg = a. me.

title
('Inspect: ', msg str)jam

wmid
HT('Inspect: ', msg str)

JavaMeth < Meth < Obj < Ur

LinearViewPrim < ValViewPrim < BaseViewPrim < Obj < Ur

add:
"BUILTIN"

LinearViewPrimCls

new
"BUILTIN"

Lines < Prim < DddNode < Node < Obj < Ur

LinesCls

new:
"BUILTIN"

ListUnicodePages < App < Usr < Obj < Ur

drawpage:
txt = FOR(i : 256) MAP( i = i + a*256. (i str, ' [', i, '] '). ) implode. DICT( 'type', 'text'; 'title', 'Unicode Page ' append: a str; 'value', txt; ).

handle:query:
ww= a split: '.' . IF( ww len == 2 ) THEN( me drawPage: (ww at: 1) num ) ELSE( me listPages ).

listpages
v = FOR(i : 256) MAP( link = ('|link|/ListUnicodePages.', i str, '|Page ', i str, '|') jam. label = ( 'Page ', i str ) jam. (link, label). ). DICT( 'type', 'list'; 'title', 'Unicode Pages.'; 'value', v; ).

Lit < Expr < Obj < Ur

LiveApp < App < Usr < Obj < Ur

{ scr red blue green white black < < < < }

black
black.

blue
blue.

clear:
scr clear: a

eventblk
nil. "Return a blk FN(kind: xy: ...) if you accept events"

green
green.

handle:query:
block= FN( scr: me onLive ). DICT( 'type', 'live'; 'value', block; 'event', me eventBlk).

init
"nothing to do." me.

newink:
scr newInk: a

nonmain

onlive
red= scr newInk: 900. green= scr newInk: 90. blue= scr newInk: 9. white= scr newInk: 999. black= scr newInk: 0. 'draw...' say: ('src=', scr) jam. me draw. scr post. me.

post
scr post

red
red.

scr
scr.

white
white.

LValue < Expr < Obj < Ur

recallframe:
"BUILTIN"

storeframe:value:
"BUILTIN"

LvInstName < LvName < LValue < Expr < Obj < Ur

LvList < LvTuple < LValue < Expr < Obj < Ur

LvLocalName < LvName < LValue < Expr < Obj < Ur

LvName < LValue < Expr < Obj < Ur

index
"BUILTIN_GETTER"

name
"BUILTIN_GETTER"

LvTuple < LValue < Expr < Obj < Ur

arr
"BUILTIN_GETTER"

MakeVec < Expr < Obj < Ur

Mat < Obj < Ur

clone
"BUILTIN"

mulm:
"BUILTIN"

mulv:
"BUILTIN"

rot:
"BUILTIN"

rot:axis:
"BUILTIN"

scale:
"BUILTIN"

trans:
"BUILTIN"

vec
"BUILTIN"

vec:
"BUILTIN"

MatCls

new
"BUILTIN"

Meth < Obj < Ur

abbrev
"BUILTIN_GETTER"

applyframe:receiver:args:
"BUILTIN"

doc
"BUILTIN_GETTER"

name
"BUILTIN_GETTER"

oncls
"BUILTIN_GETTER"

MethTop < Expr < Obj < Ur

body
"BUILTIN_GETTER"

methname
"BUILTIN_GETTER"

numargs
"BUILTIN_GETTER"

numlocals
"BUILTIN_GETTER"

oncls
"BUILTIN_GETTER"

sends
"BUILTIN"

source
"BUILTIN_GETTER"

Motion < Obj < Ur

action
"BUILTIN"

x
"BUILTIN"

y
"BUILTIN"

Node < Obj < Ur

Num < Obj < Ur

!=,ne:
"BUILTIN"

%
"BUILTIN"

&
"BUILTIN"

*
"BUILTIN"

+
"BUILTIN"

-
"BUILTIN"

/
"BUILTIN"

<,lt:
"BUILTIN"

<=,le:
"BUILTIN"

==,eq:
"BUILTIN"

>,gt:
"BUILTIN"

>=,ge:
"BUILTIN"

^
"BUILTIN"

abs
"BUILTIN"

acos
"BUILTIN"

asin
"BUILTIN"

atan
"BUILTIN"

chr
"BUILTIN"

cos
"BUILTIN"

cosh
"BUILTIN"

exp
"BUILTIN"

floor
"BUILTIN"

fmt:
"BUILTIN"

idiv:
"BUILTIN"

imod:
"BUILTIN"

int
"BUILTIN"

ln
"BUILTIN"

log10
"BUILTIN"

neg
"BUILTIN"

num
"BUILTIN"

pow:
"BUILTIN"

range
"BUILTIN"

round
"BUILTIN"

sgn
"BUILTIN"

sin
"BUILTIN"

sinh
"BUILTIN"

sq
"BUILTIN"

sqrt
"BUILTIN"

tan
"BUILTIN"

tanh
"BUILTIN"

|
"BUILTIN"

NumCls

e
"BUILTIN"

pi
"BUILTIN"

rand
"BUILTIN"

rand:
"BUILTIN"

tau
"BUILTIN"

Obj < Ur

!=
me ne: a

<
me lt: a

<=
me le: a

==
me eq: a

>
me gt: a

>=
me ge: a

apply:args:
"BUILTIN"

cant
"BUILTIN"

cant:
"BUILTIN"

err
"BUILTIN"

err:
"BUILTIN"

eval:
"BUILTIN"

eval:arg:
"BUILTIN"

eval:arg:arg:
"BUILTIN"

flattento:
a ap: me. me.

is:
"BUILTIN"

isa:
"BUILTIN"

macro:and:
"BUILTIN"

macro:case:of:
"BUILTIN"

macro:case:of:else:
"BUILTIN"

macro:cond:
"BUILTIN"

macro:dict:
"BUILTIN"

macro:fn:
"BUILTIN"

macro:for:do:
"BUILTIN"

macro:for:init:reduce:
"BUILTIN"

macro:for:map:
"BUILTIN"

macro:for:map:if:
"BUILTIN"

macro:ht:
"BUILTIN"

macro:if:then:
"BUILTIN"

macro:if:then:elif:then:
"BUILTIN"

macro:if:then:elif:then:else:
"BUILTIN"

macro:if:then:else:
"BUILTIN"

macro:or:
"BUILTIN"

macro:tag:
"BUILTIN"

macro:try:catch:
"BUILTIN"

macro:vec:
"BUILTIN"

macro:while:do:
"BUILTIN"

must
"BUILTIN"

must:
"BUILTIN"

nearestint
"BUILTIN"

not
"BUILTIN"

say
"BUILTIN"

say:
"BUILTIN"

syshash
"BUILTIN"

OldStar < App < Usr < Obj < Ur

handle:query:
"Event Location." ex, ey = b at: 'ex', b at: 'ey'. "Default Location." ex = IF( ex equals: nil )THEN( 300 )ELSE( ex num ). ey = IF( ey equals: nil )THEN( 300 )ELSE( ey num ). v = FOR( i: 100 )MAP( theta = i / 10 . x= theta sin * 290 + 300. y= theta cos * 290 + 300. VEC('line', ex, ey, x, y). ) . DICT( 'type', 'draw'; 'title', 'Drawing a line'; 'value', v; 'width', 600; 'height', 600; ).

Orphan < Usr < Obj < Ur

handle:query:
'This class (', me cls name, ') is an Orphan. Check its superclass.')jam err. DICT{ 'type', 'text'; 'value', ( 'This class <', me cls name, '> is an Orphan. Check its superclass.')jam; }

Parser < Obj < Ur

PongGame < DrawAct < Act < App < Usr < Obj < Ur

{ n s e w ww bx by vx vy pad hit miss < scr red blue green white black stop < wid hei path query < < < < }

drawpong
me clear: 213. me white rect: (0,0) to: (wid,ww). "top" me white rect: (0,s) to: (wid,hei). "bottom" me white rect: (0,n) to: (w,s). "left" w2 = ww / 2. me blue rect: (bx-w2, by-w2) to: (bx+w2, by+w2). me green rect: (e, pad - ww*1.8) to: (wid, pad + ww*1.8). fps = me scr fps. IF{fps is: nil $not}THEN{fps= fps fmt: '%.2f'}. me white text: (hit str, ':', miss str, ' (', fps, 'fps)')join sw: (2*ww, hei - 2*ww).

init
up init. ww= 20. "wall width." "north, south, east, west boundaries, where ball reflects." n= ww. s= hei - ww. e= wid - ww. w= ww. hit= miss= 0. me white fontSize: 48. "Determine fps by posting twice." bx, by = ww neg, ww neg. vx, vy = 0, 0. pad = hei / 2. FOR(2)DO( me resetBall. me drawPong. me post. ). me resetBall.

moveball
fps= me scr fps. fps= IF{fps is: nil} THEN{20} ELSE {fps}. bx, by = bx + vx*30 / fps, by + vy*30 / fps. IF(bx <= w)THEN(bx= w + (w-bx). vx = vx neg.). IF(by <= n)THEN(by= n + (n-by). vy = vy neg.). IF(by >= s)THEN(by= s - (by-s). vy = vy neg.). IF{bx >= e}THEN{ IF{by - pad $abs <= ww*1.8} THEN{ "paddle hit." bx= e - (bx-e). vy = vx * (by - pad) / ww. vx = vx neg. hit = hit + 1. }ELSE{ "paddle miss." miss = miss + 1. me resetBall. } }.

on:at:
x,y= b say. "pad= x / wid * hei." pad= y.

resetball
bx, by = 2 * ww, ww + (Num rand: hei - 2*ww). "ball position." vx, vy = 8, 4. "ball velocity."

step
me moveBall. me drawPong. vx = vx * 1.001.

Prim < DddNode < Node < Obj < Ur

Print < DdNode < Node < Obj < Ur

PrintCls

new:
"BUILTIN"

PutInstVar < Expr < Obj < Ur

PutLocalVar < Expr < Obj < Ur

PutLValue < Expr < Obj < Ur

Rec < DdNode < Node < Obj < Ur

RecCls

new:
"BUILTIN"

RedPlane < Usr < Obj < Ur

{ gl px py pz vx vy vz roll pitch yaw lasttime deltaT deltaTSum DeltaTCount lx ly lz lw tx ty tz tw ax ay az speed fric frac tvx tvy tvz ex ey throttle zoom < < < }

current
deltaTSum = deltaTSum + deltaT. deltaTCount = deltaTCount + 1. w= gl wid. h= gl hei - 1. throtP = throttle * w. zoomP = zoom / 100 * w. Group new vec: VEC( me prototype $ pos: px @ py @ pz $ scale: 2 @ 2 @ 2 $ rot: roll @ pitch @ yaw , Lines new: (0@py@pz, 100@py@pz) $color: 0.2@0.2@0.2 , Lines new: (px@0@pz, px@100@pz) $color: 0.2@0.2@0.2 , Lines new: (px@py@0, px@py@100) $color: 0.2@0.2@0.2 , Cube new $ scale: 0.1 @ 0.1 @ 0.1 $ pos: 0 @ py @ pz $ color: 0@0.8@0 , Cube new $ scale: 0.1 @ 0.1 @ 0.1 $ pos: 100 @ py @ pz $ color: 0@0.8@0 , Cube new $ scale: 0.1 @ 0.1 @ 0.1 $ pos: px @ 0 @ pz $ color: 0@0.8@0 , Cube new $ scale: 0.1 @ 0.1 @ 0.1 $ pos: px @ 100 @ pz $ color: 0@0.8@0 , Cube new $ scale: 0.1 @ 0.1 @ 0.1 $ pos: px @ py @ 0 $ color: 0@0.8@0 , Cube new $ scale: 0.1 @ 0.1 @ 0.1 $ pos: px @ py @ 50 $ color: 0@0.8@0 , PR('pos:', px, py, pz, 'vel:', vx, vy, vz, 'speed:', speed) , PR('thrust:', tx, ty, tz, tw, 'lift:', lx, ly, lz, lw, 'acc:', ax, ay, az) , PR('fric:', fric, 'frac:', frac, 'tmp vel:', tvx, tvy, tvz) , PR('sw_fps: ', (1.0 / deltaT), (deltaTCount / deltaTSum), 'f:', deltaTCount, 'ms/f:', 1000 * deltaT) , PR('zoom:', zoom, 'throttle: ', throttle) , Seg new: (0@0, throtP @0, 0@1, w@1, 0@2, throtP @2,) , Rec new: (0@5, throtP @20) , Seg new: (0@h, zoomP@h, 0@h - 1, w@h - 1, 0@h - 2, zoomP@h - 2,) )

init:
gl = a. lasttime = Sys secs. px,py,pz = 25, 25, 1. vx,vy,vz = 0, 0, 0. roll,pitch,yaw = 0,0,0. deltaTSum = 0. deltaTCount = 0. ex = ey = 50. throttle = 0. zoom = 50. me.

macro:pr:
bb = b value. Print new: ( FOR(x: bb flat) MAP( IF(x cls equals: Num) THEN(x fmt: '%.2f') ELSE(x str) ) join: ' ' )

prototype
Group new vec: VEC( "Fusalage along the X axis" Cube new $ scale: 1 @ 0.2 @ 0.2 $ color: 1 @ 0 @ 0 @ 1, "Wings along the Y axis" Cube new $ scale: 0.3 @ 0.8 @ 0.1 $ color: 0 @ 1 @ 0 @ 1 $ pos: 0.2 @ 0 @ 0.1, ).

step
"me tweak." thistime = Sys secs. deltaT = (thistime - lasttime). "Yoke." IF(gl ey > 90) THEN(throttle = gl ex / 100) ELIF(gl ey < 10) THEN(zoom = gl ex) ELSE(ex,ey= gl ex - 50, gl ey - 50.). roll = ex / 1.5. pitch = ey / 1.5. yaw = yaw - deltaT * roll / 8. "Compute thrust in forward direction." m = Mat new rot: roll @ pitch @ yaw. tx,ty,tz,tw = m mulv: throttle @ 0 @ 0 @ 1. "Lift." kLift = throttle * 0.35 "0.55". speed= (vx, vy, vz) abs. lx,ly,lz,lw = m mulv: 0 @ 0 @ speed*kLift @ 1. "Gravity." kGrav = -0.60 "-0.5". "Total Acceleration (before drag)." ax,ay,az= tx+lx, ty+ly, tz+lz+kGrav. "Velocity." tvx,tvy,tvz= vx+ax, vy+ay, vz+az. "Drag." kDrag= 0.1. speed= (vx, vy, vz) abs. fric= speed * speed * kDrag. IF(fric > 1)THEN(fric= 1). frac= 1 - fric. vx,vy,vz= frac*tvx, frac*tvy, frac*tvz. px,py,pz = px+vx*deltaT, py+vy*deltaT, pz+vz*deltaT. "--IF(pz < 0)THEN(pz = 0). IF(pz > 51)THEN(pz = 50). --" IF(pz < 0)THEN(pz = 0). IF(pz > 50)THEN(pz = 50). IF(px < 0)THEN(px = px + 100). IF(px > 101)THEN(px = px - 100). IF(py < 0)THEN(py = py + 100). IF(py > 101)THEN(py = py - 100). " 'deltaT' say: deltaT. 'roll' say: ((Mat new rot: roll @ 0 @ 0)say mulv: (1@0@0@1)). 'pitch' say: ((Mat new rot: 0 @ pitch @ 0)say mulv: (1@0@0@1)). 'yaw' say: ((Mat new rot: 0 @ 0 @ yaw)say mulv: (1@0@0@1)). 'roll,pitch,yaw' say: (roll,pitch,yaw). 'tx,ty,tz' say: tx @ ty @ tz. 'lx,ly,lz' say: lx @ ly @ lz. 'ax,ay,az' say: ax @ ay @ az. 'vx,vy,vz' say: vx @ vy @ vz. 'px,py,pz' say: px @ py @ pz. " "--gl eye: px - 15*tx @ py - 15*ty @ pz - 15*tz + 5.--" gl eye: px - zoom @ py - zoom sqrt @ pz + zoom / 4 + 5. gl look: px @ py @ pz. gl up: 0 @ 0 @ 1. lasttime = thistime.

Rex < Obj < Ur

match:
"BUILTIN"

RexCls

new:
"BUILTIN"

SaidWhat < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
Ht vec: Sys said

Screen < Usr < Obj < Ur

.
"BUILTIN"

clear:
"BUILTIN"

fps
"BUILTIN"

height
"BUILTIN_GETTER"

post
"BUILTIN"

width
"BUILTIN_GETTER"

ScreenCls

work:
"BUILTIN"

Seg < DdNode < Node < Obj < Ur

SegCls

new:
"BUILTIN"

Send < Expr < Obj < Ur

args
"BUILTIN_GETTER"

msg
"BUILTIN_GETTER"

rcvr
"BUILTIN_GETTER"

sourceloc
"BUILTIN_GETTER"

Seq < Expr < Obj < Ur

SnapshotWorld < WebApp < App < Usr < Obj < Ur

{ snap < path query < < < < }

wmid
x= File read: ('w_', Sys worldname, '.txt')jam lower. File write: snap value: x. HT('ok ', snap).

wtitle
snap = ('w_zzz', (Sys secs % 999 $floor), '.txt')jam. snap.

Str < Obj < Ur

applysubstitutions
"BUILTIN"

explode
"BUILTIN"

ord
"BUILTIN"

Strip < Prim < DddNode < Node < Obj < Ur

SubmitCreateSubclass < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
cn= me w1. c= cls at: cn. subcn= me wQuery at: 'subcls'. subc= Cls at: subcn. IF{ subc }THEN{ supsubc= subc supercls. IF{ supsubc equals: (cls at: cn) }THEN{ "ok" }ELSE{ ('CONFLICT:',subc,'already exists and has superclass',supsubc)join err. } }ELSE{ subc= c defsub: subcn. }. HT link: subc name to: (('/BrowseClass', subc name) join: '.').

wtitle
cn= me w1. subcn= me wQuery at: 'subcls'. ('Created subclass', subcn, 'of', cn) join.

SubmitEditFile < App < Usr < Obj < Ur

handle:query:
fn= (a split: '.' $at: 1, '.txt')jam. x= b at: 'text'. File write: fn value: x. DICT( 'type', 'text'; 'title', fn; 'value', ('Saved ', fn, ', ', x len, ' bytes.')jam ).

nonmain

SubmitEval < App < Usr < Obj < Ur

handle:query:
z= Tmp new eval: ( b at: 'text' ). DICT( 'type', 'text'; 'title', 'doit: ' ap: (b at: 'text'); 'value', z str; ).

nonmain

SubmitHelloName < App < Usr < Obj < Ur

handle:query:
z= b at: 'text'. DICT( 'type', 'text'; 'title', 'I know your name.'; 'value', ('Your name is ', z, '.') jam; ).

nonmain

SubmitInstVars < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

nonmain

wresult
cn= me w1. c= Cls at: cn. vars= me wQuery at: 'vars'. c defvars: vars. url= ('/BrowseClass', cn) join: '.'. BrowseClass new handle: url query: Dict new $ at: 'toast' put: 'Defined vars'.

SubmitMethod < App < Usr < Obj < Ur

handle:query:
clss= Cls all . cname= b at: 'ClassName' . mname= b at: 'MethodName' . co= clss at: cname lower . z= co definemethod: mname abbrev: '' doc: '' code: ( b at: 'text' ) . url= ('/Browse.', cname,)jam. 'Browse url=' say: url. z= Browse new handle: url query: DICT(). 'Browse returns=' say: z. z.

nonmain

SubmitNewMethod < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

nonmain

wresult
cn,mn= me w1, me wQuery at: 'method'. c= Cls at: cn. clsmeth= me wQuery at: 'clsmeth'. IF{ clsmeth }THEN{ x = c cls }ELSE{ x = c }. x defineMethod: mn abbrev: '' doc: '' code: '"TODO"' . url= ('/BrowseClass', cn) join: '.'. BrowseClass new handle: url query: Dict new $ at: 'toast' put: 'Defined method'.

Super < Ur

SwitchWorld < App < Usr < Obj < Ur

handle:query:
r = Rex new: 'w_([a-z0-9]+).txt'. worlds = Vec new. 'File dir ==' say: File dir. FOR(f : File dir) DO( 'r==' say: r. 'f0==' say: (f at: 0). m = r match: (f at: 0). 'm==' say: m. IF(m) THEN( worlds append: (m at: 1). 'worlds' say: worlds. ). ). links = Ht( FOR(w : worlds) MAP ( Ht( Tag('a'; 'href', '/SwitchWorldSubmit?world=' ap: w; w) say, ' | ' ) say ) say ) say. 'links' say: links. br = Tag('br'). i1 = Tag('input'; 'name', 'world'; 'value', ''). s = Tag('input'; 'type', 'submit'; 'value', 'SwitchWorld'). form = Tag( 'form'; 'method', 'get'; 'action', '/SwitchWorldSubmit'; 'Switch to a differnt world: '; i1; br; s). body = Ht( 'Worlds: ', links, br, form ). DICT( 'type', 'html'; 'value', Tag('html', Tag('body', body))).

SwitchWorldSubmit < App < Usr < Obj < Ur

handle:query:
DICT( 'type', 'world'; 'value', b at: 'world'; ).

Sys < Obj < Ur

SysCls

fail
"BUILTIN"

fail:
"BUILTIN"

find:
"BUILTIN"

nanos
"BUILTIN"

said
"BUILTIN"

secs
"BUILTIN"

sleep:
"BUILTIN"

trigraphs
"BUILTIN"

worldfilename
"BUILTIN"

worldname
"BUILTIN"

TextValViewPrim < ValViewPrim < BaseViewPrim < Obj < Ur

text:
"BUILTIN"

TextValViewPrimCls

new
"BUILTIN"

Tmp < Usr < Obj < Ur

Top < App < Usr < Obj < Ur

handle:query:
"Default class for handling ':'." DICT{ 'type' , 'list'; 'title' , 'TOP'; 'value' , VEC{ '/BrowseCLASSES (NEW)'; '/VuDemo'; '/FnordCheeseDemo'; '/FnordCannon'; '/FnordDebugRot'; '/FnordApp'; '/BlocksDemo'; '/FnordTwo'; '/FnordMotherShip'; '/FnordFlight'; '/DualFlight'; '/GameFoo'; '/GamePong'; '/PongGame'; '/DrawAct'; '/GameTroids'; '/SnapshotWorld'; '/EVAL CODE (DoIt, PrintIt)'; '/BROWSE & EDIT CODE (old)'; '/BrowseWorlds (broken)'; '/BrowseFiles'; '/BrowseHub'; '/Inspect (not yet useful)'; '/DemoLiveLifeRedBlue'; '/DemoLiveLife'; '/DemoLiveLissajous'; '/DemoLiveSierpinski'; '/DemoLivePaint'; '/DemoStar'; '/DemoLife'; '/DemoLissajous'; '/DrawLine'; '/DemoForm'; '/DrawRect'; '/OldStar'; '/ListUnicodePages'; '/SwitchWorld (broken)'; }}.

TopCls

footerbuttons
Vec( '|link|/RESET|[RESET]|'; '|link|/TOP|[Top]|'; '|link|/BROWSE|[Browse]|'; '|link|/Eval|[Eval]|'; '|link|/DemoLife|[DemoLife]|'; '|link|/DrawLine|[DrawLine]|'; '|link|/DemoLiveLissajous|[DemoLiveLissajous]|'; '|link|/DemoStar|[DemoStar]|'; '|link|/DemoLissajous|[DemoLissajous]|'; '|link|/DrawRect|[DrawRect]|'; '|link|/OldStar|[OldStar]|'; '|link|/DemoHt|[DemoHt]|'; '|link|/SwitchWorld|[SwitchWorld]|'; '|link|/ListUnicodePages|[ListUnicodePages]|'; )

TroidsAster < TroidsThing < Usr < Obj < Ur

{ < px py vx vy sz ink xyxy ww hh ttl < < < }

draw:
x1,y1= me xyxy at: -1. FOR{x2,y2: me xyxy} DO{ FOR{w: me ww}DO{ FOR{h: me hh}DO{ me ink line: (w + me px+x1, h + me py+y1) to: (w + me px+x2, h + me py+y2). }. }. x1,y1= x2,y2. }

init:
up init: a. sixty= Num pi / 3. me xyxy: FOR{i:6}MAP{ r= 0.5 + 0.5 * Num rand. rad,theta= me sz * r, i * sixty. (rad * theta cos, rad * theta sin). }. me.

TroidsThing < Usr < Obj < Ur

{ px py vx vy sz ink xyxy ww hh ttl < < < }

draw:
FOR{w: ww}DO{ FOR{h: hh}DO{ ink rect: (w + px - sz, h + py - sz) to: (w + px + sz, h + py + sz). }. }.

hh
hh

init:
hei= a scr height. wid= a scr width. xyxy= VEC{ sz neg, sz; sz neg, sz neg; sz, sz neg; sz, sz; }. ww= wid neg, 0, wid. hh= hei neg, 0, hei. IF{ttl is: nil}THEN{ttl= 999999999}. me.

ink
ink

ink:
ink= a. me.

px
px

px:
px= a. me.

py
py

py:
py= a. me.

step:
hei= a scr height. wid= a scr width. fps= a scr fps. fps= IF{fps is: nil} THEN{20} ELSE {fps}. px= px + vx * 100 / fps. py= py + vy * 100 / fps. px= px % wid + wid $ % wid. py= py % hei + hei $ % hei. ttl= ttl - 1 / fps.

sz
sz

sz:
sz= a. me.

ttl
ttl

ttl:
ttl= a. me.

vx
vx

vx:
vx= a. me.

vy
vy

vy:
vy= a. me.

ww
ww

xyxy
xyxy

xyxy:
xyxy= a. me.

Undefined < Obj < Ur

Ur

cls
"BUILTIN_GETTER"

does:
"BUILTIN"

dumpvarmap
"BUILTIN"

equals:
"BUILTIN"

hash
"BUILTIN"

peekinstvars
"BUILTIN_GETTER"

peekinstvarsdict
"BUILTIN"

pokeinstvarsdict:
"BUILTIN"

repr
"BUILTIN"

str
"BUILTIN"

truth
"BUILTIN"

Usr < Obj < Ur

nonmain

oid
"BUILTIN"

omention
"BUILTIN"

oname
"BUILTIN"

opath
"BUILTIN"

UsrCls < Cls < Obj < Ur

find:
"BUILTIN"

new
"BUILTIN"

UsrMeth < Meth < Obj < Ur

src
"BUILTIN_GETTER"

top
"BUILTIN"

ValViewPrim < BaseViewPrim < Obj < Ur

Vec < Obj < Ur

a0
me at: 0

a1
me at: 1

a2
me at: 2

a3
me at: 3

abs
"BUILTIN"

append:,ap:
"BUILTIN"

at:
"BUILTIN"

at:put:,at:p:
"BUILTIN"

cat:
"BUILTIN"

cross:
"BUILTIN"

dot:
"BUILTIN"

eq:
IF( a cls name equals: 'Vec' )THEN( IF( me len == a len )THEN( FOR( i: me len )MAP( (me at: i) == (a at: i). ). )ELSE( 'Vec.== got different length Vecs' err: VEC(me len, a len) ) )ELSE( 'Vec.== expected Vec argument, but got' err: a cls )

flat
z= Vec new. me flattenTo: z. z.

flattento:
FOR(x: me) DO( x flattenTo: a ). me.

implode,imp
"BUILTIN"

jam
"BUILTIN"

join
"BUILTIN"

join:
"BUILTIN"

len
"BUILTIN"

unit
"BUILTIN"

VecCls

append:,ap:
"BUILTIN"

new
"BUILTIN"

pairs:
z= Vec new. FOR{ k,v: a }DO{ z at: k put: v. }. z.

VuDemo < Act < App < Usr < Obj < Ur

{ < wid hei path query < < < < }

handle:query:
DICT( 'type', 'usr'; 'value', me; )

WebApp < App < Usr < Obj < Ur

{ path query < < < < }

handle:query:
path,query = a,b. me wResult.

nonmain

w1
path split: '.' $ at: 1

w2
path split: '.' $ at: 2

wbgcolor
'black'

wbody
TAG('body', TAG('p', HT{me wTop}), TAG('p', HT{me wMid}), TAG('hr'), TAG('p', HT{me wBottom}))

wbottom
HT( FOR(url,label: me wFootLinks) MAP( ' [', TAG('a'; 'href',url; label), '] ', Ht entity: 'nbsp', ) )

wfgcolor
'white'

wfontfamily
'sans-serif'

wfontsize
'150%'

wfontweight
'200'

wfootlinks
'/Top', 'Top'; '/Inspect.' ap: me opath, 'InspectSelf'; '/InspectClasses', 'InspectClasses'; '/Browse', 'Browse'; '/BrowseClasses', 'Classes'; '/BrowseFiles', 'Files'; '/BrowseHub', 'Hub'; '/BrowseWorlds', 'Worlds';

whead
HT{ TAG{'title', me wTitle}, TAG{'style', me wStyle}, }

whtml
TAG('html', me wHead, me wBody)

wmid
HT('Hello World! This is WebApp:wMid. Override me.')

wpath
path

wquery
query

wresult
DICT( 'type', 'html'; 'value', me wHtml; 'title', me wTitle; ).

wstyle
('body{ color:', me wFgColor, '; background-color:', me wBgColor, '; font-family:', me wFontFamily, '; font-size:', me wFontSize, '; font-weight:', me wFontWeight, '; } h1{ font-family: serif; font-size: 200%; font-weight: 300; } ',) jam

wtitle
me opath

wtop
TAG('h3', me wTitle)

WorldFetch < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
wn=me w1. fn= ('w_', wn lower, '.txt')jam. 'filename' say: fn. nl=VEC{10,} implode. guts= Hub read: fn. 'guts cls' say: guts cls. guts must: FN( VEC{'Cannot read world', wn, 'from the Hub.'}join ). lines= guts split: nl. sb= Buf new. state= 0. FOR{s: lines} DO{ IF{s == '>>>>>>>>'}THEN{state=0}. IF{state==1}THEN{sb ap: s $ap: nl}. IF{s == '<<<<<<<<'}THEN{state=1}. }. File write: fn value: sb str. p= '/BrowseWorlds'; '(BrowseWorlds)'. HT{ 'Sync down successful.'; TAG{'p'}; Ht linkLabelPairs: (p,); }

wtitle
wn=me w1. ('Fetch World:', wn) join.

WorldShareUp < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
wn=me w1. cfg= Config load. cfg d at: wn put: 's'. cfg save. p= ('/WorldSyncUp', wn) join: '.'; '(SyncUp)'. HT{ 'World marked to sync up.'; TAG{'p'}; Ht linkLabelPairs: (p,); }

wtitle
wn=me w1. ('Share World:', wn) join.

WorldSyncUp < WebApp < App < Usr < Obj < Ur

{ < path query < < < < }

wmid
wn=me w1. fn= ('w_', wn lower, '.txt')jam. Hub write: fn value: (File read: fn). p= '/BrowseWorlds'; '(BrowseWorlds)'. HT{ 'Sync up successful.'; TAG{'p'}; Ht linkLabelPairs: (p,); }

wtitle
wn=me w1. ('SyncUp World:', wn) join.

Method CrossReference

!=
Obj  
!=,ne:
Num  
%
Num  
&
Num  
*
Num  
+
Num  
-
Num  
.
Screen  
/
Num  
<
Obj  
<,lt:
Num  
<=
Obj  
<=,le:
Num  
==
Obj  
==,eq:
Num  
>
Obj  
>,gt:
Num  
>=
Obj  
>=,ge:
Num  
^
Num  
a0
Vec  
a1
Vec  
a2
Vec  
a3
Vec  
abbrev
Meth  
abs
Num   Vec  
acos
Num  
action
Motion  
add:
LinearViewPrim  
all
ClsCls  
allmeths
Cls  
ambient:
GGl  
append:,ap:
Buf   BufCls   Ht   Vec   VecCls  
append:value:
FileCls  
apply:args:
Obj  
applyframe:receiver:args:
Meth  
applysubstitutions
Str  
args
Send  
arr
LvTuple  
asin
Num  
at:
Cls   ClsCls   Dict   Vec  
at:put:
Dict  
at:put:,at:p:
Vec  
atan
Num  
basicinit
DrawApp  
basicstep
DrawApp  
black
DrawAct   LiveApp  
blue
DrawAct   LiveApp  
body
MethTop  
bold:
HtCls  
box:
HtCls  
cant
Obj  
cant:
Obj  
canx
DemoLife  
cany
DemoLife  
cat:
Vec  
chr
Num  
circ:r:
Ink  
clear:
DrawAct   LiveApp   Screen  
clone
Mat  
cls
Ur  
color
DddNode  
color:
DddNode   Ink  
cos
Num  
cosh
Num  
cross:
Vec  
current
RedPlane  
currentmethodexpr
Frame  
d
Config  
d:
Config  
definemethod:abbrev:doc:code:,defmeth:a:d:c:
Cls  
defsub:
Cls  
defvars:
Cls  
delete:
FileCls  
delx
DemoLife   DemoLiveLife  
dely
DemoLife   DemoLiveLife  
depth
Expr  
dict:
HtCls  
diffuse:
GGl  
dir
Dict   FileCls   HubCls  
doc
Meth  
does:
Ur  
dot:
Ink   Vec  
dots:
Ink  
draw
DemoLife   DemoLiveHappyLine   DemoLiveHappyRect   DemoLiveLife   DemoLiveLissajous   DemoLiveLissajousSimple   DemoLivePaint   DemoLiveSierpinski   GameFoo   GamePong   GameTroids  
draw:
TroidsAster   TroidsThing  
drawpage:
ListUnicodePages  
drawpong
GamePong   PongGame  
dumpvarmap
Ur  
e
NumCls  
embargo
DemoLiveLife  
embargo:
DemoLiveLife  
entity:
HtCls  
eq:
Vec  
equals:
Ur  
err
Obj  
err:
Obj  
esecs
GGl  
eval:
Obj  
eval:arg:
Obj  
eval:arg:arg:
Obj  
evalframe:
Expr  
eventblk
DemoLiveLife   DemoLivePaint   DrawAct   GameFoo   GamePong   GameTroids   GrafAct   LiveApp  
ex
GGl  
exp
Num  
explode
Str  
ey
GGl  
eye:
GGl  
fail
SysCls  
fail:
SysCls  
find:
SysCls   UsrCls  
flat
Vec  
flattento:
Obj   Vec  
floor
Num  
fmt:
Num  
fontsize:
Ink  
footerbuttons
TopCls  
fps
Screen  
framecount
GGl  
frameinterval
GGl  
front
Expr  
gl
FnordApp   GrafAct  
green
DrawAct   LiveApp  
handle:query:
BarApp   Browse   BrowseFile   BrowseFiles   BrowseHub   BrowseHubFile   DemoForm   DemoFormSubmit   DemoHt   DemoLife   DrawAct   DrawApp   DrawLine   DrawRect   DualFlight   EditFile   EditMethod   Eval   FnordApp   GrafAct   HelloName   ListUnicodePages   LiveApp   OldStar   Orphan   SubmitEditFile   SubmitEval   SubmitHelloName   SubmitMethod   SwitchWorld   SwitchWorldSubmit   Top   VuDemo   WebApp  
hash
Ur  
hei
Act   DrawAct   GGl  
hei:
Act  
height
Screen  
hh
TroidsThing  
idiv:
Num  
imod:
Num  
implode,imp
Vec  
index
LvName  
init
DemoLissajous   DemoStar   DrawAct   DrawApp   FnordApp   FnordCannon   FnordCheeseDemo   FnordDebugRot   FnordFlight   FnordRandom   FnordTwo   GrafAct   LiveApp   PongGame  
init:
RedPlane   TroidsAster   TroidsThing  
initp
DemoLife  
initstate
DemoLiveLife   DemoLiveLifeRedBlue  
ink
TroidsThing  
ink:
TroidsThing  
int
Num  
is:
Obj  
isa:
Obj  
jam
Vec  
join
Vec  
join:
Vec  
len
Dict   Vec  
level
Frame  
lifestep
DemoLiveLife   DemoLiveLifeRedBlue  
light:
GGl  
line:to:
DrawApp   Ink  
link:to:
HtCls  
linklabelpairs:
HtCls  
listpages
ListUnicodePages  
ln
Num  
load
ConfigCls  
localvars
Frame  
log10
Num  
look:
GGl  
macro:and:
Obj  
macro:case:of:
Obj  
macro:case:of:else:
Obj  
macro:cond:
Obj  
macro:dict:
Obj  
macro:fn:
Obj  
macro:for:do:
Obj  
macro:for:init:reduce:
Obj  
macro:for:map:
Obj  
macro:for:map:if:
Obj  
macro:ht:
Obj  
macro:if:then:
Obj  
macro:if:then:elif:then:
Obj  
macro:if:then:elif:then:else:
Obj  
macro:if:then:else:
Obj  
macro:or:
Obj  
macro:pr:
RedPlane  
macro:tag:
Obj  
macro:try:catch:
Obj  
macro:vec:
Obj  
macro:while:do:
Obj  
main
BaseViewPrim  
match:
Rex  
methname
MethTop  
meths
Cls  
model
BlocksDemo   FnordApp   FnordCannon   FnordCheeseDemo   FnordDebugRot   FnordFlight   FnordRandom   FnordTwo  
modelground
FnordFlight  
moveball
GamePong   PongGame  
msg
Send  
msg:
InspectSimple  
mulm:
Mat  
mulv:
Mat  
must
Obj  
must:
Obj  
name
Cls   LvName   Meth  
nanos
SysCls  
nbsp
HtCls  
nearestint
Obj  
neg
Num  
new
BufCls   CubeCls   DictCls   GroupCls   LinearViewPrimCls   MatCls   TextValViewPrimCls   UsrCls   VecCls  
new:
HtCls   LinesCls   PrintCls   RecCls   RexCls   SegCls  
newaster
GameTroids  
newbullet
GameTroids  
newink:
DrawAct   LiveApp  
newship
GameTroids  
nonmain
App   DrawApp   EditMethod   LiveApp   SubmitEditFile   SubmitEval   SubmitHelloName   SubmitInstVars   SubmitMethod   SubmitNewMethod   Usr   WebApp  
not
Obj  
notes:
BrowseWorlds  
num
Num  
numargs
MethTop  
numlocals
MethTop  
numx
DemoLife   DemoLiveLife  
numy
DemoLife   DemoLiveLife   DemoLiveLifeLarge   DemoLiveLifeSmall  
oid
Usr  
omention
Usr  
on:at:
DrawAct   PongGame  
oname
Usr  
oncls
Meth   MethTop  
one
Bar   Foo  
onevent:at:
DemoLivePaint   GameFoo   GamePong   GameTroids  
onlive
LiveApp  
opath
Usr  
ord
Str  
pairs:
VecCls  
peekinstvars
Ur  
peekinstvarsdict
Ur  
pi
NumCls  
pokeinstvarsdict:
Ur  
pos
DddNode  
pos:
DddNode  
post
DrawAct   LiveApp   Screen  
post:
FnordApp   GGl   GrafAct  
pow:
Num  
prepost:
FnordApp   FnordCannon   FnordCheeseDemo   FnordDebugRot   FnordFlight   GrafAct  
prevframe
Frame  
prototype
RedPlane  
px
TroidsThing  
px:
TroidsThing  
py
TroidsThing  
py:
TroidsThing  
r
Bar  
rand
NumCls  
rand:
NumCls  
range
Num  
rcvr
Send  
read:
FileCls   HubCls  
recall
DrawApp  
recallframe:
LValue  
receiver
Frame  
rect:to:
DrawApp   Ink  
red
DrawAct   LiveApp  
repr
Ur  
resetball
GamePong   PongGame  
rest
Expr  
rot
DddNode  
rot:
DddNode   Mat  
rot:axis:
Mat  
round
Num  
run:
FnordApp   GrafAct  
runapp:
DrawAct  
s
Bar  
said
SysCls  
save
Config  
say
Obj  
say:
Obj  
sca
DddNode  
scale:
DddNode   Mat  
scr
DrawAct   Ink   LiveApp  
secs
SysCls  
sends
MethTop  
setup
GameTroids  
sgn
Num  
showzoo
GameFoo  
sin
Num  
sinh
Num  
sleep:
SysCls  
source
MethTop  
sourceloc
Send  
sq
Num  
sqrt
Num  
square:ink:
GameFoo  
src
UsrMeth  
starttime
GGl  
state
DemoLiveLife  
state:
DemoLiveLife  
step
BlocksDemo   DemoLissajous   DemoStar   DrawAct   DrawApp   FnordApp   FnordMotherShip   GameTroids   PongGame   RedPlane  
step:
TroidsThing  
stop:
DrawAct  
store
DrawApp  
storeatparam0:
Blk  
storeatparam1:
Blk  
storeatparam:value:
Blk  
storeframe:value:
LValue  
str
Ur  
supercls,sup
Cls  
syshash
Obj  
sz
TroidsThing  
sz:
TroidsThing  
tag:params:body:
HtCls  
tan
Num  
tanh
Num  
targ:
InspectClass   InspectInst  
tau
NumCls  
text:
TextValViewPrim  
text:sw:
DrawApp   Ink  
thick:
Ink  
title
InspectClass   InspectInst   InspectRoot   InspectSimple  
top
UsrMeth  
trace:
Cls  
trans:
Mat  
trigraphs
SysCls  
truth
Ur  
ttl
TroidsThing  
ttl:
TroidsThing  
two
Bar   Foo  
unit
Vec  
up:
GGl  
value
Blk  
value:
Blk  
value:value:
Blk  
vars
Cls  
vec
Group   Mat  
vec:
Group   HtCls   Mat  
vecvec:
HtCls  
vx
TroidsThing  
vx:
TroidsThing  
vy
TroidsThing  
vy:
TroidsThing  
w1
WebApp  
w2
WebApp  
wbgcolor
WebApp  
wbody
WebApp  
wbottom
WebApp  
wfgcolor
WebApp  
wfontfamily
WebApp  
wfontsize
WebApp  
wfontweight
WebApp  
wfootlinks
WebApp  
whead
WebApp  
white
DrawAct   Expr   LiveApp  
whtml
WebApp  
wid
Act   DrawAct   GGl  
wid:
Act  
width
Screen  
wires:
GGl  
wmid
BrowseBothWorld   BrowseClass   BrowseClasses   BrowseLocalWorld   BrowseMethod   BrowseRemoteWorld   BrowseWorlds   FormCreateSubclass   InspectClass   InspectInst   InspectRoot   InspectSimple   SaidWhat   SnapshotWorld   SubmitCreateSubclass   WebApp   WorldFetch   WorldShareUp   WorldSyncUp  
work:
ScreenCls  
worldfilename
SysCls  
worldname
SysCls  
wpath
WebApp  
wquery
WebApp  
wresult
Inspect   SubmitInstVars   SubmitNewMethod   WebApp  
write:value:
FileCls   HubCls  
wstyle
WebApp  
wtitle
BrowseBothWorld   BrowseClass   BrowseClasses   BrowseLocalWorld   BrowseMethod   BrowseRemoteWorld   BrowseWorlds   FormCreateSubclass   SnapshotWorld   SubmitCreateSubclass   WebApp   WorldFetch   WorldShareUp   WorldSyncUp  
wtop
WebApp  
ww
TroidsThing  
x
Bar   Foo   Motion  
x:
Foo  
xyxy
TroidsThing  
xyxy:
TroidsThing  
y
Foo   Motion  
y:
Foo  
z
Foo  
z:
Foo  
|
Num