File: hooks.fs

package info (click to toggle)
snd 25.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 44,016 kB
  • sloc: ansic: 291,818; lisp: 260,387; ruby: 71,134; sh: 3,293; fortran: 2,342; csh: 1,062; cpp: 294; makefile: 294; python: 87; xml: 27; javascript: 1
file content (128 lines) | stat: -rw-r--r-- 2,919 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
\ hooks.fs -- hooks.scm -> hooks.fs

\ Author: Michael Scholz <mi-scholz@users.sourceforge.net>
\ Created: 06/08/08 23:27:50
\ Changed: 17/12/02 03:14:03
\
\ @(#)hooks.fs	1.26 12/2/17

\ snd-hooks         Array with all Snd hooks.
\ reset-all-hooks   ( -- )
\ with-local-hook   ( hook local-hook-procs thunk -- result )

\ for all-chans
require examp

[defined] after-apply-controls-hook [if]
	#( after-apply-controls-hook
	   after-graph-hook
	   after-lisp-graph-hook
	   after-open-hook
	   after-save-as-hook
	   after-save-state-hook
	   after-transform-hook
	   bad-header-hook
	   before-close-hook
	   before-exit-hook
	   before-save-as-hook
	   before-save-state-hook
	   before-transform-hook
	   clip-hook
	   close-hook
	   color-hook
	   draw-mark-hook
	   draw-mix-hook
	   drop-hook
	   during-open-hook
	   effects-hook
	   enved-hook
	   exit-hook
	   graph-hook
	   help-hook
	   initial-graph-hook
	   key-press-hook
	   lisp-graph-hook
	   listener-click-hook
	   mark-click-hook
	   mark-drag-hook
	   mark-hook
	   mix-click-hook
	   mix-drag-hook
	   mix-release-hook
	   mouse-click-hook
	   mouse-drag-hook
	   mouse-enter-graph-hook
	   mouse-enter-label-hook
	   mouse-enter-listener-hook
	   mouse-enter-text-hook
	   mouse-leave-graph-hook
	   mouse-leave-label-hook
	   mouse-leave-listener-hook
	   mouse-leave-text-hook
	   mouse-press-hook
	   mus-error-hook
	   name-click-hook
	   new-sound-hook
	   new-widget-hook
	   open-hook
	   open-raw-sound-hook
	   orientation-hook
	   output-comment-hook
	   play-hook
	   read-hook
	   save-hook
	   save-state-hook
	   select-channel-hook
	   select-sound-hook
	   snd-error-hook
	   snd-warning-hook
	   start-playing-hook
	   start-playing-selection-hook
	   stop-playing-hook
	   stop-playing-selection-hook
	   update-hook )
[else]
	#()
[then] constant snd-hooks

: hooks-reset-hook { obj -- }
	obj hook? if
		obj reset-hook!
	then
;

: reset-all-hooks ( -- )
	doc" Remove all Snd hook functions."
	snd-hooks each ( hook )
		hooks-reset-hook
	end-each
	nil nil nil { lst snd chn }
	all-chans each to lst
		lst 0 array-ref to snd
		lst 1 array-ref to chn
		snd chn edit-hook       hooks-reset-hook
		snd chn after-edit-hook hooks-reset-hook
		snd chn undo-hook       hooks-reset-hook
	end-each
;

: with-local-hook <{ hook local-hook-procs thunk -- }>
	doc" Evaluate THUNK (an xt) \
with HOOK set to LOCAL-HOOK-PROCS (an array of procs), \
then restores HOOK to its previous state."
	hook hook?              hook             1 "a hook"       assert-type
	local-hook-procs array? local-hook-procs 2 "an array"     assert-type
	thunk word?             thunk            3 "a proc or xt" assert-type
	hook hook->array { old-procs }
	hook reset-hook!
	local-hook-procs each ( proc )
		hook swap add-hook!
	end-each
	thunk '() run-proc drop
	hook reset-hook!
	old-procs each ( proc )
		hook swap add-hook!
	end-each
;

\ hooks.fs ends here