home *** CD-ROM | disk | FTP | other *** search
/ What PC? 1996 August / WPCAUG96.ISO / multi / singing / shared.dxr / 01973_Trace.ls < prev    next >
Encoding:
Text File  |  1996-06-12  |  4.3 KB  |  229 lines

  1. on MaxTrace
  2.   return 5
  3. end
  4.  
  5. on puppetSockets
  6.   set start to FirstSocketSprite()
  7.   set finish to start + MaxTrace() - 1
  8.   repeat with i = start to finish
  9.     puppetSprite(i, 1)
  10.   end repeat
  11. end
  12.  
  13. on MarkPlugAsFree thePlug
  14.   global FreePlugsList
  15.   setAt(FreePlugsList, thePlug, 1)
  16. end
  17.  
  18. on MarkPlugAsUsed thePlug
  19.   global FreePlugsList
  20.   setAt(FreePlugsList, thePlug, 0)
  21. end
  22.  
  23. on ResetPlugs
  24.   global FreePlugsList
  25.   set FreePlugsList to []
  26.   repeat with i = 1 to MaxTrace() + 1
  27.     append(FreePlugsList, 1)
  28.   end repeat
  29. end
  30.  
  31. on FirstFreePlug
  32.   global FreePlugsList
  33.   set p to 1
  34.   repeat with flag in FreePlugsList
  35.     if flag then
  36.       exit repeat
  37.     end if
  38.     set p to p + 1
  39.   end repeat
  40.   return p
  41. end
  42.  
  43. on SetPlugText thePlug, theText
  44.   set theCast to CastFromPlug(thePlug)
  45.   set the text of cast theCast to theText
  46. end
  47.  
  48. on MakeNewPlug theText
  49.   set myPlug to FirstFreePlug()
  50.   SetPlugText(myPlug, theText)
  51.   MarkPlugAsUsed(myPlug)
  52.   return myPlug
  53. end
  54.  
  55. on FirstSocketSprite
  56.   return 34
  57. end
  58.  
  59. on FirstPlugCast
  60.   return 1991
  61. end
  62.  
  63. on SpriteFromSocket theSocket
  64.   return FirstSocketSprite() + theSocket - 1
  65. end
  66.  
  67. on CastFromPlug thePlug
  68.   return thePlug + FirstPlugCast() - 1
  69. end
  70.  
  71. on PlugFromCast theCast
  72.   return theCast - FirstPlugCast() + 1
  73. end
  74.  
  75. on LatestSprite
  76.   global TraceLen
  77.   return FirstSocketSprite() + TraceLen - 1
  78. end
  79.  
  80. on HideSocket theSocket
  81.   set theSprite to SpriteFromSocket(theSocket)
  82.   set the blend of sprite theSprite to 0
  83. end
  84.  
  85. on ShowSocket theSocket
  86.   set theSprite to SpriteFromSocket(theSocket)
  87.   if theSprite = LatestSprite() then
  88.     repeat with i = FirstSocketSprite() to FirstSocketSprite() + MaxTrace() - 1
  89.       if i = LatestSprite() then
  90.         set the blend of sprite theSprite to 100
  91.         next repeat
  92.       end if
  93.       if the blend of sprite i = 100 then
  94.         set the blend of sprite i to 66
  95.       end if
  96.     end repeat
  97.   else
  98.     set the blend of sprite theSprite to 66
  99.   end if
  100. end
  101.  
  102. on PlugIn theSocket, thePlug
  103.   set theSprite to SpriteFromSocket(theSocket)
  104.   set theCast to CastFromPlug(thePlug)
  105.   set the castNum of sprite theSprite to theCast
  106. end
  107.  
  108. on UnplugAtSocket theSocket
  109.   set theSprite to SpriteFromSocket(theSocket)
  110.   set theCast to the castNum of sprite theSprite
  111.   set thePlug to PlugFromCast(theCast)
  112.   return thePlug
  113. end
  114.  
  115. on InitTraceDisplay
  116.   ResetPlugs()
  117.   repeat with i = 1 to MaxTrace()
  118.     HideSocket(i)
  119.   end repeat
  120. end
  121.  
  122. on DeleteFromTraceDisplay
  123.   global TraceLen
  124.   set plug to UnplugAtSocket(TraceLen)
  125.   MarkPlugAsFree(plug)
  126.   HideSocket(TraceLen)
  127. end
  128.  
  129. on ShuffleUpTraceDisplay
  130.   global TraceLen
  131.   set plug to UnplugAtSocket(1)
  132.   MarkPlugAsFree(plug)
  133.   if TraceLen > 1 then
  134.     repeat with i = 1 to TraceLen - 1
  135.       set plug to UnplugAtSocket(i + 1)
  136.       PlugIn(i, plug)
  137.     end repeat
  138.   end if
  139.   HideSocket(TraceLen)
  140. end
  141.  
  142. on AddTrace ArticleRef, ArticleTitle
  143.   global theTrace, TraceLen
  144.   set theRecord to [ArticleRef, ArticleTitle]
  145.   append(theTrace, theRecord)
  146.   set TraceLen to TraceLen + 1
  147. end
  148.  
  149. on RemoveTrace thePos
  150.   global theTrace, TraceLen
  151.   deleteAt(theTrace, thePos)
  152.   set TraceLen to TraceLen - 1
  153. end
  154.  
  155. on RemoveFirstTrace
  156.   RemoveTrace(1)
  157. end
  158.  
  159. on RemoveLastTrace
  160.   global TraceLen
  161.   RemoveTrace(TraceLen)
  162. end
  163.  
  164. on ShuffleUpTrace
  165.   RemoveFirstTrace()
  166. end
  167.  
  168. on GetTrace entryNo
  169.   global theTrace
  170.   set theEntry to getAt(theTrace, entryNo)
  171.   return theEntry
  172. end
  173.  
  174. on GetRefPart theEntry
  175.   set theRef to getAt(theEntry, 1)
  176.   return theRef
  177. end
  178.  
  179. on GetRef entryNo
  180.   set theEntry to GetTrace(entryNo)
  181.   set theRef to GetRefPart(theEntry)
  182.   return theRef
  183. end
  184.  
  185. on GetLastRef
  186.   global TraceLen
  187.   return GetRef(TraceLen)
  188. end
  189.  
  190. on InitTrace
  191.   global theTrace, TraceLen
  192.   set theTrace to []
  193.   set TraceLen to 0
  194. end
  195.  
  196. on StepOn ArticleRef, ArticleName
  197.   global TraceLen, theTrace
  198.   set myPlug to MakeNewPlug(ArticleRef)
  199.   if TraceLen = MaxTrace() then
  200.     ShuffleUpTraceDisplay()
  201.     ShuffleUpTrace()
  202.   end if
  203.   AddTrace(ArticleRef, ArticleName)
  204.   PlugIn(TraceLen, myPlug)
  205.   ShowSocket(TraceLen)
  206. end
  207.  
  208. on StepBack
  209.   global TraceLen
  210.   if TraceLen = 0 then
  211.     set returnRef to "none"
  212.   else
  213.     DeleteFromTraceDisplay()
  214.     set returnRef to GetLastRef()
  215.   end if
  216.   return returnRef
  217. end
  218.  
  219. on GoBackTo n
  220.   global TraceLen
  221.   set returnRef to GetRef(n)
  222.   repeat with i = TraceLen down to n + 1
  223.     DeleteFromTraceDisplay()
  224.     RemoveTrace(i)
  225.   end repeat
  226.   ShowSocket(TraceLen)
  227.   return returnRef
  228. end
  229.