1 |
;;; pgg.el --- glue for the various PGP implementations. |
;;; pgg.el --- glue for the various PGP implementations. |
2 |
|
|
3 |
;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. |
;; Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc. |
4 |
|
|
5 |
;; Author: Daiki Ueno <ueno@unixuser.org> |
;; Author: Daiki Ueno <ueno@unixuser.org> |
6 |
;; Created: 1999/10/28 |
;; Created: 1999/10/28 |
97 |
(read-passwd prompt))) |
(read-passwd prompt))) |
98 |
|
|
99 |
(eval-when-compile |
(eval-when-compile |
100 |
(defvar itimer-process) |
(defmacro pgg-run-at-time-1 (time repeat function args) |
101 |
(defvar itimer-timer) |
(when (featurep 'xemacs) |
102 |
(autoload 'delete-itimer "itimer") |
(if (condition-case nil |
103 |
(autoload 'itimer-driver-start "itimer") |
(let ((delete-itimer 'delete-itimer) |
104 |
(autoload 'itimer-value "itimer") |
(itimer-driver-start 'itimer-driver-start) |
105 |
(autoload 'set-itimer-function "itimer") |
(itimer-value 'itimer-value) |
106 |
(autoload 'set-itimer-function-arguments "itimer") |
(start-itimer 'start-itimer)) |
107 |
(autoload 'set-itimer-restart "itimer") |
(unless (or (symbol-value 'itimer-process) |
108 |
(autoload 'start-itimer "itimer")) |
(symbol-value 'itimer-timer)) |
109 |
|
(funcall itimer-driver-start)) |
110 |
|
;; Check whether there is a bug to which the difference of |
111 |
|
;; the present time and the time when the itimer driver was |
112 |
|
;; woken up is subtracted from the initial itimer value. |
113 |
|
(let* ((inhibit-quit t) |
114 |
|
(ctime (current-time)) |
115 |
|
(itimer-timer-last-wakeup |
116 |
|
(prog1 |
117 |
|
ctime |
118 |
|
(setcar ctime (1- (car ctime))))) |
119 |
|
(itimer-list nil) |
120 |
|
(itimer (funcall start-itimer "pgg-run-at-time" |
121 |
|
'ignore 5))) |
122 |
|
(sleep-for 0.1) ;; Accept the timeout interrupt. |
123 |
|
(prog1 |
124 |
|
(> (funcall itimer-value itimer) 0) |
125 |
|
(funcall delete-itimer itimer)))) |
126 |
|
(error nil)) |
127 |
|
`(let ((time ,time)) |
128 |
|
(apply #'start-itimer "pgg-run-at-time" |
129 |
|
,function (if time (max time 1e-9) 1e-9) |
130 |
|
,repeat nil t ,args))) |
131 |
|
`(let ((time ,time) |
132 |
|
(itimers (list nil))) |
133 |
|
(setcar |
134 |
|
itimers |
135 |
|
(apply #'start-itimer "pgg-run-at-time" |
136 |
|
(lambda (itimers repeat function &rest args) |
137 |
|
(let ((itimer (car itimers))) |
138 |
|
(if repeat |
139 |
|
(progn |
140 |
|
(set-itimer-function |
141 |
|
itimer |
142 |
|
(lambda (itimer repeat function &rest args) |
143 |
|
(set-itimer-restart itimer repeat) |
144 |
|
(set-itimer-function itimer function) |
145 |
|
(set-itimer-function-arguments itimer args) |
146 |
|
(apply function args))) |
147 |
|
(set-itimer-function-arguments |
148 |
|
itimer |
149 |
|
(append (list itimer repeat function) args))) |
150 |
|
(set-itimer-function |
151 |
|
itimer |
152 |
|
(lambda (itimer function &rest args) |
153 |
|
(delete-itimer itimer) |
154 |
|
(apply function args))) |
155 |
|
(set-itimer-function-arguments |
156 |
|
itimer |
157 |
|
(append (list itimer function) args))))) |
158 |
|
1e-9 (if time (max time 1e-9) 1e-9) |
159 |
|
nil t itimers ,repeat ,function ,args)))))) |
160 |
|
|
161 |
(eval-and-compile |
(eval-and-compile |
162 |
(defalias |
(if (featurep 'xemacs) |
163 |
'pgg-run-at-time |
(defun pgg-run-at-time (time repeat function &rest args) |
164 |
(if (featurep 'xemacs) |
"Emulating function run as `run-at-time'. |
|
(if (condition-case nil |
|
|
(progn |
|
|
(unless (or itimer-process itimer-timer) |
|
|
(itimer-driver-start)) |
|
|
;; Check whether there is a bug to which the difference of |
|
|
;; the present time and the time when the itimer driver was |
|
|
;; woken up is subtracted from the initial itimer value. |
|
|
(let* ((inhibit-quit t) |
|
|
(ctime (current-time)) |
|
|
(itimer-timer-last-wakeup |
|
|
(prog1 |
|
|
ctime |
|
|
(setcar ctime (1- (car ctime))))) |
|
|
(itimer-list nil) |
|
|
(itimer (start-itimer "pgg-run-at-time" 'ignore 5))) |
|
|
(sleep-for 0.1) ;; Accept the timeout interrupt. |
|
|
(prog1 |
|
|
(> (itimer-value itimer) 0) |
|
|
(delete-itimer itimer)))) |
|
|
(error nil)) |
|
|
(lambda (time repeat function &rest args) |
|
|
"Emulating function run as `run-at-time'. |
|
165 |
TIME should be nil meaning now, or a number of seconds from now. |
TIME should be nil meaning now, or a number of seconds from now. |
166 |
Return an itimer object which can be used in either `delete-itimer' |
Return an itimer object which can be used in either `delete-itimer' |
167 |
or `cancel-timer'." |
or `cancel-timer'." |
168 |
(apply #'start-itimer "pgg-run-at-time" |
(pgg-run-at-time-1 time repeat function args)) |
169 |
function (if time (max time 1e-9) 1e-9) |
(defalias 'pgg-run-at-time 'run-at-time))) |
|
repeat nil t args)) |
|
|
(lambda (time repeat function &rest args) |
|
|
"Emulating function run as `run-at-time' in the right way. |
|
|
TIME should be nil meaning now, or a number of seconds from now. |
|
|
Return an itimer object which can be used in either `delete-itimer' |
|
|
or `cancel-timer'." |
|
|
(let ((itimers (list nil))) |
|
|
(setcar |
|
|
itimers |
|
|
(apply #'start-itimer "pgg-run-at-time" |
|
|
(lambda (itimers repeat function &rest args) |
|
|
(let ((itimer (car itimers))) |
|
|
(if repeat |
|
|
(progn |
|
|
(set-itimer-function |
|
|
itimer |
|
|
(lambda (itimer repeat function &rest args) |
|
|
(set-itimer-restart itimer repeat) |
|
|
(set-itimer-function itimer function) |
|
|
(set-itimer-function-arguments itimer args) |
|
|
(apply function args))) |
|
|
(set-itimer-function-arguments |
|
|
itimer |
|
|
(append (list itimer repeat function) args))) |
|
|
(set-itimer-function |
|
|
itimer |
|
|
(lambda (itimer function &rest args) |
|
|
(delete-itimer itimer) |
|
|
(apply function args))) |
|
|
(set-itimer-function-arguments |
|
|
itimer |
|
|
(append (list itimer function) args))))) |
|
|
1e-9 (if time (max time 1e-9) 1e-9) |
|
|
nil t itimers repeat function args))))) |
|
|
'run-at-time))) |
|
170 |
|
|
171 |
(defun pgg-add-passphrase-cache (key passphrase) |
(defun pgg-add-passphrase-cache (key passphrase) |
172 |
(setq key (pgg-truncate-key-identifier key)) |
(setq key (pgg-truncate-key-identifier key)) |