#!/bin/sh # MetaCard 2.4 stack # The following is not ASCII text, # so now would be a good time to q out of more exec mc $0 "$@" ` Control turtles 8local angl,penDown,x,y global radPerDeg,degPerRad,noDraw,waittime,x0,y0 local x1,y1,A1,gpoints,tObject,tGraphic,labelCount on drawAndMove if the pPendown of tObject then set the pPoints of tObject to gPoints set the points of graphic tGraphic to the pPoints of tObject --gPoints end if set the loc of tObject to round(x0 +the px of tObject)&comma&round(y0-the py of tObject) Wait 0 millisec --unlock screen end drawAndMove on back temp forward -temp end back on bk temp back temp end bk on centeredCircle r put the tool into savedTool choose the oval tool set the centered to true drag from round(x0+the px of tObject ),round(y0-the py of tObject) to round(x0+the px of tObject+r),round(y0-the py of tObject-r) set the centered to false choose the savedTool end centeredCircle function commaFormat pNum put pNum mod 1 into remainder delete char 1 of remainder put trunc(pNum) into pNum put the number of chars in pNum into n repeat with i = 1 to trunc((n-1)/3) put comma after char n - 3*i of pNum end repeat return pNum& remainder end commaformat function getTheObject who put theControls() into tList put "" into results repeat for each line tLine in tList--with i = 1 to the number of lines in tList if who is in tLine then --line i of tList then put tLine into results--line i of tList into results exit repeat end if end repeat put results into tObject put quote before word 2 of tObject put quote after tObject return tObject end getTheObject function fact n put 1 into results repeat with i = 1 to n multiply results by i end repeat return results end fact on startTurtle temp put round(the width of this stack/2) into x0 put round(the height of this stack/2) into y0 -- ask "Who to tell?" with "Turtle" put getTheObject(temp) into tObject put 1 into i repeat while i <= the number of fields if "fieldLabel" is in the name of field i then delete field i else add 1 to i end repeat if not exists(tObject) then answer "There is no such object." exit to top end if put 0 into labelCount put word 2 of tObject & "grc" into tGraphic replace quote with "" in tGraphic if there is no grc tGraphic then set the style of the templateGraphic to "line" create grc tGraphic end if put "" into gPoints set the px of tObject to 0 set the py of tObject to 0 set the pPenDown of tObject to true set the pAngle of tObject to 0 set the pPoints of tObject to x0,y0 & return drawAndMove end startTurtle on st temp startTurtle temp end st function intersection p1,p2,pp1,pp2 put item 1 of p1 into x1 put item 2 of p1 into y1 put item 1 of p2 into x2 put item 2 of p2 into y2 put item 1 of pp1 into xp1 put item 2 of pp1 into yp1 put item 1 of pp2 into xp2 put item 2 of pp2 into yp2 if x1 = x2 or xp1 = xp2 then if x1 = x2 then return x1&comma&yp2 + (x1-xp2)*(yp2-yp1)/(xp2-xp1) else return xp2&comma& y2 + (xp1-x2)*(y2-y1)/(x2-x1) end if end if put yp2 - y2 + x2*(y2-y1)/(x2 - x1) - xp2*(yp2 - yp1)/(xp2 - xp1) into numerator put ((y2 - y1)/(x2 - x1) -(yp2 - yp1)/(xp2-xp1)) into denom put numerator / denom into x put y2 + (x-x2) *(y2-y1)/(x2-x1) into y return x & comma & y end intersection on setHome xx,yy put (the width of this stack)/2 + xx into x0 put (the height of this stack)/2 - yy into y0 -- drawturtle end setHome on home setxy 0,0 set the pAngle of tObject to 0 end home function log x return ln(x)/ln(10) end log on cleanG who put who into temp get the paramcount if it is 0 then repeat with i = 1 to the number of graphics if "grc" is in the name of grc i then set the points of grc i to "" end repeat else set the pPoints of graphic who to "" put the points of grc who to "" end if end cleanG on cleanT who put who & "grc" into tGraphic if there is a grc tGraphic then set the points of grc tGraphic to "" end cleanT function perpBisector p1,p2 breakpoint pu setXY p1 seth toward( p2) fd .5*distancePt (p2) rt 90 put point into temp1 put item 1 of temp1 into item 1 of temp put item 2 of temp1 into item 2 of temp put heading() into item 3 of temp pd return temp end perpBisector on clean ct lock screen repeat until the number of images is 0 delete image 1 end repeat put 1 into i repeat while i <= the number of fields if "fieldLabel" is in word 2 of the name of field i then delete field i else add 1 to i end repeat unlock screen end clean on incXY dx,dy -- put the px of tObject into x -- put the py of tObject into y put the pPoints of tObject into gPoints if the pPendown of tObject is true then put round (x0 +the px of tObject +dx) &comma &round(y0 -the py of tObject - dy)& return after gPoints else put return & round (x0 +the px of tObject +dx) &comma &round(y0 - the py of tObject - dy)& return after gPoints end if set the px of tObject to the px of tObject + dx set the py of tObject to the py of tObject + dy --set the pPoints of tObject to gPoints --set the points of grc tGraphic to gPoints drawAndMove end incXY on setxy xnew,ynew get the paramCount if it = 1 then put item 2 of xnew into ynew put item 1 of xnew into xnew end if set the px of tObject to xnew set the py of tObject to ynew put the pPoints of tObject into gPoints if the pPendown of tObject is true then put round(the px of tObject +x0)&comma&round(y0 - the py of tObject)& return after gPoints else put return & round(the px of tObject +x0)&comma&round(y0 - the py of tObject)& return after gPoints end if set the pPoints of tObject to gPoints DrawAndMove --set the lockscreen to false end setxy on setRA tRadius, tAngle put tRadius*cosine(tAngle) into tx put tRadius*sine(tAngle) into ty setXY tX,tY end setRA on setHeading temp seth temp end setHeading on drawTurtle end drawTurtle on seth anglnew set the pAngle of tObject to anglnew --drawTurtle end seth on left dangl lt dangl end left on right dangl rt dangl end right on rt dangl set the pAngle of tObject to the pAngle of tObject - dangl --drawTurtle end rt on lt dangl set the pAngle of tObject to the pAngle of tObject + dangl end lt --on forward distance -- put distance * cos(radPerDeg * the pAngle of tObject) into dx -- put distance * sin(radPerDeg * the pAngle of tObject) into dy -- set the px of tObject to the px of tObject + dx -- set the py of tObject to the py of tObject + dy -- put the pPoints of tObject into gPoints -- if the pPenDown of tObject is true then -- put round(the px of tObject +x0)&comma&round(y0- the py of tObject)& return after gPoints -- else -- put return & round(x+x0)&comma&round(-y+y0)& return after gPoints -- end if -- set the points of graphic tGraphic to gPoints -- set the pPoints of tObject to gPoints -- set the loc of tObject to round(x0 +the px of tObject)&comma&round(y0-the py of tObject) --end forward on forward distance put distance * cos(radPerDeg * the pAngle of tObject) into dx put distance * sin(radPerDeg * the pAngle of tObject) into dy set the px of tObject to the px of tObject + dx set the py of tObject to the py of tObject + dy put the pPoints of tObject into gPoints put round(the px of tObject +x0)&comma&round(y0- the py of tObject) into tMouseLoc if the pPenDown of tObject is true then put tMouseLoc &return after gPoints else put return & round(x+x0)&comma&round(-y+y0)& return after gPoints end if -- set the points of graphic tGraphic to gPoints -- set the pPoints of tObject to gPoints -- set the loc of tObject to tMouseLoc drawAndMOve end forward on fd temp forward temp end fd on pu set the pPenDown of tObject to false end pu on penUp pu end penUp on penDown pd end penDown on pd set the pPendown of tObject to true end pd function toward xtemp,ytemp get the paramCount if it is 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if put ytemp - y into dy put xtemp - x into dx if dx = 0 then if dy > 0 then return 90 else return 90 + 180 end if if dy = 0 then if dx > 0 then return 0 else return 180 end if put degPerRad * atan(abs(dy) / abs(dx)) into angl if dy > 0 then if dx > 0 then return angl else return 180 - angl end if if dx > 0 then return 360 - angl else return 180 + angl end if end toward function direction xtemp,ytemp put the px of tObject into x put the py of tObject into y get the paramCount if it is 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if put ytemp - y into dy put xtemp - x into dx if dx = 0 then if dy > 0 then return 90 else return 90 + 180 end if if dy = 0 then if dx > 0 then return 0 else return 180 end if put degPerRad * atan(abs(dy) / abs(dx)) into tAngl if dy > 0 then if dx > 0 then return tAngl else return 180 - tAngl end if if dx > 0 then return 360 - tAngl else return 180 + tAngl end if end direction function direction2 xtemp,ytemp get the paramCount if it is 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if put ytemp - y into dy put xtemp - x into dx put arctangent2(dy,dx) into tAngle if tAngle < 0 then return 360 + tAngle else return tAngle end direction2 function xycor return the px of tObject & comma & the py of tObject end xycor function sci pNum,sigFigures if pNum < 0 then put "-" into sign else put empty into sign put abs(pNum) into pNum if sigFigures is empty then put 3 into sigFigures --Default significant figures. put 0 into count if pNum >= 1 then repeat until pNum < 10 divide pNum by 10 add 1 to count end repeat put round((10^(sigFigures-1))*pNum)/10^(sigFigures-1) into pNum return sign & (char 1 to sigFigures + 1 of pNum) &"*10^" & count end if if pNum < 1 then repeat until pNum >= 1 multiply pNum by 10 add 1 to count end repeat end if return sign & (char 1 to sigFigures + 1 of pNum) & "*10^-" & count end sci function xcor return the px of tObject end xcor function ycor return the py of tObject end ycor function randomInRange b,t return random(t-b+1) + b-1 end randomInRange on setx xnew setxy xnew, the py of tObject end setx on sety ynew setxy the px of tObject, ynew end sety function distance xtemp,ytemp get the paramCount if it = 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if return sqrt ((the px of tObject -xtemp)^2 + (the py of tObject-ytemp)^2) end distance function heading repeat while angl >360 subtract 360 from angl end repeat repeat while angl < 0 add 360 to angl end repeat return angl end heading on label inputText lock screen put the tool into tTool choose the browse tool set the textstyle of the templateField to "bold" set the style of the templateField to "transparent" set the textAlign of templateField to center --set the dontWrap of templateField to true put "fieldLabel" & labelCount into nField create field nField add 1 to labelCount put inputText into field nField set the loc of field nField to turtlePtToMousePt(xycor()) set the width of field nField to the formattedwidth of field nField set the height of field nField to the formattedHeight of field nField set the tool to tTool unlock screen end label function mouseToTurtle pt put round(-x0 + item 1 of pt) into item 1 of temp put round( y0 - item 2 of pt) into item 2 of temp return temp end mouseToTurtle function mousePtToTurtlePt pt return mouseToTurtle(pt) end mousePtToTurtlePt function turtleToMouse pt put round(x0 + item 1 of pt) into item 1 of temp put round(y0 - item 2 of pt) into item 2 of temp return temp end turtleToMouse function turtlePtToMousePt pt return turtleToMouse(pt) end turtlePtToMousePt function clickPoint set the cursor to cross wait until mouseClick() --Wait for the mouse click. return mousePtToTurtlePt(mouseLoc()) --Return the mouse coordinates converted to turtle coordinates. end clickPoint on preopenStack global waittime set the style of this stack to "toplevel" put 0 into waittime --clean set the grid to false put 180/ pi into degPerRad put pi/180 into radPerDeg put (the width of this card)/2 into x0 put (the height of this card)/2 into y0 choose the browse tool end preopenStack function sine a return sin(radPerDeg* a) end sine function cosine a return cos(radPerDeg*a) end cosine function tangent a return tan(radPerDeg*a) end tangent function arcsine a return atan(a/sqrt(1-a*a))/radPerDeg end arcsine function arcTangent a return atan(a)*degPerRad end arcTangent function arcTangent2 y,x return degPerRad*atan2(y,x) end arcTangent2 function sum list put 0 into theResult repeat with i = 1 to the paramcount add param(i) to theResult end repeat return theResult end sum on pr x set the numberformat to "#.00" if there is a field "data" then put x & return after field "data" end pr on functionKey tKey switch tKey case 8 if the tool is "browse tool" then choose the pointer tool else choose the browse tool end if break case 2 edit the script of this stack break case 3 edit the script of this card break case 5 go to next card break case 4 go to previous card break case 6 ct break end switch end functionKey on tell who put getTheObject(who) into tObject put word 2 of tObject &"grc" into tGraphic replace quote with "" in tGraphic -- put the px of tObject into x -- put the py of tObject into y -- put the pPenDown of tObject into pendown -- put the pAngle of tObject into angl -- put the pPoints of tObject into gpoints end tell function theControls repeat with i = 1 to the number of controls put the name of control i into temp replace quote with empty in temp put temp into line i of results end repeat return results end theControls on tabKey if controlkey() = "down" then if the tool = "pointer tool" then choose browse tool else choose pointer tool else pass tabKey end tabKey t~ U Geneva U Geneva W Geneva W Lucida Grande U Lucida Grande cREVGeometryCache stackID 1120 cREVGeneral scriptChecksum qܸRea`^ debugObjects button id 1036 of card id 1002 of stack "Control graphics" card id 1002 of stack "Control graphics" button id 1106 of card id 1002 of stack "Control turtles" button id 1069 of card id 1002 of stack "Control turtles" stack "Control turtles"handlerList drawAndMove back bk centeredCircle commaFormat getTheObject fact startTurtle st intersection setHome home log cleanG cleanT perpBisector clean incXY setxy setRA setHeading drawTurtle seth left right rt lt forward fd pu penUp penDown pd toward direction direction2 xycor sci xcor ycor randomInRange setx sety distance heading label mouseToTurtle mousePtToTurtlePt turtleToMouse turtlePtToMousePt clickPoint preopenStack sine cosine tangent arcsine arcTangent arcTangent2 sum pr functionKey tell theControls tabKeybreakPoints 230scriptSelection char 1 to 0 bookmarks tempScript prevHandler arcsinescript P Con preopencard send "mouseUP" to button "clean" end preopencard 33 ~ revcard false cREVGeometryCacheIDs 1057786320296 10621057679167945 10401057679161377 10391057119613918 10141057790302208 10661057857061749 10691057786678356 10641057235873157 10681057102180742 10071057785799436 10611057785799391 10601105722860082 11091057103809197 10081057696529030 10471057786320321 10631105721627303 1106 cREVGeometrycache total 23order cREVGeneral scriptChecksum ]g GpUM bookmarks breakPoints 4 142handlerList preopencardtempScript prevHandler drawAndMOvescriptSelection char 1 to 0script V
on preopencard
send "mouseUP" to button "clean"
end preopencard
$ % & ' ( * + , - R U @ ~ cREVGeneral bookmarks handlerList tempScript prevHandler scriptSelection char 1 to 0script cREVGeometryCacheIDs 1005143486413 10551005143499075 10561014640140291 10541069176519794 10901005143503767 10571057770918193 1058 cREVGeometrycache order total 6 ! " B Help Ep - on mouseUP go to next card end mouseUP E u cREVGeneral scriptChecksum WĿ奷|?revUniqueID 1057102180742 bookmarks handlerList mouseUPtempScript prevHandler mouseUPscriptSelection char 1 to 0script ^on mouseUP
go to next card
end mouseUP
hare bB* $% C 5 px 126.491106py -0Selection Description false pPenDown falsepPoints 581,319 581,319 588,307 595,294 601,280 607,264 611,246 613,228 612,209 606,192 596,178 582,168 565,162 546,161 528,163 510,167 494,173 480,179 467,186 455,193 445,199 435,206 426,212 418,218 411,224 404,230 397,236 391,242 384,248 378,255 372,261 366,268 360,275 354,282 348,290 342,299 335,309 329,319 322,331 315,344 309,358 303,374 299,392 297,410 298,429 304,446 314,460 328,470 345,476 364,477 382,475 400,471 416,465 430,459 443,452 455,445 465,439 475,432 484,426 492,420 499,414 506,408 513,402 519,396 526,390 532,383 538,377 544,370 550,363 556,356 562,348 568,339 575,329 581,319 pAngle 0 cREVGeneral revUniqueID 1057103809197 bookmarks handlerList tempScript prevHandler scriptSelection char 1 to 0script fox bB) H I ' px 10.295312py -28.302749Selection Description false pPenDown falsepPoints pAngle 8.485581 cREVGeneral revUniqueID 1057119613918 bookmarks handlerList tempScript prevHandler scriptSelection char 1 to 0script Chase Epeon mouseUp startTurtle "hare" set the forecolor of grc "haregrc" to red startTurtle "fox" put 0 into theta put 5 into dTheta tell "hare" pu setRA r(theta,200,100),theta pd repeat until theta > 360 tell "hare" setRA r(theta,200,100),theta add dTheta to theta put xycor() into theHareLocation tell "fox" seth direction(theHareLocation) fd 4 --tell "hare" --wait 0 millisec end repeat end mouseUp function r angl,a,b put cosine(angl) into c put sine(angl) into s return sqrt(1/(c*c/a/a + s*s/b/b))--Equation of an ellipse in radial coordinates end r O { ! cREVGeneral scriptChecksum QmF`-^breakPoints 14handlerList mouseUp rscriptSelection char 266 to 265 bookmarks revUniqueID 1057235873157prevHandler mouseUptempScript script
on mouseUp
startTurtle "hare"
set the forecolor of grc "haregrc" to red
startTurtle "fox"
put 0 into theta
put 5 into dTheta
tell "hare"
pu
setRA r(theta,200,100),theta
pd
repeat until theta > 360
tell "hare"
setRA r(theta,200,100),theta
add dTheta to theta
put xycor() into theHareLocation
tell "fox"
seth direction(theHareLocation)
fd 4
--tell "hare"
--wait 0 millisec
end repeat
end mouseUp
function r angl,a,b
put cosine(angl) into c
put sine(angl) into s
return sqrt(1/(c*c/a/a + s*s/b/b))--Equation of an ellipse in radial coordinates
end r
rabbit.gif @ - 6 0GIF89aH l ҭÞ_&'3 WVWFGH79:MPQ`cdNRS[`aإ>DEPVWhoplstsz{_ghcklو{کìվӼѻЊܾ쎥ŞŤˬðǬ«ɮܾշͶԽӼһꑫy©ǯ٧eqqεsHPPڲōV__[ddnxxҕFLLӀ欹܄V\\Դ受ݚQUU=@@ILLjnndhh355|Z]];==CEE !!)**/00_``˝ۖӽѐչ£خNYXּɷӴ۽SZYDIH! , H l H2#Ç#vXċ3TP;IhpWuXhɗ'Npa'h"-tٓ٪*6F6a;(e /+ݱóa![Й1.bBĥX[psmR[feF9N5eeNJh 7mcQ(TZj%fCbg~錷ޡr!QE^B"G;[K*^2:D)J AFnU!`PN{_~Օ^.yKؠ FlQ qOYCDQ^-2t0ݨG%nd.1t"1*^d 2HF@ =Bt,DPKq0LP1QB,DB?#xP4 Q7HDh:Q.̰,q%nd> 4,J@3 bJ$*DH$>$ #ͬ T@G ww6@ C2B#>0+=(F(PmB$MB=$CGwnAGGx ,,QX B7g@BτArJ haC%@<e .+|`I,\A4.r?$Ȳ 0I/ 221'ˆ4xt 3)Π0,#vp / `70.A t40'c8?9`ݧ0C<&xP)| >9 ;hB3-t %Bi Q- !A$zdW\A +괢%hz-?zqpT`$B0@14#,?@&A/Qd,` G?F@R4pA_" <`AT `DdtF1&P d#h( dD/tތ D,b x hEg/ICd 6 6q^81vQ9b02Ga!Dc5(`t`w.hH"X]HF\#`C<e(! H jSL\$\ a Bl f0aYĠ2.Hg ̢K @a M4A l0D. + 1Bc^3l3=衞h6@q.q LR