3
$Id: edtstr.scm,v 1.31 2003/03/06 05:14:21 cph Exp $
3
$Id: edtstr.scm,v 1.35 2007/01/05 21:19:23 cph Exp $
5
Copyright 1989,1990,1991,1992,2003 Massachusetts Institute of Technology
5
Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
6
1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
7
2006, 2007 Massachusetts Institute of Technology
7
9
This file is part of MIT/GNU Scheme.
19
21
You should have received a copy of the GNU General Public License
20
22
along with MIT/GNU Scheme; if not, write to the Free Software
21
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
23
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
92
(define-record-type <button>
93
(%%make-button number bits down? symbol)
95
(number button-number)
98
(symbol button-symbol))
100
(define (make-down-button number #!optional bits)
101
(%make-button number bits #t 'MAKE-DOWN-BUTTON))
103
(define (make-up-button number #!optional bits)
104
(%make-button number bits #f 'MAKE-UP-BUTTON))
106
(define (%make-button number bits down? caller)
107
(let ((bits (if (default-object? bits) 0 bits)))
108
(guarantee-limited-index-fixnum number #x100 caller)
109
(guarantee-limited-index-fixnum bits #x10 caller)
111
(symbol (bucky-bits->prefix bits)
114
(if down? '-DOWN '-UP))))
115
(hash-table/intern! buttons-table name
117
(%%make-button number bits down? name))))))
119
(define buttons-table
120
(make-strong-eq-hash-table))
122
(define (down-button? object)
123
(and (button? object)
124
(button-down? object)))
126
(define (up-button? object)
127
(and (button? object)
128
(not (button-down? object))))
130
(define (button-name button)
131
(symbol-name (button-symbol button)))
133
(set-record-type-unparser-method! <button>
134
(simple-unparser-method (record-type-name <button>)
136
(list (button-symbol button)))))
90
138
(define-structure (button-event (conc-name button-event/))
91
139
(window #f read-only #t)
92
140
(x #f read-only #t)
114
(set-editor-button-event! current-editor old-button-event)))))
116
(define-record-type <button>
117
(%%make-button number down?)
119
(number button/number)
120
(down? button/down?))
122
(define make-down-button)
123
(define make-up-button)
125
(lambda (buttons number down?)
126
(or (vector-ref buttons number)
127
(let ((button (%%make-button number down?)))
128
(vector-set! buttons number button)
132
(set! make-down-button
134
(if (>= number (vector-length down-buttons))
135
(set! down-buttons (vector-grow down-buttons (+ number 1) #f)))
136
(%make-button down-buttons number #t)))
139
(if (>= number (vector-length up-buttons))
140
(set! up-buttons (vector-grow up-buttons (+ number 1) #f)))
141
(%make-button up-buttons number #f))))
143
(define (down-button? object)
144
(and (button? object)
145
(button/down? object)))
147
(define (up-button? object)
148
(and (button? object)
149
(not (button/down? object))))
151
(define (button/bucky-bits button)
155
(set-record-type-unparser-method! <button>
156
(standard-unparser-method (record-type-name <button>)
157
(lambda (button port)
158
(write-string (if (button/down? button) "down" "up") port)
159
(write-char #\space port)
160
(write (button/number button) port))))
b'\\ No newline at end of file'
162
(set-editor-button-event! current-editor old-button-event)))))
b'\\ No newline at end of file'