[PATCH] Check CCL available at run time, not compile time, in PGG.

Aidan Kehoe kehoea at parhasard.net
Sun Dec 23 09:46:16 EST 2007


Simon, this came up on xemacs-beta recently; see
http://mid.gmane.org/vpdhcif81o9.fsf@informatik.uni-tuebingen.de and the
associated thread for details. If you’re not actively maintaining the XEmacs
PGG package, please say so, and I’ll see can I fight with the CVS
infrastructure to let me commit the patch.

2007-12-23  Aidan Kehoe  <kehoea at parhasard.net>

	* pgg-parse.el (pgg-parse-crc24): 
	Provide the CCL program, independent of whether
	#'define-ccl-program was available at compile time. 
	* pgg-parse.el (pgg-parse-crc24-string):
	Only call the CCL program if #'ccl-execute-on-string is available,
	which it will be, if the current emacs has CCL support.

--- pgg-parse.el~	Fri Sep 23 15:31:43 2005
+++ pgg-parse.el	Wed Dec 19 11:42:59 2007
@@ -35,7 +35,7 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
+(eval-when-compile (require 'cl) (when (featurep 'mule) (require 'ccl)))
 
 (defgroup pgg-parse ()
   "OpenPGP packet parsing."
@@ -159,25 +159,42 @@
 (defmacro pgg-set-alist (alist key value)
   `(setq ,alist (nconc ,alist (list (cons ,key ,value)))))
 
-(when (fboundp 'define-ccl-program)
+(defconst pgg-parse-crc24 
+  (eval-when-compile
+    (let ((pre-existing
+	   [1 30 14 114744 114775 0 161 131127 1 148217 15 82167 1 1848
+	   131159 1 1595 5 256 114743 390 114775 19707 1467 16 7 183 1 -5628
+	   -7164 22]))
+      (when (fboundp #'ccl-compile)
+	(assert
+	 (equal
+	  pre-existing
+	  (ccl-compile 
+	   '(1
+	     ((loop
+		(read r0) (r1 ^= r0) (r2 ^= 0)
+		(r5 = 0)
+		(loop
+		  (r1 <<= 1)
+		  (r1 += ((r2 >> 15) & 1))
+		  (r2 <<= 1)
+		  (if (r1 & 256)
+		      ((r1 ^= 390) (r2 ^= 19707)))
+		  (if (r5 < 7)
+		      ((r5 += 1)
+		       (repeat))))
+		(repeat))))))
+	 nil
+	 "The pre-compiled CCL program appears broken, or the implementation
+of `ccl-compile' has changed versus to when this code was written.  "))
+      pre-existing))
+  "A CCL program to parse CRC 24 checksums.  See `define-ccl-program'.")
 
-  (define-ccl-program pgg-parse-crc24
-    '(1
-      ((loop
-	(read r0) (r1 ^= r0) (r2 ^= 0)
-	(r5 = 0)
-	(loop
-	 (r1 <<= 1)
-	 (r1 += ((r2 >> 15) & 1))
-	 (r2 <<= 1)
-	 (if (r1 & 256)
-	     ((r1 ^= 390) (r2 ^= 19707)))
-	 (if (r5 < 7)
-	     ((r5 += 1)
-	      (repeat))))
-	(repeat)))))
+(put 'pgg-parse-crc24 'ccl-program-idx
+     (register-ccl-program 'pgg-parse-crc24 pgg-parse-crc24))
 
-  (defun pgg-parse-crc24-string (string)
+(defun pgg-parse-crc24-string (string)
+  (when (fboundp #'ccl-execute-on-string)
     (let ((h (vector nil 183 1230 nil nil nil nil nil nil)))
       (ccl-execute-on-string pgg-parse-crc24 h string)
       (format "%c%c%c"


 
 > --- pgg-parse.el~	Fri Sep 23 15:31:43 2005
 > +++ pgg-parse.el	Wed Dec 19 11:42:59 2007
 > @@ -35,7 +35,7 @@
 >  
 >  ;;; Code:
 >  
 > -(eval-when-compile (require 'cl))
 > +(eval-when-compile (require 'cl) (when (featurep 'mule) (require 'ccl)))
 >  
 >  (defgroup pgg-parse ()
 >    "OpenPGP packet parsing."
 > @@ -159,25 +159,42 @@
 >  (defmacro pgg-set-alist (alist key value)
 >    `(setq ,alist (nconc ,alist (list (cons ,key ,value)))))
 >  
 > -(when (fboundp 'define-ccl-program)
 > +(defconst pgg-parse-crc24 
 > +  (eval-when-compile
 > +    (let ((pre-existing
 > +	   [1 30 14 114744 114775 0 161 131127 1 148217 15 82167 1 1848
 > +	   131159 1 1595 5 256 114743 390 114775 19707 1467 16 7 183 1 -5628
 > +	   -7164 22]))
 > +      (when (fboundp #'ccl-compile)
 > +	(assert
 > +	 (equal
 > +	  pre-existing
 > +	  (ccl-compile 
 > +	   '(1
 > +	     ((loop
 > +		(read r0) (r1 ^= r0) (r2 ^= 0)
 > +		(r5 = 0)
 > +		(loop
 > +		  (r1 <<= 1)
 > +		  (r1 += ((r2 >> 15) & 1))
 > +		  (r2 <<= 1)
 > +		  (if (r1 & 256)
 > +		      ((r1 ^= 390) (r2 ^= 19707)))
 > +		  (if (r5 < 7)
 > +		      ((r5 += 1)
 > +		       (repeat))))
 > +		(repeat))))))
 > +	 nil
 > +	 "The pre-compiled CCL program appears broken, or the implementation
 > +of `ccl-compile' has changed versus to when this code was written.  "))
 > +      pre-existing))
 > +  "A CCL program to parse CRC 24 checksums.  See `define-ccl-program'.")
 >  
 > -  (define-ccl-program pgg-parse-crc24
 > -    '(1
 > -      ((loop
 > -	(read r0) (r1 ^= r0) (r2 ^= 0)
 > -	(r5 = 0)
 > -	(loop
 > -	 (r1 <<= 1)
 > -	 (r1 += ((r2 >> 15) & 1))
 > -	 (r2 <<= 1)
 > -	 (if (r1 & 256)
 > -	     ((r1 ^= 390) (r2 ^= 19707)))
 > -	 (if (r5 < 7)
 > -	     ((r5 += 1)
 > -	      (repeat))))
 > -	(repeat)))))
 > +(put 'pgg-parse-crc24 'ccl-program-idx
 > +     (register-ccl-program 'pgg-parse-crc24 pgg-parse-crc24))
 >  
 > -  (defun pgg-parse-crc24-string (string)
 > +(defun pgg-parse-crc24-string (string)
 > +  (when (fboundp #'ccl-execute-on-string)
 >      (let ((h (vector nil 183 1230 nil nil nil nil nil nil)))
 >        (ccl-execute-on-string pgg-parse-crc24 h string)
 >        (format "%c%c%c"
 > 
 > 
 > -- 
 > ¿Dónde estará ahora mi sobrino Yoghurtu Nghé, que tuvo que huir
 > precipitadamente de la aldea por culpa de la escasez de rinocerontes?

-- 
¿Dónde estará ahora mi sobrino Yoghurtu Nghé, que tuvo que huir
precipitadamente de la aldea por culpa de la escasez de rinocerontes?



More information about the XEmacs-Beta mailing list