ERjPM?AppleApple_partition_map?PM@ disk imageApple_HFS @3goonPM` Apple_FreeBDֹփaidsH+ x "%x%aids%Finderb8 aidsֹaids Desktop DBBTFLDMGR@ֹ Desktop DFDTFLDMGR@ֹ` FinderFNDRMACSQֹ ReadMettrottxt@ֹ SystemzsysMACSQV`ֹj% xWhy can't you see your files? This hard disk is formatted with the Mac OS Extended format. Your files and information are still on the hard disk, but you cannot access them with the version of system software you are using. How can you access your files? To access your files you must mount this hard disk on a computer that has Mac OS 8.1 or later installed. To determine the version of system software youre currently using, choose About This Computer from the Apple menu. If youre using a version of the Mac OS earlier than 8.1, you must do one of the following: A) upgrade the system software on your computer, B) start up the computer from a hard disk or CD that has Mac OS 8.1 or later, or C) connect the hard disk to another computer with Mac OS 8.1 or later installed. If you want to access the files without upgrading your system software, start up your computer with the Mac OS 8.1 CD or the Disk Tools PPC disk, then access your files. Apple recommends that you have the Mac OS 8.1 CD if you plan to reformat any hard disk using Mac OS Extended format. To continue to use this hard disk with this computer, you must upgrade your system software to Mac OS 8.1. How do you upgrade your system software? If you have a version of system software earlier than Mac OS 8, you can order Mac OS 8.1 on the Internet or buy it at a local Apple software reseller. If you have Mac OS 8 on your computer, you can download the Mac OS 8.1 update from the Internet at http://www.info.apple.com. Copyright 1998 Apple Computer, Inc. All rights reserved. Apple and Mac OS are trademarks of Apple Computer, Inc., registered in the U.S. and other countries. PowerPC is a registered trademark of International Business Machines Corporation, used under license therefrom. V7U7 Deleted MailMailMSNMK o= DesktopFNDRERIKAQ6`8.6+8.6, Copyright Apple Computer, Inc. 1983-99`8.6 Mac OS 8.60(2t      asdfhgzxcvbqweryt123465=97-80]ou[ip lj'k;\,/nm. `.*+/-=0123456789  ASDFHGZXCVBQWERYT!@#$^%+(&_*)}OU{IP LJ"K:| ~.**++=//-=0123456789  ASDFHGZXCVBQWERYT123465=97-80]OU[IP LJ'K;\,/NM. `.*+/-=0123456789  ōäϷХԿ ƾDz .*+/-=0123456789  ױޱѡկ `.**++=//-=0123456789  łäηХԯ Dz `.*+/-=0123456789  ōäϷХԿ^ ƾDz~ `.*+/-=0123456789  0123465=9780  ' ;,/ . `.*+/-=0123456789   AEIOUaeiou2 `AEIOUaeiou`" AEIOUaeiou AEIOUYaeiouy- ANOano> K)/ / x!! ! B Ap+H !+|@+|  x h|g h}fHA!$ANL|NuH`BBHoHo//A// NO&,LJ@Nu-Hr*h (p@(-A1jJ1jH!M !F$1|,(-  b Ѐ!@.`Xh,Ѐ!@2 B@H@H!@.`: g4Jf ,` , c/Ѐ!@2 B@H@H!@.h,NP ttx^rThis startup disk will not work on this computer./A Power PC based computer is required to startup/from this disk.Q<q\g?GGDGDGDGDGDGDG@??~?(ϭ(Restart ,0<F"H0<Fg?< xA 8gNpNNV~Hp/!N (@ gp0, BDgp*<,H:,J0,$Hr2,t &,L8(؀Cj Ip GHz~!HnHn~/H/H/Nt>OfJ~g n~/NXOp/ n/N N |(@p?p-@=lNC Ip(@-@=FC I>POf~N B(@ gp0, H+g~`bJzg$-|ERIK-lzC Ip`>f@C IUJ_l>Of,,PHxHnN=|V=EP=DR-l($ ,POc=|"`=l."=n,=T-l(-l,-l0-l-lp0,2<@=A-l@.-l z-l$~-FY.|-_\Y.-_Y.x-_X|4|+5HnHnN>POf=n np n!l",(L, n!A A"n#HA"n#H nHhp/Hl/HnN>Hz HzHzHzHzH/.N >O,fdHnHnN>POfP=n np n!l",(L, n!A A"n#HA "n#H nHhp/Hl /HnN>HztHzzHzLHzHz /.N >O,f-| Hn/.NHnHn//.N0>OfHnHnN*>POf n  n!n ,(L. n!@ A"n#HA"n#H n!n02 n!F: n$nE>"J$HrRAH . nHhHxHn/.HnN>pUHzF?.p=_p0.nOg=|><@`*>Z<U p?1Zp /< /.N( ?1ZLN^NuNVH(.&n (n( nBBp` S"0gӔdt`R SeJg n B@`pLN^NuNV/=n =n-n-| .Tr -@=|C I>..N^NuNV/=n =n-n-| .Tr -@=|C I>..N^NuNVH8&n-np-@-|HnNIp0RЀX8)n  K$L\"Jr2Rҁ .HnHnHnp/Hn/.N \.0LN^NuNVH&n.+ (H f U> 0H`0-L=n -G=| L. -@C IH.& LN^NuNV/ (n Jg Tp(p(nN^NuNVpN^NuNVpN^NuNVHY.N&_p0JL|^:BG|`:p0r^LIJf&p^// N\p( n " $ B n0BFPO`RGGb0LN^NuNV/ (n l#p^// N(nN^NuNVHU>>(xX`lHg(T f LN^NuNVH8$n (ntJGr` p6 Rb4LN^NuNVH8.Ip"&H n Sp HnHn/ /.N&>J.Og" Spc KpD$ n$SX"Jp@.0`=| FB. n -P-nHnHn/ Hnp/Hn n2(H/N>> G Ofp`JGg0`HnHn/ / N>J.Og0`nHnHn/ Hnp/ n2(H/N> G Ofp`J.Og0LN^NuNVH8&n(np&BGvHJ~gH 4~ѓ0RGGn0H,Y/. N/ܟ n $ L$n $R-H n P A"H2H  n. n PHߐ Gf nB` nU> 0LN^NuNVH <(H g0=n =n-L-|p-@=|C I>`~0LN^NuNVH(.:.<. Hn/H/H/N>Ofp-@PHn/H/H/N>O0LN^NuNVH vpfJGfvLN^NuNVH80. HиN-@ @(h"-np-@r2,,tfp -@`p0,,r fp@-@`-|p-@Bn-@-nBn/ /. NH.POf n E"Jr¬Pg $Hr2T` $n rRAH .Gh fn n h-hHn/. n /(N,lH.WDg n P`0|,/ /.Hn/Hn/.N.Hk n /(/.N,tO0` / /.Hnp/Hn/.N.OJfPJ g n / HkNH.POf0Jg*C I"nr¬Pg r2+T` r+RAH .0LN^NuNVH88.&xN k"-HIh-np-@r2(,tfp -@` np0(,r fp@-@`-| Dfv` Dfv`zJDfv`r DfBC`h Dfv`^ Do.z` /.Hn/ p// N.OfRHĸbv`*|`/.Hn/ p// NV.OfrSHĸmv/.Hn/ p0// N..OfJ n /.HlNDH.POf.C I"n$nrªPg r2,T` r,RAH .0LN^NuNVH&n (npPg>`~Jp0 @ek,c0<`pLN^NuNVH&n (n*,,+d~`Pc~`Hp0,Jg p0+Jfp0,r2+.`"p0+/Hkp0,/HlN.O LN^NuNVHJgJgJg JgJfp` nJ"gp` n d <` <(H fp`)n\)n`)nd)n p-@-|"8N4. A9B n!L"p/Hx2,H/ nN.O f(Hnp//2,H/ nN.Of&n/ /.N.POf9k)k)k)k")k&9k *9k",)k$.)k(2k2)k4Pp0,, @(cP9|Jp)@Lr)AX)At4,* f/./ N .POfd`Hp /r2,*/2,H/ nN.O f@Hn/ N T.POf0Hnp// N .O fp)@THn/ N (.POfp` np!@"Hn/ N L POLN^NuNV^H8*.(nJfp`J fp` n&h" f <`BHn/. / N .O fjJ.g n -hHn/./ N .O fR np(f&p0( JcHn n Hh/./ N 6OpJfHn/ N 4.POf`RpJf /. NzXOpJfrpglgf-EHn/./ N T.O fL np(f&p0( JcHn n Hh/./ N OpJfHn/ N .POfdpJf4HnHnHnHn^ n Hh/ N .Og  g`*|p @fhHnHnHnp0.//./ N nJOg n0Jg2 n"H()L(@p0.d=D n$n"Rr2. . g(X)n9nBl p)@ Br Af. nE"Jr«Pg $Hr2T` $nrRAH .`8"n C IE"Jr«Pg$n r2*T`$n r*RAH .Hn/ N N.POfpJfp `8p`4Jg nBP gp()@B)@ BBl  f~ LBN^NuNVH8<.&np-@-@-@Jfp`* n(h" f <`p0Jg2p0rg(p0rgp0rgp0rg .< `|p0Jg p0rfp0Jf-l"`-l&Jf .< `BHn/./ N.O f* np(f p0( JbHn/ N.POf~$`p0JfBn` np0( S=@`HnHnHnHnHnHn/ / N.O fp0rfp0.JcSn`Jf0 n-hcHn/./ N.O ff` .<S`ZJgHn/ NN.POfBAC AC p-@ nr2( S=A` p0rfp. @g nJf0.h f .<T`p.Jf n0.h fp0.J nr2( SoRn`Jf. n-PcHn/./ N.O fr` .<T`fJgHn/ NZ.POfNAC AC p-@Bn`$p. @g n0.h e .<T`HnHnHnp0.//./ N.OfJg n0Jg2 n"H*)L(Pp0.ƺd=E n$n"Rr2. . gJ&X'n7nBk p'@ B nE"Jr¬Pg $Hr2T` $nrRAH .Hn/ N<.POf0JgHn/ N&.POfJgHn/ N.POfp`^Hn/ NHn/ NHn/ NJOg nBP gp&'@B'@ BBk  g Tf~ LN^NuNV"n fp`p#@pN^NuNV/ (n 0, @g(@g"@g@g@g@ g @@gp%`t",$p0, JL$ ngp%`T(bp%`Jbp%`@bp%`6bp%`,p0, @cp%`,2ggg <U`p(nN^NuNVtH8$n&n(np$( n BJ f .<`Hn/. / N.O fr n -hJ.g/ /./ N.p$O gJf@ Tp(fp0( JcRHn n Hh// Np @Ogp0.Jf TJg-h/ T/(/ NH.O f Rp(fHp0( Jcp0 @dp$`&p0Jgp$`Gbp$`Gbp$`SlpLN^NuNVH8$n:.&n(n l ep `p0+*Ќr2㉐U @4p0Ќ$pPg R0T@` RpR@H<p0r@p0JgRFFp0Ќ n p0+*Ќr2R㉐U @<p0r2 n0pL`N^NuNVH<$n(n n*hp0(*G|*:, S`(.ޅ"L D / / NPOJgn*S`,Ro.p`p n0LS0Hr2:4p0Jgp0r24<Ar2Ҁ>4Jg:p0Jg`0<S0Hr2:4p0Jgp0r24<Ar2Ҁ<4Jgp0JgļGfp0Jftp` Gcp`pLN^Nu   !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%''()*+,-./0133456789:;<=>@@BBCDEFGHIKKLMNOPQSSTUVWXYZ[\]^_`abcdegghijklmnopqrstuvwxyz{|}~STVWY[`cihoru      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~RTUVXYZ[  _012345678:;<=>?@ABCDEFGHIJKLMNO0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_aacceeggiikkmmooqqssuuvwyy{{}}      !"#$%&'()*+,-./0abcdefghijklmnopqrstuvwxyz{|}~WXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                         ! " # $ % & ' ( ) / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i p q r s t u v w x y z { | } ~  !!!!!!!!!! ! ! ! ! !!!!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2!3!4!5!6!7!8!9!:!;!!?!@!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z![!\!]!^!_!p!q!r!s!t!u!v!w!x!y!z!{!|!}!~!!p!q!r!s!t!u!v!w!x!y!z!{!|!}!~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  ABCDEFGHIJKLMNOPQRSTUVWXYZ;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NVH..&n (k ` f/ / NA"n"pPO`(T gp fpLN^NuNVH8,. (n&LHn/ /N> GO f(k`JGf A(n.+pf n)P` nE"J ./ / Np)@)F POLN^NuNVH8&n(n g,$k 'L l g T!l`'l(p)@%LLN^Nu"_ _%.jBNV7U78vers2itlcJitlbVKCHRbbootnfreez , :0f\`S0g`|`lPOE3) H+10.0ּcr^6 u^2p3(((*(?? ('x:(!xK for smileW Z Zbټb cALKfor script debuggerL .DS_StoreMxxbؼbc@L AuthoringAidR \ػ \ؼbؼbcosasasDB (Lforce expt to endTbټbcosasasDBMBLmove these to "Scripts" folderV Z ZbټbcAML .DS_StoreNTemporary Items N501ObؼbؼbؼbcA@ON501"OTemporaryItemsPbؼbټbټbcAPOTemporaryItemsRL AuthoringAidTLforce expt to endVLmove these to "Scripts" folderWK for smileW .DS_StoreXxxbټbc@"WAuthoringAid;AZbټbcosasasDBn(Wforce expt to end\bټbcosasasDBMXW .DS_StoreZWAuthoringAid;A\Wforce expt to end| j RB&  X $  ` < zFrZ HFS+ Private Datafor script debugger .DS_Store6 `1xxxcc@| AuthoringAid4H'B \ػ \bccosasasDB@ s (force expt to end1з ZbccosasasDBMoBmove these to "Scripts" folder, Z Z Z ZccA for smile .DS_Store/ Zxxxcc@k"AuthoringAid/AH'B VGbccosasasDB@nT(force expt to end2з ZbccosasasDBMpL2   XhjJaidsKK for smiledF:." .Trashes 501 Vcr׼cr׼crccA@501 Desktop DB Desktop DFAuthoringAid/A,move these to "Scripts" folder/ .DS_Store1force expt to end2force expt to end4 AuthoringAid5 .DS_Store6 .DS_StorepX H 4 d 0  |jD(TtP,v(0KArchive Folder,Kfor script debuggerL `2 `2bټb cA  l > , XBZ tP< aids ^6bټbٻxaids .DS_Store5 `1crcrb׹cc@q.Trashes V Vx VccB@"Archive FolderKbؼbټbټb cA Desktop DB V Z Z \ccBTFLDMGR@S Desktop DF V V" V" V ccDTFLDMGR@R,for script debugger]V `1 `1xA for smile]8 Z ZxA$Temporary ItemsNbؼbؼbؼbcC0HFS+ Private Data^6^6^6^6@PWW`,<v%x atcoatco$n-m-HR?R?22.04OHDDSh@sproperty prefix1Text : "considering " property selectedText : "case, white space, diacriticals, hyphens, expansion, punctuation, application responses" property prefix2Text : return property suffixText : {"end considering" & return} set eyelinkStuff to {"initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)", "checkLink()", "open_data_file(fileName, preambleText) ", "close_data_file()", "add_file_preamble_text(theText)", "initDisplayCoordinates() ", "set_calibration_type(calType) ", "recordAndEchoTrialID(TrialID, trialVariables)", "doDriftCorrect() ", "display_status_message(TrialID)", "drawText(xyPoint, colorInt, theText)", "setDefaults()", "setParserToCognitive() ", "setParserToPursuitOrNeurology() ", "setFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})", "setFixationUpdatesON() ", "setFixationUpdatesOFF() ", "set_saccade_velocity_threshold(theValue)", "set_saccade_acceleration_threshold(theValue)", "set_file_event_filter(theValue) (* set EDF file contents *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", "sparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min", "create_shuffled_list(listLength)", "create_shuffled_sublist(totalNumberSet, listLength)", "pickInRangeButNotInList({allowedRange, badList})", "parsetostring(TheList, theDelimiters)", "findAndReplace(find, replace, inputString)", "stringToList(theString, theDelimiters)"} try set whattodo to item 1 of (choose from list {"file handling", "manipulate lists", "screen", "other", "eyelink"}) set whom to "helper" if whattodo is "file handling" then set theList to fileStuff else if whattodo is "other" then set theList to otherStuff else if whattodo is "screen" then set theList to screenStuff set whom to "screen" else if whattodo is "eyelink" then set theList to eyelinkStuff set whom to "eyelink" else set theList to listStuff end if end try set theHandlerstoInsert to choose from list theList with multiple selections allowed if theHandlerstoInsert is false then -- else if (count of theHandlerstoInsert) is 1 then set texttoinsert to "tell " & whom & " to " & theHandlerstoInsert else set texttoinsert to "tell " & whom & " " repeat with anItem in theHandlerstoInsert set texttoinsert to texttoinsert & anItem & return end repeat set texttoinsert to texttoinsert & "end " end if tell application "Smile" try set theDocument to window 1 set NewDoc to false on error set theDocument to make new script window set line width of theDocument to 600 set NewDoc to true end try if NewDoc then set selection of theDocument to " tell application \"PsyScript\" activate begin experiment set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & texttoinsert & " end experiment end tell " else try set selection of theDocument to (the selection as text) & return & texttoinsert & return on error set selection of theDocument to texttoinsert & return end try end if end tell end ifVVFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lq{V Zq{U =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}{ l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: O{ kz Q& k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k& r I0/ 0.corecrel****null/.- . kocl m  , , sctx- o+ +0 thedocument theDocument r  m**X n 1) ) LWdt o( (0 thedocument theDocument' r!& m!"& & boovtrue o% %0newdocNewDoc'$ Z'z# o'*" "0newdocNewDoc r-@ b-8 b-4 m-0  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o03! !0 texttoinsert m47 $ end experiment end tell  n 1;?  sele o8; 0 thedocument theDocument# QCz rFc bF[ bFW bFS lFO cFO lFK   1FK  sele  mKN  ctxt oOR  ret oSV 0 texttoinsert oWZ  ret n   1^b  sele  o[^ 0 thedocument theDocument R .ascrerr ******** rkz   bkr okn 0 texttoinsert onq  ret n 1uy  sele oru 0 thedocument theDocument$ mnull߀ #~ Smile.appː626˰!)AeP0,VIZFalisfVortexLUH+ #~ Smile.app;S SmileKcS# #~8!P4Vortex:Applications:_My Applications:Smile:Smile.app Smile.appVortex-Applications/_My Applications/Smile/Smile.app/:VW 0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull****   end considering  .aevtoappnull**** k{"k  W!!""##$$%% 0anitemanItem*-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  sctx .corecrel****nullX  LWdt  sele  ctxt|aaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`W(X*aal E`Oa_a,FOeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FUascr ޭn-m-/KEY2spsh>WPosJDBGhVTEXTbscptn&\L Source TextBud1ob( V.infoblob( Vfor script debuggerIlocblob for smileIlocblobC  @ @ @ @ EDSDB ` @ @ @Bud1%  @ @ @ @ E%DSDB` @ @ @Bud1%  @ @ @ @ E%DSDB` @ @ @VU2UFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lqoV ZqoU =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}o l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: Oo kn Q k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k r I0/ 0.corecrel****null/.- . kocl m  , , docu- o+ +0 thedocument theDocument* r m) ) boovtrue o( (0newdocNewDoc*' Zn& o% %0newdocNewDoc r!4 b!, b!( m!$  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o$'$ $0 texttoinsert m(+ $ end experiment end tell  n 1/3# # sele o,/" "0 thedocument theDocument& Q7n r:W b:O b:K b:G l:C! c:C l:? 1:?  sele m?B  ctxt! oCF  ret oGJ 0 texttoinsert oKN  ret n 1RV  sele oOR 0 thedocument theDocument R .ascrerr ******** r_n b_f   o_b 0 texttoinsert  obe  ret n   1im  sele  ofi 0 thedocument theDocument' m  null3Script Debuggerents a list selection dialogrialteadnot exist yeasDBalisPreludeYT3H+3Script Debugger3ϹZ$APPLasDB Script Debugger 3.0Ẍ́3---CPrelude:Apps:Coding:AppleScript:Script Debugger 3.0:Script Debugger Script DebuggerPrelude;Apps/Coding/AppleScript/Script Debugger 3.0/Script Debugger/:VW 0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull****     end considering    .aevtoappnull**** ko"kW  0anitemanItem*-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz  0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  docu .corecrel****null  sele  ctxtpaaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`WX*aal E`OeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FUascr ޭVU232scpt MyBud1ob( W..infoblob( W.for script debuggerIlocblob for smileIlocblobC  @ @ @ @ EDSDB ` @ @ @Bud1%  @ @ @ @ E%DSDB` @ @ @Bud1 oringAAuthoringAid/AIlocblobXAuthoringAid/Ainfoblob0force expt to endIlocblob force expt to endinfoblob0  @ @ @ @ E DSDB ` @ @ @Bud1ob( Z.infoblob( Z`for script debuggerIlocblob for smileIlocblobC  @ @ @ @ EDSDB ` @ @ @z**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source Textz**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source TextBud1  ob .fwi0blobicnv.fwswlongi.icspblob.infoblob(b0Archive Folderfwi0blobicnvArchive Folderfwswlongifor script debuggerIlocblob>for script debuggericspblobfor script debuggerinfoblob0 `1 for smileIlocblob>C for smileicspblob for smileinfoblob0 Z  @ @ @ @ E DSDB ` @ @ @ HR?R?22.04BhHDDS8r`g\ph% property prefix1Text : "considering " property selectedText : "case, white space, diacriticals, hyphens, expansion, punctuation, application responses" property prefix2Text : return property suffixText : {"end considering" & return} set eyelinkStuff to {"initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)", "checkLink()", "open_data_file(fileName, preambleText) ", "close_data_file()", "add_file_preamble_text(theText)", "initDisplayCoordinates() ", "set_calibration_type(calType) ", "recordAndEchoTrialID(TrialID, trialVariables)", "doDriftCorrect() ", "display_status_message(TrialID)", "drawText(xyPoint, colorInt, theText)", "setDefaults()", "setParserToCognitive() ", "setParserToPursuitOrNeurology() ", "setFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})", "setFixationUpdatesON() ", "setFixationUpdatesOFF() ", "set_saccade_velocity_threshold(theValue)", "set_saccade_acceleration_threshold(theValue)", "set_file_event_filter(theValue) (* set EDF file contents *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", "sparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min", "create_shuffled_list(listLength)", "create_shuffled_sublist(totalNumberSet, listLength)", "pickInRangeButNotInList({allowedRange, badList})", "parsetostring(TheList, theDelimiters)", "findAndReplace(find, replace, inputString)", "stringToList(theString, theDelimiters)"} try set whattodo to item 1 of (choose from list {"file handling", "manipulate lists", "screen", "other", "eyelink"}) set whom to "helper" if whattodo is "file handling" then set TheList to fileStuff else if whattodo is "other" then set TheList to otherStuff else if whattodo is "screen" then set TheList to screenStuff set whom to "screen" else if whattodo is "eyelink" then set TheList to eyelinkStuff set whom to "eyelink" else set TheList to listStuff end if end try set theHandlerstoInsert to choose from list TheList with multiple selections allowed if theHandlerstoInsert is false then -- else if (count of theHandlerstoInsert) is 1 then set texttoinsert to "tell " & whom & " to " & theHandlerstoInsert else set texttoinsert to "tell " & whom & " " repeat with anItem in theHandlerstoInsert set texttoinsert to texttoinsert & anItem & return end repeat set texttoinsert to texttoinsert & "end " end if if not (first window exists) then make new document set newDoc to true else set newDoc to false end if set theDocument to first document set theWindow to first window if class pSTT of theDocument is constant ASDSasDS then set theClass to class of theWindow if theClass is class SCPT or theClass is class cESw then normalizeSelection(theDocument) if newDoc then set selection of theDocument to "tell application \"PsyScript\" activate begin experiment --load function libraries set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & the selection & return & texttoinsert & " end experiment end tell " else set selection of theDocument to the selection & return & texttoinsert & return end if else event asDBDSPe "This window is not a script window" end if else event asDBDSPe "Script " & (name of document 1) & " is running or recording and cannot be changed." & return & return & "Press Stop and try again." end if end if on normalizeSelection(theDocument) -- This handler extends the current selection to the nearest entire lines try if class pPOS of last insertion point of selection of theDocument class pPOS of last insertion point of theDocument and last character of theDocument is return then -- do nothing when the selection is at the end of the document else local startLine, endLine repeat set startLine to index of first line of selection of theDocument set endLine to index of last line of selection of theDocument if character -2 of line endLine of theDocument = "" then set selection of theDocument to lines startLine thru (endLine + 1) of theDocument else set selection of theDocument to lines startLine thru endLine of theDocument exit repeat end if end repeat end if end try end normalizeSelection on getLinePrefix(theString) -- This handler determins how many spaces or tabs are at the beginning of the first line of -- the current selection local thePrefix set thePrefix to {} -- AppleScript is faster at appending items to lists than strings repeat with aChar in characters of theString local theChar set theChar to contents of aChar -- because aChar is an object reference, not a value if theChar is " " or theChar is tab then set end of thePrefix to theChar else exit repeat end if end repeat local saveDelims set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {} set thePrefix to thePrefix as string set AppleScript's text item delimiters to saveDelims return thePrefix end getLinePrefix on indentLines(theText, thePrefix) -- This handler indents text by placing a prefix string at the beginning of each line local saveDelims, theLines try set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {return} if last character of theText is return then set theLines to text items of text 1 thru -2 of theText else set theLines to text items of theText end if repeat with aline in theLines if length of contents of aline > 0 then set contents of aline to thePrefix & (contents of aline) end if end repeat set theText to (theLines as string) set AppleScript's text item delimiters to saveDelims on error errMsg number errNum set AppleScript's text item delimiters to saveDelims set theText to thePrefix end try return theText end indentLines on getWrapText(theDocument) -- This handler obtains the text of the current selection. If the selection is empty or all white space -- the routine returns the string "-- your commands go here" local theText set theText to selection of theDocument as string if length of theText > 10 then -- if the selection is of significant length just wrap it return theText else repeat with aChar in characters of theText local theChar set theChar to contents of aChar if theChar is not " " and theChar is not tab and theChar is not return then return theText end if end repeat return getLinePrefix(theText) & "-- your commands go here" end if end getWrapText on formatSuffix(linePrefix) local resultText set resultText to {} repeat with aSuffix in suffixText set end of resultText to (linePrefix & aSuffix) end repeat return resultText end formatSuffixZFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lqoV ZqoU =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}o l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: Oo kn Q k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k r I0/ 0.corecrel****null/.- . kocl m  , , docu- o+ +0 thedocument theDocument* r m) ) boovtrue o( (0newdocNewDoc*' Zn& o% %0newdocNewDoc r!4 b!, b!( m!$  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o$'$ $0 texttoinsert m(+ $ end experiment end tell  n 1/3# # sele o,/" "0 thedocument theDocument& Q7n r:W b:O b:K b:G l:C! c:C l:? 1:?  sele m?B  ctxt! oCF  ret oGJ 0 texttoinsert oKN  ret n 1RV  sele oOR 0 thedocument theDocument R .ascrerr ******** r_n b_f   o_b 0 texttoinsert  obe  ret n   1im  sele  ofi 0 thedocument theDocument' m  null3Script Debugger"D $ǰǰ5|tP5f asDBalisPreludeYT3H+3Script Debugger3ϹZ$APPLasDB Script Debugger 3.0Ẍ́3---CPrelude:Apps:Coding:AppleScript:Script Debugger 3.0:Script Debugger Script DebuggerPrelude;Apps/Coding/AppleScript/Script Debugger 3.0/Script Debugger/:VWB  0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull**** 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  0whattodo 0whom 0thelisttheList *0thehandlerstoinserttheHandlerstoInsert 0 texttoinsert 0 thedocument theDocument 0newdocNewDoc   end considering  .aevtoappnull**** ko!!"""k##$$W%%&&''(()) 0anitemanItem *-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz  0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  docu .corecrel****null  sele  ctxtpaaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`WX*aal E`OeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FU***-0369<?BEHKNQTWZ]`cfh++svy|,","  !%)-159=AEIMQT- - _cgkosw{~."." //  file handling001 1icreadSpreadsheet(thefile)--just give a file name to read data from the folder containing your script rlhelper's readSpreadsheet(thefile)--just give a file name to read data from the folder containing your script22  cSCR  kfrmID  boovtrueascr ޭ NKEY2spsh>WPosJDBGhVTEXTbscptn&\%m Source TextBud1 oringA AuthoringAidIlocblobX AuthoringAidinfoblob0 \force expt to endIlocblob force expt to endinfoblob0move these to "Scripts" folderinfoblob0 Z  @ @ @ @ E DSDB ` @ @ @PK .for script debugger/UX =>cPK.for script debugger/.DS_StoreUX >>c;0Dg K4.)pn`E W!RP%yViO_ 3>6!B}ctvB2ts:vc2]J7_#LC>+1XW,pp?a5 !~uvK@🅧nl+ܺOPKjmPK.for script debugger/._.DS_StoreUX >>cc`cg`b 1N 6b(?YM PK #wRPK . for script debugger/AuthoringAidUX i>X>cPK."for script debugger/._AuthoringAidUX i>X>c|xUEZ= ) $@QPD HDh<=I.n!DDްW^^7{[~?󣳹gwfvvvf{v 5~#ಖjL3bk^ ,Qݹjiel;5\>VbAJXލ%1:rd2ȯF⡠ EjZq7V%`w ;U X(r@mc}zQF#Ed*t&ׇ.e17^tx~sFycn"ƧUn$1lxI$un<Ըi<.4+FCD\8Nr,N2 Pq7VކVMPbNl!l0P⠎YV0J{ ֜ٹ6}4ujPzUH#naNN_ڪo̥NOEJ`hfӔҩ4X1iNBs $n0PjC]4V[Lvs.gb;*<[HSZT|fDn25uu M'itHZ+\Ę+gaaQ9y4GC/ŵ2ҟ8ϭAC+;+P;ȠNUA=>׍]5/( 9+Kp\jY<'h2fa37ӵ:s BDY9%PMmIQdևV(B%~YhΥyr593 k&yX|J(߂Kԅ"6 EpDmyt*Z!7敢׺SV; !SP}ֿ瞇,Y8r$ @dPmf ^ktsi|8Wqr 9I4´&O\< 2!2>ψJe=S3 gk #(X0^뺉DpiM>$Z1YS4f8Y`h\Oy k$MDQїreMifjldi8aY٬6|,㬞6%8#جώb'ZX65MDpRS8q"b#ʨ `2c601>=OĒUZ ?YN&nL`1d&ab8unٓdO(lvJF,ci >3Uar4T?Mb (-9`f~n)j]WkQ'nj;Ӎxy&u<9CU˦G$#0=‹'6Agbv_hhOV(⒲.dHXHszeBrI'듉d|,K+k3xFG3Q"D $U5\0A5IlbstSgК'(3S%%fqJ~xdtiךn Ug(gz晰AaT#a4ΚVZ{hy{װiY7wC9tSƼyی RVXd$8$ N7Zm6i DmDQC(i®{YP׹Ŋ5;)X M \nD"0pm ƟT?Z@DN[ƤPy14NLNI~pGz[ј0V8k kQ%9b@[3^´hy)V%)aQiЉ%&">2㗥dzLgb,`n2;Ua'ԗ4 IhL"0̉o (Xcu:U6y.QjJYCF^$3JYZ r8,*$xOH^#Zfn4UFr7%ύ7d +.C+ЄJ\NFhg[`Qqq8մI^[,= 5ӟ ^E) j+faK3Q]_!f3?Fh#ܠT$LJ+cPnyfff?CIҲ@>E;hR:iIqq"l!2ɦ B?=# IX2B!)3Rơ=j'B+/# #usq3#7Cv7G)'FqqD-H.q#d,F:*C1"*%b2c.0d؀VGFۊ$bg*8c8AS,OiSP\cF:PKPF)6q t_yNKh ctAVG֧+.tWn$նdAh`0heU<4vid7>H~քnqgm,(H#F32owF6h3 擉'sS6roavi; 5XfCF>)/T|4xoM oqLd=TNfe:z?ݛY1I{i"oV(L bg}k2j]J{z2FUMd-lJI(P^. : ^| %wFyqQѴJ6՟\5IOOfO?[Bs$?$n|႙r=8qސm Φ=LOMt)ʴjaVpƀC۶- ש5S%3z62Sf-z"sF0^MxQn$8lk2{e%'4-!MWi iu.͛JyتOV7"E>DMQPzl֛&U.|dpQQj| TΠ.LkB *C$ĚHQ{TwAQ񎦚g9\ăO, >35`  eYAa"2t q8)LkW}.#JF&nP5=BkkvyVx+?S@B:A: `sgN\+UN I]#a~ 7qt^-[/ 97l9nqdI1k1> Ofc|'vDX+ (El\S>lWvCd0W1r q3˩*  , )/ErhhR$1uyZI/= ў:m4%ShŶ١ apΛfFT:[a:d.B TFPYa"?tcҧe?rD/ ]عWA7nA{;tcү%Aν2;p /!dV!l=&Id1*W^ ~GO |8 =[abA cC d|}@kjw"~g@VbÎ #%^B4"WM;,%Ap]4NU ɋ/+ d#O) ZcPHo٘\|Bh ПW^7&h6$) OkbĜ&B=Yf68H@x Vg}G&OwmxW:rߒ M7{K 7t Ec0ahÇVluQ"&cnH(}LG\|\C3H'7ڰwK/{X2#n9|?ƈhm@MjoF菈>TO _|?T9A/l-]pKxLg20[s{yt1\)1kk!| h6d.A@7ٰ : l Vab]N;76|蓾fiH8ӟ ? JC?)f"U"R\lqJ96y̒0b,_mʼ3*k?~8Uab8=o]1gFv,ljsË{o8-\5W>2Qλί H(١6w) &U~[ f 7 )VCo)юR-&D8\'hpi֡m)S4\5` ŷEa!t,wNzE"l־ͥ'PUs~%|pJ-­~ɊIE%:3UDWOl._rܿAwA&+э=J`)-ϪԬ;BOKaxL_SbnF޶M{0M{Vuq }5" D&<)W$(q8WrbI7}8mycc4_%}v;)#|I@k^$dʝJ3ʧ91P@FIADk-{x_&;# CxE~I ("u+2bC(/*Q)_lb%,4:f:33[s2K/KJ g^E~Af#m1Wӷy|rZ1~+g/h%F1aE?w@]m+ 8d'G#)1sJS~-Ҷ]07*p4 F(bF aCqx_쩟UbOFMOtT©KHhe,|h^L}H쭟Q;ѠD[L?%V027آ=S(%VF%V2.UO]L~-VCۯ3{ )FP}2nb{Z߭Øa8t[nwd]~}b^˾^+D{!%μ;BI*G G*T`dq]31JmfJq,V=Nq܋q-NEoA8Dq'd}|bkm86B{)T%NaqU-Ost+Q: qg0!ꞥoQ,Dmq6m7-LsĹJøbqY >X1mq~v9u35;aY(蛔QB[\H˙h n"4BH\EDPR[\jK~ɁqH8.FL\ec47(g&-06u?0Wcz%fDdEq=5 ZqrbOq܌7 qlyyp3u7 ⍌iO1AܬU9L[BwZd݄p@=Mv}3:a;`gW656;]J8')n}w3Nc{hs0« ] 2)bAÞ0}]ECx@|M3CJ%bb~߁\IdDxD<#Lfw+xPq[P/QXL~-6dg% JV:X:وɿkwvK X|&0x_ >@S+kH|/P+L [|A.uKa_)g $,e7bm-g}VoqXDwV}o?(=1^ď?' S;>#? ,~Qg&I>__8oYE>C߹Y?yJ(-/^D(y!oRoFRZc1%ؒ9 ڪ0s w R*)*q9JZlَ.lq9H@JabV#|'[vru).n._ gYJ1kҧTLPoK?is aGsheN|_{5z_?0<kN"T hYܜIaY 3rڼfH-v6?]&4B,(9[T}ЧRSJr;%rܿV#Jv㸟e%sܿV!r{lSdOZqe^o}Qt6g1Ď-QGV'IPR=qkF&ӳ\.Zv;J݉O$ѝ@Uz#}â;W.Jk?ErG}KFb#wr'l ׉GeY|Pr+>},UE+*9~x@ci%r>Z!`M7{Q@Qp|r]:d:q*Pq,RcؖŴh(#|Y0\Po %Ė%h*n1a$_h[&pQ]sqR_z"&wW9֖c.@j#G*W5z-^Gt`5rO}O+6qo.2Q{AAs4Y]=ܯ:?WE @KNPr/V3ro9QIެr-'QK4DAɉYaЩwzb,jd"},ϊW49]i_ЇT/Ӌr_[ۢj(9]+gșJ` z_juPəׇَ@#gVk=;"T,9[Y3\%0Ǻѯ7cuS-k2%1_e_rFؤW6v_?ۃnheHj\|OO4\Ȥ~Xc_ج?b[.n>  (y:<J=K7>X:JRR_'ۼb[¯U긒DgЌC?= U^%(9F/q!ڡ*SN'*y"ΟєĝǓM>H"O >Na,K~}`] OED&O%ۼBV3lyupLI 0_q@#zOxqg2WVE>:+t^L2^~@wd6qB^›_,w"Y-Y,VT+yq&hLr.&J%dRt=ؠ皗el~BϣߏTdy<;W#s_B%/>\=GjuBJ^Z-?KlypVcJ^nV-гTGP^ϔW>=U*sЀeUQe%dG}zm3YKަF.-=BKYO^%V*/ϓk&?K^'Wt4yQIGM);T=ͯX%yQ)o͐֐x]BǯF:Sz*tE>D2qn[mJX(ow(y;wbySޥny佶,AF=ܗpԧ&2[^bϖAG nuG~]Rm+bM ,Te|XɇOJ>L>.I~=rJ>u˧DHu:vƔ|<-{+J>~"_mj/G=+ M'z%d)ߗOɧ|ɼ){- i{[>>hGM[~GJ7Fbg8%IV47|K+"_|I*`"_UeI-_5|C׹؍ JiV՘QoXZU70z;AnlȲ_fbbhˁ&荔o ͷ%f!+wkw]Xw$v]hG$f/J=DJɏ֣HݦEI-_5ڣޓ=}.P~kc.#>]617K Act'ا$EЙ>gٺȧ$A7e;<̯mA 5؉OgJ~4zB.qJ~%Q-t(iK!J~n\ ,R vԃzP X`"L oJ~J{?~V}6|Ԛ\OxKo뻱-|60/n-h3[Y!z_lѼ|+m#ݺ`}6qZFl?Yɟ@\FX>3$#*3Pd~߶6+czPW~A򛒿JΣ>Κ#)g:?-BJɿ}6A'[BP\ KR`e`^;y:YQU'}zG2oݝlM}|k_ϯ8qlקf5ڎjͳ>>'-jcӽwV׬A=}z6]/2w=x4*꤬, -OYyGU[:{tt_Nپ-[Y~kȪ}{6B_wۂZ !g'R],%e'2З ~]׺JdM/={?̐~fst6dїVͿit=t.*=mhzK~ _>nrT|p\ 47ʠ bzH`\$.7/:\B˃AtG09tG@y}Bhӯ`>]=vVgbuYݭ ^rmꮺ,v(?C+mk dwW$y~i ?~ݱKγ_ocWׯ۵gGc~~-mYQZ6TF6?W HI[VdV?+;V?VOA>~:vMf5HK+kG}V -++_Z2kgigDH׉ADLǝi ;ɬҲ UH{3d'د8RФ s?S? j> Pa =aL)0 fla,` P!yIѼ%~$ǛO7/3/^nޡo7=0z- H}^` F63 !ڋϛS8p>cɺEܔ\.;Д]e=*` ! "h]N]g^޳KY^O% B .Ef^YX*,Qt]?6\Mtj]S\tu[Dc|=`J!F~.V7:Y7!9pK78lxms1}35@|w$톯rp7Ŕ{.= (vD_zX[V7 ^Zggk( ];[ 0+"l CswA^ *|oyJ=ybfՓ=g RH;[+,Ei#lkptzSg+ U/nmC(!# zX:[]o DN=ZK=Ml<+Tvz_V^tלH3b(8޻̧1E툣lgLYt ߽̍Z}IP~>;W!8Vw';L?;hJdՉ?2|PKw:cPK*'for script debugger/._force expt to endUX h>w:c=ha}w^״"!tnmQ"4FPVkrk..u"dtKA(:9Iٿ<߻ ԝA?y!:tb;t?@U׳% 9H?`&^7hJZ^~;ki"A$  Ɲ4P]ekmMLPXq)@np=׃ < # p9dʅ?\vwK[dw|iJi|ߥRgsZkú2ד`ӷz~uTw:}]ժt~-BȔeܗ!uT Q8סڛQ?lwzVfV h .qvƲ}*j[0E`4Qz3k ahI-]- Ba\lxW9xF$q鈽m/ݼb +Ӱ#vzhiu7Hdn̝:hx0z4ݚvrOkkݛr=Q˅1Li:K埄"Kme]X 8 S<5)ȟQFRٱ=PKNPK n.3for script debugger/move these to "Scripts" folder/UX >>cPK . for smile/UX =j>cPK.for smile/.DS_StoreUX b>b>c;0Dg K4.)pn`E W!RP%yViO_ 3>6!B}ctvB2ts:vc2]J7_#LC>+1XW,pp?a5 !~uvK@🅧nl+ܺOPKjmPK.for smile/._.DS_StoreUX b>b>cc`cg`b 1N 6b(?YM PK #wRPK ;.for smile/AuthoringAid:AUX ǥ>I>cPK;.for smile/._AuthoringAid:AUX ǥ>I>c}|T̹H P*HEM,lv{Wg{W|۳={=3$$~ߜ{̜9s)>hݭ-( eI4Û bEUpis%? Z}^p3ո# 7نrN:iR p]p {Փs%j? U'Hy~m*4&_%#a?- RI?ꗧp}1/VWFR~(YxH*REʺJ?F?jHcXyKYīRYFB ?YM|d"׈ ÄISSAO3pkN_G#%)JũF$I͠p . US;8&%"T&ZUѳdycsa)?AͫD~>_HW0ԱҰJ|'BZUE}n'em}/Xi|i**"M$^x<ļ,Rj`,a^f[,%~9U"mL.KDIXQJ_8n31 PLydiLz,VusX:.OL_ C"O+h*Y 'ļ2jmdk^ќD&$\)(uڌH2U&镗{aGRu*+'r{YIO^2DL<060sF6īS(vp@0wY emhʔ]tUFTV86^ܴנ-[*oFOjEH`HGISlyȥ`24:v+չH [CZ\t֫4[eJ"^% rLcatP|k,XƜkgRfa؆Ty+b p8^&fd|qiy>{Jh'hR?_Ff?9AV UFvGzѬ/XQ'*vd\+4 -2s&Up3[+O[ *gl3Տ,L5*V[tQu֏& ~/ʈ$"9\V6Ͱ93c|F5gDJ߂ԗͩ2?cz" /~RS L.Jr-M*oٱ!URSk$r4)@"vI{d6ՙ4e<0zAfy^lU̬%OLL:y*Z*DRf0?pVv)NV~*Q)qlMfKZE1Yc2:EasAAT,n 4Y/Pg'5zLf58ቆ~Ft$%aO;Mr84+B+:chE1!3'׈D,%TݘK5<&AMfzevv[KW@^QPI,&O+=Daj8,"l$XEK i|,OHzԔxb6U!jRK2lDe'k2l7(9 z3+ؖ LGkbO f$X8^#a.jU27xN)քS%&LB԰:ZLȸv*͟#~'gOp?,`adF4A䉎H-N16|3,}ʢEgVU\9[ k2DjS~[ꚡ7S9:Emd9(h: $J|Gq/muDSWLvCƮ0(iKDh4p1m!nKjHU3C"k+[2O" xIspEo.D72jJFCA`/?$4|b@P MqEv\A+zhJTnyIC[\h AhM}rmAJO %T:znvV<24>LanΚ\K1]n6XKT Zvww̥e /BT.ʯ貆wUl N>Ϧxz!~r^dE01Z3di4MP@UNChxqBaݤ]v YjPT6,J;մ*L /Sc12n2^pr .eVj""aN]BCZ{!23DkϏUḷ Q3Kv<OڑT(OʵVx"䅨I4ʽ(/z)F{@OM%O+HIb~i-z+MD5Uf] kJz ;Iݡ7K"]懀!+ܓ 4%lq~_S)2v4jT5%Vn0H *Z5%f2ĥxb%]vBMe.ȅ"`,)\H0iJlaPB1]Bhp)ܑ.$n02`gESba H;lLB+)hz.&9Tݍ` )U~a~˧lRwoK8Qۓ`/)h .L`mvB'ULI0مɬ IS`oM%@0M|[N`MBȃFgR|0SSb4Hg0FtNL0GSb+׆}]ؗ\hkBa\(єX ɉsaO*%aĊہf.,h3G`,֔؊+aN$b`L^|枡PBi)P)=ЅiLVJARIA 4vu 20Ky *^ /`F2+.TfN礶~i<[}4_P"WznN9'rMI\ل+6q+ )Ev|J:cהعn'8TSѕД6D֒t!Iy_<%%RP)ҔʅU엶WZM2f:(jXk4%44XCєXr rtX*Bp)lr GOѲP8H8JSb) h^q+B(cXM'ǹp䖏 ["M''p"MZ(@pӔXShj9مɲlӑYGp )dєs ѐ볥o}*p֞AΙ.Iѐm?ZggkJ,49vi\jMp.)DޅCcQ>pҞOs.\A>BHSbk/b.g^8^Dp \)y2.I1^^JO\Sb@.\+GRr+*M-,p W,Э~w5p G΅ػ4>\7hJlemotFv M.Hn5%r·p  H n4%p9]BvًR6;NM-YM~.%7,y'ݰASbK&=VK Rt^M-}.g.nT^M-ZGAhх)C?#.2E hԼS\<]xkws2{m^B{{d|mRZ-hh|6>.K/E47 +ZSb]F7.| !=βjd۔wK ~0hA2Kn"-])*Z^{jm=p㹰h>-X9(}!#*?мÒ}O)]M3/m dC;|[ȴJ"[d=Vj}(FLqfq~& ~הXq?Dt\'Hєj7-M Gq&&4PQ [vlediIm/KօV{u92noO$䩜aYovV`?$":m6"p3ohl'"2bmFoYJ/Cu"V=",U[5Dt]qa0x/ י~=v^aGƎB\܎ 9_c;t;żHxWU֙vM=`R.=F=3{$k!nkOIYt'腽5[cax_*pl3W%jeAe^oٛ`{Aqx Ce!x?eK6Lr|1_H>%; I8[)t_b  5f`(v-T 4/Xh^X(/r`9 5:vz!;ү9EX0CEU,6k,pZNۦVM&C8[ij-GV yvi7$bC}q툇Chf ,EJ߰/.6j\,/4.߰'.Uh_4.Uv 8=D22!x:m~_k [BT s K\\#]ar?3 +1R8,/7i\.L_ >tkvSDJcT<{5Ƅqzv w8V2*j\ZX%a1!Ox#ؿJhL 1;*sUB.0o aN5XV8u@ AX|ka˯B LE<ܭ`! ZsF9!.6 ri~qwgiث2khdދ4ywo"Gh<`$<ܦH;,~(;?Qx =xb{ǻx xG#l`6<k|HLsG ㏺skMBr&0cHcBnOj|B1OPM:d:ˆ̋bB24sHK< ^0j|A(1/n >OQaDX_a:ɽL*QXXX ȍ䋹k75:2lo6 e!c8TVy-dpi1_I]Ĕ$x(D3j+ ˯ ϻ8VGra.nd>-iA)TJ+k嘳r6\Պ/l{lbAkF<\5giV0U`ڶWZ*F6̨Wb!3!ǣTU@`< isgM~AAhq;S=}myK,/k~ teM֑TyD"jE38?saAs]N7(e9]&۸Jk̩hNcr#5A{A"ќEN":(q:<[u2$q?U:KܿOW]Jպ&ZaRb5ކxCa IC%D(.n5IkOJR')r$:v=TOzTw9 HO^VDuE9N>K﫶7j׾dlR;PŐUHtVVb_h# ߀c9Ze˵(j3G;,G,EkA 2Gi5ivu 9z ]ZY]^M͛h^.֪@:x=ޤ(5dIj%)U"^4z*_ Uôx^]U뎦/Ka*>^sJ=#FvJ2Br(p\rvJӊj5U.@b1Gh%WjNAC U1#ڨ氀9:QUWx몱f./F 9(9[=4he_ fi#KJ6 \Mpn{H튡4L4kg"'j[I@; iZM47P+LKjWӬih5YV W &hִkՌ\C S1?jL5K"{ 5jV{ ė}]?Vj&1`*j9~Z&S4[}j~fu -(!V BH ~u,jbUAj,%Zt,$O-j?q?iWj>@ju,M@aVhjfW̴rmKM2Ԫ2SmHrNx]7]pz"h $qK *2*h*UDJ[feЬLiaYuS]|kXPQVX%옊krض]T?UVjU-{:h \AoAq!ab[IJiU5[nVj&7JjPTNZikfALu"05B䪃T`Y(D+u0eUhV6JUô:TRY :,ײHDZ!pSnOuVG{(WD|̑_4)\jo:$#|IbC+ٮ&g\u3(zH3D \3)A3:lYRnVf[ԭZ"HݠnSku4"uCݩY u[+ً&RU8_琶-mz}rLn;{\uސZ0)h&5u+ԽZ EqzMg&OzI=QzH=CY)zTGDGfBLhVJ'ԓf|Ќ2mhC_;cZ=,eRϚf+Z=kθ ,-vg^K*ž1QՏ'z\zW=Iaz4{4T﨧]4F:\ wݛ5k Mц b5(a<~HP) rLes\S0,Oն1E,4;mEZmi:!TOGW!jV >Sk ``c0yϭN)H1I"A?RjVNx0 Zm5r@ hWݿHQd ";Z}coZ 1A w{CG~;Z$R9WÏ5)Ѥ7Uf>KV%eO?_k(U_ǖ?$Yow~kgBAAV9f-[ϤϙHVLqȮ*aק89(`_8N+8Y{քvښhoi?qOwvMi $' 27;T-6\+`zeB8 LϠ\O8J,tӣ.ԫ :v"N0ݳv\s4ݶj9ܮ0]pXhvh{p:8AXLl[;Jl0շ}9Ʃ3c}[;ISc:MՎ,s2M}>q:wp:#[^a|ɳJ~dݨGu—ۯ!=+.<`ڒ)ہG;KF YOw̘yNfn_λo(,j  CMJlxюO@CDJB7AmwmZG;vs13B2,16.@D >  ,8$ E R֔0KtXt:e*gZOС#8ִwP$鎦=rZm\44z w+ Dl%*F5V?\kڠ T+ӎfuӃz:=ɇ25Cێ˴1)JcZL-N5N_%2ٞ~pvPIP_eu)߬sGmN#gG) {n6Q+zF5{aA1Q0q0&T`_ a B9T@A#/H78ie{j-įciNË o>M-ŸPv{b_p0pGXq-?`)2\qLj>PN uxx ^Wx3ގw >O"o>np~?/WT0Eb5 ??Wߩ}ߪ}FJZ*)e Z,ޔ\mP?Kv:?Iޘ(a§KA`+{N@ nK{NOh(Iyo[8kL7&)H@d0}}``fw0 }k@̦/6b ELgK if ?, 鏷8y 2˞@-,jQ ~fqHw3vs{G?>M_}AG=AW| tAzz˃{!yAv`=A=NzPPyPpFx0҃=؅"z=X`{y0ރ L`=L`x0݃`Djz0׃y0߃,`*K=߃<(@<<( e|*S2*=x܃D= A&UVz AʃVyڃZ<8ȃ5ZPpHh،HWfw IdNTN#{pFԅ3=8k0*|6U;;< n),a;(# 00>Pyv<`],Ϻg]"J8YpY% O.wHΤWRDMb܅2K\2kϕ쵋m0R@͏r@tjh7{Dl&͝.Е,[gWPzB(n'zw؇Y zpW٬ۈmVƻ.Ia}~O0 k EY,o=;Caglh=}dupN}&M؛8,Y^b2pGhhzO7=},w{f],$LPKV^92!oPK *for smile/force expt to endUX j>w:cPK*for smile/._force expt to endUX j>w:c=ha}w^״"!tnmQ"4FPVkrk..u"dtKA(:9Iٿ<߻ ԝA?y!:tb;t?@U׳% 9H?`&^7hJZ^~;ki"A$  Ɲ4P]ekmMLPXq)@np=׃ < # p9dʅ?\vwK[dw|iJi|ߥRgsZkú2ד`ӷz~uTw:}]ժt~-BȔeܗ!uT Q8סڛQ?lwzVfV h .qvƲ}*j[0E`4Qz3k ahI-]- Ba\lxW9xF$q鈽m/ݼb +Ӱ#vzhiu7Hdn̝:hx0z4ݚvrOkkݛr=Q˅1Li:K埄"Kme]X 8 S<5)ȟQFRٱ=PKNPK . @Afor script debugger/UX=>PK.jm @Bfor script debugger/.DS_StoreUX>>PK. #wR @Ofor script debugger/._.DS_StoreUX>>PK . @for script debugger/AuthoringAidUXi>X>PK.X>PK *% @:for script debugger/force expt to endUXh>w:PK*N' @;for script debugger/._force expt to endUXh>w:PK n.3 @A>for script debugger/move these to "Scripts" folder/UX>>PK . @Ad>for smile/UX=j>PK.jm @>for smile/.DS_StoreUXb>b>PK. #wR @?for smile/._.DS_StoreUXb>b>PK ;. @@for smile/AuthoringAid:AUXǥ>I>PK;.V^92!o @T@for smile/._AuthoringAid:AUXǥ>I>PK * @Gsfor smile/force expt to endUXj>w:PK*N @sfor smile/._force expt to endUXj>w:PKv?l  5z+J6*6+! ?????????????????ics4 ics8++VVVVVTVV*TTVVVVV++is32zyvsokzd_ z^S zWRMG y̪A u;p鈀5 jлf33f. dͷDf3' ]ʰDf̙f Wƪ33 P¤DDDw߻ ID޻ BwDw޻<݆ 61,'! zyvsokzd_ z^S zWRMG y̪A u;p鈀5 jлf33f. dͷDf3' ]ʰDf̙f Wƪ33 P¤DDDw߻ ID޻ BwDw޻<݆ 61,'! zyvsokzd_ z^S zWRMG y̪A u;p鈀5 jлff̻. dͷDf']ʰD̻̀ Wƪff P¤DDDw߻ ID޻ BwDw޻<݆ 61,'! s8mkICN#?@GXATBT~DXWP@?~UU(W/"@bV_BQBV Wl??icl4 ڪ  ݯެެڬicl8+T+****T****T***T*******T**TT*******T**T***T****T*********T*TTTTTTTTTTTTTTTT+VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV*TTVVVVVVV*TTVVVVVVVT*TTTTTVVVVVVT****TTVVVVV*TVVVVVVV*VVVVVVVVVVVVVVVVVVVVVVVVVVVVil32 ~}{zxvusqoljew_fkZf `Tf̀T݀NfHURPNKIf̙ႪFfުCf̀ݪ@f̍ ܪ= fܪ:ỏ ۪7lڪ4 if٪1 fл"Dت. cлfffت* `ϹD"f3fת']͵ffff$Y˲fff3! VɮD"̂f3Ԫ SǪffffԪ PƦff́f3Bud1%  @ @ @ @ E%DSDB` @ @ @߁݀ނ݄܄ۀڀڂɩ31ttǒ`+*))87SڀقȨ10tsǑ w ۂځقɩ00srǐ  ہځفȨ/.rqǏ ؀ڃف؀Ȩ..qpǎ unWڃلǨ-,poǍ KDՀل؁Ȩ,+oonjf%؀ف؃Ǩ+*nnNj  {|{|{{z{z< 6p~Ǩ*)nmNJq  6-׀Ǩ)(llljH  Qׁǧ''lkLj' v! &ׁǧ&&kjLJ(  vkБմ3QƧ%%jidž(m  '$CP/廅3dƦ%$ihDž)E #'(HV ߳b0wԁŦ##hgDŽ*$)/ b ҫI# ρŦ""gfǃ+%*17i 3#ЀŦ"!fdǂ+h &,28= ]01 3 EՁť! ddǁ,A'.38?E66` 6 d3hՁŦdcǀ-(/5:AF8P 8 בO(̂ĥ9ba16;BHM)kt5ՀťXbad7=DINUv 2 R@zvqmhfU EäJ[ZW^ciou{-5`{wrnifB_äIZYǿv_ejqv{aP}xtokgf 2ӂãHYXƼT1fkrx}Dj~~{zyzyzyzyzzlf"͂äIXWú2Hmty~-u۽% #*27ESao}f \ 4΄£IVV¸iuz $O@Ƶ zuqmhc^\of LMр £IVUtu{>39sj_SG?f 6p҃£9UT;S5}gX뫥N߀ sj_SGëf $ ҃SS˼,2WV{ף28©sj_cܘf "Ҁ£RRʺ:v+ h i`P©sjwffO D҃QQɸ,t,5Pw ©sf <^ρ  PPƶS6F 򑌈S ©ˀf #Ёс£ ONŴ2_iiI##! C3c{wmʂт ONIJ835. +с MMñt ׽ h Lр LLSAҷ=Ǹ4/*%# " 3с KJ2̱SFʹ gсЀ JJʾĪ;>ɶ4у IIȽtٿn8Uɹz/ ̀ЂHHǻ d{l]LOρЂ GGƺ dui[NA(  Ѓ FFŸ sysfWJ>-!^ʀʀ Є EDķ8`ʀ πЁЃ DCõ~H ;цπЇDCځف؂̺% тЁЇ BBڀك ϾD чЇBAق؀ ƵdgхЊA@ڀ ؀׀ ĸfRQ)EGIMPZχЎ??߂ل؁׃þ;]тЃЌ?>ل؂ׂr2сρЎ==ل؁׃րw+zсЏ==ق؀׀Հh31.-, 6|I#"#%'*+6ρВ<;ހ׀؀ׁՀՀ ±̓Г;:߀ׂւɺ̀Й:9؂׃ցԁՃɺ͂З98ނրׂցՂԀµ΀И87؃ֆՂԂ¿ К76ׁׁւՂԃ˂К65׃րՀԁӇҀтП44ʾ43ʲ3210//--,++)(''&%##""!!   -00/..-,,+**)('&%%$$#"!!    ~}|{zzyy~}|{z{{yxxw{{|wwv {{zwvu{{yt{{xsrr {{wrrq {{vqpo {{ 2 RosasasDB@ HR?R?22.04BhHDDS8r`g\ph% property prefix1Text : "considering " property selectedText : "case, white space, diacriticals, hyphens, expansion, punctuation, application responses" property prefix2Text : return property suffixText : {"end considering" & return} set eyelinkStuff to {"initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)", "checkLink()", "open_data_file(fileName, preambleText) ", "close_data_file()", "add_file_preamble_text(theText)", "initDisplayCoordinates() ", "set_calibration_type(calType) ", "recordAndEchoTrialID(TrialID, trialVariables)", "doDriftCorrect() ", "display_status_message(TrialID)", "drawText(xyPoint, colorInt, theText)", "setDefaults()", "setParserToCognitive() ", "setParserToPursuitOrNeurology() ", "setFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})", "setFixationUpdatesON() ", "setFixationUpdatesOFF() ", "set_saccade_velocity_threshold(theValue)", "set_saccade_acceleration_threshold(theValue)", "set_file_event_filter(theValue) (* set EDF file contents *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", "sparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min", "create_shuffled_list(listLength)", "create_shuffled_sublist(totalNumberSet, listLength)", "pickInRangeButNotInList({allowedRange, badList})", "parsetostring(TheList, theDelimiters)", "findAndReplace(find, replace, inputString)", "stringToList(theString, theDelimiters)"} try set whattodo to item 1 of (choose from list {"file handling", "manipulate lists", "screen", "other", "eyelink"}) set whom to "helper" if whattodo is "file handling" then set TheList to fileStuff else if whattodo is "other" then set TheList to otherStuff else if whattodo is "screen" then set TheList to screenStuff set whom to "screen" else if whattodo is "eyelink" then set TheList to eyelinkStuff set whom to "eyelink" else set TheList to listStuff end if end try set theHandlerstoInsert to choose from list TheList with multiple selections allowed if theHandlerstoInsert is false then -- else if (count of theHandlerstoInsert) is 1 then set texttoinsert to "tell " & whom & " to " & theHandlerstoInsert else set texttoinsert to "tell " & whom & " " repeat with anItem in theHandlerstoInsert set texttoinsert to texttoinsert & anItem & return end repeat set texttoinsert to texttoinsert & "end " end if if not (first window exists) then make new document set newDoc to true else set newDoc to false end if set theDocument to first document set theWindow to first window if class pSTT of theDocument is constant ASDSasDS then set theClass to class of theWindow if theClass is class SCPT or theClass is class cESw then normalizeSelection(theDocument) if newDoc then set selection of theDocument to "tell application \"PsyScript\" activate begin experiment --load function libraries set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & the selection & return & texttoinsert & " end experiment end tell " else set selection of theDocument to the selection & return & texttoinsert & return end if else event asDBDSPe "This window is not a script window" end if else event asDBDSPe "Script " & (name of document 1) & " is running or recording and cannot be changed." & return & return & "Press Stop and try again." end if end if on normalizeSelection(theDocument) -- This handler extends the current selection to the nearest entire lines try if class pPOS of last insertion point of selection of theDocument class pPOS of last insertion point of theDocument and last character of theDocument is return then -- do nothing when the selection is at the end of the document else local startLine, endLine repeat set startLine to index of first line of selection of theDocument set endLine to index of last line of selection of theDocument if character -2 of line endLine of theDocument = "" then set selection of theDocument to lines startLine thru (endLine + 1) of theDocument else set selection of theDocument to lines startLine thru endLine of theDocument exit repeat end if end repeat end if end try end normalizeSelection on getLinePrefix(theString) -- This handler determins how many spaces or tabs are at the beginning of the first line of -- the current selection local thePrefix set thePrefix to {} -- AppleScript is faster at appending items to lists than strings repeat with aChar in characters of theString local theChar set theChar to contents of aChar -- because aChar is an object reference, not a value if theChar is " " or theChar is tab then set end of thePrefix to theChar else exit repeat end if end repeat local saveDelims set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {} set thePrefix to thePrefix as string set AppleScript's text item delimiters to saveDelims return thePrefix end getLinePrefix on indentLines(theText, thePrefix) -- This handler indents text by placing a prefix string at the beginning of each line local saveDelims, theLines try set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {return} if last character of theText is return then set theLines to text items of text 1 thru -2 of theText else set theLines to text items of theText end if repeat with aline in theLines if length of contents of aline > 0 then set contents of aline to thePrefix & (contents of aline) end if end repeat set theText to (theLines as string) set AppleScript's text item delimiters to saveDelims on error errMsg number errNum set AppleScript's text item delimiters to saveDelims set theText to thePrefix end try return theText end indentLines on getWrapText(theDocument) -- This handler obtains the text of the current selection. If the selection is empty or all white space -- the routine returns the string "-- your commands go here" local theText set theText to selection of theDocument as string if length of theText > 10 then -- if the selection is of significant length just wrap it return theText else repeat with aChar in characters of theText local theChar set theChar to contents of aChar if theChar is not " " and theChar is not tab and theChar is not return then return theText end if end repeat return getLinePrefix(theText) & "-- your commands go here" end if end getWrapText on formatSuffix(linePrefix) local resultText set resultText to {} repeat with aSuffix in suffixText set end of resultText to (linePrefix & aSuffix) end repeat return resultText end formatSuffixZFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lqoV ZqoU =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}o l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: Oo kn Q k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k r I0/ 0.corecrel****null/.- . kocl m  , , docu- o+ +0 thedocument theDocument* r m) ) boovtrue o( (0newdocNewDoc*' Zn& o% %0newdocNewDoc r!4 b!, b!( m!$  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o$'$ $0 texttoinsert m(+ $ end experiment end tell  n 1/3# # sele o,/" "0 thedocument theDocument& Q7n r:W b:O b:K b:G l:C! c:C l:? 1:?  sele m?B  ctxt! oCF  ret oGJ 0 texttoinsert oKN  ret n 1RV  sele oOR 0 thedocument theDocument R .ascrerr ******** r_n b_f   o_b 0 texttoinsert  obe  ret n   1im  sele  ofi 0 thedocument theDocument' m  null3Script Debugger"D $ǰǰ5|tP5f asDBalisPreludeYT3H+3Script Debugger3ϹZ$APPLasDB Script Debugger 3.0Ẍ́3---CPrelude:Apps:Coding:AppleScript:Script Debugger 3.0:Script Debugger Script DebuggerPrelude;Apps/Coding/AppleScript/Script Debugger 3.0/Script Debugger/:VWB  0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull**** 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  0whattodo 0whom 0thelisttheList *0thehandlerstoinserttheHandlerstoInsert 0 texttoinsert 0 thedocument theDocument 0newdocNewDoc   end considering  .aevtoappnull**** ko!!"""k##$$W%%&&''(()) 0anitemanItem *-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz  0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  docu .corecrel****null  sele  ctxtpaaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`WX*aal E`OeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FU***-0369<?BEHKNQTWZ]`cfh++svy|,","  !%)-159=AEIMQT- - _cgkosw{~."." //  file handling001 1icreadSpreadsheet(thefile)--just give a file name to read data from the folder containing your script rlhelper's readSpreadsheet(thefile)--just give a file name to read data from the folder containing your script22  cSCR  kfrmID  boovtrueascr ޭ NKEY2spsh>WPosJDBGhVTEXTbscptn&\%m Source TextōčC?l2icns Binding OverrideɕȕW?lFusroicns 2 RMosasasDBz**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source TextBud1%  @ @ @ @ E%DSDB` @ @ @ 2 R@ 2 RnosasasDB@n-m-HR?R?22.04OHDDSh@sproperty prefix1Text : "considering " property selectedText : "case, white space, diacriticals, hyphens, expansion, punctuation, application responses" property prefix2Text : return property suffixText : {"end considering" & return} set eyelinkStuff to {"initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)", "checkLink()", "open_data_file(fileName, preambleText) ", "close_data_file()", "add_file_preamble_text(theText)", "initDisplayCoordinates() ", "set_calibration_type(calType) ", "recordAndEchoTrialID(TrialID, trialVariables)", "doDriftCorrect() ", "display_status_message(TrialID)", "drawText(xyPoint, colorInt, theText)", "setDefaults()", "setParserToCognitive() ", "setParserToPursuitOrNeurology() ", "setFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})", "setFixationUpdatesON() ", "setFixationUpdatesOFF() ", "set_saccade_velocity_threshold(theValue)", "set_saccade_acceleration_threshold(theValue)", "set_file_event_filter(theValue) (* set EDF file contents *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", "sparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min", "create_shuffled_list(listLength)", "create_shuffled_sublist(totalNumberSet, listLength)", "pickInRangeButNotInList({allowedRange, badList})", "parsetostring(TheList, theDelimiters)", "findAndReplace(find, replace, inputString)", "stringToList(theString, theDelimiters)"} try set whattodo to item 1 of (choose from list {"file handling", "manipulate lists", "screen", "other", "eyelink"}) set whom to "helper" if whattodo is "file handling" then set theList to fileStuff else if whattodo is "other" then set theList to otherStuff else if whattodo is "screen" then set theList to screenStuff set whom to "screen" else if whattodo is "eyelink" then set theList to eyelinkStuff set whom to "eyelink" else set theList to listStuff end if end try set theHandlerstoInsert to choose from list theList with multiple selections allowed if theHandlerstoInsert is false then -- else if (count of theHandlerstoInsert) is 1 then set texttoinsert to "tell " & whom & " to " & theHandlerstoInsert else set texttoinsert to "tell " & whom & " " repeat with anItem in theHandlerstoInsert set texttoinsert to texttoinsert & anItem & return end repeat set texttoinsert to texttoinsert & "end " end if tell application "Smile" try set theDocument to window 1 set NewDoc to false on error set theDocument to make new script window set line width of theDocument to 600 set NewDoc to true end try if NewDoc then set selection of theDocument to " tell application \"PsyScript\" activate begin experiment set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & texttoinsert & " end experiment end tell " else try set selection of theDocument to (the selection as text) & return & texttoinsert & return on error set selection of theDocument to texttoinsert & return end try end if end tell end ifVVFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lq{V Zq{U =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}{ l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: O{ kz Q& k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k& r I0/ 0.corecrel****null/.- . kocl m  , , sctx- o+ +0 thedocument theDocument r  m**X n 1) ) LWdt o( (0 thedocument theDocument' r!& m!"& & boovtrue o% %0newdocNewDoc'$ Z'z# o'*" "0newdocNewDoc r-@ b-8 b-4 m-0  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o03! !0 texttoinsert m47 $ end experiment end tell  n 1;?  sele o8; 0 thedocument theDocument# QCz rFc bF[ bFW bFS lFO cFO lFK   1FK  sele  mKN  ctxt oOR  ret oSV 0 texttoinsert oWZ  ret n   1^b  sele  o[^ 0 thedocument theDocument R .ascrerr ******** rkz   bkr okn 0 texttoinsert onq  ret n 1uy  sele oru 0 thedocument theDocument$ mnull߀ #~ Smile.appː626˰!)AeP0,VIZFalisfVortexLUH+ #~ Smile.app;S SmileKcS# #~8!P4Vortex:Applications:_My Applications:Smile:Smile.app Smile.appVortex-Applications/_My Applications/Smile/Smile.app/:VW 0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull****   end considering  .aevtoappnull**** k{"k  W!!""##$$%% 0anitemanItem*-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  sctx .corecrel****nullX  LWdt  sele  ctxt|aaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`W(X*aal E`Oa_a,FOeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FUascr ޭn-m-/KEY2spsh>WPosJDBGhVTEXTbscptn&\L Source Text 2 RMosasasDBz**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source TextPK .for script debugger/UX :R?>cPKwv!/for script debugger/.DS_StoreUX :R?aR?c;N1/ ZM YnDN"(!roG"܄2(OADF_vc{&v^0aH$v1GDoK?F>:NjR6 v{ZCfj:hvU7BcPK."for script debugger/._AuthoringAidUX :R?X>c|xUEZ= ) $@QPD HDh<=I.n!DDްW^^7{[~?󣳹gwfvvvf{v 5~#ಖjL3bk^ ,Qݹjiel;5\>VbAJXލ%1:rd2ȯF⡠ EjZq7V%`w ;U X(r@mc}zQF#Ed*t&ׇ.e17^tx~sFycn"ƧUn$1lxI$un<Ըi<.4+FCD\8Nr,N2 Pq7VކVMPbNl!l0P⠎YV0J{ ֜ٹ6}4ujPzUH#naNN_ڪo̥NOEJ`hfӔҩ4X1iNBs $n0PjC]4V[Lvs.gb;*<[HSZT|fDn25uu M'itHZ+\Ę+gaaQ9y4GC/ŵ2ҟ8ϭAC+;+P;ȠNUA=>׍]5/( 9+Kp\jY<'h2fa37ӵ:s BDY9%PMmIQdևV(B%~YhΥyr593 k&yX|J(߂Kԅ"6 EpDmyt*Z!7敢׺SV; !SP}ֿ瞇,Y8r$ @dPmf ^ktsi|8Wqr 9I4´&O\< 2!2>ψJe=S3 gk #(X0^뺉DpiM>$Z1YS4f8Y`h\Oy k$MDQїreMifjldi8aY٬6|,㬞6%8#جώb'ZX65MDpRS8q"b#ʨ `2c601>=OĒUZ ?YN&nL`1d&ab8unٓdO(lvJF,ci >3Uar4T?Mb (-9`f~n)j]WkQ'nj;Ӎxy&u<9CU˦G$#0=‹'6Agbv_hhOV(⒲.dHXHszeBrI'듉d|,K+k3xFG3Q"D $U5\0A5IlbstSgК'(3S%%fqJ~xdtiךn Ug(gz晰AaT#a4ΚVZ{hy{װiY7wC9tSƼyی RVXd$8$ N7Zm6i DmDQC(i®{YP׹Ŋ5;)X M \nD"0pm ƟT?Z@DN[ƤPy14NLNI~pGz[ј0V8k kQ%9b@[3^´hy)V%)aQiЉ%&">2㗥dzLgb,`n2;Ua'ԗ4 IhL"0̉o (Xcu:U6y.QjJYCF^$3JYZ r8,*$xOH^#Zfn4UFr7%ύ7d +.C+ЄJ\NFhg[`Qqq8մI^[,= 5ӟ ^E) j+faK3Q]_!f3?Fh#ܠT$LJ+cPnyfff?CIҲ@>E;hR:iIqq"l!2ɦ B?=# IX2B!)3Rơ=j'B+/# #usq3#7Cv7G)'FqqD-H.q#d,F:*C1"*%b2c.0d؀VGFۊ$bg*8c8AS,OiSP\cF:PKPF)6q t_yNKh ctAVG֧+.tWn$նdAh`0heU<4vid7>H~քnqgm,(H#F32owF6h3 擉'sS6roavi; 5XfCF>)/T|4xoM oqLd=TNfe:z?ݛY1I{i"oV(L bg}k2j]J{z2FUMd-lJI(P^. : ^| %wFyqQѴJ6՟\5IOOfO?[Bs$?$n|႙r=8qސm Φ=LOMt)ʴjaVpƀC۶- ש5S%3z62Sf-z"sF0^MxQn$8lk2{e%'4-!MWi iu.͛JyتOV7"E>DMQPzl֛&U.|dpQQj| TΠ.LkB *C$ĚHQ{TwAQ񎦚g9\ăO, >35`  eYAa"2t q8)LkW}.#JF&nP5=BkkvyVx+?S@B:A: `sgN\+UN I]#a~ 7qt^-[/ 97l9nqdI1k1> Ofc|'vDX+ (El\S>lWvCd0W1r q3˩*  , )/ErhhR$1uyZI/= ў:m4%ShŶ١ apΛfFT:[a:d.B TFPYa"?tcҧe?rD/ ]عWA7nA{;tcү%Aν2;p /!dV!l=&Id1*W^ ~GO |8 =[abA cC d|}@kjw"~g@VbÎ #%^B4"WM;,%Ap]4NU ɋ/+ d#O) ZcPHo٘\|Bh ПW^7&h6$) OkbĜ&B=Yf68H@x Vg}G&OwmxW:rߒ M7{K 7t Ec0ahÇVluQ"&cnH(}LG\|\C3H'7ڰwK/{X2#n9|?ƈhm@MjoF菈>TO _|?T9A/l-]pKxLg20[s{yt1\)1kk!| h6d.A@7ٰ : l Vab]N;76|蓾fiH8ӟ ? JC?)f"U"R\lqJ96y̒0b,_mʼ3*k?~8Uab8=o]1gFv,ljsË{o8-\5W>2Qλί H(١6w) &U~[ f 7 )VCo)юR-&D8\'hpi֡m)S4\5` ŷEa!t,wNzE"l־ͥ'PUs~%|pJ-­~ɊIE%:3UDWOl._rܿAwA&+э=J`)-ϪԬ;BOKaxL_SbnF޶M{0M{Vuq }5" D&<)W$(q8WrbI7}8mycc4_%}v;)#|I@k^$dʝJ3ʧ91P@FIADk-{x_&;# CxE~I ("u+2bC(/*Q)_lb%,4:f:33[s2K/KJ g^E~Af#m1Wӷy|rZ1~+g/h%F1aE?w@]m+ 8d'G#)1sJS~-Ҷ]07*p4 F(bF aCqx_쩟UbOFMOtT©KHhe,|h^L}H쭟Q;ѠD[L?%V027آ=S(%VF%V2.UO]L~-VCۯ3{ )FP}2nb{Z߭Øa8t[nwd]~}b^˾^+D{!%μ;BI*G G*T`dq]31JmfJq,V=Nq܋q-NEoA8Dq'd}|bkm86B{)T%NaqU-Ost+Q: qg0!ꞥoQ,Dmq6m7-LsĹJøbqY >X1mq~v9u35;aY(蛔QB[\H˙h n"4BH\EDPR[\jK~ɁqH8.FL\ec47(g&-06u?0Wcz%fDdEq=5 ZqrbOq܌7 qlyyp3u7 ⍌iO1AܬU9L[BwZd݄p@=Mv}3:a;`gW656;]J8')n}w3Nc{hs0« ] 2)bAÞ0}]ECx@|M3CJ%bb~߁\IdDxD<#Lfw+xPq[P/QXL~-6dg% JV:X:وɿkwvK X|&0x_ >@S+kH|/P+L [|A.uKa_)g $,e7bm-g}VoqXDwV}o?(=1^ď?' S;>#? ,~Qg&I>__8oYE>C߹Y?yJ(-/^D(y!oRoFRZc1%ؒ9 ڪ0s w R*)*q9JZlَ.lq9H@JabV#|'[vru).n._ gYJ1kҧTLPoK?is aGsheN|_{5z_?0<kN"T hYܜIaY 3rڼfH-v6?]&4B,(9[T}ЧRSJr;%rܿV#Jv㸟e%sܿV!r{lSdOZqe^o}Qt6g1Ď-QGV'IPR=qkF&ӳ\.Zv;J݉O$ѝ@Uz#}â;W.Jk?ErG}KFb#wr'l ׉GeY|Pr+>},UE+*9~x@ci%r>Z!`M7{Q@Qp|r]:d:q*Pq,RcؖŴh(#|Y0\Po %Ė%h*n1a$_h[&pQ]sqR_z"&wW9֖c.@j#G*W5z-^Gt`5rO}O+6qo.2Q{AAs4Y]=ܯ:?WE @KNPr/V3ro9QIެr-'QK4DAɉYaЩwzb,jd"},ϊW49]i_ЇT/Ӌr_[ۢj(9]+gșJ` z_juPəׇَ@#gVk=;"T,9[Y3\%0Ǻѯ7cuS-k2%1_e_rFؤW6v_?ۃnheHj\|OO4\Ȥ~Xc_ج?b[.n>  (y:<J=K7>X:JRR_'ۼb[¯U긒DgЌC?= U^%(9F/q!ڡ*SN'*y"ΟєĝǓM>H"O >Na,K~}`] OED&O%ۼBV3lyupLI 0_q@#zOxqg2WVE>:+t^L2^~@wd6qB^›_,w"Y-Y,VT+yq&hLr.&J%dRt=ؠ皗el~BϣߏTdy<;W#s_B%/>\=GjuBJ^Z-?KlypVcJ^nV-гTGP^ϔW>=U*sЀeUQe%dG}zm3YKަF.-=BKYO^%V*/ϓk&?K^'Wt4yQIGM);T=ͯX%yQ)o͐֐x]BǯF:Sz*tE>D2qn[mJX(ow(y;wbySޥny佶,AF=ܗpԧ&2[^bϖAG nuG~]Rm+bM ,Te|XɇOJ>L>.I~=rJ>u˧DHu:vƔ|<-{+J>~"_mj/G=+ M'z%d)ߗOɧ|ɼ){- i{[>>hGM[~GJ7Fbg8%IV47|K+"_|I*`"_UeI-_5|C׹؍ JiV՘QoXZU70z;AnlȲ_fbbhˁ&荔o ͷ%f!+wkw]Xw$v]hG$f/J=DJɏ֣HݦEI-_5ڣޓ=}.P~kc.#>]617K Act'ا$EЙ>gٺȧ$A7e;<̯mA 5؉OgJ~4zB.qJ~%Q-t(iK!J~n\ ,R vԃzP X`"L oJ~J{?~V}6|Ԛ\OxKo뻱-|60/n-h3[Y!z_lѼ|+m#ݺ`}6qZFl?Yɟ@\FX>3$#*3Pd~߶6+czPW~A򛒿JΣ>Κ#)g:?-BJɿ}6A'[BP\ KR`e`^;y:YQU'}zG2oݝlM}|k_ϯ8qlקf5ڎjͳ>>'-jcӽwV׬A=}z6]/2w=x4*꤬, -OYyGU[:{tt_Nپ-[Y~kȪ}{6B_wۂZ !g'R],%e'2З ~]׺JdM/={?̐~fst6dїVͿit=t.*=mhzK~ _>nrT|p\ 47ʠ bzH`\$.7/:\B˃AtG09tG@y}Bhӯ`>]=vVgbuYݭ ^rmꮺ,v(?C+mk dwW$y~i ?~ݱKγ_ocWׯ۵gGc~~-mYQZ6TF6?W HI[VdV?+;V?VOA>~:vMf5HK+kG}V -++_Z2kgigDH׉ADLǝi ;ɬҲ UH{3d'د8RФ s?S? j> Pa =aL)0 fla,` P!yIѼ%~$ǛO7/3/^nޡo7=0z- H}^` F63 !ڋϛS8p>cɺEܔ\.;Д]e=*` ! "h]N]g^޳KY^O% B .Ef^YX*,Qt]?6\Mtj]S\tu[Dc|=`J!F~.V7:Y7!9pK78lxms1}35@|w$톯rp7Ŕ{.= (vD_zX[V7 ^Zggk( ];[ 0+"l CswA^ *|oyJ=ybfՓ=g RH;[+,Ei#lkptzSg+ U/nmC(!# zX:[]o DN=ZK=Ml<+Tvz_V^tלH3b(8޻̧1E툣lgLYt ߽̍Z}IP~>;W!8Vw';L?;hJdՉ?2|PK>cPK . for smile/UX :R?j>cPKwv!/for smile/.DS_StoreUX :R?aR?cJ@DIw]opƥ( .(|7u.z骵=>̙9aLOc ":BR ]Ї-JTBoq_šwn_Nh8Cď,-eBήw M0.qF2.lP|θ6C:K(1Ֆ!CtcPK;.for smile/._AuthoringAid:AUX :R?I>c}|T̹H P*HEM,lv{Wg{W|۳={=3$$~ߜ{̜9s)>hݭ-( eI4Û bEUpis%? Z}^p3ո# 7نrN:iR p]p {Փs%j? U'Hy~m*4&_%#a?- RI?ꗧp}1/VWFR~(YxH*REʺJ?F?jHcXyKYīRYFB ?YM|d"׈ ÄISSAO3pkN_G#%)JũF$I͠p . US;8&%"T&ZUѳdycsa)?AͫD~>_HW0ԱҰJ|'BZUE}n'em}/Xi|i**"M$^x<ļ,Rj`,a^f[,%~9U"mL.KDIXQJ_8n31 PLydiLz,VusX:.OL_ C"O+h*Y 'ļ2jmdk^ќD&$\)(uڌH2U&镗{aGRu*+'r{YIO^2DL<060sF6īS(vp@0wY emhʔ]tUFTV86^ܴנ-[*oFOjEH`HGISlyȥ`24:v+չH [CZ\t֫4[eJ"^% rLcatP|k,XƜkgRfa؆Ty+b p8^&fd|qiy>{Jh'hR?_Ff?9AV UFvGzѬ/XQ'*vd\+4 -2s&Up3[+O[ *gl3Տ,L5*V[tQu֏& ~/ʈ$"9\V6Ͱ93c|F5gDJ߂ԗͩ2?cz" /~RS L.Jr-M*oٱ!URSk$r4)@"vI{d6ՙ4e<0zAfy^lU̬%OLL:y*Z*DRf0?pVv)NV~*Q)qlMfKZE1Yc2:EasAAT,n 4Y/Pg'5zLf58ቆ~Ft$%aO;Mr84+B+:chE1!3'׈D,%TݘK5<&AMfzevv[KW@^QPI,&O+=Daj8,"l$XEK i|,OHzԔxb6U!jRK2lDe'k2l7(9 z3+ؖ LGkbO f$X8^#a.jU27xN)քS%&LB԰:ZLȸv*͟#~'gOp?,`adF4A䉎H-N16|3,}ʢEgVU\9[ k2DjS~[ꚡ7S9:Emd9(h: $J|Gq/muDSWLvCƮ0(iKDh4p1m!nKjHU3C"k+[2O" xIspEo.D72jJFCA`/?$4|b@P MqEv\A+zhJTnyIC[\h AhM}rmAJO %T:znvV<24>LanΚ\K1]n6XKT Zvww̥e /BT.ʯ貆wUl N>Ϧxz!~r^dE01Z3di4MP@UNChxqBaݤ]v YjPT6,J;մ*L /Sc12n2^pr .eVj""aN]BCZ{!23DkϏUḷ Q3Kv<OڑT(OʵVx"䅨I4ʽ(/z)F{@OM%O+HIb~i-z+MD5Uf] kJz ;Iݡ7K"]懀!+ܓ 4%lq~_S)2v4jT5%Vn0H *Z5%f2ĥxb%]vBMe.ȅ"`,)\H0iJlaPB1]Bhp)ܑ.$n02`gESba H;lLB+)hz.&9Tݍ` )U~a~˧lRwoK8Qۓ`/)h .L`mvB'ULI0مɬ IS`oM%@0M|[N`MBȃFgR|0SSb4Hg0FtNL0GSb+׆}]ؗ\hkBa\(єX ɉsaO*%aĊہf.,h3G`,֔؊+aN$b`L^|枡PBi)P)=ЅiLVJARIA 4vu 20Ky *^ /`F2+.TfN礶~i<[}4_P"WznN9'rMI\ل+6q+ )Ev|J:cהعn'8TSѕД6D֒t!Iy_<%%RP)ҔʅU엶WZM2f:(jXk4%44XCєXr rtX*Bp)lr GOѲP8H8JSb) h^q+B(cXM'ǹp䖏 ["M''p"MZ(@pӔXShj9مɲlӑYGp )dєs ѐ볥o}*p֞AΙ.Iѐm?ZggkJ,49vi\jMp.)DޅCcQ>pҞOs.\A>BHSbk/b.g^8^Dp \)y2.I1^^JO\Sb@.\+GRr+*M-,p W,Э~w5p G΅ػ4>\7hJlemotFv M.Hn5%r·p  H n4%p9]BvًR6;NM-YM~.%7,y'ݰASbK&=VK Rt^M-}.g.nT^M-ZGAhх)C?#.2E hԼS\<]xkws2{m^B{{d|mRZ-hh|6>.K/E47 +ZSb]F7.| !=βjd۔wK ~0hA2Kn"-])*Z^{jm=p㹰h>-X9(}!#*?мÒ}O)]M3/m dC;|[ȴJ"[d=Vj}(FLqfq~& ~הXq?Dt\'Hєj7-M Gq&&4PQ [vlediIm/KօV{u92noO$䩜aYovV`?$":m6"p3ohl'"2bmFoYJ/Cu"V=",U[5Dt]qa0x/ י~=v^aGƎB\܎ 9_c;t;żHxWU֙vM=`R.=F=3{$k!nkOIYt'腽5[cax_*pl3W%jeAe^oٛ`{Aqx Ce!x?eK6Lr|1_H>%; I8[)t_b  5f`(v-T 4/Xh^X(/r`9 5:vz!;ү9EX0CEU,6k,pZNۦVM&C8[ij-GV yvi7$bC}q툇Chf ,EJ߰/.6j\,/4.߰'.Uh_4.Uv 8=D22!x:m~_k [BT s K\\#]ar?3 +1R8,/7i\.L_ >tkvSDJcT<{5Ƅqzv w8V2*j\ZX%a1!Ox#ؿJhL 1;*sUB.0o aN5XV8u@ AX|ka˯B LE<ܭ`! ZsF9!.6 ri~qwgiث2khdދ4ywo"Gh<`$<ܦH;,~(;?Qx =xb{ǻx xG#l`6<k|HLsG ㏺skMBr&0cHcBnOj|B1OPM:d:ˆ̋bB24sHK< ^0j|A(1/n >OQaDX_a:ɽL*QXXX ȍ䋹k75:2lo6 e!c8TVy-dpi1_I]Ĕ$x(D3j+ ˯ ϻ8VGra.nd>-iA)TJ+k嘳r6\Պ/l{lbAkF<\5giV0U`ڶWZ*F6̨Wb!3!ǣTU@`< isgM~AAhq;S=}myK,/k~ teM֑TyD"jE38?saAs]N7(e9]&۸Jk̩hNcr#5A{A"ќEN":(q:<[u2$q?U:KܿOW]Jպ&ZaRb5ކxCa IC%D(.n5IkOJR')r$:v=TOzTw9 HO^VDuE9N>K﫶7j׾dlR;PŐUHtVVb_h# ߀c9Ze˵(j3G;,G,EkA 2Gi5ivu 9z ]ZY]^M͛h^.֪@:x=ޤ(5dIj%)U"^4z*_ Uôx^]U뎦/Ka*>^sJ=#FvJ2Br(p\rvJӊj5U.@b1Gh%WjNAC U1#ڨ氀9:QUWx몱f./F 9(9[=4he_ fi#KJ6 \Mpn{H튡4L4kg"'j[I@; iZM47P+LKjWӬih5YV W &hִkՌ\C S1?jL5K"{ 5jV{ ė}]?Vj&1`*j9~Z&S4[}j~fu -(!V BH ~u,jbUAj,%Zt,$O-j?q?iWj>@ju,M@aVhjfW̴rmKM2Ԫ2SmHrNx]7]pz"h $qK *2*h*UDJ[feЬLiaYuS]|kXPQVX%옊krض]T?UVjU-{:h \AoAq!ab[IJiU5[nVj&7JjPTNZikfALu"05B䪃T`Y(D+u0eUhV6JUô:TRY :,ײHDZ!pSnOuVG{(WD|̑_4)\jo:$#|IbC+ٮ&g\u3(zH3D \3)A3:lYRnVf[ԭZ"HݠnSku4"uCݩY u[+ً&RU8_琶-mz}rLn;{\uސZ0)h&5u+ԽZ EqzMg&OzI=QzH=CY)zTGDGfBLhVJ'ԓf|Ќ2mhC_;cZ=,eRϚf+Z=kθ ,-vg^K*ž1QՏ'z\zW=Iaz4{4T﨧]4F:\ wݛ5k Mц b5(a<~HP) rLes\S0,Oն1E,4;mEZmi:!TOGW!jV >Sk ``c0yϭN)H1I"A?RjVNx0 Zm5r@ hWݿHQd ";Z}coZ 1A w{CG~;Z$R9WÏ5)Ѥ7Uf>KV%eO?_k(U_ǖ?$Yow~kgBAAV9f-[ϤϙHVLqȮ*aק89(`_8N+8Y{քvښhoi?qOwvMi $' 27;T-6\+`zeB8 LϠ\O8J,tӣ.ԫ :v"N0ݳv\s4ݶj9ܮ0]pXhvh{p:8AXLl[;Jl0շ}9Ʃ3c}[;ISc:MՎ,s2M}>q:wp:#[^a|ɳJ~dݨGu—ۯ!=+.<`ڒ)ہG;KF YOw̘yNfn_λo(,j  CMJlxюO@CDJB7AmwmZG;vs13B2,16.@D >  ,8$ E R֔0KtXt:e*gZOС#8ִwP$鎦=rZm\44z w+ Dl%*F5V?\kڠ T+ӎfuӃz:=ɇ25Cێ˴1)JcZL-N5N_%2ٞ~pvPIP_eu)߬sGmN#gG) {n6Q+zF5{aA1Q0q0&T`_ a B9T@A#/H78ie{j-įciNË o>M-ŸPv{b_p0pGXq-?`)2\qLj>PN uxx ^Wx3ގw >O"o>np~?/WT0Eb5 ??Wߩ}ߪ}FJZ*)e Z,ޔ\mP?Kv:?Iޘ(a§KA`+{N@ nK{NOh(Iyo[8kL7&)H@d0}}``fw0 }k@̦/6b ELgK if ?, 鏷8y 2˞@-,jQ ~fqHw3vs{G?>M_}AG=AW| tAzz˃{!yAv`=A=NzPPyPpFx0҃=؅"z=X`{y0ރ L`=L`x0݃`Djz0׃y0߃,`*K=߃<(@<<( e|*S2*=x܃D= A&UVz AʃVyڃZ<8ȃ5ZPpHh،HWfw IdNTN#{pFԅ3=8k0*|6U;;< n),a;(# 00>Pyv<`],Ϻg]"J8YpY% O.wHΤWRDMb܅2K\2kϕ쵋m0R@͏r@tjh7{Dl&͝.Е,[gWPzB(n'zw؇Y zpW٬ۈmVƻ.Ia}~O0 k EY,o=;Caglh=}dupN}&M؛8,Y^b2pGhhzO7=},w{f],$LPKV^92!oPK *for smile/force expt to endUX :R?w:cPK*for smile/._force expt to endUX :R?w:c=ha}w^״"!tnmQ"4FPVkrk..u"dtKA(:9Iٿ<߻ ԝA?y!:tb;t?@U׳% 9H?`&^7hJZ^~;ki"A$  Ɲ4P]ekmMLPXq)@np=׃ < # p9dʅ?\vwK[dw|iJi|ߥRgsZkú2ד`ӷz~uTw:}]ժt~-BȔeܗ!uT Q8סڛQ?lwzVfV h .qvƲ}*j[0E`4Qz3k ahI-]- Ba\lxW9xF$q鈽m/ݼb +Ӱ#vzhiu7Hdn̝:hx0z4ݚvrOkkݛr=Q˅1Li:K埄"Kme]X 8 S<5)ȟQFRٱ=PKNPK . @Afor script debugger/UX:R?>PKwv!/P"rUc @Bfor script debugger/.DS_StoreUX:R?aR?PKwv!/ #wR @for script debugger/._.DS_StoreUX:R?aR?PK . @yfor script debugger/AuthoringAidUX:R?X>PK.PK *% @c;for script debugger/force expt to endUX:R?w:PK*N' @;for script debugger/._force expt to endUX:R?w:PK n.3 @A>for script debugger/move these to "Scripts" folder/UX>>PK . @A?for smile/UX:R?j>PKwv!/4607 @M?for smile/.DS_StoreUX:R?aR?PKwv!/ #wR @@for smile/._.DS_StoreUX:R?aR?PK ;. @DAfor smile/AuthoringAid:AUX:R?I>PK;.V^92!o @Afor smile/._AuthoringAid:AUX:R?I>PK * @}tfor smile/force expt to endUX:R?w:PK*N @tfor smile/._force expt to endUX:R?w:PKwBud1 oringA AuthoringAidIlocblobX AuthoringAidinfoblob0 \force expt to endIlocblob force expt to endinfoblob0move these to "Scripts" folderinfoblob0 Z  @ @ @ @ E DSDB ` @ @ @ 2 RMosasasDBz**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source Texts *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)"z**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source Text then set theClass to class of theWindow if theClass is class SCPT or theClass is class cESw then normalizeSelection(theDocument) if newDoc then set selection of theDocument to "tell application \"PsyScript\" activate begin experiment --load function libraries set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & the selection & return & texttoinsert & " end experiment end tell " else set selection of theDocument to the selection & return & texttoinsert & return end if else event asDBDSPe "This window is not a script window" end if else event asDBDSPe "Script " & (name of document 1) & " is running or recording and cannot be changed." & return & return & "Press Stop and try again." end if end if on normalizeSelection(theDocument) -- This handler extends the current selection to the nearest entire lines try if class pPOS of last insertion point of selection of theDocument class pPOS of last insertion point of theDocument and last character of theDocument is return then -- do nothing when the selection is at the end of the document else local startLine, endLine repeat set startLine to index of first line of selection of theDocument set endLine to index of last line of selection of theDocument if character -2 of line endLine of theDocument = "" then set selection of theDocument to lines startLine thru (endLine + 1) of theDocument else set selection of theDocument to lines startLine thru endLine of theDocument exit repeat end if end repeat end if end try end normalizeSelection on getLinePrefix(theString) -- This handler determins how many spaces or tabs are at the beginning of the first line of -- the current selection local thePrefix set thePrefix to {} -- AppleScript is faster at appending items to lists than strings repeat with aChar in characters of theString local theChar set theChar to contents of aChar -- because aChar is an object reference, not a value if theChar is " " or theChar is tab then set end of thePrefix to theChar else exit repeat end if end repeat local saveDelims set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {} set thePrefix to thePrefix as string set AppleScript's text item delimiters to saveDelims return thePrefix end getLinePrefix on indenBud1 oringAAuthoringAid/AIlocblobXAuthoringAid/Ainfoblob0force expt to endIlocblob force expt to endinfoblob0  @ @ @ @ E DSDB ` @ @ @r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lqoV ZqoU =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}o l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: Oo kn Q k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k r I0/ 0.corecrel****null/.- . kocl m  , , docu- o+ +0 thedocument theDocument* r m) ) boovtrue o( (0newdocNewDoc*' Zn& o% %0newdocNewDoc r!4 b!, b!( m!$  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o$'$ $0 texttoinsert m(+ $ end experiment end tell  n 1/3# # sele o,/" "0 thedocument theDocument& Q7n r:W b:O b:K b:G l:C! c:C l:? 1:?  sele m?B  ctxt! oCF  ret oGJ 0 texttoinsert oKN  ret n 1RV  sele oOR 0 thedocument theDocument R .ascrerr ******** r_n b_f   o_b 0 texttoinsert  obe  ret n   1im  sele  ofi 0 thedocument theDocument' m  null3Script Debugger"D $ǰǰ5|tP5f asDBalisPreludeYT3H+3Script Debugger3ϹZ$APPLasDB Script Debugger 3.0Ẍ́3---CPrelude:Apps:Coding:AppleScript:Script Debugger 3.0:Script Debugger Script DebuggerPrelude;Apps/Coding/AppleScript/Script Debugger 3.0/Script Debugger/:VWB  0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull**** 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  0whattodo 0whom 0thelisttheList *0thehandlerstoinserttheHandlerstoInsert 0 texttoinsert 0 thedocument theDocument 0newdocNewDoc   end considering  .aevtoappnull**** ko!!"""k##$$W%%&&''(()) 0anitemanItem *-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz  0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  docu .corecrel****null  sele  ctxtpaaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`WX*aal E`OeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FU***-0369<?BEHKNQTWZ]`cfh++svy|,","  !%)-159=AEIMQT- - _cgkosw{~."." //  file handling001 1icreadSpreadsheet(thefile)--just give a file name to read data from the folder containing your script rlhelper's readSpreadsheet(thefile)--just give a file name to read data from the folder containing your script22  cSCR  kfrmID  boovtrueascr ޭ NKEY2spsh>WPosJDBGhVTEXTbscptn&\%m Source Text HR?R?22.04BhHDDS8r`g\ph% property prefix1Text : "considering " property selectedText : "case, white space, diacriticals, hyphens, expansion, punctuation, application responses" property prefix2Text : return property suffixText : {"end considering" & return} set eyelinkStuff to {"initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)", "checkLink()", "open_data_file(fileName, preambleText) ", "close_data_file()", "add_file_preamble_text(theText)", "initDisplayCoordinates() ", "set_calibration_type(calType) ", "recordAndEchoTrialID(TrialID, trialVariables)", "doDriftCorrect() ", "display_status_message(TrialID)", "drawText(xyPoint, colorInt, theText)", "setDefaults()", "setParserToCognitive() ", "setParserToPursuitOrNeurology() ", "setFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})", "setFixationUpdatesON() ", "setFixationUpdatesOFF() ", "set_saccade_velocity_threshold(theValue)", "set_saccade_acceleration_threshold(theValue)", "set_file_event_filter(theValue) (* set EDF file contents *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", "sparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min", "create_shuffled_list(listLength)", "create_shuffled_sublist(totalNumberSet, listLength)", "pickInRangeButNotInList({allowedRange, badList})", "parsetostring(TheList, theDelimiters)", "findAndReplace(find, replace, inputString)", "stringToList(theString, theDelimiters)"} try set whattodo to item 1 of (choose from list {"file handling", "manipulate lists", "screen", "other", "eyelink"}) set whom to "helper" if whattodo is "file handling" then set TheList to fileStuff else if whattodo is "other" then set TheList to otherStuff else if whattodo is "screen" then set TheList to screenStuff set whom to "screen" else if whattodo is "eyelink" then set TheList to eyelinkStuff set whom to "eyelink" else set TheList to listStuff end if end try set theHandlerstoInsert to choose from list TheList with multiple selections allowed if theHandlerstoInsert is false then -- else if (count of theHandlerstoInsert) is 1 then set texttoinsert to "tell " & whom & " to " & theHandlerstoInsert else set texttoinsert to "tell " & whom & " " repeat with anItem in theHandlerstoInsert set texttoinsert to texttoinsert & anItem & return end repeat set texttoinsert to texttoinsert & "end " end if if not (first window exists) then make new document set newDoc to true else set newDoc to false end if set theDocument to first document set theWindow to first window if class pSTT of theDocument is constant ASDSasDS then set theClass to class of theWindow if theClass is class SCPT or theClass is class cESw then normalizeSelection(theDocument) if newDoc then set selection of theDocument to "tell application \"PsyScript\" activate begin experiment --load function libraries set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & the selection & return & texttoinsert & " end experiment end tell " else set selection of theDocument to the selection & return & texttoinsert & return end if else event asDBDSPe "This window is not a script window" end if else event asDBDSPe "Script " & (name of document 1) & " is running or recording and cannot be changed." & return & return & "Press Stop and try again." end if end if on normalizeSelection(theDocument) -- This handler extends the current selection to the nearest entire lines try if class pPOS of last insertion point of selection of theDocument class pPOS of last insertion point of theDocument and last character of theDocument is return then -- do nothing when the selection is at the end of the document else local startLine, endLine repeat set startLine to index of first line of selection of theDocument set endLine to index of last line of selection of theDocument if character -2 of line endLine of theDocument = "" then set selection of theDocument to lines startLine thru (endLine + 1) of theDocument else set selection of theDocument to lines startLine thru endLine of theDocument exit repeat end if end repeat end if end try end normalizeSelection on getLinePrefix(theString) -- This handler determins how many spaces or tabs are at the beginning of the first line of -- the current selection local thePrefix set thePrefix to {} -- AppleScript is faster at appending items to lists than strings repeat with aChar in characters of theString local theChar set theChar to contents of aChar -- because aChar is an object reference, not a value if theChar is " " or theChar is tab then set end of thePrefix to theChar else exit repeat end if end repeat local saveDelims set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {} set thePrefix to thePrefix as string set AppleScript's text item delimiters to saveDelims return thePrefix end getLinePrefix on indentLines(theText, thePrefix) -- This handler indents text by placing a prefix string at the beginning of each line local saveDelims, theLines try set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {return} if last character of theText is return then set theLines to text items of text 1 thru -2 of theText else set theLines to text items of theText end if repeat with aline in theLines if length of contents of aline > 0 then set contents of aline to thePrefix & (contents of aline) end if end repeat set theText to (theLines as string) set AppleScript's text item delimiters to saveDelims on error errMsg number errNum set AppleScript's text item delimiters to saveDelims set theText to thePrefix end try return theText end indentLines on getWrapText(theDocument) -- This handler obtains the text of the current selection. If the selection is empty or all white space -- the routine returns the string "-- your commands go here" local theText set theText to selection of theDocument as string if length of theText > 10 then -- if the selection is of significant length just wrap it return theText else repeat with aChar in characters of theText local theChar set theChar to contents of aChar if theChar is not " " and theChar is not tab and theChar is not return then return theText end if end repeat return getLinePrefix(theText) & "-- your commands go here" end if end getWrapText on formatSuffix(linePrefix) local resultText set resultText to {} repeat with aSuffix in suffixText set end of resultText to (linePrefix & aSuffix) end repeat return resultText end formatSuffixZFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lqoV ZqoU =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}o l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: Oo kn Q k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k r I0/ 0.corecrel****null/.- . kocl m  , , docu- o+ +0 thedocument theDocument* r m) ) boovtrue o( (0newdocNewDoc*' Zn& o% %0newdocNewDoc r!4 b!, b!( m!$  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o$'$ $0 texttoinsert m(+ $ end experiment end tell  n 1/3# # sele o,/" "0 thedocument theDocument& Q7n r:W b:O b:K b:G l:C! c:C l:? 1:?  sele m?B  ctxt! oCF  ret oGJ 0 texttoinsert oKN  ret n 1RV  sele oOR 0 thedocument theDocument R .ascrerr ******** r_n b_f   o_b 0 texttoinsert  obe  ret n   1im  sele  ofi 0 thedocument theDocument' m  null3Script Debugger"D $ǰǰ5|tP5f asDBalisPreludeYT3H+3Script Debugger3ϹZ$APPLasDB Script Debugger 3.0Ẍ́3---CPrelude:Apps:Coding:AppleScript:Script Debugger 3.0:Script Debugger Script DebuggerPrelude;Apps/Coding/AppleScript/Script Debugger 3.0/Script Debugger/:VWB  0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull**** 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  0whattodo 0whom 0thelisttheList *0thehandlerstoinserttheHandlerstoInsert 0 texttoinsert 0 thedocument theDocument 0newdocNewDoc   end considering  .aevtoappnull**** ko!!"""k##$$W%%&&''(()) 0anitemanItem *-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz  0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  docu .corecrel****null  sele  ctxtpaaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`WX*aal E`OeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FU***-0369<?BEHKNQTWZ]`cfh++svy|,","  !%)-159=AEIMQT- - _cgkosw{~."." //  file handling001 1icreadSpreadsheet(thefile)--just give a file name to read data from the folder containing your script rlhelper's readSpreadsheet(thefile)--just give a file name to read data from the folder containing your script22  cSCR  kfrmID  boovtrueascr ޭ NKEY2spsh>WPosJDBGhVTEXTbscptn&\%m Source Text 2 RMosasasDBz**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source Text*)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", z**HFasdUAS 1.101.10 l  O  I .PsySEXP0nullnull mnullgy PsyScriptbuggerertopionc>ʈt *mh *cP ' *d@n>PsySalisxVivBD PsyScriptCHAPPLPsyS PsyScriptViv:PsyScript:PsyScript afpm9YuEFStbatesVivtbates  .aevtoappnull****  .aevtoappnull**** k     .PsySEXP0nullnull *j Uascr ޭ22.04 *HDDSZ<Wah 8 *o *5tell application "PsyScript" end experiment end tellzSORTnDBGh"TEXT.WPos:scptFd Source Textselection of theDocument to " tell application \"PsyScript\" activate begin experiment set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & texttoinsert & " end experiment end tell " else try set selection of theDocument to (the selection as text) & return & texttoinsert & return on error set selection of theDocument to texttoinsert & return end try end if end tell end ifVVFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lq{V Zq{U =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}{ l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: O{ kz Q& k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k& r I0/ 0.corecrel****null/.- . kocl m  , , sctx- o+ +0 thedocument theDocument r  m**X n 1) ) LWdt o( (0 thedocument theDocument' r!& m!"& & boovtrue o% %0newdocNewDoc'$ Z'z# o'*" "0newdocNewDoc r-@ b-8 b-4 m-0  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o03! !0 texttoinsert m47 $ end experiment end tell  n 1;?  sele o8; 0 thedocument theDocument# QCz rFc bF[ bFW bFS lFO cFO lFK   1FK  sele  mKN  ctxt oOR  ret oSV 0 texttoinsert oWZ  ret n   1^b  sele  o[^ 0 thedocument theDocument R .ascrerr ******** rkz   bkr okn 0 texttoinsert onq  ret n 1uy  sele oru 0 thedocument theDocument$ mnull߀ #~ Smile.appː626˰!)AeP0,VIZFalisfVortexLUH+ #~ Smile.app;S SmileKcS# #~8!P4Vortex:Applications:_My Applications:Smile:Smile.app Smile.appVortex-Applications/_My Applications/Smile/Smile.app/:VW 0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull****   end considering  .aevtoappnull**** k{"k  W!!""##$$%% 0anitemanItem*-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  sctx .corecrel****nullX  LWdt  sele  ctxt|aaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`W(X*aal E`Oa_a,FOeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FUascr ޭn-m-/KEY2spsh>WPosJDBGhVTEXTbscptn&\L Source Textn-m-HR?R?22.04OHDDSh@sproperty prefix1Text : "considering " property selectedText : "case, white space, diacriticals, hyphens, expansion, punctuation, application responses" property prefix2Text : return property suffixText : {"end considering" & return} set eyelinkStuff to {"initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)", "checkLink()", "open_data_file(fileName, preambleText) ", "close_data_file()", "add_file_preamble_text(theText)", "initDisplayCoordinates() ", "set_calibration_type(calType) ", "recordAndEchoTrialID(TrialID, trialVariables)", "doDriftCorrect() ", "display_status_message(TrialID)", "drawText(xyPoint, colorInt, theText)", "setDefaults()", "setParserToCognitive() ", "setParserToPursuitOrNeurology() ", "setFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})", "setFixationUpdatesON() ", "setFixationUpdatesOFF() ", "set_saccade_velocity_threshold(theValue)", "set_saccade_acceleration_threshold(theValue)", "set_file_event_filter(theValue) (* set EDF file contents *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", "sparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min", "create_shuffled_list(listLength)", "create_shuffled_sublist(totalNumberSet, listLength)", "pickInRangeButNotInList({allowedRange, badList})", "parsetostring(TheList, theDelimiters)", "findAndReplace(find, replace, inputString)", "stringToList(theString, theDelimiters)"} try set whattodo to item 1 of (choose from list {"file handling", "manipulate lists", "screen", "other", "eyelink"}) set whom to "helper" if whattodo is "file handling" then set theList to fileStuff else if whattodo is "other" then set theList to otherStuff else if whattodo is "screen" then set theList to screenStuff set whom to "screen" else if whattodo is "eyelink" then set theList to eyelinkStuff set whom to "eyelink" else set theList to listStuff end if end try set theHandlerstoInsert to choose from list theList with multiple selections allowed if theHandlerstoInsert is false then -- else if (count of theHandlerstoInsert) is 1 then set texttoinsert to "tell " & whom & " to " & theHandlerstoInsert else set texttoinsert to "tell " & whom & " " repeat with anItem in theHandlerstoInsert set texttoinsert to texttoinsert & anItem & return end repeat set texttoinsert to texttoinsert & "end " end if tell application "Smile" try set theDocument to window 1 set NewDoc to false on error set theDocument to make new script window set line width of theDocument to 600 set NewDoc to true end try if NewDoc then set selection of theDocument to " tell application \"PsyScript\" activate begin experiment set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & texttoinsert & " end experiment end tell " else try set selection of theDocument to (the selection as text) & return & texttoinsert & return on error set selection of theDocument to texttoinsert & return end try end if end tell end ifVVFasdUAS 1.101.10 k l  notes l  ! 18/4/03 Added getNewFileNameExtension(theOldPath, theNewExtension) removeExtensionFromFileName(fileName) iReadData rewriteFile(existingPath, theNewPath, myName, bAlreadyExists, bOverWrite, linesToSkip, {lineBreak:ASCII character 10, itembreak:space}) selectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) "setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS", added on findFirstUnusedName(pathToTry) --returns the filepath if it does nto exist, or a numerical increment on this which does not exist yet   l   j 0 prefix1text prefix1Text m  considering  j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  ! l!"# "l*$ $r*%& %J&''() (m* *a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen))+, +m- - checkLink(),./ .m0 0-'open_data_file(fileName, preambleText) /12 1m3 3close_data_file()245 4m6 6%add_file_preamble_text(theText)578 7m9 9initDisplayCoordinates() 8:; :m< <$set_calibration_type(calType) ;=> =m? ?3-recordAndEchoTrialID(TrialID, trialVariables)>@A @m B BdoDriftCorrect() ACD Cm E E%display_status_message(TrialID)DFG Fm H H*$drawText(xyPoint, colorInt, theText)GIJ Im K K setDefaults()JLM Lm N NsetParserToCognitive() MOP Om Q Q& setParserToPursuitOrNeurology() PRS RmT TsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})SUV UmW WsetFixationUpdatesON() VXY XmZ ZsetFixationUpdatesOFF() Y[\ [m] ].(set_saccade_velocity_threshold(theValue)\^_ ^m` `2,set_saccade_acceleration_threshold(theValue)_ab amc cA;set_file_event_filter(theValue) (* set EDF file contents *)bde dmf fPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)eg gm"h h$set_link_sample_data(theValue) &o 0 eyelinkstuff eyelinkStuff#ij iljkl kl+m mr+no nJ+ppqr qm+.s s5/setDistanceScreenXAndScreenY(screenParameters) rtu tm.1v v*$setDistanceFromScreen(mmFromScreen) uwx wm14y yiInitialize() xz{ zm47| |'!movePoint(thePoint, xMove, yMove){}~ }m7: makeRect(side) ~ m:= & moveRect(theRect, xMove, yMove)  m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree oo 0 screenstuff screenStuffl l l r J m 4.These next four should be in almost any script l m B? >l @ @mA A=7setTextFileDelimiters(thetype) --valid = Mac, Unix, DOS?BC Bl D DmE E^XiReadData(theFile, myName, dimensionality, linesToRead) --call readSpreadSheet() insteadCFG Fl H HmI IyiWriteData(theData, theFile, myName, bAlreadyExists, bOverWrite)--may change in the future - call writeSpreadSheetInsteadGJK Jl L LmM M>8setResultsFile(newPathToResultsFile) --not commonly usedKNO Nl P PmQ QPJsetContainer(pathToFolderContainingTheExperimentScript)--not commonly usedOR Rl S SmT T{ustoreResults(newResponses, flushtoDisk) --only use this if you are not writing trial results to disk after each trial o 0 filestuff fileStuffUV UlVWX WlY YrZ[ ZJ\\]^ ]m_ _saveKeyStates()^`a `l b bmc crestoreKeyStates()ade dl f fmg g4.setNoticed of keyName given mapping:theMappingehi hl j jmk knoticeKeyboard(keyList)ilm ll  n nm o o:4showAsInstructions(theText, leftMargin, rightMargin)mpq pl   r rm  s stakeABreak(helpNeeded)qtu tl  v vm w w93takeABreakPlus(helpNeeded, trialNumber, breakEvery)uxy xl z zm{ {$getInfo(asking, defaultAnswer)y| |l } }m~ ~waitForOthers() [o 0 otherstuff otherStuffX l l r J m!  Make Lists l !$ m!$ & create_shuffled_list(listLength) l $' m$' 93create_shuffled_sublist(totalNumberSet, listLength) l '* m'* +%initializeList(theCount, theContents) l *- m*-  l -0 m-0 Handlers to Sort l 03 m03  sort(TheList) l 36 m36 randomize(TheList) l 69 m69  l 9< m9< Get parts of a list l <? m<? getOffset(what, TheList) l ?B m?B #getEveryOffset(what, TheList) l BE mBE  getColumn(column, TheList) l EH mEH <6itemsContaining(TheList, includeString, excludeString) l HK mHK 60pickInRangeButNotInList({allowedRange, badList}) l KN mKN subset(indices, TheList) l NQ mNQ distinct(TheList) l QT mQT union(listA, listB) l TW mTW  intersection(listA, listB) l WZ mWZ difference(listA, listB) l Z] mZ]  l ]` m]` )#Change a list by adding or removing l `c m`c 71replaceItems(itemIndices, NewItems, originalList) l cf mcf 71insert(insertionAt, addingTheseItems, toThisList) l fi mfi & remove(deletionAt, fromThisList) l il mil removeItem(x, TheList) mlo +%sample(itemCount, TheList, replacing) l or mor LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min l ru mru  l ux mux ("String and string-to-list handlers l x{ mx{ +%parsetostring(TheList, theDelimiters) l {~ m{~ 0*findAndReplace(find, replace, inputString) l ~ m~ TNstringToList(theString, theDelimiters)--stringToList(theString, {return, tab})  l   m  ]Wset a to change "(( *)? )+" into return in a with regexp --regex requires satimage osax o 0 liststuff listStuff   l  l l r J m wqselectNitemsFromList(numVars, theList, defaultSelection, prompt1, errorPrompt) --presents a list selection dialog o 00userinteractiondialogsuserInteractionDialogs l lX QX kO !  r"# "n$% $4&  cobj &m %l' 'I() .gtqpchltTEXT@@TEXT (J**+, +m- - file handling,./ .m0 0manipulate lists/12 1m3 3userInteractionDialogs245 4m6 6 screen578 7m9 9 other8: :m; ; eyelink)<  prmp <m= =Library version 2.5 #o  0whattodo!>? >r@A @mB B helper Ao~ ~0whom?C} CZODEFG D=HI Ho| | 0whattodo ImJ J file handling ErKL Ko{ {0 filestuff fileStuff Loz z0thelisttheListFMN M=OP Ooy y 0whattodo PmQ Q otherNRS RrTU Tox x0 otherstuff otherStuff Uow w0thelisttheListSVW V=XY Xov v 0whattodo YmZ Z screenW[\ [k ]]^_ ^r`a `ou u0 screenstuff screenStuff aot t0thelisttheList_bs br cd cm e e screen dor r0whoms\fg f=hi hoq q 0whattodo imj juserInteractionDialogsgkl kk)mmno nr!pq pop p00userinteractiondialogsuserInteractionDialogs qoo o0thelisttheListorn rr")st sm"%u uuserInteractionDialogs tom m0whomnlvw v=,3xy xo,/l l 0whattodo ym/2z z eyelinkw{k {k6E||}~ }r6= o69j j0 eyelinkstuff eyelinkStuff oi i0thelisttheList~h r>E m>A  eyelink og g0whomhk GrHO oHKf f0 liststuff listStuff oe e0thelisttheList} Rdcb d.ascrerr ********cb la`a` lYp_ rYp IYl^ ^.gtqpchltTEXT@@TEXT oY\] ]0thelisttheList\ \ prmp m_b  Select as many as you want[Z [ mlsl mefY Y boovtrueZ oX X*0thehandlerstoinserttheHandlerstoInsert_W lq{V Zq{U =qv oqtT T*0thehandlerstoinserttheHandlerstoInsert mtuS S boovfals lyyRQRQU k}{ l}}POPO Z}N =} l}M I}LK L.corecnte******** o}J J*0thehandlerstoinserttheHandlerstoInsertKM mII r b b b m  oH H0whom m  's  oG G*0thehandlerstoinserttheHandlerstoInsert oF F0 texttoinsertN k r b b m  tell  oE E0whom m   oD D0 texttoinsert XC r b b oB B0 texttoinsert oA A0anitemanItem o@ @ ret o? ?0 texttoinsert C0anitemanItem o> >*0thehandlerstoinserttheHandlerstoInsert= r b o< <0 texttoinsert m  end  o; ;0 texttoinsert=: O{ kz Q& k r 49 9 cwin m88 o7 70 thedocument theDocument6 r m5 5 boovfals o4 40newdocNewDoc6 R321 3.ascrerr ********21 k& r I0/ 0.corecrel****null/.- . kocl m  , , sctx- o+ +0 thedocument theDocument r  m**X n 1) ) LWdt o( (0 thedocument theDocument' r!& m!"& & boovtrue o% %0newdocNewDoc'$ Z'z# o'*" "0newdocNewDoc r-@ b-8 b-4 m-0  tell application "PsyScript" activate begin experiment set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  o03! !0 texttoinsert m47 $ end experiment end tell  n 1;?  sele o8; 0 thedocument theDocument# QCz rFc bF[ bFW bFS lFO cFO lFK   1FK  sele  mKN  ctxt oOR  ret oSV 0 texttoinsert oWZ  ret n   1^b  sele  o[^ 0 thedocument theDocument R .ascrerr ******** rkz   bkr okn 0 texttoinsert onq  ret n 1uy  sele oru 0 thedocument theDocument$ mnull߀ #~ Smile.appː626˰!)AeP0,VIZFalisfVortexLUH+ #~ Smile.app;S SmileKcS# #~8!P4Vortex:Applications:_My Applications:Smile:Smile.app Smile.appVortex-Applications/_My Applications/Smile/Smile.app/:VW 0 prefix1text prefix1Text 0 selectedtext selectedText 0 prefix2text prefix2Text 0 suffixtext suffixText .aevtoappnull****   end considering  .aevtoappnull**** k{"k  W!!""##$$%% 0anitemanItem*-0369<?BEHKNQTWZ]`cfhsvy|  !%)-159=AEIMQT_cgkosw{~ -0369;=BJQZejuz 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff" 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff 00userinteractiondialogsuserInteractionDialogs  prmp .gtqpchltTEXT@@TEXT  cobj 0whattodo 0whom 0thelisttheList  mlsl *0thehandlerstoinserttheHandlerstoInsert .corecnte******** 0 texttoinsert  kocl  ret  cwin 0 thedocument theDocument 0newdocNewDoc  sctx .corecrel****nullX  LWdt  sele  ctxt|aaaaaaavE`Oaaaaaaaaa a!a"a#a$a%a&a'a(a)a*a+a,a-a.a/a0a1a2a3a4a5vE`6Oa7a8a9a:a;aa?a@aAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaWaXaYvE`ZOa[a\a]a^a_a`aaabacadvE`eOafagahaiajakalamanaoapaqarasatauavawaxayaza{a|a}a~aaaaaaaaaaYvE`OakvE`Oaaaaaaavaal ak/E`OaE`O_a _ZE`Yq_a _eE`Y]_a_6E`OaE`YA_a_E`OaE`Y%_a_E`OaE`Y _E`WXhO_aaaea E`O_fhY_j ka_%a%_%E`YFa_%a%E`O'_[aal kh_%_%E`[OYO_a%E`Oa*ak/E`OfE`W(X*aal E`Oa_a,FOeE`O_a_%a%_a,FY9"*a,a&_%_%_%_a,FWX__%_a,FUascr ޭn-m-/KEY2spsh>WPosJDBGhVTEXTbscptn&\L Source TextBud1scriptfor script debuggerIlocblob for smileIlocblobC  @ @ @ @ EDSDB ` @ @ @11HR?R?22.04BhHDDS8r`g\ph% property prefix1Text : "considering " property selectedText : "case, white space, diacriticals, hyphens, expansion, punctuation, application responses" property prefix2Text : return property suffixText : {"end considering" & return} set eyelinkStuff to {"initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)", "checkLink()", "open_data_file(fileName, preambleText) ", "close_data_file()", "add_file_preamble_text(theText)", "initDisplayCoordinates() ", "set_calibration_type(calType) ", "recordAndEchoTrialID(TrialID, trialVariables)", "doDriftCorrect() ", "display_status_message(TrialID)", "drawText(xyPoint, colorInt, theText)", "setDefaults()", "setParserToCognitive() ", "setParserToPursuitOrNeurology() ", "setFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})", "setFixationUpdatesON() ", "setFixationUpdatesOFF() ", "set_saccade_velocity_threshold(theValue)", "set_saccade_acceleration_threshold(theValue)", "set_file_event_filter(theValue) (* set EDF file contents *)", "set_link_event_filter(theValue) (* set link data (used for gaze cursor) *)", "set_link_sample_data(theValue)"} set screenStuff to {"setDistanceScreenXAndScreenY(screenParameters) ", "setDistanceFromScreen(mmFromScreen) ", "iInitialize() ", "movePoint(thePoint, xMove, yMove)", "makeRect(side) ", "moveRect(theRect, xMove, yMove) ", "scaleRect(theRect, scaleFactor) ", "resizeRect(theRect, resizeBy) ", "moveAllCoordinatesOfRect(theRect, clippingRect) ", "centreRectOnPoint(theRect, thePoint) ", "insetRect(theRect, insetBy) ", "insetPolygon(pointList, centroid, insetBy)", "getCentroid(theRect)", "locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft)", "makeARegionEraser(saveThis) ", "setDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees}) ", "pDegToRad", "pMMPerDegree", "pDistanceFromScreen_mm", "pScreenWidthMM", "pScreenHeightMM", "pScreenSize", "pXpixels", "pYpixels", "pXDegrees", "pYDegrees", "pXCentrePixel", "pYCentrePixel", "pPixelsPerDegree"} set fileStuff to {"getLibraryVersion()", "checkVersion(minVersion)", "setContainer(pathToFolderContainingTheExperimentScript)", "initialize()", "setSubjectFileParameters({prefix:\"\", suffix:\"\"})", "createNewSubjectID()", "setResultsFile(newPathToResultsFile)", "changeNameOfResultsFile(newName)", "getFileNameFromPath(thePath)", "getFileContainerFromPath(thePath)", "getNewFileName(theOldPath, theNewName)", "writespreadsheettoFile(theData, thefile)", "writespreadsheet(theData)", "writeToCompanionFile(theData, fileSuffix)", "storeResults(newResponses, flushtoDisk)", "readSpreadsheet(thefile)", "readSpreadsheet1D(thefile)", "FileExists(thePath)"} set otherStuff to {"saveKeyStates()", "restoreKeyStates()", "setNoticed of keyName given mapping:theMapping", "noticeKeyboard(keyList)", "showAsInstructions(theText, leftMargin, rightMargin)", "takeABreak(helpNeeded)", "takeABreakPlus(helpNeeded, trialNumber, breakEvery)", "getInfo(asking, defaultAnswer)", "waitForOthers()"} set listStuff to {"initializeList(theCount, theContents)", "getOffset(what, TheList)", "getEveryOffset(what, TheList)", "getColumn(column, TheList)", "sort(TheList)", "randomize(TheList)", "itemsContaining(TheList, includeString, excludeString)", "distinct(TheList)", "union(listA, listB)", "intersection(listA, listB)", "difference(listA, listB)", "replaceItems(itemIndices, NewItems, originalList)", "insert(insertionAt, addingTheseItems, toThisList)", "subset(indices, TheList)", "remove(deletionAt, fromThisList)", "removeItem(x, TheList)", "sample(itemCount, TheList, replacing)", "sparseRepeat given taking:numberWanted, outof:TheList, separatedBy:min", "create_shuffled_list(listLength)", "create_shuffled_sublist(totalNumberSet, listLength)", "pickInRangeButNotInList({allowedRange, badList})", "parsetostring(TheList, theDelimiters)", "findAndReplace(find, replace, inputString)", "stringToList(theString, theDelimiters)"} try set whattodo to item 1 of (choose from list {"file handling", "manipulate lists", "screen", "other", "eyelink"}) set whom to "helper" if whattodo is "file handling" then set TheList to fileStuff else if whattodo is "other" then set TheList to otherStuff else if whattodo is "screen" then set TheList to screenStuff set whom to "screen" else if whattodo is "eyelink" then set TheList to eyelinkStuff set whom to "eyelink" else set TheList to listStuff end if end try set theHandlerstoInsert to choose from list TheList with multiple selections allowed if theHandlerstoInsert is false then -- else if (count of theHandlerstoInsert) is 1 then set texttoinsert to "tell " & whom & " to " & theHandlerstoInsert else set texttoinsert to "tell " & whom & " " repeat with anItem in theHandlerstoInsert set texttoinsert to texttoinsert & anItem & return end repeat set texttoinsert to texttoinsert & "end " end if if not (first window exists) then make new document set newDoc to true else set newDoc to false end if set theDocument to first document set theWindow to first window if class pSTT of theDocument is constant ASDSasDS then set theClass to class of theWindow if theClass is class SCPT or theClass is class cESw then normalizeSelection(theDocument) if newDoc then set selection of theDocument to "tell application \"PsyScript\" activate begin experiment --load function libraries set helper to load script file (\"\" & Psyscript base folder & \"libraries:file.lib\") set screen to load script file (\"\" & Psyscript base folder & \"libraries:screen.lib\") " & the selection & return & texttoinsert & " end experiment end tell " else set selection of theDocument to the selection & return & texttoinsert & return end if else event asDBDSPe "This window is not a script window" end if else event asDBDSPe "Script " & (name of document 1) & " is running or recording and cannot be changed." & return & return & "Press Stop and try again." end if end if on normalizeSelection(theDocument) -- This handler extends the current selection to the nearest entire lines try if class pPOS of last insertion point of selection of theDocument class pPOS of last insertion point of theDocument and last character of theDocument is return then -- do nothing when the selection is at the end of the document else local startLine, endLine repeat set startLine to index of first line of selection of theDocument set endLine to index of last line of selection of theDocument if character -2 of line endLine of theDocument = "" then set selection of theDocument to lines startLine thru (endLine + 1) of theDocument else set selection of theDocument to lines startLine thru endLine of theDocument exit repeat end if end repeat end if end try end normalizeSelection on getLinePrefix(theString) -- This handler determins how many spaces or tabs are at the beginning of the first line of -- the current selection local thePrefix set thePrefix to {} -- AppleScript is faster at appending items to lists than strings repeat with aChar in characters of theString local theChar set theChar to contents of aChar -- because aChar is an object reference, not a value if theChar is " " or theChar is tab then set end of thePrefix to theChar else exit repeat end if end repeat local saveDelims set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {} set thePrefix to thePrefix as string set AppleScript's text item delimiters to saveDelims return thePrefix end getLinePrefix on indentLines(theText, thePrefix) -- This handler indents text by placing a prefix string at the beginning of each line local saveDelims, theLines try set saveDelims to AppleScript's text item delimiters set AppleScript's text item delimiters to {return} if last character of theText is return then set theLines to text items of text 1 thru -2 of theText else set theLines to text items of theText end if repeat with aline in theLines if length of contents of aline > 0 then set contents of aline to thePrefix & (contents of aline) end if end repeat set theText to (theLines as string) set AppleScript's text item delimiters to saveDelims on error errMsg number errNum set AppleScript's text item delimiters to saveDelims set theText to thePrefix end try return theText end indentLines on getWrapText(theDocument) -- This handler obtains the text of the current selection. If the selection is empty or all white space -- the routine returns the string "-- your commands go here" local theText set theText to selection of theDocument as string if length of theText > 10 then -- if the selection is of significant length just wrap it return theText else repeat with aChar in characters of theText local theChar set theChar to contents of aChar if theChar is not " " and theChar is not tab and theChar is not return then return theText end if end repeat return getLinePrefix(theText) & "-- your commands go here" end if end getWrapText on formatSuffix(linePrefix) local resultText set resultText to {} repeat with aSuffix in suffixText set end of resultText to (linePrefix & aSuffix) end repeat return resultText end formatSuffixzFasdUAS 1.101.10 k l l j 0 prefix1text prefix1Text m  considering    j 0 selectedtext selectedText m ]Wcase, white space, diacriticals, hyphens, expansion, punctuation, application responses j 0 prefix2text prefix2Text o  ret  j  0 suffixtext suffixText J  b  m  end considering o  ret  l l* r*!" !J&##$% $m& &a[initLinkAndSetup(calType, bLinked, DriftStimulusName, screenParameters, fileHelper, screen)%'( 'm) ) checkLink()(*+ *m, ,-'open_data_file(fileName, preambleText) +-. -m/ /close_data_file().01 0m2 2%add_file_preamble_text(theText)134 3m5 5initDisplayCoordinates() 467 6m8 8$set_calibration_type(calType) 79: 9m; ;3-recordAndEchoTrialID(TrialID, trialVariables):<= <m > >doDriftCorrect() =?@ ?m A A%display_status_message(TrialID)@BC Bm D D*$drawText(xyPoint, colorInt, theText)CEF Em G G setDefaults()FHI Hm J JsetParserToCognitive() IKL Km M M& setParserToPursuitOrNeurology() LNO NmP PsetFilterList({saccadeVelocityThreshold:SVT, saccadeAccelerationThreshold:SAT, fileEventFilter:FEF, linkEventFilter:LEF, linkSampleData:LSD})OQR QmS SsetFixationUpdatesON() RTU TmV VsetFixationUpdatesOFF() UWX WmY Y.(set_saccade_velocity_threshold(theValue)XZ[ Zm\ \2,set_saccade_acceleration_threshold(theValue)[]^ ]m_ _A;set_file_event_filter(theValue) (* set EDF file contents *)^`a `mb bPJset_link_event_filter(theValue) (* set link data (used for gaze cursor) *)ac cm"d d$set_link_sample_data(theValue) "o 0 eyelinkstuff eyelinkStuffef elfgh gl+i ir+jk jJ+llmn mm+.o o5/setDistanceScreenXAndScreenY(screenParameters) npq pm.1r r*$setDistanceFromScreen(mmFromScreen) qst sm14u uiInitialize() tvw vm47x x'!movePoint(thePoint, xMove, yMove)wyz ym7:{ {makeRect(side) z|} |m:=~ ~& moveRect(theRect, xMove, yMove) } m=@ & scaleRect(theRect, scaleFactor)  m@C $resizeRect(theRect, resizeBy)  mCF 60moveAllCoordinatesOfRect(theRect, clippingRect)  mFI +%centreRectOnPoint(theRect, thePoint)  mIL "insetRect(theRect, insetBy)  mLO 0*insetPolygon(pointList, centroid, insetBy) mOR getCentroid(theRect) mRU @:locateRectInTopLeftCoordinates(sizeOfRect, desiredTopLeft) mUX "makeARegionEraser(saveThis)  mX[ VPsetDiagonalStimulus({degreesPerSecond:degreesPerSecond, maxDegrees:maxDegrees})  m[^  pDegToRad m^a  pMMPerDegree mad pDistanceFromScreen_mm mdg pScreenWidthMM mgj pScreenHeightMM mjm  pScreenSize mmp pXpixels mps pYpixels msv  pXDegrees mvy  pYDegrees my|  pXCentrePixel m|  pYCentrePixel m pPixelsPerDegree ko 0 screenstuff screenStuffh l l r J m getLibraryVersion() m checkVersion(minVersion) m =7setContainer(pathToFolderContainingTheExperimentScript) m  initialize() m 60setSubjectFileParameters({prefix:"", suffix:""}) m createNewSubjectID() m *$setResultsFile(newPathToResultsFile) m & changeNameOfResultsFile(newName) m "getFileNameFromPath(thePath) m '!getFileContainerFromPath(thePath) m ,&getNewFileName(theOldPath, theNewName) m .(writespreadsheettoFile(theData, thefile) m writespreadsheet(theData) m /)writeToCompanionFile(theData, fileSuffix) m -'storeResults(newResponses, flushtoDisk) m readSpreadsheet(thefile) m readSpreadsheet1D(thefile) m FileExists(thePath) o 0 filestuff fileStuff l r J m saveKeyStates()   m  restoreKeyStates()    m 4.setNoticed of keyName given mapping:theMapping  m noticeKeyboard(keyList) m :4showAsInstructions(theText, leftMargin, rightMargin) m takeABreak(helpNeeded) m 93takeABreakPlus(helpNeeded, trialNumber, breakEvery) m $getInfo(asking, defaultAnswer) m waitForOthers() o 0 otherstuff otherStuff !  l>" "r>#$ #J:%%&' &m( (+%initializeList(theCount, theContents)')* )m+ +getOffset(what, TheList)*,- ,m. .#getEveryOffset(what, TheList)-/0 /m1 1 getColumn(column, TheList)023 2m4 4 sort(TheList)356 5m7 7randomize(TheList)689 8m: :<6itemsContaining(TheList, includeString, excludeString)9;< ;m= =distinct(TheList)<>? >m @ @union(listA, listB)?AB Am  C C intersection(listA, listB)BDE Dm F Fdifference(listA, listB)EGH GmI I71replaceItems(itemIndices, NewItems, originalList)HJK JmL L71insert(insertionAt, addingTheseItems, toThisList)KMN MmO Osubset(indices, TheList)NPQ PmR R& remove(deletionAt, fromThisList)QST SmU UremoveItem(x, TheList)TVW Vm!X X+%sample(itemCount, TheList, replacing)WYZ Ym!$[ [LFsparseRepeat given taking:numberWanted, outof:TheList, separatedBy:minZ\] \m$'^ ^& create_shuffled_list(listLength)]_` _m'*a a93create_shuffled_sublist(totalNumberSet, listLength)`bc bm*-d d60pickInRangeButNotInList({allowedRange, badList})cef em-0g g+%parsetostring(TheList, theDelimiters)fhi hm03j j0*findAndReplace(find, replace, inputString)ik km36l l,&stringToList(theString, theDelimiters) $o 0 liststuff listStuff!mn mlnop ol?q qQ?rs rkBttuv urBbwx wnB^yz y4Y^{  cobj {m\] zlBY| |IBY} .gtqpchltTEXT@@TEXT }JBU~~ mBE  file handling mEH manipulate lists mHK  screen mKN  other mNQ  eyelink xo 0whattodov rcj mcf  helper o 0whom Zk =kr okn 0whattodo mnq  file handling ru| oux 0 filestuff fileStuff o 0thelistTheList = o 0whattodo m  other r o 0 otherstuff otherStuff o 0thelistTheList = o 0whattodo m  screen k r o 0 screenstuff screenStuff o 0thelistTheList r m  screen o 0whom = o 0whattodo m  eyelink k r o 0 eyelinkstuff eyelinkStuff o 0thelistTheList r m  eyelink o 0whom r o 0 liststuff listStuff o 0thelistTheList sR .ascrerr ********p l l r I .gtqpchltTEXT@@TEXT o 0thelistTheList  mlsl m  boovtrue o *0thehandlerstoinserttheHandlerstoInsert lH ZH = o *0thehandlerstoinserttheHandlerstoInsert m  boovfals l kH l Z` = l I .corecnte******** o *0thehandlerstoinserttheHandlerstoInsert m r b b b  m  tell  o 0whom m    to  o *0thehandlerstoinserttheHandlerstoInsert o 0 texttoinsert k` r) b% b! m  tell  o 0whom m!$   o 0 texttoinsert X*R r@M b@I b@E o@C 0 texttoinsert oCD 0anitemanItem oEH  ret o 0 texttoinsert 0anitemanItem o-0 *0thehandlerstoinserttheHandlerstoInsert rS^ bSZ oSV 0 texttoinsert mVY  end  o 0 texttoinsert  l__   Za   Hal lak Iak .coredoexboolobj 4ag  cwin mef ko Ioz .corecrel****null  kocl msv  docu r{ m{|  boovtrue o 0newdocnewDoc r m  boovfals o 0newdocnewDoc  l !  r"# "4$  docu $m #o 0 thedocument theDocument!%& %r'( '4)  cwin )m~~ (o} }0 thewindow theWindow&*| *ZH+,{- +=./ .n01 0mz z pSTT 1oy y0 thedocument theDocument /mx x ASDSasDS ,k#2234 3r56 5n78 7mw w pcls 8ov v0 thewindow theWindow 6ou u0theclasstheClass49t 9Z#:;s< :G=> ==?@ ?or r0theclasstheClass @mq q SCPT >=AB Aop p0theclasstheClass Bmo o cESw ;kCCDE DInFm n(0normalizeselectionnormalizeSelectionFGl Gok k0 thedocument theDocumentlmEHj HZIJiK Ioh h0newdocnewDoc JrLM LbNO NbPQ PbRS RbTU TmV V tell application "PsyScript" activate begin experiment --load function libraries set helper to load script file ("" & Psyscript base folder & "libraries:file.lib") set screen to load script file ("" & Psyscript base folder & "libraries:screen.lib")  UlWg W1f f seleg Soe e ret Qod d0 texttoinsert OmX X# end experiment end tell  MnYZ Y1c c sele Zob b0 thedocument theDocumenti Kr[\ [b]^ ]b _` _b ab alca c1` ` selea bo_ _ ret `o  ^ ^0 texttoinsert ^o ] ] ret \nde d1\ \ sele eo[ [0 thedocument theDocumentjs <I#ZfY Z.asDBDSPenullTEXT fmg g("This window is not a script windowYt{ -I&HXhW X.asDBDSPenullTEXT hb&Dij ib&@kl kb&<mn mb&8op ob&4qr qm&)s sScript  rl)3tV tn)3uv u1/3U U pnam v4)/Tw T docu wm-.SSV pm47x x60 is running or recording and cannot be changed. nl 8;yR yo8;Q Q ret R lo<?P P ret jm@Cz zPress Stop and try again.W|{| {lONON|}~ }lMLML~ i IKJ K(0normalizeselectionnormalizeSelectionI oH H0 thedocument theDocumentIJ k~ lGG MG This handler extends the current selection to the nearest entire lines lFEFED Q~C ZuB F @ n  m A A pPOS n  4 @ @ cins m?? n 1> > sele o= =0 thedocument theDocument n  m< < pPOS n  4 ; ; cins m :: o 9 90 thedocument theDocument = n l 8 47 7 cha m668 o5 50 thedocument theDocument o4 4 ret l 33 B< do nothing when the selection is at the end of the documentB k$u q$$2 20 startline startLine10 10endlineendLine0 l$$/./.- T$u k)p r)3 n)1 1/1, , pidx n)/ 4,/+ + clin m-.** n), 1*,) ) sele o)*( (0 thedocument theDocument o' '0 startline startLine r4> n4< 1:<& & pidx n4: 47:% % clin m89$$ n47 157# # sele o45" "0 thedocument theDocument o! !0endlineendLine Z?p =?H n?F 4CF  cha mDE n?C 4@C  clin oAB 0endlineendLine o?@ 0 thedocument theDocument mFG  rK\ nKX 7LX  clin oPR 0 startline startLine lSW [SW oTU 0endlineendLine mUV oKL 0 thedocument theDocument n 1Y[  sele oXY 0 thedocument theDocument k_p r_n n_j 7`j  clin odf 0 startline startLine ogi 0endlineendLine o_` 0 thedocument theDocument n 1km  sele ojk 0 thedocument theDocument Sop  - R  .ascrerr ******** CD l l i I 0 getlineprefix getLinePrefix o 0 thestring theString kT l _Y This handler determins how many spaces or tabs are at the beginning of the first line of l  the current selection l q 0 theprefix thePrefix l l r J  o 0 theprefix thePrefix E? AppleScript is faster at appending items to lists than strings   X8   k3 q 0thechartheChar l l r n 1  pcnt o 0acharaChar o 0thechartheChar 82 because aChar is an object reference, not a value Z3 G( !  = "# "o 0thechartheChar #m$ $  !=#&%& %o#$ 0thechartheChar &1$%  tab r+/'( 'o+, 0thechartheChar (n)* );-. *o,- 0 theprefix thePrefix S23 0acharaChar  n +, +2  cha ,o 0 thestring theString -. -l99./0 /q9911 0 savedelims saveDelims023 2l99345 4r9>67 6n9<89 81:<  txdl 919:  ascr 7o 0 savedelims saveDelims5:; :r?E<= <J?A =n>? >1BD  txdl ?1AB  ascr;@A @rFKBC BcFIDE DoFG 0 theprefix thePrefix EmGH  TEXT Co 0 theprefix thePrefixAFG FrLQHI HoLM 0 savedelims saveDelims InJK J1NP  txdl K1MN  ascrGLM LlRRMN NLRTO OoRS 0 theprefix thePrefixPQ PlQRS RlSTU TiVW VIX 0 indentlines indentLinesXYZ Yo 0thetexttheTextZ[ [o 0 theprefix thePrefix Wk~\\]^ ]l_ _YS This handler indents text by placing a prefix string at the beginning of each line^`a `labc bqdde 0 savedelims saveDelimse 0thelinestheLinescfg flghi hQ{jkl jkjmmno nrpq pnrs r1  txdl s1  ascr qo 0 savedelims saveDelimsotu tr vw vJ xxy yo  ret  wnz{ z1   txdl {1  ascru|} |Z1~ ~= n 4  cha m o 0thetexttheText o  ret r) n' 2%'  citm n% 7%  ctxt m! m"$ o 0thetexttheText o 0thelinestheLines r,1 n,/ 2-/  citm o,- 0thetexttheText o 0thelinestheLines} X2^ ZBY ?BI nBG 1EG  leng nBE 1CE  pcnt oBC 0alineaLine mGH rLU bLQ oLM 0 theprefix thePrefix lMP nMP 1NP  pcnt oMN 0alineaLine n 1RT  pcnt oQR 0alineaLine 0alineaLine o56 0thelinestheLines r_d l_b c_b o_` 0thelinestheLines m`a  TEXT o 0thetexttheText rej oef 0 savedelims saveDelims n 1gi  txdl 1fg  ascr kR .ascrerr ******** o 0errmsgerrMsg  errn o 0errnumerrNum lkr{ rrw ors 0 savedelims saveDelims n 1tv  txdl 1st  ascr rx{ oxy 0 theprefix thePrefix o 0thetexttheTexti l|| L|~ o|} 0thetexttheTextU l l i I~ 0 getwraptext getWrapText} o| |0 thedocument theDocument}~ kX l{{ lf This handler obtains the text of the current selection. If the selection is empty or all white space lzz @: the routine returns the string "-- your commands go here" lyxyx qwv w0thetexttheTextv lutut r c n 1s s sele or r0 thedocument theDocument mq q TEXT op p0thetexttheTexto ZXn ?  n  1 m m leng o l l0thetexttheText m kk l L oj j0thetexttheText =7 if the selection is of significant length just wrap itn kX XNi k'I q''hg h0thechartheCharg l''fefe r', n'* 1(*d d pcnt o'(c c0acharaChar ob b0thechartheChara Z-I`_ F-@ F-8 >-0 o-.^ ^0thechartheChar m./    >36   o34] ]0thechartheChar  145\ \ tab >;>   o;<[ [0thechartheChar  o<=Z Z ret LCE oCDY Y0thetexttheText`_a i0acharaChar n 2X X cha oW W0thetexttheText lOOVUVUT LOX bOW IOUSR S0 getlineprefix getLinePrefixQ oPQP P0thetexttheTextQR mUV -- your commands go hereTo lONON lMLMLK i # IJ!I J0 formatsuffix formatSuffix!"H "oG G0 lineprefix linePrefixHI  k'##$% $q&&FE F0 resulttext resultTextE%'( 'lDCDC()* )r+, +JBB ,oA A0 resulttext resultText*-. -X$/@0 /r12 1l3? 3b45 4o> >0 lineprefix linePrefix 5o= =0asuffixaSuffix? 2n67 6; 7o< <0 resulttext resultText @0asuffixaSuffix 0o ; ;0 suffixtext suffixText.89 8l%%:9:99:8 :L%'; ;o%&7 70 resulttext resultText8K*6< =>?@ABCDEFGHIJGKL5MN43210/.-,+*)('&%$6<(#"!   #0 prefix1text prefix1Text "0 selectedtext selectedText !0 prefix2text prefix2Text 0 suffixtext suffixText (0normalizeselectionnormalizeSelection 0 getlineprefix getLinePrefix 0 indentlines indentLines 0 getwraptext getWrapText 0 formatsuffix formatSuffix .aevtoappnull**** 0 eyelinkstuff eyelinkStuff 0 screenstuff screenStuff 0 filestuff fileStuff 0 otherstuff otherStuff 0 liststuff listStuff  0whattodo 0whom 0thelistTheList *0thehandlerstoinserttheHandlerstoInsert 0 texttoinsert 0newdocnewDoc 0 thedocument theDocument 0 thewindow theWindow 0theclasstheClass    = >OOP Pend considering ?QR (0normalizeselectionnormalizeSelectionSS 0 thedocument theDocumentQ 0 thedocument theDocument 0 startline startLine 0endlineendLineR   sele  cins  pPOS  cha  ret  bool  clin  pidxw,i/,i/, i/&hYSPhZ,k/,EO,i/,EO//[\[Z\Zk2,FY[\[Z\Z2,FO[OYWX h@TU 0 getlineprefix getLinePrefixVV 0 thestring theStringT 0 thestring theString 0