emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/osc 41c6577: Support for receiving double precision (fl


From: Mario Lang
Subject: [elpa] externals/osc 41c6577: Support for receiving double precision (float64) values
Date: Tue, 30 Mar 2021 06:44:11 -0400 (EDT)

branch: externals/osc
commit 41c65773a75014cd32da5cf2072e6b563002bbff
Author: Mario Lang <mlang@blind.guru>
Commit: Mario Lang <mlang@blind.guru>

    Support for receiving double precision (float64) values
---
 osc.el | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/osc.el b/osc.el
index 28a1a5c..8be30ef 100644
--- a/osc.el
+++ b/osc.el
@@ -1,6 +1,6 @@
 ;;; osc.el --- Open Sound Control protocol library  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2014-2020  Free Software Foundation, Inc.
+;; Copyright (C) 2014-2021  Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@blind.guru>
 ;; Version: 0.2
@@ -173,6 +173,29 @@
         (expt 2.0 (- e 127))
         (1+ (/ f (expt 2.0 23))))))))
 
+(defun osc-read-float64 ()
+  (let ((s (lsh (logand (following-char) #X80) -7))
+       (e (+ (lsh (logand (following-char) #X7F) 4)
+             (lsh (logand (progn (forward-char) (following-char)) #XF0) -4)))
+       (f (+ (lsh (logand (following-char) #X0F) 48)
+             (lsh (progn (forward-char) (following-char)) 40)
+             (lsh (progn (forward-char) (following-char)) 32)
+             (lsh (progn (forward-char) (following-char)) 24)
+             (lsh (progn (forward-char) (following-char)) 16)
+             (lsh (progn (forward-char) (following-char)) 8)
+             (prog1 (progn (forward-char) (following-char)) (forward-char)))))
+    (cond
+     ((and (= e 0) (= f 0))
+      (* 0.0 (expt -1 s)))
+     ((and (= e 2047) (or (= f (1- (expt 2 52))) (= f 0)))
+      (* 1.0e+INF (expt -1 s)))
+     ((and (= e 2047) (not (or (= f 0) (= f (1- (expt 2 52))))))
+      0.0e+NaN)
+     (t
+      (* (expt -1 s)
+        (expt 2.0 (- e 1023))
+        (1+ (/ f (expt 2.0 52))))))))
+
 (defun osc-server-set-handler (server path handler)
   "Set HANDLER for PATH on SERVER.
 IF HANDLER is nil, remove previously defined handler and fallback to
@@ -205,6 +228,7 @@ the generic handler for SERVER."
                        (lambda (type)
                          (cl-case type
                            (?b (osc-read-blob))
+                           (?d (osc-read-float64))
                            (?f (osc-read-float32))
                            (?i (osc-read-int32))
                            (?s (osc-read-string))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]