mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-11 06:31:07 +02:00
58 lines
1.4 KiB
Common Lisp
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)
|