1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-11 06:31:07 +02:00
audacity/lib-src/libnyquist/nyquist/tran/generate-defines.lsp
2015-04-07 22:10:17 -05:00

58 lines
1.4 KiB
Common Lisp

;; generate-defines.lsp
;;
;; Roger B. Dannenberg
;; July 2012
;;
;;
;; GENERATE-DEFINES -- generate INTERP_xxx defines for sound.h
;;
;; n is number of parameters
;;
(defun generate-defines (n)
(let ((count (int-power 2 n))
sum code pos)
(dotimes (i count)
(format t "#define INTERP_")
(setf sum 0)
(dotimes (j n)
(setf pos (- n 1 j)) ; bit position
(cond ((testbit i pos)
(setf code "s")
(setf sum (+ sum (int-power 4 pos))))
(t
(setf code "n")))
(format t "~A" code))
(format t " ~A~%" sum))))
(defun get-int-field (n pos len)
;; from integer n, extract len bits starting at pos,
;; e.g. (get-int-field 0x1234 8 4) -> 2
;; pos for low-order bit is 0; the low order bit returned
;; is at pos; the high-order bit is at pos + len - 1
(setf n (/ n (int-power 2 pos)))
(setf n (rem n (int-power 2 len)))
n)
(defun generate-full-defines (n)
(let ((count (int-power 4 n))
code pos fld)
(dotimes (i count)
(format t "#define INTERP_")
(setf sum 0)
(dotimes (j n)
(setf pos (* 2 (- n 1 j))) ; bit position
(setf fld (get-int-field i pos 2))
(setf code (char "nsir" fld))
(format t "~A" code))
(format t " ~A~%" i))))
(defun int-power (i exponent) (truncate (+ 0.5 (power i exponent))))
(defun testbit (n pos) (/= 0 (logand n (int-power 2 pos))))
(generate-full-defines 4)