annotate lisp/ilisp/ilisp-mov.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children b82b59fe008d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 ;;; -*- Mode: Emacs-Lisp -*-
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 ;;; ilisp-mov.el --
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 ;;; This file is part of ILISP.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 ;;; Version: 5.7
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 ;;; Copyright (C) 1990, 1991, 1992, 1993 Chris McConnell
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 ;;; 1993, 1994 Ivan Vasquez
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 ;;; 1994, 1995 Marco Antoniotti and Rick Busdiecker
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12 ;;; Other authors' names for which this Copyright notice also holds
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 ;;; may appear later in this file.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ;;; Send mail to 'ilisp-request@lehman.com' to be included in the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 ;;; ILISP mailing list. 'ilisp@lehman.com' is the general ILISP
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 ;;; mailing list were bugs and improvements are discussed.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 ;;; ILISP is freely redistributable under the terms found in the file
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 ;;; COPYING.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 ;;;%%Movement
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 (defun bol-ilisp (arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 "Goes to the beginning of line, then skips past the prompt, if any.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 If a prefix argument is given (\\[universal-argument]), then no prompt skip
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 -- go straight to column 0.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 The prompt skip is done by skipping text matching the regular expression
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 comint-prompt-regexp or ilisp-other-prompt, both buffer local variables."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 (interactive "P")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 (beginning-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 (if (null arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 (or (comint-skip-prompt)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 (if ilisp-other-prompt
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 (let ((comint-prompt-regexp ilisp-other-prompt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 (comint-skip-prompt))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 (defun beginning-of-defun-lisp (&optional stay)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 "Go to the next left paren that starts at the left margin or after a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 prompt in an ILISP buffer. If optional STAY, then do not move to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 prior defun if at the start of one in an ilisp mode."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 (if (memq major-mode ilisp-modes)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 (let ((point (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 (if (and (not stay) (= point (lisp-input-start)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (progn (forward-line -1) (lisp-input-start))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 (beginning-of-defun)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 (defun end-of-defun-lisp ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 "Go to the next left paren that starts at the left margin or after a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 prompt in an ILISP buffer and go to the end of the expression."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 (let ((point (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 (if (memq major-mode ilisp-modes)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 (beginning-of-defun-lisp t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 (if (or (lisp-in-string)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 (progn (beginning-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 (re-search-forward "^[ \t\n]*[^; \t\n]" nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 (back-to-indentation)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 (not (bolp))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 (beginning-of-defun-lisp t)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 (lisp-end-defun-text t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 (if (= point (point)) ;Already at end so move to next end
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 (if (memq major-mode ilisp-modes)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 (re-search-forward comint-prompt-regexp (point-max) t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 (lisp-skip (point-max)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 (if (not (or (eobp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 (= (char-after (point)) ?\n)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 (lisp-end-defun-text t))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 (defun lisp-defun-begin ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 "Go to the start of the containing defun and return point."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 (let (begin)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 (if (memq major-mode ilisp-modes)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 (lisp-input-start)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 (if (or (eobp) (not (and (bolp) (= (char-after (point)) ?\())))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 (beginning-of-defun))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 (point))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 (defun lisp-defun-end (&optional no-errorp at-beginp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 "Go to the end of the containing defun and return point or nil if
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 there is no end."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 (if (not at-beginp) (lisp-defun-begin))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 (lisp-skip (point-max)) ;To skip comments on defun-end
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 (forward-sexp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 (error (if no-errorp nil (error "Unbalanced parentheses")))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 (defun lisp-find-next-start ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 "Find the start of the next line at the left margin that starts with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 a character besides whitespace, a \) or ;;; and return the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 point."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 (if (eobp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 (point-max)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 (forward-char)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 (if (re-search-forward "^\\(\\(;;;\\)\\|\\([^ \t\n\);]\\)\\)" nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 (match-beginning 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 (point-max)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 (defun lisp-end-defun-text (&optional at-start)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 "Go the end of the text associated with the current defun and return
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 point. The end is the last character before whitespace leading to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 a left paren or ;;; at the left margin unless it is in a string."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 (if (not at-start) (lisp-defun-begin))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 (let ((point (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 (boundary (lisp-find-next-start))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 (final (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 (progn (forward-sexp) (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 (error (point-max))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 ;; Find the next line starting at the left margin and then check
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 ;; to see if it is in a string.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 (while (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 (skip-chars-forward "^\"" boundary) ;To the next string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 (if (= (point) boundary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 nil ;No quote found and at limit
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 (let ((string-boundary ;Start of next defun
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 (if (re-search-forward "^\(\\|^;;;" nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 (match-beginning 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 (point-max)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 (if (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 (progn (forward-sexp) t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 (error (goto-char string-boundary) nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 (if (>= (point) boundary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 ;; Boundary was in string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 (if (> (point) string-boundary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 (progn ;String ended in next defun
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 (goto-char string-boundary)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 (if (> (setq boundary
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 (lisp-find-next-start))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 final)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 ;; Normal defun
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 (progn (goto-char final) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 ;; Unclosed string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 nil)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 (re-search-backward "^[^; \t\n]\\|^[^;\n][ \t]*[^ \t\n]" point t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 (end-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 (skip-chars-backward " \t")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 (if (< (point) point)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 (goto-char point)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 (if (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 (let ((point (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 (beginning-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 (if comment-start (search-forward comment-start point t))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 (progn (next-line 1) (indent-line-ilisp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 (point))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 (defun lisp-in-comment (test)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 "Return T if you are in a comment."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 (beginning-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 (and (looking-at test)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 (not (= (match-end 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 (progn (end-of-line) (point))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 ;;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 (defun lisp-in-string (&optional begin end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 "Return the string region that immediately follows/precedes point or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 that contains point in optional region BEGIN to END. If point is in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 region, T will be returned as well."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 (if (not begin)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 (setq end (lisp-end-defun-text)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 begin (lisp-defun-begin))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 (let* ((point (progn (skip-chars-forward " \t") (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 (done nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 (goto-char begin)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 (while (and (< (point) end) (not done))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 (skip-chars-forward "^\"" end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 (setq begin (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 (if (< begin end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 (if (and (not (bobp)) (= (char-after (1- begin)) ??))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 (forward-char)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 (if (condition-case () (progn (forward-sexp) (<= (point) end))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 (error nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 (progn ;After string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 (skip-chars-forward " \t")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 (if (or (= begin point) (= point (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 (setq done (list begin (point) nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 (if (and (< begin point) (< point (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 (setq done (list begin (point) t)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 ;; In string at end of buffer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 (setq done (list begin end t))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 done)))